From 688b602cdd48482e2f2e78d45e1c7737ece2b430 Mon Sep 17 00:00:00 2001 From: Sam Morley Date: Fri, 11 Jun 2021 15:37:25 +0100 Subject: [PATCH 1/9] Added basic cmake file --- CMakeLists.txt | 60 +++++++++++++++++++++++++++++++++++++++ LibalgebraConfig.cmake.in | 6 ++++ 2 files changed, 66 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 LibalgebraConfig.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..33ba8d56 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,60 @@ +cmake_minimum_required(VERSION 3.0) + +project(libalgebra VERSION 1.0.0) + + + + + +set(CMAKE_CXX_STANDARD 98) + +find_package(Boost COMPONENTS thread) + + +add_library(Libalgebra INTERFACE + libalgebra/libalgebra.h + libalgebra/_tensor_basis.h + libalgebra/algebra.h + libalgebra/basis_traits.h + libalgebra/constlog2.h + libalgebra/constpower.h + libalgebra/implimentation_types.h + libalgebra/lie.h + libalgebra/lie_basis.h + libalgebra/monomial_basis.h + libalgebra/multi_polynomial.h + libalgebra/poly_basis.h + libalgebra/poly_lie.h + libalgebra/poly_lie_basis.h + libalgebra/polynomials.h + libalgebra/sparse_vector.h + libalgebra/tensor.h + libalgebra/tensor_basis.h + libalgebra/utils.h + ) +target_link_libraries(Libalgebra INTERFACE Boost) + +include(GNUInstallDirs) +install(TARGETS Libalgebra + EXPORT LibalgebraTargets + INCLUDES DESTINATION include + ) + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + LibalgebraConfigVersion.cmake + VERSION ${PACKAGE_VERSION} + COMPATIBILITY SameMajorVersion +) + +install(EXPORT LibalgebraTargets + FILE LibalgebraTargets.cmake + NAMESPACE Libalgebra:: + DESTINATION lib/cmake/Libalgebra + ) + +configure_file(LibalgebraConfig.cmake.in LibalgebraConfig.cmake @ONLY) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfigVersion.cmake" + DESTINATION lib/cmake/Libalgebra + ) \ No newline at end of file diff --git a/LibalgebraConfig.cmake.in b/LibalgebraConfig.cmake.in new file mode 100644 index 00000000..4da74630 --- /dev/null +++ b/LibalgebraConfig.cmake.in @@ -0,0 +1,6 @@ +include(CMakeFindDependencyMacro) + +find_dependency(Boost COMPONENTS thread REQUIRED) + + +include("${CMAKE_CURRENT_BINARY_DIR}/LibalgebraTargets.cmake") \ No newline at end of file From b7a77979d152068c4620f9eeaa7b5762b9944035 Mon Sep 17 00:00:00 2001 From: Sam Morley Date: Sat, 12 Jun 2021 14:09:54 +0100 Subject: [PATCH 2/9] Updated to use modern cmake syntax. --- CMakeLists.txt | 59 ++++++++++++++++++++------------------- LibalgebraConfig.cmake.in | 8 +++++- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 33ba8d56..05471d12 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.0) -project(libalgebra VERSION 1.0.0) +project(Libalgebra VERSION 1.0.0) @@ -11,50 +11,51 @@ set(CMAKE_CXX_STANDARD 98) find_package(Boost COMPONENTS thread) -add_library(Libalgebra INTERFACE - libalgebra/libalgebra.h - libalgebra/_tensor_basis.h - libalgebra/algebra.h - libalgebra/basis_traits.h - libalgebra/constlog2.h - libalgebra/constpower.h - libalgebra/implimentation_types.h - libalgebra/lie.h - libalgebra/lie_basis.h - libalgebra/monomial_basis.h - libalgebra/multi_polynomial.h - libalgebra/poly_basis.h - libalgebra/poly_lie.h - libalgebra/poly_lie_basis.h - libalgebra/polynomials.h - libalgebra/sparse_vector.h - libalgebra/tensor.h - libalgebra/tensor_basis.h - libalgebra/utils.h +add_library(Libalgebra INTERFACE) + +target_include_directories(Libalgebra + INTERFACE + $ ) -target_link_libraries(Libalgebra INTERFACE Boost) + +add_library(Libalgebra::Libalgebra ALIAS Libalgebra) + +target_link_libraries(Libalgebra INTERFACE Boost::Boost) include(GNUInstallDirs) install(TARGETS Libalgebra EXPORT LibalgebraTargets - INCLUDES DESTINATION include + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) include(CMakePackageConfigHelpers) +set(LIBALGEBRA_CMAKE_CONFIG_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Libalgebra") + +message(STATUS "Writing cmake config file") +configure_package_config_file( + LibalgebraConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfig.cmake + INSTALL_DESTINATION ${LIBALGEBRA_CMAKE_CONFIG_DESTINATION} + PATH_VARS CMAKE_INSTALL_INCLUDEDIR +) + +message(STATUS "Writing cmake config version file") write_basic_package_version_file( LibalgebraConfigVersion.cmake VERSION ${PACKAGE_VERSION} COMPATIBILITY SameMajorVersion + ARCH_INDEPENDENT ) +message(STATUS "Installing config files to ${LIBALGEBRA_CMAKE_CONFIG_DESTINATION}") +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfigVersion.cmake + DESTINATION ${LIBALGEBRA_CMAKE_CONFIG_DESTINATION} + ) + + install(EXPORT LibalgebraTargets FILE LibalgebraTargets.cmake NAMESPACE Libalgebra:: DESTINATION lib/cmake/Libalgebra ) - -configure_file(LibalgebraConfig.cmake.in LibalgebraConfig.cmake @ONLY) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfigVersion.cmake" - DESTINATION lib/cmake/Libalgebra - ) \ No newline at end of file diff --git a/LibalgebraConfig.cmake.in b/LibalgebraConfig.cmake.in index 4da74630..4cea19e0 100644 --- a/LibalgebraConfig.cmake.in +++ b/LibalgebraConfig.cmake.in @@ -1,6 +1,12 @@ include(CMakeFindDependencyMacro) +set(LIBALGEBRA_VERSION 1.0.0) + +@PACKAGE_INIT@ + find_dependency(Boost COMPONENTS thread REQUIRED) +set_and_check(LIBALGEBRA_INCLUDE_DIR "@CMAKE_INSTALL_INCLUDEDIR@") + -include("${CMAKE_CURRENT_BINARY_DIR}/LibalgebraTargets.cmake") \ No newline at end of file +check_required_components(Libalgebra) \ No newline at end of file From 67cff2e4edb073b77d36d946f3837b3707d2bc40 Mon Sep 17 00:00:00 2001 From: Sam Morley Date: Sat, 12 Jun 2021 17:38:30 +0100 Subject: [PATCH 3/9] Fixed dependency set --- LibalgebraConfig.cmake.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LibalgebraConfig.cmake.in b/LibalgebraConfig.cmake.in index 4cea19e0..cdcea6a0 100644 --- a/LibalgebraConfig.cmake.in +++ b/LibalgebraConfig.cmake.in @@ -4,7 +4,7 @@ set(LIBALGEBRA_VERSION 1.0.0) @PACKAGE_INIT@ -find_dependency(Boost COMPONENTS thread REQUIRED) +add_dependency(Boost COMPONENTS thread REQUIRED) set_and_check(LIBALGEBRA_INCLUDE_DIR "@CMAKE_INSTALL_INCLUDEDIR@") From eb873b72317cb324dad7f217b3f062ef9f8f7e60 Mon Sep 17 00:00:00 2001 From: Sam Morley Date: Sat, 12 Jun 2021 21:49:30 +0100 Subject: [PATCH 4/9] Updates --- CMakeLists.txt | 6 +++--- LibalgebraConfig.cmake.in | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05471d12..05d06de5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0) project(Libalgebra VERSION 1.0.0) - +include(GNUInstallDirs) set(CMAKE_CXX_STANDARD 98) @@ -11,7 +11,7 @@ set(CMAKE_CXX_STANDARD 98) find_package(Boost COMPONENTS thread) -add_library(Libalgebra INTERFACE) +add_library(Libalgebra INTERFACE ${CMAKE_CURRENT_LIST_DIR}) target_include_directories(Libalgebra INTERFACE @@ -22,7 +22,7 @@ add_library(Libalgebra::Libalgebra ALIAS Libalgebra) target_link_libraries(Libalgebra INTERFACE Boost::Boost) -include(GNUInstallDirs) + install(TARGETS Libalgebra EXPORT LibalgebraTargets INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} diff --git a/LibalgebraConfig.cmake.in b/LibalgebraConfig.cmake.in index cdcea6a0..07a60f00 100644 --- a/LibalgebraConfig.cmake.in +++ b/LibalgebraConfig.cmake.in @@ -4,9 +4,11 @@ set(LIBALGEBRA_VERSION 1.0.0) @PACKAGE_INIT@ -add_dependency(Boost COMPONENTS thread REQUIRED) +find_dependency(Boost COMPONENTS thread REQUIRED) set_and_check(LIBALGEBRA_INCLUDE_DIR "@CMAKE_INSTALL_INCLUDEDIR@") +include(${CMAKE_CURRENT_LIST_DIR}/LibalgebraTargets.cmake) + check_required_components(Libalgebra) \ No newline at end of file From d3c5303e36d46d9711c4d1da33492c37d7c038b0 Mon Sep 17 00:00:00 2001 From: Sam Morley Date: Sun, 13 Jun 2021 13:07:08 +0100 Subject: [PATCH 5/9] Updates --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05d06de5..05bfeadb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,7 @@ target_include_directories(Libalgebra add_library(Libalgebra::Libalgebra ALIAS Libalgebra) -target_link_libraries(Libalgebra INTERFACE Boost::Boost) +target_link_libraries(Libalgebra INTERFACE Boost) install(TARGETS Libalgebra From fd648dfeb7c4c97deea29a1b9aa23c67cfa9f9ac Mon Sep 17 00:00:00 2001 From: Sam Morley Date: Sun, 13 Jun 2021 13:21:55 +0100 Subject: [PATCH 6/9] Guard against installs when used as subproject --- CMakeLists.txt | 89 ++++++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 39 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05bfeadb..b7897609 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,15 @@ cmake_minimum_required(VERSION 3.0) +# I took this from CATCH2's (V2.0) CMakeList.txt because +# this seems to be close to our use case here. +# https://github.com/catchorg/Catch2/blob/v2.x/CMakeLists.txt +if(NOT DEFINED PROJECT_NAME) + set(NOT_SUBPROJECT ON) +else() + set(NOT_SUBPROJECT OFF) +endif() + + project(Libalgebra VERSION 1.0.0) @@ -10,52 +20,53 @@ set(CMAKE_CXX_STANDARD 98) find_package(Boost COMPONENTS thread) - add_library(Libalgebra INTERFACE ${CMAKE_CURRENT_LIST_DIR}) target_include_directories(Libalgebra INTERFACE - $ + $ + $ ) add_library(Libalgebra::Libalgebra ALIAS Libalgebra) target_link_libraries(Libalgebra INTERFACE Boost) - -install(TARGETS Libalgebra - EXPORT LibalgebraTargets - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - ) - -include(CMakePackageConfigHelpers) -set(LIBALGEBRA_CMAKE_CONFIG_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Libalgebra") - -message(STATUS "Writing cmake config file") -configure_package_config_file( - LibalgebraConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfig.cmake - INSTALL_DESTINATION ${LIBALGEBRA_CMAKE_CONFIG_DESTINATION} - PATH_VARS CMAKE_INSTALL_INCLUDEDIR -) - -message(STATUS "Writing cmake config version file") -write_basic_package_version_file( - LibalgebraConfigVersion.cmake - VERSION ${PACKAGE_VERSION} - COMPATIBILITY SameMajorVersion - ARCH_INDEPENDENT -) - -message(STATUS "Installing config files to ${LIBALGEBRA_CMAKE_CONFIG_DESTINATION}") -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfig.cmake - ${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfigVersion.cmake - DESTINATION ${LIBALGEBRA_CMAKE_CONFIG_DESTINATION} - ) - - -install(EXPORT LibalgebraTargets - FILE LibalgebraTargets.cmake - NAMESPACE Libalgebra:: - DESTINATION lib/cmake/Libalgebra - ) +if(NOT_SUBPROJECT) + install(TARGETS Libalgebra + EXPORT LibalgebraTargets + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ) + + include(CMakePackageConfigHelpers) + set(LIBALGEBRA_CMAKE_CONFIG_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/Libalgebra") + + message(STATUS "Writing cmake config file") + configure_package_config_file( + LibalgebraConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfig.cmake + INSTALL_DESTINATION ${LIBALGEBRA_CMAKE_CONFIG_DESTINATION} + PATH_VARS CMAKE_INSTALL_INCLUDEDIR + ) + + message(STATUS "Writing cmake config version file") + write_basic_package_version_file( + LibalgebraConfigVersion.cmake + VERSION ${PACKAGE_VERSION} + COMPATIBILITY SameMajorVersion + ARCH_INDEPENDENT + ) + + message(STATUS "Installing config files to ${LIBALGEBRA_CMAKE_CONFIG_DESTINATION}") + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/LibalgebraConfigVersion.cmake + DESTINATION ${LIBALGEBRA_CMAKE_CONFIG_DESTINATION} + ) + + + install(EXPORT LibalgebraTargets + FILE LibalgebraTargets.cmake + NAMESPACE Libalgebra:: + DESTINATION lib/cmake/Libalgebra + ) +endif() \ No newline at end of file From 770f4cb49af9ddba073e377452ea568bb1a0d9d6 Mon Sep 17 00:00:00 2001 From: Sam Morley Date: Sun, 13 Jun 2021 13:42:48 +0100 Subject: [PATCH 7/9] Changed include directories? --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b7897609..66610f32 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,11 +20,11 @@ set(CMAKE_CXX_STANDARD 98) find_package(Boost COMPONENTS thread) -add_library(Libalgebra INTERFACE ${CMAKE_CURRENT_LIST_DIR}) +add_library(Libalgebra INTERFACE) target_include_directories(Libalgebra INTERFACE - $ + $ $ ) From f9f811ad190786293fae5564ff5a7a1d0102d804 Mon Sep 17 00:00:00 2001 From: Sam Morley Date: Sun, 13 Jun 2021 13:43:45 +0100 Subject: [PATCH 8/9] Changed Boost namespace --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 66610f32..3e3b5411 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ target_include_directories(Libalgebra add_library(Libalgebra::Libalgebra ALIAS Libalgebra) -target_link_libraries(Libalgebra INTERFACE Boost) +target_link_libraries(Libalgebra INTERFACE Boost::Boost) if(NOT_SUBPROJECT) install(TARGETS Libalgebra From cfd01fb5e00514ff618a6059fe9cbf6d662690c6 Mon Sep 17 00:00:00 2001 From: Sam Morley Date: Sun, 13 Jun 2021 13:50:08 +0100 Subject: [PATCH 9/9] Fixed boost targets. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e3b5411..88fea615 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,7 @@ include(GNUInstallDirs) set(CMAKE_CXX_STANDARD 98) -find_package(Boost COMPONENTS thread) +find_package(Boost REQUIRED COMPONENTS thread) add_library(Libalgebra INTERFACE) @@ -30,7 +30,7 @@ target_include_directories(Libalgebra add_library(Libalgebra::Libalgebra ALIAS Libalgebra) -target_link_libraries(Libalgebra INTERFACE Boost::Boost) +target_link_libraries(Libalgebra INTERFACE Boost::boost Boost::thread) if(NOT_SUBPROJECT) install(TARGETS Libalgebra