From 4090c371dd50bbfbbe1c1b1f2a59569ad41713b0 Mon Sep 17 00:00:00 2001 From: "Maarten L. Hekkelman" Date: Wed, 29 Nov 2023 16:20:51 +0100 Subject: [PATCH] update makefile to use FetchContent --- CMakeLists.txt | 80 +++++++++++++++++++++---------------- cmake/AddGitSubmodule.cmake | 27 ------------- cmake/FindFilesystem.cmake | 74 ---------------------------------- src/main.hpp | 2 +- 4 files changed, 47 insertions(+), 136 deletions(-) delete mode 100644 cmake/AddGitSubmodule.cmake delete mode 100644 cmake/FindFilesystem.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index c4085ad..356b903 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,11 +34,9 @@ include(CheckFunctionExists) include(CheckIncludeFiles) include(CheckLibraryExists) include(CMakePackageConfigHelpers) -include(FindFilesystem) -include(FindPkgConfig) include(GenerateExportHeader) -include(AddGitSubmodule) include(CTest) +include(FetchContent) set(CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD 17) @@ -52,43 +50,61 @@ elseif(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") endif() -if(NOT "$ENV{CCP4}" STREQUAL "") - set(CCP4 $ENV{CCP4}) - list(PREPEND CMAKE_MODULE_PATH "${CCP4}/Lib") - list(APPEND CMAKE_PREFIX_PATH ${CCP4}) - - if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_PREFIX_PATH ${CCP4}) +if(WIN32) + if(${CMAKE_SYSTEM_VERSION} GREATER_EQUAL 10) # Windows 10 + add_definitions(-D _WIN32_WINNT=0x0A00) + elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.3) # Windows 8.1 + add_definitions(-D _WIN32_WINNT=0x0603) + elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.2) # Windows 8 + add_definitions(-D _WIN32_WINNT=0x0602) + elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.1) # Windows 7 + add_definitions(-D _WIN32_WINNT=0x0601) + elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.0) # Windows Vista + add_definitions(-D _WIN32_WINNT=0x0600) + else() # Windows XP (5.1) + add_definitions(-D _WIN32_WINNT=0x0501) endif() + + add_definitions(-DNOMINMAX) + + # We do not want to write an export file for all our symbols... + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() if(MSVC) # make msvc standards compliant... - add_compile_options(/permissive-) - - macro(get_WIN32_WINNT version) - if(WIN32 AND CMAKE_SYSTEM_VERSION) - set(ver ${CMAKE_SYSTEM_VERSION}) - string(REPLACE "." "" ver ${ver}) - string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver}) - - set(${version} "0x${ver}") - endif() - endmacro() - - get_WIN32_WINNT(ver) - add_definitions(-D_WIN32_WINNT=${ver}) + add_compile_options(/permissive- /bigobj) + add_link_options(/NODEFAULTLIB:library) endif() # Create a revision file, containing the current git version info include(VersionString) write_version_header("${PROJECT_SOURCE_DIR}/src/") -find_package(Filesystem REQUIRED) -find_package(zeep 6.0.8 REQUIRED) -find_package(cifpp 5.1.2 REQUIRED) -find_package(libmcfp REQUIRED) -find_package(libpqxx 7.8 REQUIRED) +find_package(zeep 6.0.9 QUIET) +if (NOT zeep_FOUND) + FetchContent_Declare(zeep GIT_REPOSITORY https://github.com/mhekkel/libzeep.git GIT_TAG v6.0.9) + FetchContent_MakeAvailable(zeep) +endif() + +find_package(cifpp 6 QUIET) +if (NOT cifpp_FOUND) + FetchContent_Declare(cifpp GIT_REPOSITORY https://github.com/PDB-REDO/libcifpp.git GIT_TAG 2692f2c) + FetchContent_MakeAvailable(cifpp) +endif() + +find_package(libmcfp 1.2.4 QUIET) +if (NOT libmcfp_FOUND) + FetchContent_Declare(libmcfp GIT_REPOSITORY https://github.com/mhekkel/libcifpp.git GIT_TAG v1.2.4) + FetchContent_MakeAvailable(libmcfp) +endif() + +find_package(libpqxx 7.8.0 QUIET) +if (NOT libpqxx_FOUND) + FetchContent_Declare(libpqxx GIT_REPOSITORY https://github.com/jtv/libpqxx GIT_TAG 7.8.0) + FetchContent_MakeAvailable(libpqxx) +endif() + find_package(OpenSSL REQUIRED) find_program(YARN yarn REQUIRED) @@ -140,10 +156,6 @@ add_executable(alphafill ${PROJECT_SOURCE_DIR}/src/https-client.cpp ) -target_include_directories(alphafill PRIVATE - ${PROJECT_SOURCE_DIR}/include - ${CMAKE_BINARY_DIR}) - target_compile_definitions(alphafill PUBLIC HAVE_DIRENT_H=${HAVE_DIRENT_H} HAVE_FCNTL_H=${HAVE_FCNTL_H} @@ -154,7 +166,7 @@ target_compile_definitions(alphafill PUBLIC add_dependencies(alphafill webpack) -target_link_libraries(alphafill libmcfp::libmcfp cifpp::cifpp zeep::zeep libpqxx::pqxx OpenSSL::SSL OpenSSL::Crypto std::filesystem) +target_link_libraries(alphafill libmcfp::libmcfp cifpp::cifpp zeep::zeep libpqxx::pqxx OpenSSL::SSL OpenSSL::Crypto) # Optionally use mrc to create resources find_package(Mrc QUIET) diff --git a/cmake/AddGitSubmodule.cmake b/cmake/AddGitSubmodule.cmake deleted file mode 100644 index b5eec83..0000000 --- a/cmake/AddGitSubmodule.cmake +++ /dev/null @@ -1,27 +0,0 @@ -cmake_minimum_required(VERSION 3.16..3.19) - -function(add_git_submodule dir) - # add a Git submodule directory to CMake, assuming the - # Git submodule directory is a CMake project. - # - # Usage: in CMakeLists.txt - # - # include(AddGitSubmodule.cmake) - # add_git_submodule(mysubmod_dir) - find_package(Git REQUIRED) - - if(NOT EXISTS ${dir}/CMakeLists.txt) - if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19) - execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive -- ${dir} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMAND_ERROR_IS_FATAL ANY) - else() - execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive -- ${dir} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) - endif() - endif() - - set(ENABLE_TESTING OFF) - - add_subdirectory(${dir} ${ARGV}) -endfunction(add_git_submodule) \ No newline at end of file diff --git a/cmake/FindFilesystem.cmake b/cmake/FindFilesystem.cmake deleted file mode 100644 index 21c98f2..0000000 --- a/cmake/FindFilesystem.cmake +++ /dev/null @@ -1,74 +0,0 @@ -# Simplistic reimplementation of https://github.com/vector-of-bool/CMakeCM/blob/master/modules/FindFilesystem.cmake - -if(TARGET std::filesystem) - return() -endif() - -cmake_minimum_required(VERSION 3.10) - -include(CMakePushCheckState) -include(CheckIncludeFileCXX) -include(CheckCXXSourceCompiles) - -cmake_push_check_state() - -set(CMAKE_CXX_STANDARD 17) - -check_include_file_cxx("filesystem" _CXX_FILESYSTEM_HAVE_HEADER) -mark_as_advanced(_CXX_FILESYSTEM_HAVE_HEADER) - -set(code [[ -#include -#include - -int main() { - auto cwd = std::filesystem::current_path(); - return EXIT_SUCCESS; -} -]]) - -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS_EQUAL 8.4.0) - # >> https://stackoverflow.com/questions/63902528/program-crashes-when-filesystempath-is-destroyed - set(CXX_FILESYSTEM_NO_LINK_NEEDED 0) -else() - # Check a simple filesystem program without any linker flags - check_cxx_source_compiles("${code}" CXX_FILESYSTEM_NO_LINK_NEEDED) -endif() - -if(CXX_FILESYSTEM_NO_LINK_NEEDED) - set(_found 1) -else() - set(prev_libraries ${CMAKE_REQUIRED_LIBRARIES}) - # Add the libstdc++ flag - set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lstdc++fs) - check_cxx_source_compiles("${code}" CXX_FILESYSTEM_STDCPPFS_NEEDED) - set(_found ${CXX_FILESYSTEM_STDCPPFS_NEEDED}) - if(NOT CXX_FILESYSTEM_STDCPPFS_NEEDED) - # Try the libc++ flag - set(CMAKE_REQUIRED_LIBRARIES ${prev_libraries} -lc++fs) - check_cxx_source_compiles("${code}" CXX_FILESYSTEM_CPPFS_NEEDED) - set(_found ${CXX_FILESYSTEM_CPPFS_NEEDED}) - endif() -endif() - -if(_found) - add_library(std::filesystem INTERFACE IMPORTED) - set_property(TARGET std::filesystem APPEND PROPERTY INTERFACE_COMPILE_FEATURES cxx_std_17) - - if(CXX_FILESYSTEM_NO_LINK_NEEDED) - # Nothing to add... - elseif(CXX_FILESYSTEM_STDCPPFS_NEEDED) - set_target_properties(std::filesystem PROPERTIES IMPORTED_LIBNAME stdc++fs) - elseif(CXX_FILESYSTEM_CPPFS_NEEDED) - set_target_properties(std::filesystem PROPERTIES IMPORTED_LIBNAME c++fs) - endif() -endif() - -cmake_pop_check_state() - -set(Filesystem_FOUND ${_found} CACHE BOOL "TRUE if we can run a program using std::filesystem" FORCE) - -if(Filesystem_FIND_REQUIRED AND NOT Filesystem_FOUND) - message(FATAL_ERROR "Cannot run simple program using std::filesystem") -endif() - diff --git a/src/main.hpp b/src/main.hpp index f8a6869..4a507f8 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -26,7 +26,7 @@ #pragma once -#include +#include template mcfp::config &load_and_init_config(std::string_view usage, Options... options)