diff --git a/.gitignore b/.gitignore index 82dbd0aa7..64a0a441f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ gotools-core/include/GoTools/geometry/GoTools_version.h doc gpl/generate_gpl_headers +*~ diff --git a/CMakeLists.txt b/CMakeLists.txt index bb324f12d..26b6724fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,8 +4,8 @@ PROJECT(GoTools) CMAKE_MINIMUM_REQUIRED(VERSION 3.5) # Set version info -SET(GoTools_VERSION_MAJOR 4) -SET(GoTools_VERSION_MINOR 3) +SET(GoTools_VERSION_MAJOR 5) +SET(GoTools_VERSION_MINOR 0) SET(GoTools_VERSION_PATCH 0) SET(GoTools_VERSION "${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH}") SET(GoTools_ABI_VERSION "${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}" CACHE INTERNAL "GoTools ABI version") @@ -108,7 +108,7 @@ ENDIF(CMAKE_CXX_COMPILER_ID MATCHES MSVC) # Set install prefix on Windows IF(WIN32) SET(CMAKE_INSTALL_PREFIX CACHE INTERNAL "") - SET(GoTools_INSTALL_PREFIX "$ENV{PROGRAMFILES}/SINTEF/GoTools" + SET(GoTools_WINDOWS_INSTALL_PREFIX "$ENV{PROGRAMFILES}/SINTEF/GoTools" CACHE PATH "Path to install GoTools") ENDIF(WIN32) # Organize the project in folders (VS only?) diff --git a/INSTALL b/INSTALL index f6af964b7..97be0fcd0 100644 --- a/INSTALL +++ b/INSTALL @@ -71,28 +71,28 @@ A set of options to control the build can be accessed in CMake (names starting w example, you can turn on/off building the various modules by checking/unchecking GoTools_COMPILE_MODULE_. -If a C++11 compliant compiler is not available, the building process uses boost::shared_ptr instead of -std::shared_ptr. +If a C++11 compliant compiler is not available, the building process uses boost::shared_ptr instead +of std::shared_ptr. Windows ********* The code has been tested using Visual Studio 2015, 2019 and 2022, with x64. -Make sure that your installment of Visual Studio includes support for Visual C++. When installing Visual -Studio you should select "Desktop development with C++" from the Workloads options. If you did not do -that then you must launch the Visual Studio installer and select "Modify", then select "Desktop -development with C++". Follow further instructions. +Make sure that your installment of Visual Studio includes support for Visual C++. When installing +Visual Studio you should select "Desktop development with C++" from the Workloads options. If you +did not do that then you must launch the Visual Studio installer and select "Modify", then select +"Desktop development with C++". Follow further instructions. -Note that Visual Studio introduced binary compatibility in Visual Studio 2015, allowing the user to mix -binaries built by the VS toolsets v140, v141, v142 and v143 (Visual Studio 2015 and later, with some -specific restrictions). The linker must use a toolset at least as recent as the newest toolset used by -the binaries. +Note that Visual Studio introduced binary compatibility in Visual Studio 2015, allowing the user to +mix binaries built by the VS toolsets v140, v141, v142 and v143 (Visual Studio 2015 and later, with +some specific restrictions). The linker must use a toolset at least as recent as the newest toolset +used by the binaries. How to edit environment variables: - Open the settings application. -- Search for env, select: "Edit the system environment variables" (or "Edit environment variables for - your account" to add them to your user only). +- Search for env, select: "Edit the system environment variables" (or "Edit environment variables + for your account" to add them to your user only). Boost: - Download a binary release for your Visual Studio version. @@ -161,7 +161,19 @@ CMake: - On Windows 10 the HOME variable is not set. This is needed by the cmake setup. Add HOME to the user environment variables, pointing to the home directory (typically 'C:\Users\'). - For 64 bit applications using Visual Studio 2015 you should make sure to choose x64 when - generating the solution (default is x86). + generating the solution using cmake-gui (default is x86). +- Optionally you may run cmake from the command line, in this example using Visual Studio 2019 on + an Intel/AMD 64-bit system: + $ mkdir build_msvc2019 + $ cd build_msvc2019 + $ cmake ../ -G "Visual Studio 16 2019" -A x64 + +Build the project in Release mode from the build folder (replace with 'Debug' for building in debug +mode): +$ cmake --build . --config Release --parallel + +Install using gsudo/sudo (or run in a shell with administrator privileges): +$ gsudo cmake --install . Building the gotools Visual Studio solution: - Open the gotools Visual Studio solution file that was generated by cmake. Choose either Release or @@ -169,12 +181,14 @@ Building the gotools Visual Studio solution: Running the tests from a shell (like Git Bash): - Run the tests in default (release) mode: - $ ctest.exe + $ ctest +- Run the tests in parallel: + $ ctest -j ${NUMBER_OF_PROCESSORS} - Run the tests in debug mode: - $ ctest.exe -C debug + $ ctest -C debug - Run only the acceptance tests (use unit or integration for the other test types, using a unique substring like 'cep' will also work): - $ ctest.exe -L acceptance + $ ctest -L acceptance MacOS diff --git a/compositemodel/CMakeLists.txt b/compositemodel/CMakeLists.txt index e241c7d15..2cf242157 100644 --- a/compositemodel/CMakeLists.txt +++ b/compositemodel/CMakeLists.txt @@ -123,29 +123,60 @@ endif() # Create a tmp dir for generated data. execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/tmp) -# 'install' target +# === Install Targets and Export Package === + +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS GoCompositeModel DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - #include - INSTALL(DIRECTORY include/GoTools/compositemodel - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - #lib - INSTALL(TARGETS GoCompositeModel DESTINATION lib COMPONENT compositemodel) - # include - INSTALL(DIRECTORY include/GoTools/compositemodel - DESTINATION include/GoTools - COMPONENT compositemodel-dev - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoCompositeModel target with export set +install(TARGETS GoCompositeModel + EXPORT GoCompositeModelTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT GoCompositeModelTargets + FILE GoCompositeModelTargets.cmake + #NAMESPACE GoTools:: # So consumer can do target_link_libraries(... GoTools::GoToolsCore) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoCompositeModel +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoCompositeModelConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoCompositeModelConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoCompositeModelConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoCompositeModel +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoCompositeModelConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoCompositeModelConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoCompositeModel +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoCompositeModel.so) diff --git a/compositemodel/cmake/GoCompositeModelConfig.cmake.in b/compositemodel/cmake/GoCompositeModelConfig.cmake.in new file mode 100644 index 000000000..ed6445cd5 --- /dev/null +++ b/compositemodel/cmake/GoCompositeModelConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoCompositeModelTargets.cmake") + +# Legacy compatibility +set(GoCompositeModel_LIBRARIES GoCompositeModel) + +# Optionally set variables +set(GoCompositeModel_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/gotools-core/CMakeLists.txt b/gotools-core/CMakeLists.txt index 090e13d72..5a2184ce9 100644 --- a/gotools-core/CMakeLists.txt +++ b/gotools-core/CMakeLists.txt @@ -98,36 +98,39 @@ if (GoTools_COPY_DATA) DESTINATION ${GoToolsCore_BINARY_DIR}/examples) endif() -# Set default installation prefix -# IF(WIN32) -# SET(GoTools_INSTALL_PREFIX "$ENV{PROGRAMFILES}/SINTEF/GoTools" CACHE PATH "Path to install GoTools") -# ENDIF() -if(NOT DEFINED GoTools_INSTALL_PREFIX) - SET(GoTools_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Path to install GoTools") -endif() - # === Install Targets and Export Package === + include(CMakePackageConfigHelpers) +IF(WIN32) + # Windows + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) +ELSE(WIN32) + # Linux + include(GNUInstallDirs) +ENDIF(WIN32) + # Install the GoToolsCore target install(TARGETS GoToolsCore EXPORT GoToolsCoreTargets - ARCHIVE DESTINATION ${GoTools_INSTALL_PREFIX}/lib - LIBRARY DESTINATION ${GoTools_INSTALL_PREFIX}/lib - RUNTIME DESTINATION ${GoTools_INSTALL_PREFIX}/bin - INCLUDES DESTINATION ${GoTools_INSTALL_PREFIX}/include + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) # Install headers install(DIRECTORY include/ - DESTINATION ${GoTools_INSTALL_PREFIX}/include + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h" ) # Export the targets install(EXPORT GoToolsCoreTargets FILE GoToolsCoreTargets.cmake - DESTINATION ${GoTools_INSTALL_PREFIX}/lib/cmake/GoToolsCore + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoToolsCore ) # Generate version file @@ -141,14 +144,14 @@ write_basic_package_version_file( configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoToolsCoreConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/GoToolsCoreConfig.cmake" - INSTALL_DESTINATION ${GoTools_INSTALL_PREFIX}/lib/cmake/GoToolsCore + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoToolsCore ) # Install the config files install(FILES "${CMAKE_CURRENT_BINARY_DIR}/GoToolsCoreConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/GoToolsCoreConfigVersion.cmake" - DESTINATION ${GoTools_INSTALL_PREFIX}/lib/cmake/GoToolsCore + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoToolsCore ) # Optional stripping diff --git a/igeslib/CMakeLists.txt b/igeslib/CMakeLists.txt index a23e15382..6c6f576bf 100644 --- a/igeslib/CMakeLists.txt +++ b/igeslib/CMakeLists.txt @@ -63,29 +63,60 @@ if (GoTools_COPY_DATA) DESTINATION ${GoIgeslib_BINARY_DIR}/examples) endif() -# 'install' target +# === Install Targets and Export Package === + +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS GoIgeslib DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - # include - INSTALL(DIRECTORY include/GoTools/igeslib - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - # lib - INSTALL(TARGETS GoIgeslib DESTINATION lib COMPONENT igeslib) - # include - INSTALL(DIRECTORY include/GoTools/igeslib - COMPONENT igeslib-dev - DESTINATION include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoToolsCore target with export set +install(TARGETS GoIgeslib + EXPORT GoIgeslibTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT GoIgeslibTargets + FILE GoIgeslibTargets.cmake + #NAMESPACE GoTools:: # So consumer can do target_link_libraries(... GoTools::GoToolsCore) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoIgeslib +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoIgeslibConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoIgeslibConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoIgeslibConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoIgeslib +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoIgeslibConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoIgeslibConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoIgeslib +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoIgeslib.so) diff --git a/igeslib/cmake/GoIgeslibConfig.cmake.in b/igeslib/cmake/GoIgeslibConfig.cmake.in new file mode 100644 index 000000000..d0915a618 --- /dev/null +++ b/igeslib/cmake/GoIgeslibConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoIgesLibTargets.cmake") + +# Legacy compatibility +set(GoIgesLib_LIBRARIES GoIgesLib) + +# Optionally set variables +set(GoIgesLib_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/implicitization/CMakeLists.txt b/implicitization/CMakeLists.txt index 2336ba21f..90eb46be5 100644 --- a/implicitization/CMakeLists.txt +++ b/implicitization/CMakeLists.txt @@ -70,31 +70,60 @@ if (GoTools_COPY_DATA) ) endif() +# === Install Targets and Export Package === -# 'install' target +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS GoImplicitization DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - # include - INSTALL(DIRECTORY include/GoTools/implicitization - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - # lib - INSTALL(TARGETS GoImplicitization DESTINATION lib COMPONENT implicitization) - # include - INSTALL(DIRECTORY include/GoTools/implicitization - DESTINATION include/GoTools - COMPONENT implicitization-dev - FILES_MATCHING PATTERN "*.h" - PATTERN "*.hpp" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoToolsCore target with export set +install(TARGETS GoImplicitization + EXPORT GoImplicitizationTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT GoImplicitizationTargets + FILE GoImplicitizationTargets.cmake + #NAMESPACE GoTools:: # So consumer can do target_link_libraries(... GoTools::GoToolsCore) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoImplicitization +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoImplicitizationConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoImplicitizationConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoImplicitizationConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoImplicitization +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoImplicitizationConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoImplicitizationConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoImplicitization +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoImplicitization.so) diff --git a/implicitization/cmake/GoImplicitizationConfig.cmake.in b/implicitization/cmake/GoImplicitizationConfig.cmake.in new file mode 100644 index 000000000..b237f69bf --- /dev/null +++ b/implicitization/cmake/GoImplicitizationConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoImplicitizationTargets.cmake") + +# Legacy compatibility +set(GoImplicitization_LIBRARIES GoToolsCore) + +# Optionally set variables +set(GoImplicitization_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/intersections/CMakeLists.txt b/intersections/CMakeLists.txt index 9d8a91b65..f9bc3a4e2 100644 --- a/intersections/CMakeLists.txt +++ b/intersections/CMakeLists.txt @@ -51,30 +51,60 @@ IF(GoTools_COMPILE_APPS) ENDFOREACH(app) ENDIF(GoTools_COMPILE_APPS) -# 'install' target +# === Install Targets and Export Package === + +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS GoIntersections DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - # include - INSTALL(DIRECTORY include/GoTools/intersections - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - # lib - INSTALL(TARGETS GoIntersections DESTINATION lib COMPONENT intersections) - # include - INSTALL(DIRECTORY include/GoTools/intersections - DESTINATION include/GoTools - COMPONENT intersections-dev - FILES_MATCHING PATTERN "*.h" - PATTERN "*.hpp" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoToolsCore target with export set +install(TARGETS GoIntersections + EXPORT GoIntersectionsTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT GoIntersectionsTargets + FILE GoIntersectionsTargets.cmake + #NAMESPACE GoTools:: # So consumer can do target_link_libraries(... GoTools::GoToolsCore) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoIntersections +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoIntersectionsConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoIntersectionsConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoIntersectionsConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoIntersections +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoIntersectionsConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoIntersectionsConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoIntersections +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoIntersections.so) diff --git a/intersections/cmake/GoIntersectionsConfig.cmake.in b/intersections/cmake/GoIntersectionsConfig.cmake.in new file mode 100644 index 000000000..7ff71060d --- /dev/null +++ b/intersections/cmake/GoIntersectionsConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoIntersectionsTargets.cmake") + +# Legacy compatibility +set(GoIntersections_LIBRARIES GoIntersections) + +# Optionally set variables +set(GoIntersections_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/isogeometric_model/CMakeLists.txt b/isogeometric_model/CMakeLists.txt index 8308dfd77..e8a332c83 100644 --- a/isogeometric_model/CMakeLists.txt +++ b/isogeometric_model/CMakeLists.txt @@ -85,30 +85,60 @@ if (GoTools_COPY_DATA) ) endif() +# === Install Targets and Export Package === -# 'install' target +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS GoIsogeometricModel DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - # include - INSTALL(DIRECTORY include/GoTools/isogeometric_model - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - # lib - INSTALL(TARGETS GoIsogeometricModel DESTINATION lib COMPONENT isogeometricmodel) - # include - INSTALL(DIRECTORY include/GoTools/isogeometric_model - DESTINATION include/GoTools - COMPONENT isogeometricmodel-dev - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoToolsCore target with export set +install(TARGETS GoIsogeometricModel + EXPORT GoIsogeometricModelTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT GoIsogeometricModelTargets + FILE GoIsogeometricModelTargets.cmake + #NAMESPACE GoTools:: # So consumer can do target_link_libraries(... GoTools::GoToolsCore) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoIsogeometricModel +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoIsogeometricModelConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoIsogeometricModelConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoIsogeometricModelConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoIsogeometricModel +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoIsogeometricModelConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoIsogeometricModelConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoIsogeometricModel +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoIsogeometricModel.so) diff --git a/isogeometric_model/cmake/GoIsogeometricModelConfig.cmake.in b/isogeometric_model/cmake/GoIsogeometricModelConfig.cmake.in new file mode 100644 index 000000000..d2b254b6e --- /dev/null +++ b/isogeometric_model/cmake/GoIsogeometricModelConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoIsogeometricModelTargets.cmake") + +# Legacy compatibility +set(GoIsogeometricModel_LIBRARIES GoIsogeometricModel) + +# Optionally set variables +set(GoIsogeometricModel_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/lrsplines2D/CMakeLists.txt b/lrsplines2D/CMakeLists.txt index d6335c6f7..fcb42142b 100644 --- a/lrsplines2D/CMakeLists.txt +++ b/lrsplines2D/CMakeLists.txt @@ -102,28 +102,38 @@ endif() # === Install and Export CMake Config Package === -# if(NOT DEFINED GoTools_INSTALL_PREFIX) -# set(GoTools_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) -# endif() -if(NOT DEFINED GoTools_INSTALL_PREFIX) - SET(GoTools_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Path to install GoTools") -endif() - include(CMakePackageConfigHelpers) +# 'install' target +IF(WIN32) + # Windows + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) +ELSE(WIN32) + # Linux + include(GNUInstallDirs) +ENDIF(WIN32) + # Install the GoLRspline2D target install(TARGETS GoLRspline2D EXPORT GoLRspline2DTargets - ARCHIVE DESTINATION ${GoTools_INSTALL_PREFIX}/lib - LIBRARY DESTINATION ${GoTools_INSTALL_PREFIX}/lib - RUNTIME DESTINATION ${GoTools_INSTALL_PREFIX}/bin - INCLUDES DESTINATION ${GoTools_INSTALL_PREFIX}/include + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" ) # Export the target without namespace install(EXPORT GoLRspline2DTargets FILE GoLRsplines2DTargets.cmake - DESTINATION ${GoTools_INSTALL_PREFIX}/lib/cmake/GoLRsplines2D + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoLRsplines2D ) # Generate the version file for find_package() @@ -137,14 +147,14 @@ write_basic_package_version_file( configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoLRsplines2DConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/GoLRsplines2DConfig.cmake" - INSTALL_DESTINATION ${GoTools_INSTALL_PREFIX}/lib/cmake/GoLRsplines2D + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoLRsplines2D ) # Install the generated config files install(FILES "${CMAKE_CURRENT_BINARY_DIR}/GoLRsplines2DConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/GoLRsplines2DConfigVersion.cmake" - DESTINATION ${GoTools_INSTALL_PREFIX}/lib/cmake/GoLRsplines2D + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoLRsplines2D ) SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoLRspline2D.so) diff --git a/lrsplines3D/CMakeLists.txt b/lrsplines3D/CMakeLists.txt index bbe495b40..ec5e227e0 100644 --- a/lrsplines3D/CMakeLists.txt +++ b/lrsplines3D/CMakeLists.txt @@ -137,29 +137,61 @@ ENDIF() # Create a tmp directory. file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/tmp) -# 'install' target +# === Install and Export CMake Config Package === + +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS GoLRspline3D DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - # include - INSTALL(DIRECTORY include/GoTools/lrsplines3D - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - # lib - INSTALL(TARGETS GoLRspline3D DESTINATION lib COMPONENT lrsplines3D) - # include - INSTALL(DIRECTORY include/GoTools/lrsplines3D - DESTINATION include/GoTools - COMPONENT lrsplines3D-dev - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoLRspline2D target +install(TARGETS GoLRspline3D + EXPORT GoLRspline3DTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the target without namespace +install(EXPORT GoLRspline3DTargets + FILE GoLRsplines3DTargets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoLRsplines3D +) + +# Generate the version file for find_package() +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoLRsplines3DConfigVersion.cmake" + VERSION ${GoTools_ABI_VERSION} + COMPATIBILITY SameMajorVersion +) + +# Generate the config file from template +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoLRsplines3DConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoLRsplines3DConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoLRsplines3D +) + +# Install the generated config files +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoLRsplines3DConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoLRsplines3DConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoLRsplines3D +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoLRspline3D.so) diff --git a/lrsplines3D/cmake/GoLRsplines3DConfig.cmake.in b/lrsplines3D/cmake/GoLRsplines3DConfig.cmake.in new file mode 100644 index 000000000..6db6cd5b7 --- /dev/null +++ b/lrsplines3D/cmake/GoLRsplines3DConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoLRsplines3DTargets.cmake") + +# Legacy compatibility +set(GoLRsplines3D_LIBRARIES GoLRspline3D) + +# Optional include path var +set(GoLRsplines3D_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/newmat/CMakeLists.txt b/newmat/CMakeLists.txt index 5e39c41e9..bef627e76 100644 --- a/newmat/CMakeLists.txt +++ b/newmat/CMakeLists.txt @@ -59,38 +59,68 @@ TARGET_LINK_LIBRARIES(test_exc newmat) SET_PROPERTY(TARGET test_exc PROPERTY FOLDER "newmat/Apps") +# 'install' target for newmat -# Install newmat - +# Set the installation prefix based on platform IF(WIN32) - # Windows - SET(CMAKE_INSTALL_PREFIX CACHE INTERNAL "") - SET(newmat_INSTALL_PREFIX "$ENV{PROGRAMFILES}/SINTEF/newmat" - CACHE PATH "Path to install Newmat") - INSTALL(TARGETS newmat DESTINATION ${newmat_INSTALL_PREFIX}/lib) - INSTALL(DIRECTORY include/ + SET(newmat_INSTALL_PREFIX "$ENV{PROGRAMFILES}/SINTEF/newmat" CACHE PATH "Path to install newmat") +ELSE() + SET(newmat_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Path to install newmat") +ENDIF() + +# === Install Targets and Export CMake Package === +include(CMakePackageConfigHelpers) + +# Install the newmat target with export +install(TARGETS newmat + EXPORT NewmatTargets + ARCHIVE DESTINATION ${newmat_INSTALL_PREFIX}/lib + LIBRARY DESTINATION ${newmat_INSTALL_PREFIX}/lib + RUNTIME DESTINATION ${newmat_INSTALL_PREFIX}/bin + INCLUDES DESTINATION ${newmat_INSTALL_PREFIX}/include +) + +# Install header files +install(DIRECTORY include/ DESTINATION ${newmat_INSTALL_PREFIX}/include/newmat FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE - ) -ELSE(WIN32) - # Linux - # lib - INSTALL(TARGETS newmat DESTINATION lib COMPONENT newmat) - # include - INSTALL(DIRECTORY include/ - COMPONENT newmat-dev - DESTINATION include/newmat - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) -ENDIF(WIN32) - -# CPack stuff +) + +# Export target info to a file +install(EXPORT NewmatTargets + FILE NewmatTargets.cmake + #NAMESPACE Newmat:: # Uncomment if you want to use target namespaces + DESTINATION ${newmat_INSTALL_PREFIX}/lib/cmake/newmat +) + +# Generate and install version/config files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/newmatConfigVersion.cmake" + VERSION 10.0.0 + COMPATIBILITY SameMajorVersion +) + +set(PACKAGE_INCLUDE_INSTALL_DIR "${newmat_INSTALL_PREFIX}/include") + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/newmatConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/newmatConfig.cmake" + INSTALL_DESTINATION ${newmat_INSTALL_PREFIX}/lib/cmake/newmat + PATH_VARS PACKAGE_INCLUDE_INSTALL_DIR +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/newmatConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/newmatConfigVersion.cmake" + DESTINATION ${newmat_INSTALL_PREFIX}/lib/cmake/newmat +) + +# CPack setup for packaging if needed IF(NOT GoTools_ALL_COMPILE) SET(CPACK_SOURCE_PACKAGE_FILE_NAME "newmat-10D") SET(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~") INCLUDE(CPack) -ENDIF(NOT GoTools_ALL_COMPILE) +ENDIF() SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libnewmat.so) diff --git a/newmat/cmake/newmatConfig.cmake.in b/newmat/cmake/newmatConfig.cmake.in new file mode 100644 index 000000000..559f2f210 --- /dev/null +++ b/newmat/cmake/newmatConfig.cmake.in @@ -0,0 +1,8 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/NewmatTargets.cmake") + +set(NEWMAT_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@") +set(NEWMAT_LIBRARIES newmat) + +check_required_components(newmat) diff --git a/parametrization/CMakeLists.txt b/parametrization/CMakeLists.txt index 79696845c..7ded4f5f9 100644 --- a/parametrization/CMakeLists.txt +++ b/parametrization/CMakeLists.txt @@ -57,28 +57,60 @@ if (GoTools_COPY_DATA) ) endif() +# === Install Targets and Export Package === + +include(CMakePackageConfigHelpers) + # 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS parametrization DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - # include - INSTALL(DIRECTORY include/GoTools/parametrization - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - # lib - INSTALL(TARGETS parametrization DESTINATION lib COMPONENT parametrization) - # include - INSTALL(DIRECTORY include/GoTools/parametrization - DESTINATION include/GoTools - COMPONENT parametrization-dev - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoToolsCore target with export set +install(TARGETS parametrization + EXPORT parametrizationTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT parametrizationTargets + FILE parametrizationTargets.cmake + #NAMESPACE GoTools:: # So consumer can do target_link_libraries(... GoTools::GoToolsCore) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/parametrization +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/parametrizationConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/parametrizationConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/parametrizationConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/parametrization +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/parametrizationConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/parametrizationConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/parametrization +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libparametrization.so) diff --git a/parametrization/cmake/parametrizationConfig.cmake.in b/parametrization/cmake/parametrizationConfig.cmake.in new file mode 100644 index 000000000..d00f0c30b --- /dev/null +++ b/parametrization/cmake/parametrizationConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoToolsCoreTargets.cmake") + +# Legacy compatibility +set(GoTools_LIBRARIES GoToolsCore) + +# Optionally set variables +set(GoToolsCore_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/qualitymodule/CMakeLists.txt b/qualitymodule/CMakeLists.txt index c2c949e86..43a038854 100644 --- a/qualitymodule/CMakeLists.txt +++ b/qualitymodule/CMakeLists.txt @@ -77,30 +77,60 @@ IF(GoTools_COMPILE_TESTS) ADD_APPS(test/acceptance "Acceptance Tests" TRUE) ENDIF(GoTools_COMPILE_TESTS) +# === Install Targets and Export Package === -# 'install' target +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS GoQualityModule DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - # include - INSTALL(DIRECTORY include/GoTools/qualitymodule - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - # lib - INSTALL(TARGETS GoQualityModule DESTINATION lib COMPONENT qualitymodule) - # include - INSTALL(DIRECTORY include/GoTools/qualitymodule - DESTINATION include/GoTools - COMPONENT qualitymodule-dev - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoQualityModule target with export set +install(TARGETS GoQualityModule + EXPORT GoQualityModuleTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT GoQualityModuleTargets + FILE GoQualityModuleTargets.cmake + #NAMESPACE GoTools:: # So consumer can do target_link_libraries(... GoTools::GoToolsCore) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoQualityModule +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoQualityModuleConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoQualityModuleConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoQualityModuleConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoQualityModule +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoQualityModuleConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoQualityModuleConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoQualityModule +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoQualityModule.so) diff --git a/qualitymodule/cmake/GoQualityModuleConfig.cmake.in b/qualitymodule/cmake/GoQualityModuleConfig.cmake.in new file mode 100644 index 000000000..4dea4b034 --- /dev/null +++ b/qualitymodule/cmake/GoQualityModuleConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoQualityModuleTargets.cmake") + +# Legacy compatibility +set(GoQualityModule_LIBRARIES GoQualityModule) + +# Optionally set variables +set(GoQualityModule_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/topology/CMakeLists.txt b/topology/CMakeLists.txt index ee14f67e5..7ad069df4 100644 --- a/topology/CMakeLists.txt +++ b/topology/CMakeLists.txt @@ -62,27 +62,60 @@ IF(GoTools_COMPILE_TESTS) ADD_APPS(test/acceptance "Acceptance Tests" TRUE) ENDIF(GoTools_COMPILE_TESTS) +# === Install Targets and Export Package === -# 'install' target +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - INSTALL(TARGETS GoTopology DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - INSTALL(DIRECTORY include/GoTools/topology - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - INSTALL(TARGETS GoTopology DESTINATION lib COMPONENT topology) - INSTALL(DIRECTORY include/GoTools/topology - DESTINATION include/GoTools - COMPONENT topology-dev - FILES_MATCHING PATTERN "*.h" - PATTERN "*.hpp" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoTopology target with export set +install(TARGETS GoTopology + EXPORT GoTopologyTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT GoTopologyTargets + FILE GoTopologyTargets.cmake + #NAMESPACE GoTools:: # So consumer can do target_link_libraries(... GoTools::GoToolsCore) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoTopology +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoTopologyConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoTopologyConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoTopologyConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoTopology +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoTopologyConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoTopologyConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoTopology +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoTopology.so) diff --git a/topology/cmake/GoTopologyConfig.cmake.in b/topology/cmake/GoTopologyConfig.cmake.in new file mode 100644 index 000000000..6191b4e3b --- /dev/null +++ b/topology/cmake/GoTopologyConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoTopologyTargets.cmake") + +# Legacy compatibility +set(GoTopology_LIBRARIES GoTopology) + +# Optionally set variables +set(GoTopology_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/trivariate/CMakeLists.txt b/trivariate/CMakeLists.txt index aaab6bdab..7c77bfb44 100644 --- a/trivariate/CMakeLists.txt +++ b/trivariate/CMakeLists.txt @@ -64,29 +64,59 @@ if (GoTools_COPY_DATA) DESTINATION ${GoTrivariate_BINARY_DIR}/examples) endif() -# 'install' target +# === Install Targets and Export Package === + +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS GoTrivariate DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - # include - INSTALL(DIRECTORY include/GoTools/trivariate - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - # lib - INSTALL(TARGETS GoTrivariate DESTINATION lib COMPONENT trivariate) - # include - INSTALL(DIRECTORY include/GoTools/trivariate - DESTINATION include/GoTools - COMPONENT trivariate-dev - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoTrivariate target with export set +install(TARGETS GoTrivariate + EXPORT GoTrivariateTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT GoTrivariateTargets + FILE GoTrivariateTargets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoTrivariate +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoTrivariateConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoTrivariateConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoTrivariateConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoTrivariate +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoTrivariateConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoTrivariateConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoTrivariate +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoTrivariate.so) diff --git a/trivariate/cmake/GoTrivariateConfig.cmake.in b/trivariate/cmake/GoTrivariateConfig.cmake.in new file mode 100644 index 000000000..43ee353fe --- /dev/null +++ b/trivariate/cmake/GoTrivariateConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoTrivariateTargets.cmake") + +# Legacy compatibility +set(GoTrivariate_LIBRARIES GoTrivariate) + +# Optionally set variables +set(GoTrivariate_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/trivariatemodel/CMakeLists.txt b/trivariatemodel/CMakeLists.txt index 0c63cf75d..19dee69a7 100644 --- a/trivariatemodel/CMakeLists.txt +++ b/trivariatemodel/CMakeLists.txt @@ -97,29 +97,60 @@ if (GoTools_COPY_DATA) DESTINATION ${GoTrivariateModel_BINARY_DIR}/examples) endif() -# 'install' target +# === Install Targets and Export Package === + +include(CMakePackageConfigHelpers) +# 'install' target IF(WIN32) # Windows - # lib - INSTALL(TARGETS GoTrivariateModel DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - #include - INSTALL(DIRECTORY include/GoTools/trivariatemodel - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) ELSE(WIN32) # Linux - #lib - INSTALL(TARGETS GoTrivariateModel DESTINATION lib COMPONENT trivariatemodel) - # include - INSTALL(DIRECTORY include/GoTools/trivariatemodel - DESTINATION include/GoTools - COMPONENT trivariatemodel-dev - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) + include(GNUInstallDirs) ENDIF(WIN32) +# Install the GoTrivariateModel target with export set +install(TARGETS GoTrivariateModel + EXPORT GoTrivariateModelTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install headers +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +# Export the targets to a file +install(EXPORT GoTrivariateModelTargets + FILE GoTrivariateModelTargets.cmake + #NAMESPACE GoTools:: # So consumer can do target_link_libraries(... GoTools::GoToolsCore) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoTrivariateModel +) + +# Generate and install the Config and Version files +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/GoTrivariateModelConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GoTrivariateModelConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/GoTrivariateModelConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoTrivariateModel +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/GoTrivariateModelConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/GoTrivariateModelConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/GoTrivariateModel +) + SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libGoTrivariateModel.so) diff --git a/trivariatemodel/cmake/GoTrivariateModelConfig.cmake.in b/trivariatemodel/cmake/GoTrivariateModelConfig.cmake.in new file mode 100644 index 000000000..03fd563e0 --- /dev/null +++ b/trivariatemodel/cmake/GoTrivariateModelConfig.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/GoTrivariateModelTargets.cmake") + +# Legacy compatibility +set(GoTrivariateModel_LIBRARIES GoTrivariateModel) + +# Optionally set variables +set(GoTrivariateModel_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") diff --git a/ttl b/ttl index 49ff0dbab..9988d9605 160000 --- a/ttl +++ b/ttl @@ -1 +1 @@ -Subproject commit 49ff0dbabefccb55b1f5793dab2ffcda1cb4da7d +Subproject commit 9988d96059f088186e50b9211395658ce4cb3f70 diff --git a/viewlib/CMakeLists.txt b/viewlib/CMakeLists.txt index 9a5000853..04a82d482 100644 --- a/viewlib/CMakeLists.txt +++ b/viewlib/CMakeLists.txt @@ -286,60 +286,92 @@ endif(ViewlibVolAndLRSupport) # Create a tmp dir for generated data. execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/tmp) -# 'install' target +# === Install Targets and Export Package === + +include(CMakePackageConfigHelpers) + +# Setup standard install directories if(WIN32) - # Windows - # lib - install(TARGETS viewlib DESTINATION ${GoTools_INSTALL_PREFIX}/lib) - # include - install(DIRECTORY include/GoTools/viewlib - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE - ) - # include ui files - install(DIRECTORY ${viewlib_BINARY_DIR}/include/GoTools/viewlib/ - DESTINATION ${GoTools_INSTALL_PREFIX}/include/GoTools/viewlib - FILES_MATCHING PATTERN "ui_*_form.h" - PATTERN ".svn" EXCLUDE - ) - # data - install(DIRECTORY data/ - DESTINATION ${GoTools_INSTALL_PREFIX}/share/viewlib - FILES_MATCHING PATTERN "*.g2" PATTERN "*.igs" - PATTERN ".svn" EXCLUDE - ) - # bin - set(goview_INSTALL_PREFIX "$ENV{PROGRAMFILES}/SINTEF/goview" - CACHE PATH "Path to install goview") - install(TARGETS goview DESTINATION ${goview_INSTALL_PREFIX}) + set(CMAKE_INSTALL_LIBDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/lib) + set(CMAKE_INSTALL_INCLUDEDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/include) + set(CMAKE_INSTALL_BINDIR ${GoTools_WINDOWS_INSTALL_PREFIX}/bin) else() - # Linux - # lib - install(TARGETS viewlib DESTINATION lib COMPONENT viewlib) - # include - install(DIRECTORY include/GoTools/viewlib - DESTINATION include/GoTools - COMPONENT viewlib-dev + include(GNUInstallDirs) +endif() + +# Install viewlib target +install(TARGETS viewlib + EXPORT viewlibTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +# Install viewlib binaries +# Path to your app build folder +set(APP_BUILD_DIR "${viewlib_BINARY_DIR}/app") + +# Determine configuration subdir (e.g., Debug/Release) — used by multi-config generators +if(CMAKE_CONFIGURATION_TYPES) + # Multi-config generator (e.g., Visual Studio, Xcode) + set(CONFIG_SUBDIR "$") +else() + # Single-config generator (e.g., Ninja, Unix Makefiles) + set(CONFIG_SUBDIR "") +endif() + +# Path to use at install time — app/[config]/ if multi-config, app/ otherwise +set(APP_RUNTIME_DIR "${APP_BUILD_DIR}/${CONFIG_SUBDIR}") +#message("APP_RUNTIME_DIR: ${APP_RUNTIME_DIR}") +# Install everything from app/[config]/ (or app/) into install bin directory +install(DIRECTORY "${APP_RUNTIME_DIR}/" + DESTINATION ${CMAKE_INSTALL_BINDIR} + FILES_MATCHING PATTERN "*" + PATTERN ".svn" EXCLUDE +) + +#message(STATUS "Will install app runtime files from: ${APP_RUNTIME_DIR}") + +# Install headers (including generated ui_*.h headers) +install(DIRECTORY include/GoTools/viewlib + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GoTools FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE - ) - # include ui files - install(DIRECTORY ${viewlib_BINARY_DIR}/include/GoTools/viewlib/ - DESTINATION include/GoTools/viewlib - COMPONENT viewlib-dev +) + +install(DIRECTORY ${viewlib_BINARY_DIR}/include/GoTools/viewlib/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GoTools/viewlib FILES_MATCHING PATTERN "ui_*_form.h" PATTERN ".svn" EXCLUDE - ) - # data - install(DIRECTORY data/ - DESTINATION share/GoTools/viewlib - COMPONENT viewlib - FILES_MATCHING PATTERN "*.g2" PATTERN "*.igs" - PATTERN ".svn" EXCLUDE - ) - # bin - install(TARGETS goview DESTINATION bin COMPONENT viewlib) -endif() +) + +# Export the targets +install(EXPORT viewlibTargets + FILE viewlibTargets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/viewlib +) + +# Generate version file +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/viewlibConfigVersion.cmake" + VERSION ${GoTools_VERSION_MAJOR}.${GoTools_VERSION_MINOR}.${GoTools_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +# Generate config file from template +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/viewlibConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/viewlibConfig.cmake" + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/viewlib +) + +# Install config files +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/viewlibConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/viewlibConfigVersion.cmake" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/viewlib +) +# Optional stripping set(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libviewlib.so) diff --git a/viewlib/cmake/viewlibConfig.cmake.in b/viewlib/cmake/viewlibConfig.cmake.in new file mode 100644 index 000000000..3995b0bad --- /dev/null +++ b/viewlib/cmake/viewlibConfig.cmake.in @@ -0,0 +1,8 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/viewlibTargets.cmake") + +set(VIEWLIB_INCLUDE_DIRS "@CMAKE_INSTALL_INCLUDEDIR@") +set(VIEWLIB_LIBRARIES viewlib) + +check_required_components(viewlib)