mirror of
https://github.com/OpenCMT/uLib.git
synced 2025-12-06 07:21:31 +01:00
Massive reorganization of CMake files
This commit is contained in:
201
CMakeLists.txt
201
CMakeLists.txt
@@ -11,7 +11,7 @@ project(uLib)
|
||||
|
||||
# The version number.
|
||||
set(PROJECT_VERSION_MAJOR 0)
|
||||
set(PROJECT_VERSION_MINOR 2)
|
||||
set(PROJECT_VERSION_MINOR 3)
|
||||
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
|
||||
set(PROJECT_SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
|
||||
|
||||
@@ -26,130 +26,169 @@ set(PACKAGE_AUTHOR "Andrea Rigoni Garola <andrea.rigoni@pd.infn.it>")
|
||||
|
||||
set(ULIB_CMAKE_DIR "${PROJECT_SOURCE_DIR}/CMake")
|
||||
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
|
||||
message(STATUS "Module path: ${CMAKE_MODULE_PATH}")
|
||||
|
||||
include(uLibMacros)
|
||||
include(uLibDebugMacro)
|
||||
include(uLibTargetMacros)
|
||||
#include(uLibGenerateRMake)
|
||||
|
||||
message(STATUS "Project name = ${PROJECT_NAME}")
|
||||
message(STATUS "Package name = ${PACKAGE_NAME}")
|
||||
message(STATUS "Package version = ${PACKAGE_VERSION}")
|
||||
message(STATUS "Module path = ${CMAKE_MODULE_PATH}")
|
||||
|
||||
## GLOBALS ------------------------------------------------------------------ ##
|
||||
|
||||
include(uLibCommon)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ") ## Add flags here ##
|
||||
set(PACKAGE_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/bin
|
||||
CACHE PATH "Installation directory for executables")
|
||||
set(PACKAGE_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/
|
||||
CACHE PATH "Installation directory for libraries")
|
||||
set(PACKAGE_INSTALL_INC_DIR ${CMAKE_INSTALL_PREFIX}/include/${PACKAGE_NAME}
|
||||
CACHE PATH "Installation directory for headers")
|
||||
set(PACKAGE_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/${PACKAGE_NAME}
|
||||
CACHE PATH "Installation directory for data files")
|
||||
set(PACKAGE_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_PREFIX}/lib/cmake/${PACKAGE_NAME}
|
||||
CACHE PATH "Installation directory for CMake files")
|
||||
|
||||
enable_testing()
|
||||
set(SRC_DIR ${PROJECT_SOURCE_DIR}/src)
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
message(STATUS "Setting build type to 'Release' as none was specified.")
|
||||
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-as-needed")
|
||||
# Set the possible values of build type for cmake-gui
|
||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
|
||||
STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_WARNING_OPTION ""
|
||||
CACHE STRING "Warning level -WAll to verbose all warnings")
|
||||
set(CMAKE_VERBOSE_MAKEFILE FALSE
|
||||
CACHE STRING "Verbose compile output switch")
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x ${CMAKE_CXX_WARNING_OPTION}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -UULIB_SERIALIZATION_ON")
|
||||
|
||||
#enable_testing()
|
||||
|
||||
## FIND PACKAGES ------------------------------------------------------------ ##
|
||||
|
||||
include(uLibFindDependencies)
|
||||
set(Boost_USE_STATIC_LIBS OFF)
|
||||
set(Boost_USE_MULTITHREADED ON)
|
||||
set(Boost_USE_STATIC_RUNTIME OFF)
|
||||
find_package(Boost 1.45.0 COMPONENTS program_options REQUIRED)
|
||||
include_directories(${Boost_INCLUDE_DIRS})
|
||||
|
||||
find_package(Eigen3 CONFIG REQUIRED)
|
||||
include(${EIGEN3_USE_FILE})
|
||||
|
||||
find_package(ROOT CONFIG REQUIRED)
|
||||
include(${ROOT_USE_FILE})
|
||||
|
||||
find_package(VTK CONFIG REQUIRED)
|
||||
include(${VTK_USE_FILE})
|
||||
|
||||
set(CMAKE_REQUIRED_INCLUDES CMAKE_REQUIRED_INCLUDES math.h)
|
||||
set(CMAKE_REQUIRED_LIBRARIES CMAKE_REQUIRED_LIBRARIES m)
|
||||
|
||||
## CONFIG ------------------------------------------------------------------- ##
|
||||
|
||||
include(uLibConfigHeader)
|
||||
set(BOOST_PP_VARIADICS ON)
|
||||
|
||||
include(CheckIncludeFiles)
|
||||
include(CheckFunctionExists)
|
||||
include(CheckSymbolExists)
|
||||
|
||||
CHECK_INCLUDE_FILES(inittypes.h HAVE_INITTYPES_H)
|
||||
CHECK_INCLUDE_FILES(stdbool.h HAVE_STDBOOL_H)
|
||||
CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
|
||||
CHECK_INCLUDE_FILES(stdlib.h HAVE_STDLIB_H)
|
||||
CHECK_INCLUDE_FILES(dlfcn.h HAVE_DLFCN_H)
|
||||
CHECK_INCLUDE_FILES(malloc.h HAVE_MALLOC_H)
|
||||
CHECK_FUNCTION_EXISTS(malloc HAVE_MALLOC)
|
||||
CHECK_INCLUDE_FILES(memory.h HAVE_MEMORY_H)
|
||||
CHECK_INCLUDE_FILES(math.h HAVE_MATH_H)
|
||||
CHECK_FUNCTION_EXISTS(fsetround HAVE_FSETROUND)
|
||||
CHECK_FUNCTION_EXISTS(floor HAVE_FLOOR)
|
||||
CHECK_FUNCTION_EXISTS(pow HAVE_POW)
|
||||
CHECK_FUNCTION_EXISTS(sqrt HAVE_SQRT)
|
||||
CHECK_FUNCTION_EXISTS(strdup HAVE_STRDUP)
|
||||
CHECK_FUNCTION_EXISTS(strstr HAVE_STRSTR)
|
||||
CHECK_INCLUDE_FILES(strings.h HAVE_STRINGS_H)
|
||||
CHECK_INCLUDE_FILES(string.h HAVE_STRING_H)
|
||||
CHECK_INCLUDE_FILES(sys/stat.h HAVE_SYS_STAT_H)
|
||||
CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H)
|
||||
CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
|
||||
CHECK_INCLUDE_FILES(assert.h HAVE_ASSERT_H)
|
||||
|
||||
configure_file("${PROJECT_SOURCE_DIR}/CMakeConfig.in.h"
|
||||
"${PROJECT_BINARY_DIR}/config.h")
|
||||
|
||||
install(FILES "${PROJECT_BINARY_DIR}/config.h"
|
||||
DESTINATION ${PACKAGE_INSTALL_INC_DIR})
|
||||
|
||||
## ADD LIBRARIES SUBDIRECTORIES --------------------------------------------- ##
|
||||
|
||||
## select modules ##
|
||||
set(ULIB_SELECTED_MODULES
|
||||
Core
|
||||
Math
|
||||
Detectors
|
||||
Root
|
||||
)
|
||||
include_directories(${PROJECT_BINARY_DIR})
|
||||
include_directories(${SRC_DIR})
|
||||
|
||||
## uLib_add_shared_library puts names there
|
||||
set(ULIB_SHARED_LIBRARIES)
|
||||
## select modules ##
|
||||
set(ULIB_SELECTED_MODULES)
|
||||
|
||||
if(ULIB_USE_VTK)
|
||||
LIST(APPEND ULIB_SELECTED_MODULES Vtk)
|
||||
endif(ULIB_USE_VTK)
|
||||
include_directories(${SRC_DIR}/Core)
|
||||
add_subdirectory(${SRC_DIR}/Core)
|
||||
|
||||
include_directories(${SRC_DIR}/Math)
|
||||
add_subdirectory(${SRC_DIR}/Math)
|
||||
|
||||
include_directories(${SRC_DIR}/Detectors)
|
||||
add_subdirectory(${SRC_DIR}/Detectors)
|
||||
|
||||
include_directories(${SRC_DIR}/Root)
|
||||
add_subdirectory(${SRC_DIR}/Root)
|
||||
|
||||
include_directories(${SRC_DIR}/Vtk)
|
||||
add_subdirectory(${SRC_DIR}/Vtk)
|
||||
|
||||
#add_subdirectory("${SRC_DIR}/utils/make_recipe")
|
||||
|
||||
## Documentation and packages
|
||||
|
||||
include(uLibGenerateRPMS)
|
||||
include(uLibGenerateDoc)
|
||||
|
||||
## this gets ulib modules into a variable ##
|
||||
function(uLib_modules result)
|
||||
set(out)
|
||||
foreach(module ${ULIB_SELECTED_MODULES})
|
||||
list(APPEND out ${PACKAGE_LIBPREFIX}${module})
|
||||
endforeach(module)
|
||||
set(${result} "${out}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
|
||||
## ENTERING MODULES SUBDIRECTORIES ##
|
||||
message("/////////// SELECTED MODULES //////////////")
|
||||
foreach(module ${ULIB_SELECTED_MODULES})
|
||||
message(STATUS "adding module: ${module}")
|
||||
set( uLib-module ${module})
|
||||
include_directories(${SRC_DIR}/${module})
|
||||
add_subdirectory(${SRC_DIR}/${module})
|
||||
endforeach(module)
|
||||
#include(uLibGenerateDoc)
|
||||
|
||||
## UTILITIES ##
|
||||
add_subdirectory("${SRC_DIR}/utils/make_recipe")
|
||||
#add_subdirectory("${SRC_DIR}/utils/make_recipe")
|
||||
|
||||
|
||||
## INSTALLS AND EXPORTS ----------------------------------------------------- ##
|
||||
|
||||
#export(PACKAGE uLib)
|
||||
export(PACKAGE ULIB)
|
||||
export(TARGETS ${ULIB_SHARED_LIBRARIES} ${ULIB_EXPORTED_TARGETS}
|
||||
FILE "${PROJECT_BINARY_DIR}/uLibTargets.cmake" )
|
||||
#export(TARGETS ${ULIB_EXPORTED_TARGETS}
|
||||
# FILE "${PROJECT_BINARY_DIR}/uLibExeTargets.cmake" )
|
||||
#export(PACKAGE ULIB)
|
||||
#export(TARGETS ${ULIB_SHARED_LIBRARIES} ${ULIB_EXPORTED_TARGETS}
|
||||
# FILE "${PROJECT_BINARY_DIR}/uLibTargets.cmake" )
|
||||
|
||||
|
||||
# Create the FooBarConfig.cmake and FooBarConfigVersion files
|
||||
file(RELATIVE_PATH REL_INCLUDE_DIR "${PACKAGE_INSTALL_CMAKE_DIR}"
|
||||
"${PACKAGE_INSTALL_INC_DIR}")
|
||||
|
||||
# ... for the build tree
|
||||
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/src" "${PROJECT_BINARY_DIR}")
|
||||
configure_file(uLibConfig.cmake.in
|
||||
"${PROJECT_BINARY_DIR}/uLibConfig.cmake" @ONLY)
|
||||
#set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/src" "${PROJECT_BINARY_DIR}")
|
||||
#configure_file(uLibConfig.cmake.in
|
||||
# "${PROJECT_BINARY_DIR}/uLibConfig.cmake" @ONLY)
|
||||
|
||||
# ... for the install tree
|
||||
set(CONF_INCLUDE_DIRS "\${ULIB_CMAKE_DIR}/${REL_INCLUDE_DIR}")
|
||||
configure_file(uLibConfig.cmake.in
|
||||
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/uLibConfig.cmake" @ONLY)
|
||||
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/uLibConfig.cmake"
|
||||
@ONLY)
|
||||
|
||||
# ... for both
|
||||
configure_file(uLibConfigVersion.cmake.in
|
||||
"${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake" @ONLY)
|
||||
|
||||
install(FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/uLibConfig.cmake"
|
||||
"${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/FindReadLine.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/FindROOT.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/FindROOTv6.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/uLibCommon.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/uLibConfigHeader.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/uLibDebugMacro.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/uLibFindDependencies.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/uLibGenerateDoc.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/uLibGenerateRMake.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/uLibGenerateRPMS.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/uLibMacros.cmake"
|
||||
"${PROJECT_SOURCE_DIR}/CMake/uLibTargetMacros.cmake"
|
||||
DESTINATION "${PACKAGE_INSTALL_CMAKE_DIR}"
|
||||
COMPONENT dev)
|
||||
|
||||
# Install the export set for use with the install-tree
|
||||
install(EXPORT "${PROJECT_NAME}Targets" DESTINATION
|
||||
"${PACKAGE_INSTALL_CMAKE_DIR}" COMPONENT dev)
|
||||
|
||||
install(FILES ${PROJECT_SOURCE_DIR}/ulib.h DESTINATION ${PACKAGE_INSTALL_INC_DIR})
|
||||
|
||||
|
||||
# TODO clean also subdirectories
|
||||
add_custom_target(clean-cmake-files
|
||||
COMMAND ${CMAKE_COMMAND} -P ${ULIB_CMAKE_DIR}/clean-all.cmake
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
install(EXPORT "${PROJECT_NAME}Targets"
|
||||
DESTINATION "${PACKAGE_INSTALL_CMAKE_DIR}"
|
||||
COMPONENT dev)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user