From aeba2ea07e14651b631a5bf0be8f5fc961c05d6f Mon Sep 17 00:00:00 2001 From: David Pikas Date: Fri, 11 Oct 2024 10:59:43 +0200 Subject: [PATCH 1/2] Add cmake option for toggling installation Installation may be unwanted if a project that includes rapidcheck uses cpack to create packages, for instance --- CMakeLists.txt | 31 +++++++++++++++++++------------ extras/boost/CMakeLists.txt | 14 +++++++++----- extras/boost_test/CMakeLists.txt | 6 ++++-- extras/catch/CMakeLists.txt | 14 +++++++++----- extras/doctest/CMakeLists.txt | 14 +++++++++----- extras/gmock/CMakeLists.txt | 14 +++++++++----- extras/gtest/CMakeLists.txt | 14 +++++++++----- 7 files changed, 68 insertions(+), 39 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d55fdc51..922a301e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ set(CMAKE_CXX_STANDARD 11) option(RC_ENABLE_TESTS "Build RapidCheck tests" OFF) option(RC_ENABLE_EXAMPLES "Build RapidCheck examples" OFF) option(RC_ENABLE_RTTI "Build RapidCheck with RTTI" ON) +option(RC_ENABLE_INSTALL "Install rapidcheck" ON) if(MSVC) # /bigobj - some object files become very large so we need this @@ -86,13 +87,15 @@ target_include_directories(rapidcheck PUBLIC $ # /include ) -include(GNUInstallDirs) -install(TARGETS rapidcheck EXPORT rapidcheckConfig - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # This is for Windows - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} -) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if(RC_ENABLE_INSTALL) + include(GNUInstallDirs) + install(TARGETS rapidcheck EXPORT rapidcheckConfig + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # This is for Windows + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() # On Windows under MinGW, random_device provides no entropy, # so it will always return the same value. @@ -120,8 +123,10 @@ endif() add_subdirectory(extras) # Install the export file specifying all the targets for RapidCheck -install(EXPORT rapidcheckConfig DESTINATION share/rapidcheck/cmake) -export(EXPORT rapidcheckConfig FILE rapidcheckConfig.cmake) +if(RC_ENABLE_INSTALL) + install(EXPORT rapidcheckConfig DESTINATION share/rapidcheck/cmake) + export(EXPORT rapidcheckConfig FILE rapidcheckConfig.cmake) +endif() set(PKG_CONFIG_REQUIRES) set(PKG_CONFIG_DESCRIPTION_SUMMARY "C++ framework for property based testing inspired by QuickCheck and other similar frameworks") @@ -136,6 +141,8 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" ) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig - ) +if(RC_ENABLE_INSTALL) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + ) +endif() diff --git a/extras/boost/CMakeLists.txt b/extras/boost/CMakeLists.txt index 87ce2dfc..4e3efe6a 100644 --- a/extras/boost/CMakeLists.txt +++ b/extras/boost/CMakeLists.txt @@ -9,8 +9,10 @@ target_include_directories(rapidcheck_boost INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. -install(TARGETS rapidcheck_boost EXPORT rapidcheckConfig) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if(RC_ENABLE_INSTALL) + install(TARGETS rapidcheck_boost EXPORT rapidcheckConfig) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() if (RC_ENABLE_TESTS) add_subdirectory(test) @@ -29,6 +31,8 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" ) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig - ) +if(RC_ENABLE_INSTALL) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + ) +endif() diff --git a/extras/boost_test/CMakeLists.txt b/extras/boost_test/CMakeLists.txt index b17a5e4d..a4a0b925 100644 --- a/extras/boost_test/CMakeLists.txt +++ b/extras/boost_test/CMakeLists.txt @@ -9,8 +9,10 @@ target_include_directories(rapidcheck_boost_test INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. -install(TARGETS rapidcheck_boost_test EXPORT rapidcheckConfig) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if(RC_ENABLE_INSTALL) + install(TARGETS rapidcheck_boost_test EXPORT rapidcheckConfig) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() set(PKG_CONFIG_REQUIRES "rapidcheck") set(PKG_CONFIG_DESCRIPTION_SUMMARY "boost_test headers for rapidcheck") diff --git a/extras/catch/CMakeLists.txt b/extras/catch/CMakeLists.txt index 35fb3010..ba394edf 100644 --- a/extras/catch/CMakeLists.txt +++ b/extras/catch/CMakeLists.txt @@ -9,8 +9,10 @@ target_include_directories(rapidcheck_catch INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. -install(TARGETS rapidcheck_catch EXPORT rapidcheckConfig) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if(RC_ENABLE_INSTALL) + install(TARGETS rapidcheck_catch EXPORT rapidcheckConfig) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() set(PKG_CONFIG_REQUIRES "rapidcheck") set(PKG_CONFIG_DESCRIPTION_SUMMARY "catch headers for rapidcheck") @@ -25,6 +27,8 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" ) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig - ) +if(RC_ENABLE_INSTALL) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + ) +endif() diff --git a/extras/doctest/CMakeLists.txt b/extras/doctest/CMakeLists.txt index d9170c76..a9c61f85 100644 --- a/extras/doctest/CMakeLists.txt +++ b/extras/doctest/CMakeLists.txt @@ -9,8 +9,10 @@ target_include_directories(rapidcheck_doctest INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. -install(TARGETS rapidcheck_doctest EXPORT rapidcheckConfig) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if(RC_ENABLE_INSTALL) + install(TARGETS rapidcheck_doctest EXPORT rapidcheckConfig) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() set(PKG_CONFIG_REQUIRES "rapidcheck") set(PKG_CONFIG_DESCRIPTION_SUMMARY "doctest headers for rapidcheck") @@ -25,6 +27,8 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" ) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig - ) +if(RC_ENABLE_INSTALL) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + ) +endif() diff --git a/extras/gmock/CMakeLists.txt b/extras/gmock/CMakeLists.txt index fd709b2d..66c51fad 100644 --- a/extras/gmock/CMakeLists.txt +++ b/extras/gmock/CMakeLists.txt @@ -9,8 +9,10 @@ target_include_directories(rapidcheck_gmock INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. -install(TARGETS rapidcheck_gmock EXPORT rapidcheckConfig) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if(RC_ENABLE_INSTALL) + install(TARGETS rapidcheck_gmock EXPORT rapidcheckConfig) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() if (RC_ENABLE_TESTS) add_subdirectory(test) @@ -29,6 +31,8 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" ) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig - ) +if(RC_ENABLE_INSTALL) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + ) +endif() diff --git a/extras/gtest/CMakeLists.txt b/extras/gtest/CMakeLists.txt index ae36648a..4fa145c5 100644 --- a/extras/gtest/CMakeLists.txt +++ b/extras/gtest/CMakeLists.txt @@ -9,8 +9,10 @@ target_include_directories(rapidcheck_gtest INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. -install(TARGETS rapidcheck_gtest EXPORT rapidcheckConfig) -install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +if(RC_ENABLE_INSTALL) + install(TARGETS rapidcheck_gtest EXPORT rapidcheckConfig) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() set(PKG_CONFIG_REQUIRES "rapidcheck") set(PKG_CONFIG_DESCRIPTION_SUMMARY "gtest headers for rapidcheck") @@ -25,6 +27,8 @@ configure_file( "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" ) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig - ) +if(RC_ENABLE_INSTALL) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + ) +endif() From ac72dfa9585b638730a935489ac906306a600b63 Mon Sep 17 00:00:00 2001 From: David Pikas Date: Fri, 11 Oct 2024 11:54:12 +0200 Subject: [PATCH 2/2] Add COMPONENT to cmake install --- CMakeLists.txt | 6 ++++-- extras/boost/CMakeLists.txt | 5 +++-- extras/boost_test/CMakeLists.txt | 5 +++-- extras/catch/CMakeLists.txt | 5 +++-- extras/doctest/CMakeLists.txt | 5 +++-- extras/gmock/CMakeLists.txt | 5 +++-- extras/gtest/CMakeLists.txt | 5 +++-- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 922a301e..192ecb77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -93,8 +93,9 @@ if(RC_ENABLE_INSTALL) RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # This is for Windows ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + COMPONENT ${PROJECT_NAME} ) - install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${PROJECT_NAME}) endif() # On Windows under MinGW, random_device provides no entropy, @@ -124,7 +125,7 @@ add_subdirectory(extras) # Install the export file specifying all the targets for RapidCheck if(RC_ENABLE_INSTALL) - install(EXPORT rapidcheckConfig DESTINATION share/rapidcheck/cmake) + install(EXPORT rapidcheckConfig DESTINATION share/rapidcheck/cmake COMPONENT ${PROJECT_NAME}) export(EXPORT rapidcheckConfig FILE rapidcheckConfig.cmake) endif() @@ -144,5 +145,6 @@ configure_file( if(RC_ENABLE_INSTALL) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + COMPONENT ${PROJECT_NAME} ) endif() diff --git a/extras/boost/CMakeLists.txt b/extras/boost/CMakeLists.txt index 4e3efe6a..ef0423ce 100644 --- a/extras/boost/CMakeLists.txt +++ b/extras/boost/CMakeLists.txt @@ -10,8 +10,8 @@ target_include_directories(rapidcheck_boost INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. if(RC_ENABLE_INSTALL) - install(TARGETS rapidcheck_boost EXPORT rapidcheckConfig) - install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(TARGETS rapidcheck_boost EXPORT rapidcheckConfig COMPONENT ${PROJECT_NAME}) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${PROJECT_NAME}) endif() if (RC_ENABLE_TESTS) @@ -34,5 +34,6 @@ configure_file( if(RC_ENABLE_INSTALL) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + COMPONENT ${PROJECT_NAME} ) endif() diff --git a/extras/boost_test/CMakeLists.txt b/extras/boost_test/CMakeLists.txt index a4a0b925..b3e5a51a 100644 --- a/extras/boost_test/CMakeLists.txt +++ b/extras/boost_test/CMakeLists.txt @@ -10,8 +10,8 @@ target_include_directories(rapidcheck_boost_test INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. if(RC_ENABLE_INSTALL) - install(TARGETS rapidcheck_boost_test EXPORT rapidcheckConfig) - install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(TARGETS rapidcheck_boost_test EXPORT rapidcheckConfig COMPONENT ${PROJECT_NAME}) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${PROJECT_NAME}) endif() set(PKG_CONFIG_REQUIRES "rapidcheck") @@ -29,4 +29,5 @@ configure_file( install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + COMPONENT ${PROJECT_NAME} ) diff --git a/extras/catch/CMakeLists.txt b/extras/catch/CMakeLists.txt index ba394edf..31a3ef99 100644 --- a/extras/catch/CMakeLists.txt +++ b/extras/catch/CMakeLists.txt @@ -10,8 +10,8 @@ target_include_directories(rapidcheck_catch INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. if(RC_ENABLE_INSTALL) - install(TARGETS rapidcheck_catch EXPORT rapidcheckConfig) - install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(TARGETS rapidcheck_catch EXPORT rapidcheckConfig COMPONENT ${PROJECT_NAME}) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${PROJECT_NAME}) endif() set(PKG_CONFIG_REQUIRES "rapidcheck") @@ -30,5 +30,6 @@ configure_file( if(RC_ENABLE_INSTALL) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + COMPONENT ${PROJECT_NAME} ) endif() diff --git a/extras/doctest/CMakeLists.txt b/extras/doctest/CMakeLists.txt index a9c61f85..5d3832fd 100644 --- a/extras/doctest/CMakeLists.txt +++ b/extras/doctest/CMakeLists.txt @@ -10,8 +10,8 @@ target_include_directories(rapidcheck_doctest INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. if(RC_ENABLE_INSTALL) - install(TARGETS rapidcheck_doctest EXPORT rapidcheckConfig) - install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(TARGETS rapidcheck_doctest EXPORT rapidcheckConfig COMPONENT ${PROJECT_NAME}) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${PROJECT_NAME}) endif() set(PKG_CONFIG_REQUIRES "rapidcheck") @@ -30,5 +30,6 @@ configure_file( if(RC_ENABLE_INSTALL) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + COMPONENT ${PROJECT_NAME} ) endif() diff --git a/extras/gmock/CMakeLists.txt b/extras/gmock/CMakeLists.txt index 66c51fad..9ca96aa6 100644 --- a/extras/gmock/CMakeLists.txt +++ b/extras/gmock/CMakeLists.txt @@ -10,8 +10,8 @@ target_include_directories(rapidcheck_gmock INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. if(RC_ENABLE_INSTALL) - install(TARGETS rapidcheck_gmock EXPORT rapidcheckConfig) - install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(TARGETS rapidcheck_gmock EXPORT rapidcheckConfig COMPONENT ${PROJECT_NAME}) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${PROJECT_NAME}) endif() if (RC_ENABLE_TESTS) @@ -34,5 +34,6 @@ configure_file( if(RC_ENABLE_INSTALL) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + COMPONENT ${PROJECT_NAME} ) endif() diff --git a/extras/gtest/CMakeLists.txt b/extras/gtest/CMakeLists.txt index 4fa145c5..79057e51 100644 --- a/extras/gtest/CMakeLists.txt +++ b/extras/gtest/CMakeLists.txt @@ -10,8 +10,8 @@ target_include_directories(rapidcheck_gtest INTERFACE # An INTERFACE library does not need to install anything but its headers # and information on its targets. if(RC_ENABLE_INSTALL) - install(TARGETS rapidcheck_gtest EXPORT rapidcheckConfig) - install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(TARGETS rapidcheck_gtest EXPORT rapidcheckConfig COMPONENT ${PROJECT_NAME}) + install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT ${PROJECT_NAME}) endif() set(PKG_CONFIG_REQUIRES "rapidcheck") @@ -30,5 +30,6 @@ configure_file( if(RC_ENABLE_INSTALL) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + COMPONENT ${PROJECT_NAME} ) endif()