diff --git a/CMakeLists.txt b/CMakeLists.txt index 1704cd3..c678a27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,8 @@ cmake_minimum_required(VERSION 3.28) -project(ncrypto) +project(ncrypto VERSION 1.0.1) include(CTest) include(GNUInstallDirs) -include(FetchContent) include(cmake/ncrypto-flags.cmake) if (NOT CMAKE_BUILD_TYPE) @@ -11,29 +10,37 @@ if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) endif() -include(cmake/CPM.cmake) +if (NCRYPTO_SHARED_LIBS) + find_package(OpenSSL REQUIRED) +else() + include(FetchContent) + include(cmake/CPM.cmake) -CPMAddPackage( + CPMAddPackage( NAME boringssl VERSION 0.20250818.0 GITHUB_REPOSITORY google/boringssl GIT_TAG 0.20250818.0 OPTIONS "BUILD_SHARED_LIBS OFF" "BUILD_TESTING OFF" -) + ) +endif() + add_subdirectory(src) add_library(ncrypto::ncrypto ALIAS ncrypto) -include_directories(${boringssl_SOURCE_DIR}/include) - if (NCRYPTO_TESTING) - CPMAddPackage( + if (NCRYPTO_SHARED_LIBS) + find_package(GTest REQUIRED) + else() + CPMAddPackage( NAME GTest GITHUB_REPOSITORY google/googletest VERSION 1.15.2 OPTIONS "BUILD_GMOCK OFF" "INSTALL_GTEST OFF" - ) - # For Windows: Prevent overriding the parent project's compiler/linker settings - set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + ) + # For Windows: Prevent overriding the parent project's compiler/linker settings + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + endif() enable_testing() add_subdirectory(tests) endif() @@ -53,3 +60,15 @@ install( ARCHIVE COMPONENT ncrypto_development INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) + +# Generate pkg-config file +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/ncrypto.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/ncrypto.pc + @ONLY +) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/ncrypto.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig +) diff --git a/cmake/ncrypto-flags.cmake b/cmake/ncrypto-flags.cmake index 3023f0a..1d332bc 100644 --- a/cmake/ncrypto-flags.cmake +++ b/cmake/ncrypto-flags.cmake @@ -1,5 +1,6 @@ option(NCRYPTO_DEVELOPMENT_CHECKS "development checks (useful for debugging)" OFF) option(NCRYPTO_TESTING "Build tests" ON) +option(NCRYPTO_SHARED_LIBS "Build (and test) using shared library" OFF) option(NCRYPTO_BSSL_LIBDECREPIT_MISSING "enable if boringssl is built without libdecrepit" OFF) set(CMAKE_POSITION_INDEPENDENT_CODE ON) diff --git a/ncrypto.pc.in b/ncrypto.pc.in new file mode 100644 index 0000000..5178d55 --- /dev/null +++ b/ncrypto.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix} +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: ncrypto +Description: crypto functions for node:crypto +Version: @PROJECT_VERSION@ +Libs: -L${libdir} -lncrypto +Cflags: -I${includedir} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 87296cd..61779aa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,12 +1,15 @@ add_library(ncrypto ncrypto.cpp engine.cpp) -target_link_libraries(ncrypto PUBLIC ssl crypto) - -if (NCRYPTO_BSSL_LIBDECREPIT_MISSING) - target_compile_definitions(ncrypto PUBLIC NCRYPTO_BSSL_LIBDECREPIT_MISSING=1) +if (NCRYPTO_SHARED_LIBS) + target_link_libraries(ncrypto PUBLIC OpenSSL::SSL OpenSSL::Crypto) else() - target_link_libraries(ncrypto PUBLIC decrepit) -endif() + target_link_libraries(ncrypto PUBLIC ssl crypto) + if (NCRYPTO_BSSL_LIBDECREPIT_MISSING) + target_compile_definitions(ncrypto PUBLIC NCRYPTO_BSSL_LIBDECREPIT_MISSING=1) + else() + target_link_libraries(ncrypto PUBLIC decrepit) + endif() +endif() target_include_directories(ncrypto PUBLIC $