From 2e401f6fc5e3f50ccddc3744c3b85a5715568296 Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Thu, 4 Sep 2025 16:12:38 +0200 Subject: [PATCH] add posibility to compile in build directory --- CMake/uLibCommon.cmake | 2 +- CMakeLists.txt | 102 +++++++++++++++++++++++------- src/Detectors/CMakeLists.txt | 1 + src/Math/BitCode.h | 3 + src/Math/CMakeLists.txt | 6 ++ src/Math/testing/CMakeLists.txt | 2 +- src/Math/testing/VoxImageTest.cpp | 14 ++++ src/Vtk/vtkContainerBox.cpp | 1 + uLibConfig.cmake.in | 71 ++++++++++++++++++--- 9 files changed, 168 insertions(+), 34 deletions(-) diff --git a/CMake/uLibCommon.cmake b/CMake/uLibCommon.cmake index 55a4950..83e8c92 100644 --- a/CMake/uLibCommon.cmake +++ b/CMake/uLibCommon.cmake @@ -58,7 +58,7 @@ 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} -std=c++0x ${CMAKE_CXX_WARNING_OPTION}") diff --git a/CMakeLists.txt b/CMakeLists.txt index b2d63ef..ae85ccc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ ##### CMAKE LISTS ############################################################## ################################################################################ -cmake_minimum_required (VERSION 2.6) +cmake_minimum_required (VERSION 3.26) ## -------------------------------------------------------------------------- ## @@ -11,7 +11,7 @@ project(uLib) # The version number. set(PROJECT_VERSION_MAJOR 0) -set(PROJECT_VERSION_MINOR 5) +set(PROJECT_VERSION_MINOR 6) set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") set(PROJECT_SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") @@ -33,19 +33,42 @@ message(STATUS "Module path = ${CMAKE_MODULE_PATH}") ## GLOBALS ------------------------------------------------------------------ ## -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") +# 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") + +# -- move to GnuInstallDirs +# ref: https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html +include(GNUInstallDirs) +set(PACKAGE_INSTALL_INC_DIR ${CMAKE_INSTALL_INCLUDEDIR}/${PACKAGE_NAME} + CACHE PATH "Location of header files (.../include)" ) +set(PACKAGE_INSTALL_ETC_DIR ${CMAKE_INSTALL_SYSCONFDIR}/${PACKAGE_NAME} + CACHE PATH "Location of configuration files (.../etc)" ) +set(PACKAGE_INSTALL_BIN_DIR ${CMAKE_INSTALL_BINDIR}/${PACKAGE_NAME} + CACHE PATH "Location of executable files (.../bin)" ) +set(PACKAGE_INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR} + CACHE PATH "Location of library files (.../lib)" ) +set(PACKAGE_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PACKAGE_NAME} + CACHE PATH "Location of cmake files (.../lib/cmake)" ) +set(PACKAGE_INSTALL_DATA_DIR ${CMAKE_INSTALL_DATADIR}/${PACKAGE_NAME} + CACHE PATH "Location of data files (.../share)" ) + + + set(SRC_DIR ${PROJECT_SOURCE_DIR}/src) +# this is used to be exported in build target +# ( to compile against build directory instead of install ) +set(ULIB_SOURCE_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) @@ -60,10 +83,12 @@ set(CMAKE_CXX_WARNING_OPTION "" 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} ${CMAKE_CXX_WARNING_OPTION}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -UULIB_SERIALIZATION_ON") -#enable_testing() +# CTEST framework +enable_testing() + ## FIND PACKAGES ------------------------------------------------------------ ## @@ -192,8 +217,8 @@ add_subdirectory(${SRC_DIR}/Vtk) # Create the FooBarConfig.cmake and FooBarConfigVersion files -file(RELATIVE_PATH REL_INCLUDE_DIR "${PACKAGE_INSTALL_CMAKE_DIR}" - "${PACKAGE_INSTALL_INC_DIR}") +# 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}") @@ -202,21 +227,54 @@ file(RELATIVE_PATH REL_INCLUDE_DIR "${PACKAGE_INSTALL_CMAKE_DIR}" # ... 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) +# [ removed for the configure_config_file ] +# configure_file(uLibConfig.cmake.in +# "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/uLibConfig.cmake" +# @ONLY) # ... for both configure_file(uLibConfigVersion.cmake.in - "${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake" @ONLY) + "${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake" @ONLY) -install(FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/uLibConfig.cmake" + +include(CMakePackageConfigHelpers) + +# from CMake 3.x configure file shall be created using a dedicated function +# see: https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html +# +configure_package_config_file(uLibConfig.cmake.in + "${PROJECT_BINARY_DIR}/uLibConfig.cmake" + INSTALL_DESTINATION ${PACKAGE_INSTALL_CMAKE_DIR} + PATH_VARS + PACKAGE_INSTALL_LIB_DIR + PACKAGE_INSTALL_INC_DIR + PACKAGE_INSTALL_BIN_DIR + PACKAGE_INSTALL_CMAKE_DIR + PACKAGE_INSTALL_ETC_DIR + PACKAGE_INSTALL_DATA_DIR + ULIB_SOURCE_DIR + ULIB_SHARED_LIBRARIES + # NO_SET_AND_CHECK_MACRO + # NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) + +install(FILES "${PROJECT_BINARY_DIR}/uLibConfig.cmake" "${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake" DESTINATION "${PACKAGE_INSTALL_CMAKE_DIR}" COMPONENT dev) + +# this is a special target file for the build tree +# it is used also to identify if we are using a build direcory +# to link a project against uLib. see: uLibConfig.cmake ( IF ) +export (TARGETS ${ULIB_SHARED_LIBRARIES} + FILE "${PROJECT_BINARY_DIR}/uLibTargets-build.cmake" + # NAMESPACE "uLib::" +) + # Install the export set for use with the install-tree -install(EXPORT "${PROJECT_NAME}Targets" +install(EXPORT "uLibTargets" + FILE "uLibTargets.cmake" DESTINATION "${PACKAGE_INSTALL_CMAKE_DIR}" COMPONENT dev) diff --git a/src/Detectors/CMakeLists.txt b/src/Detectors/CMakeLists.txt index 016c18f..ba040e9 100644 --- a/src/Detectors/CMakeLists.txt +++ b/src/Detectors/CMakeLists.txt @@ -2,5 +2,6 @@ set(HEADERS MuonScatter.h MuonError.h MuonEvent.h) set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Detectors PARENT_SCOPE) + install(FILES ${HEADERS} DESTINATION ${PACKAGE_INSTALL_INC_DIR}/Detectors) diff --git a/src/Math/BitCode.h b/src/Math/BitCode.h index 565c6da..2d7eba9 100644 --- a/src/Math/BitCode.h +++ b/src/Math/BitCode.h @@ -27,6 +27,8 @@ #ifndef U_MATH_BITCODE_H #define U_MATH_BITCODE_H +#include + #include #include #include @@ -34,6 +36,7 @@ #include + namespace uLib { diff --git a/src/Math/CMakeLists.txt b/src/Math/CMakeLists.txt index be21785..81d6f68 100644 --- a/src/Math/CMakeLists.txt +++ b/src/Math/CMakeLists.txt @@ -1,3 +1,4 @@ + set(HEADERS ContainerBox.h Dense.h Geometry.h @@ -45,6 +46,7 @@ set_target_properties(${libname} PROPERTIES SOVERSION ${PROJECT_SOVERSION}) target_link_libraries(${libname} ${LIBRARIES}) + install(TARGETS ${libname} EXPORT "${PROJECT_NAME}Targets" RUNTIME DESTINATION ${PACKAGE_INSTALL_BIN_DIR} COMPONENT bin @@ -52,3 +54,7 @@ install(TARGETS ${libname} install(FILES ${HEADERS} DESTINATION ${PACKAGE_INSTALL_INC_DIR}/Math) +# TESTING +# include(uLibTargetMacros) +# add_subdirectory(testing) + diff --git a/src/Math/testing/CMakeLists.txt b/src/Math/testing/CMakeLists.txt index 68427fc..256f58e 100644 --- a/src/Math/testing/CMakeLists.txt +++ b/src/Math/testing/CMakeLists.txt @@ -19,4 +19,4 @@ set(LIBRARIES ${PACKAGE_LIBPREFIX}Math ) -uLib_add_tests(${uLib-module}) +uLib_add_tests(Math) diff --git a/src/Math/testing/VoxImageTest.cpp b/src/Math/testing/VoxImageTest.cpp index a6337f9..a8c029f 100644 --- a/src/Math/testing/VoxImageTest.cpp +++ b/src/Math/testing/VoxImageTest.cpp @@ -92,6 +92,20 @@ int main() { imgR.ExportToVtk("./read_and_saved.vtk"); } + { + VoxImage img(Vector3i(4,4,4)); + img.InitVoxels({0,0}); + for (int i=0; i<4; i++) { + for (int j=0; j<4; j++) { + for (int k=0; k<4; k++) { + img[Vector3i(i,j,k)] = {i+j+k,0}; + } + } + } + img.ExportToVti("./vti_saved.vti",0,1); + // img.ImportFromVtkXml("./test_vox_image.vti"); + } + { VoxImage img1(Vector3i(5,5,5)); diff --git a/src/Vtk/vtkContainerBox.cpp b/src/Vtk/vtkContainerBox.cpp index e57bb48..f403cfe 100644 --- a/src/Vtk/vtkContainerBox.cpp +++ b/src/Vtk/vtkContainerBox.cpp @@ -65,6 +65,7 @@ vtkContainerBox::~vtkContainerBox() vtkPolyData *vtkContainerBox::GetPolyData() const { // TODO + return NULL; } void vtkContainerBox::InstallPipe() diff --git a/uLibConfig.cmake.in b/uLibConfig.cmake.in index 1705d0b..3fb3043 100644 --- a/uLibConfig.cmake.in +++ b/uLibConfig.cmake.in @@ -1,15 +1,66 @@ -# - Config file for the FooBar package +# - Config file for the ULib package # It defines the following variables -# FOOBAR_INCLUDE_DIRS - include directories for FooBar -# FOOBAR_LIBRARIES - libraries to link against -# FOOBAR_EXECUTABLE - the bar executable +# ULIB_INCLUDE_DIRS - include directories for ULib +# ULIB_LIBRARIES - libraries to link against +# ULIB_EXECUTABLE - the bar executable + + +set(ULIB_VERSION @PROJECT_VERSION@) + +@PACKAGE_INIT@ + +# Definisce le directory per l'inclusione dei file header +# PACKAGE_INCLUDE_INSTALL_DIR è sostituito da configure_package_config_file +# con il percorso corretto per l'installazione. +set(ULIB_INCLUDE_DIRS "${PACKAGE_INCLUDE_INSTALL_DIR}") -# Compute paths get_filename_component(ULIB_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -set(ULIB_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@") -# Our library dependencies (contains definitions for IMPORTED targets) -include("${ULIB_CMAKE_DIR}/uLibTargets.cmake") +# Search for the directory of exported build targets +set(uLib_BUILD_TARGETS_FILE + "${ULIB_CMAKE_DIR}/uLibTargets-build.cmake" +) -# These are IMPORTED targets created by FooBarTargets.cmake -set(ULIB_LIBRARIES @ULIB_SHARED_LIBRARIES@) +# Search for the directory of installed targets +set(uLib_INSTALL_TARGETS_FILE + "${ULIB_CMAKE_DIR}/uLibTargets.cmake" +) + +# We use a logic based on the presence of the build target file +# to determine if we are in a local build. +if(EXISTS "${uLib_BUILD_TARGETS_FILE}") + message(WARNING " ++ Using uLib build targets") + + include("${uLib_BUILD_TARGETS_FILE}") + set_and_check(ULIB_INCLUDE_DIRS "@ULIB_SOURCE_DIR@") + set_and_check(ULIB_LIBRARY_DIRS "${ULIB_CMAKE_DIR}") + +else() + message(STATUS " ++ UsingLib install targets") + + include("${uLib_INSTALL_TARGETS_FILE}") + set_and_check(ULIB_INCLUDE_DIRS "@PACKAGE_PACKAGE_INSTALL_INC_DIR@") + set(ULIB_SYSCONFIG_DIR "@PACKAGE_PACKAGE_INSTALL_ETC_DIR@") + set_and_check(ULIB_CMAKE_DIR "@PACKAGE_PACKAGE_INSTALL_CMAKE_DIR@") + set_and_check(ULIB_LIBRARY_DIRS "@PACKAGE_PACKAGE_INSTALL_LIB_DIR@") +endif() + +link_directories("${ULIB_LIBRARY_DIRS}") +set(ULIB_LIBRARIES "@ULIB_SHARED_LIBRARIES@") + +# include("${ULIB_CMAKE_DIR}/uLibTargets.cmake") +check_required_components(uLib) + +# Imposta la variabile per indicare che il pacchetto è stato trovato. +set(uLib_FOUND TRUE) + + +# # Compute paths +# get_filename_component(ULIB_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +# set(ULIB_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@") + +# # Our library dependencies (contains definitions for IMPORTED targets) +# include("${ULIB_CMAKE_DIR}/uLibTargets.cmake") + +# # These are IMPORTED targets created by ULibTargets.cmake +# set(ULIB_LIBRARIES @ULIB_SHARED_LIBRARIES@)