From 158fba3920a81ddf6c3c1690f0111b8745f83b81 Mon Sep 17 00:00:00 2001 From: Olivier LDff Date: Mon, 16 Aug 2021 15:17:18 +0200 Subject: [PATCH 1/3] Use scoped PLATFORMFOLDERS_BUILD_SHARED_LIBS option instead of BUILD_SHARED_LIBS --- CMakeLists.txt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5056cc..08bff96 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,10 +2,14 @@ cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) project(platform_folders VERSION 4.1.0 LANGUAGES CXX) -# Since it's off, the library will be static by default -option(BUILD_SHARED_LIBS "Build shared instead of static." OFF) +# BUILD_SHARED_LIBS is off by default, the library will be static by default +option(PLATFORMFOLDERS_BUILD_SHARED_LIBS "Build platform_folders shared library" ${BUILD_SHARED_LIBS}) +set(PLATFORMFOLDERS_TYPE STATIC) +if(PLATFORMFOLDERS_BUILD_SHARED_LIBS) + set(PLATFORMFOLDERS_TYPE SHARED) +endif() -add_library(platform_folders +add_library(platform_folders ${PLATFORMFOLDERS_TYPE} sago/platform_folders.cpp ) From bb58d995fb8503077e37d7dac0d1ed59c31652ab Mon Sep 17 00:00:00 2001 From: Olivier LDff Date: Mon, 16 Aug 2021 15:19:13 +0200 Subject: [PATCH 2/3] Introduce option PLATFORMFOLDERS_ENABLE_INSTALL - Default behavior is maintained - When project in included from another one, disable is disabled by default. User can reenable install by setting -DPLATFORMFOLDERS_ENABLE_INSTALL=ON --- CMakeLists.txt | 92 ++++++++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 08bff96..7786e3a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,17 @@ # For target_compile_features cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) + +set(PLATFORMFOLDERS_MAIN_PROJECT OFF) +if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + set(PLATFORMFOLDERS_MAIN_PROJECT ON) +endif() + project(platform_folders VERSION 4.1.0 LANGUAGES CXX) # BUILD_SHARED_LIBS is off by default, the library will be static by default option(PLATFORMFOLDERS_BUILD_SHARED_LIBS "Build platform_folders shared library" ${BUILD_SHARED_LIBS}) +option(PLATFORMFOLDERS_ENABLE_INSTALL "Enable platform_folders INSTALL target" ${PLATFORMFOLDERS_MAIN_PROJECT}) + set(PLATFORMFOLDERS_TYPE STATIC) if(PLATFORMFOLDERS_BUILD_SHARED_LIBS) set(PLATFORMFOLDERS_TYPE SHARED) @@ -67,47 +75,49 @@ else() set(_PROJECT_INSTALL_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/platform_folders") endif() -# Gives "Make install" esque operations a location to install to... -# and creates a .cmake file to be exported -install(TARGETS platform_folders - EXPORT "platform_foldersConfig" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - # Tells it where to put the header files - PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/sago" -) - -# "The install(TARGETS) and install(EXPORT) commands work together to install a target and a file to help import it" -# Installs a cmake file which external projects can import. -install(EXPORT "platform_foldersConfig" - NAMESPACE sago:: - DESTINATION "${_PROJECT_INSTALL_CMAKE_DIR}" -) - -# "The export command is used to generate a file exporting targets from a project build tree" -# Creates an import file for external projects which are aware of the build tree. -# May be useful for cross-compiling -export(TARGETS platform_folders - FILE "platform_folders-exports.cmake" -) - -# For the config and configversion macros -include(CMakePackageConfigHelpers) - -# Creates the project's ConfigVersion.cmake file -# This allows for find_package() to use a version in the call -write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/platform_foldersConfigVersion.cmake" - # This'll require versioning in the project() call - VERSION ${CMAKE_PROJECT_VERSION} - # Just assuming Semver is followed - COMPATIBILITY SameMajorVersion -) - -# Install the ConfigVersion file, which is located in the build dir -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/platform_foldersConfigVersion.cmake" - DESTINATION "${_PROJECT_INSTALL_CMAKE_DIR}" -) +if(PLATFORMFOLDERS_ENABLE_INSTALL) + # Gives "Make install" esque operations a location to install to... + # and creates a .cmake file to be exported + install(TARGETS platform_folders + EXPORT "platform_foldersConfig" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + # Tells it where to put the header files + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/sago" + ) + + # "The install(TARGETS) and install(EXPORT) commands work together to install a target and a file to help import it" + # Installs a cmake file which external projects can import. + install(EXPORT "platform_foldersConfig" + NAMESPACE sago:: + DESTINATION "${_PROJECT_INSTALL_CMAKE_DIR}" + ) + + # "The export command is used to generate a file exporting targets from a project build tree" + # Creates an import file for external projects which are aware of the build tree. + # May be useful for cross-compiling + export(TARGETS platform_folders + FILE "platform_folders-exports.cmake" + ) + + # For the config and configversion macros + include(CMakePackageConfigHelpers) + + # Creates the project's ConfigVersion.cmake file + # This allows for find_package() to use a version in the call + write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/platform_foldersConfigVersion.cmake" + # This'll require versioning in the project() call + VERSION ${CMAKE_PROJECT_VERSION} + # Just assuming Semver is followed + COMPATIBILITY SameMajorVersion + ) + + # Install the ConfigVersion file, which is located in the build dir + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/platform_foldersConfigVersion.cmake" + DESTINATION "${_PROJECT_INSTALL_CMAKE_DIR}" + ) +endif() # A module for testing the library include(CTest) From 11340f6c2daedd63b5bf1f094ac4da31a935e197 Mon Sep 17 00:00:00 2001 From: Olivier LDff Date: Mon, 16 Aug 2021 15:19:46 +0200 Subject: [PATCH 3/3] Use scoped PLATFORMFOLDERS_BUILD_TESTING option instead of BUILD_TESTING PLATFORMFOLDERS_BUILD_TESTING is defaulted to ON if platfrom_folders is main project --- CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7786e3a..d5bee81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ project(platform_folders VERSION 4.1.0 LANGUAGES CXX) # BUILD_SHARED_LIBS is off by default, the library will be static by default option(PLATFORMFOLDERS_BUILD_SHARED_LIBS "Build platform_folders shared library" ${BUILD_SHARED_LIBS}) +option(PLATFORMFOLDERS_BUILD_TESTING "Build platform_folders tests" ${PLATFORMFOLDERS_MAIN_PROJECT}) option(PLATFORMFOLDERS_ENABLE_INSTALL "Enable platform_folders INSTALL target" ${PLATFORMFOLDERS_MAIN_PROJECT}) set(PLATFORMFOLDERS_TYPE STATIC) @@ -119,10 +120,8 @@ if(PLATFORMFOLDERS_ENABLE_INSTALL) ) endif() -# A module for testing the library -include(CTest) -# BUILD_TESTING is defined (default ON) in CTest -if(BUILD_TESTING) +if(PLATFORMFOLDERS_BUILD_TESTING) + enable_testing() add_subdirectory(test) add_executable(platform_folders_sample platform_folders.cpp) target_link_libraries(platform_folders_sample PRIVATE platform_folders)