diff --git a/CMakeLists.txt b/CMakeLists.txt index b87595974edc7b3bb82ed30d546a7e7dc4809dfa..815533ea222befedfb085264cc76d5cb2ed1dcb0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,22 +2,27 @@ cmake_minimum_required(VERSION 3.5) project(hcana VERSION 0.90 LANGUAGES CXX) -#---------------------------------------------------------------------------- -# Use our modules and utility functions -set(CMAKE_MODULE_PATH - ${PROJECT_SOURCE_DIR}/podd/cmake/Modules - ${CMAKE_MODULE_PATH} - ) -include(PoddCMakeEnv) +option(HCANA_BUILTIN_PODD "Use built-in Podd submodule (default: YES)" ON) #---------------------------------------------------------------------------- -# Install in GNU-style directory layout -include(GNUInstallDirs) -set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME_LC}) +# Set up Podd and ROOT dependencies +if(HCANA_BUILTIN_PODD) + set(CMAKE_MODULE_PATH + ${PROJECT_SOURCE_DIR}/podd/cmake/Modules + ${CMAKE_MODULE_PATH} + ) + include(PoddCMakeEnv) + find_package(ROOT 5.10 REQUIRED) +else() + # Find Podd and register it as a dependency + # This will also automatically set up ROOT + find_package(Podd 1.6 REQUIRED) + include(PoddCMakeEnv) + config_add_dependency(Podd 1.6) +endif() -#---------------------------------------------------------------------------- -# Find ROOT (using Podd's FindROOT.cmake) -find_package(ROOT 5.10 MODULE REQUIRED) +# Register ROOT dependency - it's in our public interface +config_add_dependency(ROOT 5.10) #---------------------------------------------------------------------------- # Set up the compiler flags @@ -26,14 +31,14 @@ set_diagnostic_flags(WALL WEXTRA) report_build_info() #---------------------------------------------------------------------------- -# Directories in which we build things -add_subdirectory(podd) -add_subdirectory(src) +# Install in GNU-style directory layout +include(GNUInstallDirs) +set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/${MAIN_PROJECT_NAME_LC}) #---------------------------------------------------------------------------- -# Install and export targets defined in the subdirectories -install(EXPORT ${PROJECT_NAME_LC}-exports - FILE ${PROJECT_NAME}Targets.cmake - NAMESPACE ${PROJECT_NAME}:: - DESTINATION ${INSTALL_CONFIGDIR} - ) +# Directories in which we build things +if(HCANA_BUILTIN_PODD) + add_subdirectory(podd) +endif() +add_subdirectory(src) +add_subdirectory(cmake) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..f051a749bd1be82199990afeb721b3937b6a7e39 --- /dev/null +++ b/cmake/CMakeLists.txt @@ -0,0 +1,3 @@ +# Create <Project>Config.cmake and <Project>ConfigVersion.cmake + +include(WriteProjectConfig) diff --git a/cmake/hcanaConfig.cmake.in b/cmake/hcanaConfig.cmake.in new file mode 100644 index 0000000000000000000000000000000000000000..e476f962b439585941fd58a79cb9fdc3711bf559 --- /dev/null +++ b/cmake/hcanaConfig.cmake.in @@ -0,0 +1,17 @@ +@PACKAGE_INIT@ + +message(STATUS "Found @PROJECT_NAME@: @PACKAGE_CMAKE_INSTALL_PREFIX@ (found version @PROJECT_VERSION@@EXTVERS@)") + +set_and_check(@PROJECT_NAME_UC@_DIR "@PACKAGE_CMAKE_INSTALL_PREFIX@") +set_and_check(@PROJECT_NAME_UC@_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@") + +if(IS_DIRECTORY "@PACKAGE_INSTALL_CONFIGDIR@/Modules") + list(APPEND CMAKE_MODULE_PATH "@PACKAGE_INSTALL_CONFIGDIR@/Modules") +endif() + +@FIND_DEPENDENCY_COMMANDS@ + +include("@PACKAGE_TARGETS_FILE@") + +check_required_components(@PROJECT_NAME_UC@) + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a37c284e24c88811734eb6c9852a51ad1da4e55d..151419edabe768a314a8fc19c08572412f97236e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -40,8 +40,12 @@ file(APPEND "${linkdef}" "${postamble}") unset(postamble) #---------------------------------------------------------------------------- -# Generate ha_compiledata.h +# Generate hc_compiledata.h include(PoddCompileInfo) + +# Ensure there's no old hc_compiledata.h hanging around from a non-CMake build +file(REMOVE "${CMAKE_CURRENT_SOURCE_DIR}/hc_compiledata.h") + configure_file(hc_compiledata.h.in hc_compiledata.h) list(APPEND allheaders "${CMAKE_CURRENT_BINARY_DIR}/hc_compiledata.h") @@ -79,7 +83,7 @@ set_target_properties(${LIBNAME} PROPERTIES ) install(TARGETS ${LIBNAME} - EXPORT ${PROJECT_NAME_LC}-exports + EXPORT ${MAIN_PROJECT_NAME_LC}-exports LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} @@ -88,18 +92,10 @@ install(FILES ${allheaders} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) #---------------------------------------------------------------------------- # libHallCDict -get_target_definitions(${LIBNAME} defines) - -root_generate_dictionary(${LIBNAME} ${defines} ${headers} +build_root_dictionary(${LIBNAME} ${headers} TARGETS ${LIBNAME} LINKDEF ${linkdef} ) -set(PCM_FILE ${CMAKE_CURRENT_BINARY_DIR}/lib${LIBNAME}_rdict.pcm) - -add_custom_target(${LIBNAME}_ROOTDICT - DEPENDS ${src} ${headers} ${LIBNAME}_LinkDef.h ${LIBNAME}Dict.cxx) - -install(FILES ${PCM_FILE} DESTINATION ${CMAKE_INSTALL_LIBDIR}) #---------------------------------------------------------------------------- # hcana executable