From b86e27a9c4db3686e0cc323d5e4f87bfc7e75da0 Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Tue, 2 Sep 2025 12:42:46 +0200 Subject: [PATCH 1/5] add VTK save early --- CMakeLists.txt | 5 +++++ src/Math/CMakeLists.txt | 3 ++- src/Math/VoxImage.cpp | 34 ++++++++++++++++++++++++++++++++++ src/Math/VoxImage.h | 1 + 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ca4afc..b2d63ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,11 @@ include(${EIGEN3_USE_FILE}) find_package(ROOT CONFIG REQUIRED) include(${ROOT_USE_FILE}) +find_package(VTK REQUIRED) +include(${VTK_USE_FILE}) + + + option(CENTOS_SUPPORT "VTK definitions for CentOS" OFF) if(CENTOS_SUPPORT) find_package(VTK CONFIG REQUIRED) diff --git a/src/Math/CMakeLists.txt b/src/Math/CMakeLists.txt index de44c98..be21785 100644 --- a/src/Math/CMakeLists.txt +++ b/src/Math/CMakeLists.txt @@ -32,7 +32,8 @@ set(SOURCES VoxRaytracer.cpp Structured4DGrid.cpp) set(LIBRARIES ${Eigen_LIBRARY} - ${ROOT_LIBRARIES}) + ${ROOT_LIBRARIES} + ${VTK_LIBRARIES}) set(libname ${PACKAGE_LIBPREFIX}Math) set(ULIB_SHARED_LIBRARIES ${ULIB_SHARED_LIBRARIES} ${libname} PARENT_SCOPE) diff --git a/src/Math/VoxImage.cpp b/src/Math/VoxImage.cpp index 55c4e36..93a9e34 100644 --- a/src/Math/VoxImage.cpp +++ b/src/Math/VoxImage.cpp @@ -30,9 +30,43 @@ #include "VoxImage.h" +#include +#include + +#include + namespace uLib { +void Abstract::VoxImage::SaveToVtkVti (const char *file) +{ + Abstract::VoxImage *voxels = this; + + vtkSmartPointer image = vtkSmartPointer::New(); + image->SetDimensions(voxels->GetDims()(0), voxels->GetDims()(1), voxels->GetDims()(2)); + image->SetSpacing(voxels->GetSpacing()(0), voxels->GetSpacing()(1), voxels->GetSpacing()(2)); + image->SetOrigin(voxels->GetOrigin()(0), voxels->GetOrigin()(1), voxels->GetOrigin()(2)); + image->AllocateScalars(VTK_FLOAT, 1); + + int nx = voxels->GetDims()(0); + int ny = voxels->GetDims()(1); + int nz = voxels->GetDims()(2); + + size_t npoints = nx*ny*nz; + float *scalar = static_cast(image->GetScalarPointer()); + + for (size_t i = 0; i < npoints; i++) { + scalar[i] = static_cast(voxels->GetValue(i)); + } + + vtkSmartPointer writer = vtkSmartPointer::New(); + writer->SetFileName(file); + writer->SetInputData(image); + writer->Write(); +} + + + void Abstract::VoxImage::ExportToVtk (const char *file, bool density_type) { FILE * vtk_file = fopen(file,"wb"); diff --git a/src/Math/VoxImage.h b/src/Math/VoxImage.h index b82b198..fee3a7e 100644 --- a/src/Math/VoxImage.h +++ b/src/Math/VoxImage.h @@ -58,6 +58,7 @@ public: void ExportToVtk(const char *file, bool density_type = 0); void ExportToVtkXml(const char *file, bool density_type = 0); int ImportFromVtk(const char *file); + void SaveToVtkVti (const char *file); protected: From 01ff8a0a0de89f89a2c7a3ffe9a64ab0e7a4dcc9 Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Tue, 2 Sep 2025 13:01:55 +0200 Subject: [PATCH 2/5] update --- src/Math/VoxImage.cpp | 82 +++++++++++++++++++++++++++---------------- src/Math/VoxImage.h | 2 +- 2 files changed, 53 insertions(+), 31 deletions(-) diff --git a/src/Math/VoxImage.cpp b/src/Math/VoxImage.cpp index 93a9e34..35c92b9 100644 --- a/src/Math/VoxImage.cpp +++ b/src/Math/VoxImage.cpp @@ -32,41 +32,12 @@ #include #include - #include +#include namespace uLib { -void Abstract::VoxImage::SaveToVtkVti (const char *file) -{ - Abstract::VoxImage *voxels = this; - - vtkSmartPointer image = vtkSmartPointer::New(); - image->SetDimensions(voxels->GetDims()(0), voxels->GetDims()(1), voxels->GetDims()(2)); - image->SetSpacing(voxels->GetSpacing()(0), voxels->GetSpacing()(1), voxels->GetSpacing()(2)); - image->SetOrigin(voxels->GetOrigin()(0), voxels->GetOrigin()(1), voxels->GetOrigin()(2)); - image->AllocateScalars(VTK_FLOAT, 1); - - int nx = voxels->GetDims()(0); - int ny = voxels->GetDims()(1); - int nz = voxels->GetDims()(2); - - size_t npoints = nx*ny*nz; - float *scalar = static_cast(image->GetScalarPointer()); - - for (size_t i = 0; i < npoints; i++) { - scalar[i] = static_cast(voxels->GetValue(i)); - } - - vtkSmartPointer writer = vtkSmartPointer::New(); - writer->SetFileName(file); - writer->SetInputData(image); - writer->Write(); -} - - - void Abstract::VoxImage::ExportToVtk (const char *file, bool density_type) { FILE * vtk_file = fopen(file,"wb"); @@ -117,6 +88,57 @@ void Abstract::VoxImage::ExportToVtk (const char *file, bool density_type) printf("%s vtk file saved\n",file); } + + +void Abstract::VoxImage::ExportToVti (const char *file, bool density_type, bool compressed) +{ + Abstract::VoxImage *voxels = this; + + vtkSmartPointer image = vtkSmartPointer::New(); + image->SetDimensions(voxels->GetDims()(0), voxels->GetDims()(1), voxels->GetDims()(2)); + image->SetSpacing(voxels->GetSpacing()(0), voxels->GetSpacing()(1), voxels->GetSpacing()(2)); + image->SetOrigin(voxels->GetOrigin()(0), voxels->GetOrigin()(1), voxels->GetOrigin()(2)); + image->AllocateScalars(VTK_FLOAT, 1); + + float norm; + if (density_type) { + norm = 1; + } else norm = 1.E6; + + int nx = voxels->GetDims()(0); + int ny = voxels->GetDims()(1); + int nz = voxels->GetDims()(2); + + size_t npoints = nx*ny*nz; + float *scalar = static_cast(image->GetScalarPointer()); + + for (size_t i = 0; i < npoints; i++) { + scalar[i] = static_cast(voxels->GetValue(i) * norm); + } + + // // Create a custom string key + // static vtkInformationStringKey* ConfigNote = + // vtkInformationStringKey::MakeKey("ConfigNote", "MyNotes"); + + // // Attach metadata + // image->GetInformation()->Set(ConfigNote, "This image was generated with method X, threshold=0.5"); + + + vtkSmartPointer writer = vtkSmartPointer::New(); + writer->SetFileName(file); + writer->SetInputData(image); + if(compressed) { + writer->SetDataModeToBinary(); + writer->SetCompressorTypeToZLib(); + } + writer->Write(); +} + + + + + + int Abstract::VoxImage::ImportFromVtk(const char *file) { FILE * vtk_file = fopen(file, "r"); diff --git a/src/Math/VoxImage.h b/src/Math/VoxImage.h index fee3a7e..15e3079 100644 --- a/src/Math/VoxImage.h +++ b/src/Math/VoxImage.h @@ -56,9 +56,9 @@ public: virtual void SetDims(const Vector3i &size) = 0; void ExportToVtk(const char *file, bool density_type = 0); + void ExportToVti (const char *file, bool density_type = 0, bool compressed = 0); void ExportToVtkXml(const char *file, bool density_type = 0); int ImportFromVtk(const char *file); - void SaveToVtkVti (const char *file); protected: From 91abd565876bf522b7d685c28e97527f0feb5b5c Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Thu, 4 Sep 2025 16:11:57 +0200 Subject: [PATCH 3/5] fix Root needs for C++17 --- src/Root/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Root/CMakeLists.txt b/src/Root/CMakeLists.txt index c5b12e3..48ceb7e 100644 --- a/src/Root/CMakeLists.txt +++ b/src/Root/CMakeLists.txt @@ -51,7 +51,8 @@ set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Root PARENT_SCOPE) add_library(${libname} SHARED ${SOURCES}) set_target_properties(${libname} PROPERTIES VERSION ${PROJECT_VERSION} - SOVERSION ${PROJECT_SOVERSION}) + SOVERSION ${PROJECT_SOVERSION} + CXX_STANDARD 17) target_link_libraries(${libname} ${LIBRARIES}) install(TARGETS ${libname} From 2e401f6fc5e3f50ccddc3744c3b85a5715568296 Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Thu, 4 Sep 2025 16:12:38 +0200 Subject: [PATCH 4/5] 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@) From 591cc9d8bc39228f9e298a915b0a40661f284a54 Mon Sep 17 00:00:00 2001 From: AndreaRigoni Date: Fri, 5 Sep 2025 18:04:54 +0200 Subject: [PATCH 5/5] add version 0.6 - make external build possible --- CMake/uLibCommon.cmake | 10 +++--- CMake/uLibTargetMacros.cmake | 10 +++--- CMakeLists.txt | 54 +++++++++++----------------- src/Core/CMakeLists.txt | 6 ++-- src/Core/Options.cpp | 20 +++++++++++ src/Core/Options.h | 2 ++ src/Detectors/CMakeLists.txt | 2 +- src/Math/CMakeLists.txt | 6 ++-- src/Math/Dense.h | 1 - src/Math/VoxImage.cpp | 64 +++++++++++++++++++++++++++------ src/Math/VoxImage.h | 11 +++++- src/Root/CMakeLists.txt | 8 ++--- src/Vtk/CMakeLists.txt | 6 ++-- uLibConfig.cmake.in | 70 ++++++++++++++++++++++++------------ 14 files changed, 179 insertions(+), 91 deletions(-) diff --git a/CMake/uLibCommon.cmake b/CMake/uLibCommon.cmake index 83e8c92..ef44b5b 100644 --- a/CMake/uLibCommon.cmake +++ b/CMake/uLibCommon.cmake @@ -15,16 +15,16 @@ set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "build path for mark_as_advanced(EXECUTABLE_OUTPUT_PATH) ## Install directories ## -set(PACKAGE_INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") -set(PACKAGE_INSTALL_LIB_DIR lib/${PACKAGE_NAME} CACHE PATH "Installation directory for libraries") -set(PACKAGE_INSTALL_INC_DIR include/${PACKAGE_NAME} CACHE PATH "Installation directory for headers") -set(PACKAGE_INSTALL_DATA_DIR share/${PACKAGE_NAME} CACHE PATH "Installation directory for data files") +set(INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") +set(INSTALL_LIB_DIR lib/${PACKAGE_NAME} CACHE PATH "Installation directory for libraries") +set(INSTALL_INC_DIR include/${PACKAGE_NAME} CACHE PATH "Installation directory for headers") +set(INSTALL_DATA_DIR share/${PACKAGE_NAME} CACHE PATH "Installation directory for data files") if(WIN32 AND NOT CYGWIN) set(DEF_INSTALL_CMAKE_DIR CMake) else() set(DEF_INSTALL_CMAKE_DIR lib/cmake/${PACKAGE_NAME}) endif() -set(PACKAGE_INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") +set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") # Make relative paths absolute (needed later on) foreach(p LIB BIN INC DATA CMAKE) diff --git a/CMake/uLibTargetMacros.cmake b/CMake/uLibTargetMacros.cmake index e646165..b0f1655 100644 --- a/CMake/uLibTargetMacros.cmake +++ b/CMake/uLibTargetMacros.cmake @@ -41,15 +41,15 @@ macro(uLib_add_shared_library name) install(TARGETS ${mname} EXPORT "${PROJECT_NAME}Targets" - RUNTIME DESTINATION ${PACKAGE_INSTALL_BIN_DIR} COMPONENT bin - LIBRARY DESTINATION ${PACKAGE_INSTALL_LIB_DIR} COMPONENT lib - # PUBLIC_HEADER DESTINATION ${PACKAGE_INSTALL_INC_DIR} COMPONENT dev + RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin + LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib + # PUBLIC_HEADER DESTINATION ${INSTALL_INC_DIR} COMPONENT dev ) endif(SOURCES) if(HEADERS) foreach(header ${HEADERS}) - install(FILES ${header} DESTINATION ${PACKAGE_INSTALL_INC_DIR}/${name}) + install(FILES ${header} DESTINATION ${INSTALL_INC_DIR}/${name}) endforeach(header) endif(HEADERS) @@ -70,7 +70,7 @@ macro(uLib_add_target name) install(TARGETS ${name} EXPORT "${PROJECT_NAME}Targets" - RUNTIME DESTINATION ${PACKAGE_INSTALL_BIN_DIR} COMPONENT bin + RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin ) ENDMACRO(uLib_add_target) diff --git a/CMakeLists.txt b/CMakeLists.txt index ae85ccc..36e686c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,31 +33,20 @@ 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") - # -- 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} +set(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} +set(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} +set(INSTALL_BIN_DIR ${CMAKE_INSTALL_BINDIR}/${PACKAGE_NAME} CACHE PATH "Location of executable files (.../bin)" ) -set(PACKAGE_INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR} +set(INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Location of library files (.../lib)" ) -set(PACKAGE_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PACKAGE_NAME} +set(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} +set(INSTALL_DATA_DIR ${CMAKE_INSTALL_DATADIR}/${PACKAGE_NAME} CACHE PATH "Location of data files (.../share)" ) @@ -67,7 +56,7 @@ 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) +set(ULIB_SOURCE_DIR ${PROJECT_SOURCE_DIR}) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to 'Release' as none was specified.") @@ -105,7 +94,7 @@ find_package(ROOT CONFIG REQUIRED) include(${ROOT_USE_FILE}) find_package(VTK REQUIRED) -include(${VTK_USE_FILE}) +# include(${VTK_USE_FILE}) @@ -172,7 +161,7 @@ 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}) + DESTINATION ${INSTALL_INC_DIR}) ## ADD LIBRARIES SUBDIRECTORIES --------------------------------------------- ## @@ -217,8 +206,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 "${INSTALL_CMAKE_DIR}" +# "${INSTALL_INC_DIR}") # ... for the build tree #set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/src" "${PROJECT_BINARY_DIR}") @@ -237,21 +226,20 @@ configure_file(uLibConfigVersion.cmake.in "${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake" @ONLY) -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 # +include(CMakePackageConfigHelpers) configure_package_config_file(uLibConfig.cmake.in "${PROJECT_BINARY_DIR}/uLibConfig.cmake" - INSTALL_DESTINATION ${PACKAGE_INSTALL_CMAKE_DIR} + INSTALL_DESTINATION ${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 + INSTALL_LIB_DIR + INSTALL_INC_DIR + INSTALL_BIN_DIR + INSTALL_CMAKE_DIR + INSTALL_ETC_DIR + INSTALL_DATA_DIR ULIB_SOURCE_DIR ULIB_SHARED_LIBRARIES # NO_SET_AND_CHECK_MACRO @@ -260,7 +248,7 @@ configure_package_config_file(uLibConfig.cmake.in install(FILES "${PROJECT_BINARY_DIR}/uLibConfig.cmake" "${PROJECT_BINARY_DIR}/uLibConfigVersion.cmake" - DESTINATION "${PACKAGE_INSTALL_CMAKE_DIR}" + DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev) @@ -275,6 +263,6 @@ export (TARGETS ${ULIB_SHARED_LIBRARIES} # Install the export set for use with the install-tree install(EXPORT "uLibTargets" FILE "uLibTargets.cmake" - DESTINATION "${PACKAGE_INSTALL_CMAKE_DIR}" + DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev) diff --git a/src/Core/CMakeLists.txt b/src/Core/CMakeLists.txt index bbe84ab..296f1ce 100644 --- a/src/Core/CMakeLists.txt +++ b/src/Core/CMakeLists.txt @@ -18,10 +18,10 @@ target_link_libraries(${libname} ${LIBRARIES}) install(TARGETS ${libname} EXPORT "${PROJECT_NAME}Targets" - RUNTIME DESTINATION ${PACKAGE_INSTALL_BIN_DIR} COMPONENT bin - LIBRARY DESTINATION ${PACKAGE_INSTALL_LIB_DIR} COMPONENT lib) + RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin + LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib) -install(FILES ${HEADERS} DESTINATION ${PACKAGE_INSTALL_INC_DIR}/Core) +install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Core) diff --git a/src/Core/Options.cpp b/src/Core/Options.cpp index bcd8bff..42caa15 100644 --- a/src/Core/Options.cpp +++ b/src/Core/Options.cpp @@ -31,6 +31,9 @@ #include +#include +#include + //class boost::program_options::error_with_option_name; //template<> boost::program_options::typed_value boost::program_options::value(); @@ -74,6 +77,23 @@ void Options::parse_config_file(const char *fname) } } +void Options::save_config_file(const char *fname) { + std::ofstream os; + os.open(fname); + + using boost::property_tree::ptree; + + ptree root; + + + std::cout << m_configuration << "\n"; + std::cout << m_global << "\n"; + + write_ini( std::cout, root ); + +} + + bool Options::count(const char *str) const { return (m_vm.count(str)); diff --git a/src/Core/Options.h b/src/Core/Options.h index edd1899..2375eec 100644 --- a/src/Core/Options.h +++ b/src/Core/Options.h @@ -160,6 +160,8 @@ public: void parse_config_file(const char *fname); + void save_config_file(const char *fname); + template static inline boost::program_options::typed_value* value(T *v, T dvalue) { boost::program_options::typed_value *r = boost::program_options::value(v); diff --git a/src/Detectors/CMakeLists.txt b/src/Detectors/CMakeLists.txt index ba040e9..7d03249 100644 --- a/src/Detectors/CMakeLists.txt +++ b/src/Detectors/CMakeLists.txt @@ -4,4 +4,4 @@ set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Detectors PARENT_SCOPE) install(FILES ${HEADERS} - DESTINATION ${PACKAGE_INSTALL_INC_DIR}/Detectors) + DESTINATION ${INSTALL_INC_DIR}/Detectors) diff --git a/src/Math/CMakeLists.txt b/src/Math/CMakeLists.txt index 81d6f68..51e4492 100644 --- a/src/Math/CMakeLists.txt +++ b/src/Math/CMakeLists.txt @@ -49,10 +49,10 @@ target_link_libraries(${libname} ${LIBRARIES}) install(TARGETS ${libname} EXPORT "${PROJECT_NAME}Targets" - RUNTIME DESTINATION ${PACKAGE_INSTALL_BIN_DIR} COMPONENT bin - LIBRARY DESTINATION ${PACKAGE_INSTALL_LIB_DIR} COMPONENT lib) + RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin + LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib) -install(FILES ${HEADERS} DESTINATION ${PACKAGE_INSTALL_INC_DIR}/Math) +install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Math) # TESTING # include(uLibTargetMacros) diff --git a/src/Math/Dense.h b/src/Math/Dense.h index 8cd5bd2..3e11884 100644 --- a/src/Math/Dense.h +++ b/src/Math/Dense.h @@ -139,7 +139,6 @@ typedef Eigen::Vector4f Vector4f; - //////////////////////////////////////////////////////////////////////////////// // Vector String interaction /////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// diff --git a/src/Math/VoxImage.cpp b/src/Math/VoxImage.cpp index 35c92b9..bc1c587 100644 --- a/src/Math/VoxImage.cpp +++ b/src/Math/VoxImage.cpp @@ -32,9 +32,11 @@ #include #include +#include #include #include - +#include +#include namespace uLib { @@ -116,14 +118,23 @@ void Abstract::VoxImage::ExportToVti (const char *file, bool density_type, bool scalar[i] = static_cast(voxels->GetValue(i) * norm); } - // // Create a custom string key - // static vtkInformationStringKey* ConfigNote = - // vtkInformationStringKey::MakeKey("ConfigNote", "MyNotes"); + // Create a custom string key + static vtkInformationStringKey* ConfigNote = + vtkInformationStringKey::MakeKey("cmt.config", "Config"); - // // Attach metadata - // image->GetInformation()->Set(ConfigNote, "This image was generated with method X, threshold=0.5"); + // Attach metadata + vtkInformation *info = image->GetInformation(); + info->Set(ConfigNote, + "This image was generated with uLib\n" + "-----------------------------------\n" + "Author: Andrea Rigoni\n" + "Version: 0.1\n" + "Date: 2025\n" + ); + + // std::cout << info->Get(ConfigNote) << std::endl; vtkSmartPointer writer = vtkSmartPointer::New(); writer->SetFileName(file); writer->SetInputData(image); @@ -135,11 +146,40 @@ void Abstract::VoxImage::ExportToVti (const char *file, bool density_type, bool } +int Abstract::VoxImage::ImportFromVti(const char *file, bool density_type) { + + vtkSmartPointer reader = vtkSmartPointer::New(); + reader->SetFileName(file); + reader->Update(); + vtkImageData *image = reader->GetOutput(); + if(!image) return false; + + Abstract::VoxImage *voxels = this; + int nx = image->GetDimensions()[0]; + int ny = image->GetDimensions()[1]; + int nz = image->GetDimensions()[2]; + + voxels->SetDims(Vector3i(nx,ny,nz)); + voxels->SetSpacing(Vector3f(image->GetSpacing()[0],image->GetSpacing()[1],image->GetSpacing()[2])); + voxels->SetOrigin(Vector3f(image->GetOrigin()[0],image->GetOrigin()[1],image->GetOrigin()[2])); + + float norm; + if (density_type) { + norm = 1; + } else norm = 1.E6; + + size_t npoints = nx*ny*nz; + float *scalar = static_cast(image->GetScalarPointer()); + for (size_t i = 0; i < npoints; i++) { + voxels->SetValue(i, scalar[i] / norm); + } + + return true; +} - -int Abstract::VoxImage::ImportFromVtk(const char *file) +int Abstract::VoxImage::ImportFromVtk(const char *file, bool density_type) { FILE * vtk_file = fopen(file, "r"); if (!vtk_file) return false; @@ -171,14 +211,18 @@ int Abstract::VoxImage::ImportFromVtk(const char *file) this->SetSpacing(Vector3f(sx,sy,sz)); this->SetPosition(Vector3f(ox,oy,oz)); + float norm; + if (density_type) { + norm = 1; + } else norm = 1.E6; + for (int k = 0; k < dz; ++k) { for (int j = 0; j < dy; ++j) { for (int i = 0; i < dx; ++i) { Vector3i idx(i, j, k); float tmp_val; fscanf(vtk_file, "%f", &tmp_val); - //this->SetValue(idx,fabs(tmp_val)*1E-6); - this->SetValue(idx,tmp_val*1E-6); + this->SetValue(idx,tmp_val / norm); } } } diff --git a/src/Math/VoxImage.h b/src/Math/VoxImage.h index 15e3079..8ee02ea 100644 --- a/src/Math/VoxImage.h +++ b/src/Math/VoxImage.h @@ -56,9 +56,18 @@ public: virtual void SetDims(const Vector3i &size) = 0; void ExportToVtk(const char *file, bool density_type = 0); + + // use this function to export to VTK binary format void ExportToVti (const char *file, bool density_type = 0, bool compressed = 0); + + // this function has been deprecated in favor of ExportToVti + // but it is kept for backward compatibility and because it + // does not depend on vtk library void ExportToVtkXml(const char *file, bool density_type = 0); - int ImportFromVtk(const char *file); + + int ImportFromVtk(const char *file, bool density_type = 0); + + int ImportFromVti(const char *file, bool density_type = 0); protected: diff --git a/src/Root/CMakeLists.txt b/src/Root/CMakeLists.txt index 48ceb7e..6e76dfb 100644 --- a/src/Root/CMakeLists.txt +++ b/src/Root/CMakeLists.txt @@ -42,7 +42,7 @@ list(APPEND SOURCES ${rDictName}.cxx) set(R_ARTIFACTS ${CMAKE_CURRENT_BINARY_DIR}/lib${rDictName}_rdict.pcm ${CMAKE_CURRENT_BINARY_DIR}/lib${rDictName}.rootmap) install(FILES ${R_ARTIFACTS} - DESTINATION ${PACKAGE_INSTALL_LIB_DIR}) + DESTINATION ${INSTALL_LIB_DIR}) set(libname ${PACKAGE_LIBPREFIX}Root) set(ULIB_SHARED_LIBRARIES ${ULIB_SHARED_LIBRARIES} ${libname} PARENT_SCOPE) @@ -57,9 +57,9 @@ target_link_libraries(${libname} ${LIBRARIES}) install(TARGETS ${libname} EXPORT "${PROJECT_NAME}Targets" - RUNTIME DESTINATION ${PACKAGE_INSTALL_BIN_DIR} COMPONENT bin - LIBRARY DESTINATION ${PACKAGE_INSTALL_LIB_DIR} COMPONENT lib) + RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin + LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib) -install(FILES ${HEADERS} DESTINATION ${PACKAGE_INSTALL_INC_DIR}/Root) +install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Root) diff --git a/src/Vtk/CMakeLists.txt b/src/Vtk/CMakeLists.txt index ab85943..33b5585 100644 --- a/src/Vtk/CMakeLists.txt +++ b/src/Vtk/CMakeLists.txt @@ -31,8 +31,8 @@ target_link_libraries(${libname} ${LIBRARIES}) install(TARGETS ${libname} EXPORT "${PROJECT_NAME}Targets" - RUNTIME DESTINATION ${PACKAGE_INSTALL_BIN_DIR} COMPONENT bin - LIBRARY DESTINATION ${PACKAGE_INSTALL_LIB_DIR} COMPONENT lib) + RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin + LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib) -install(FILES ${HEADERS} DESTINATION ${PACKAGE_INSTALL_INC_DIR}/Vtk) +install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Vtk) diff --git a/uLibConfig.cmake.in b/uLibConfig.cmake.in index 3fb3043..23fbeed 100644 --- a/uLibConfig.cmake.in +++ b/uLibConfig.cmake.in @@ -9,9 +9,9 @@ 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. +# Defines the include directories for the header files +# PACKAGE_INCLUDE_INSTALL_DIR is replaced by configure_package_config_file +# with the correct path for the installation. set(ULIB_INCLUDE_DIRS "${PACKAGE_INCLUDE_INSTALL_DIR}") get_filename_component(ULIB_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) @@ -29,38 +29,64 @@ set(uLib_INSTALL_TARGETS_FILE # 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") + message(STATUS " ++ Using uLib build targets") include("${uLib_BUILD_TARGETS_FILE}") - set_and_check(ULIB_INCLUDE_DIRS "@ULIB_SOURCE_DIR@") + set_and_check(ULIB_INCLUDE_DIRS "@ULIB_SOURCE_DIR@/src") set_and_check(ULIB_LIBRARY_DIRS "${ULIB_CMAKE_DIR}") + set(ULIB_BUILD_DIR ${ULIB_CMAKE_DIR}) + + # Target that builds uLib inside its build directory + add_custom_target(uLib_dependency_target + COMMAND echo " --------------------------------- " + COMMAND echo " - Building uLib as a dependency - " + COMMAND echo " --------------------------------- " + COMMAND echo "" + COMMAND ${CMAKE_COMMAND} --build ${ULIB_BUILD_DIR} + COMMAND echo "" + WORKING_DIRECTORY ${ULIB_BUILD_DIR} + ) + + add_library(uLib_dependency INTERFACE) + add_dependencies(uLib_dependency uLib_dependency_target) + link_libraries(uLib_dependency) else() - message(STATUS " ++ UsingLib install targets") + message(STATUS " ++ Using uLib installed 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@") + set_and_check(ULIB_INCLUDE_DIRS "@PACKAGE_INSTALL_INC_DIR@") + set(ULIB_SYSCONFIG_DIR "@PACKAGE_INSTALL_ETC_DIR@") + set_and_check(ULIB_CMAKE_DIR "@PACKAGE_INSTALL_CMAKE_DIR@") + set_and_check(ULIB_LIBRARY_DIRS "@PACKAGE_INSTALL_LIB_DIR@") endif() +# --- Add required packages from uLib --- +# TODO: this should be selected if components are active +# +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 filesystem REQUIRED) +include_directories(${Boost_INCLUDE_DIRS}) +link_libraries(${Boost_LIBRARIES}) + +find_package(Eigen3 CONFIG REQUIRED) +include(${EIGEN3_USE_FILE}) + +find_package(ROOT CONFIG REQUIRED) +include(${ROOT_USE_FILE}) + +find_package(VTK REQUIRED) +# include(${VTK_USE_FILE}) + + + 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 the variable to indicate that the package has been found. 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@)