diff --git a/CMakeLists.txt b/CMakeLists.txt index f430768..4a40abf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ project( LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 20) -file(WRITE ${CMAKE_BINARY_DIR}/version.txt ${PROJECT_VERSION}) +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/version.txt ${PROJECT_VERSION}) include(CMakePushCheckState) include(CheckCXXCompilerFlag) @@ -47,7 +47,8 @@ if(HAS_FULL_RELRO) endif() cmake_pop_check_state() -set(version_script_flags LINKER:--version-script=${CMAKE_SOURCE_DIR}/linker.map) +set(version_script_flags + LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.map) cmake_push_check_state() list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${version_script_flags}) check_cxx_source_compiles("int main(){}" HAS_VERSION_SCRIPT FAIL_REGEX @@ -59,7 +60,7 @@ option(USE_SIMD_FALLBACK # This is encouraged according to # https://valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.clientreq -include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/third_party/valgrind) +include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/valgrind) add_compile_options($<$:-Wno-invalid-offsetof>) @@ -106,19 +107,20 @@ add_library(${PROJECT_NAME}-object OBJECT ConflictSet.cpp) target_compile_options(${PROJECT_NAME}-object PRIVATE -fno-exceptions -fvisibility=hidden) target_include_directories(${PROJECT_NAME}-object - PRIVATE ${CMAKE_SOURCE_DIR}/include) + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) add_library(${PROJECT_NAME} SHARED $) set_target_properties( ${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY - "${CMAKE_BINARY_DIR}/radix_tree") + "${CMAKE_CURRENT_BINARY_DIR}/radix_tree") if(NOT CMAKE_BUILD_TYPE STREQUAL Debug) set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C) endif() if(HAS_VERSION_SCRIPT) - target_link_options(${PROJECT_NAME} PRIVATE - LINKER:--version-script=${CMAKE_SOURCE_DIR}/linker.map) + target_link_options( + ${PROJECT_NAME} PRIVATE + LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.map) endif() add_library(${PROJECT_NAME}-static STATIC @@ -131,7 +133,7 @@ if(APPLE) add_custom_command( TARGET ${PROJECT_NAME}-static PRE_LINK - COMMAND ${CMAKE_SOURCE_DIR}/privatize_symbols_macos.sh + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/privatize_symbols_macos.sh $) else() add_custom_command( @@ -139,21 +141,22 @@ else() POST_BUILD COMMAND ${CMAKE_OBJCOPY} - --keep-global-symbols=${CMAKE_SOURCE_DIR}/symbol-exports.txt + --keep-global-symbols=${CMAKE_CURRENT_SOURCE_DIR}/symbol-exports.txt $ || echo "Proceeding with all symbols global in static library") endif() -set(TEST_FLAGS -Wall -Wextra -Wunreachable-code -Wpedantic -UNDEBUG) +# disable tests if this is being used through e.g. FetchContent +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND BUILD_TESTING) -include(CTest) + set(TEST_FLAGS -Wall -Wextra -Wunreachable-code -Wpedantic -UNDEBUG) -if(BUILD_TESTING) + include(CTest) # corpus tests, which are tests curated by libfuzzer. The goal is to get broad # coverage with a small number of tests. - file(GLOB CORPUS_TESTS ${CMAKE_SOURCE_DIR}/corpus/*) + file(GLOB CORPUS_TESTS ${CMAKE_CURRENT_SOURCE_DIR}/corpus/*) # extra testing that relies on shared libraries, which aren't available with # wasm @@ -162,9 +165,11 @@ if(BUILD_TESTING) add_library(skip_list SHARED SkipList.cpp) target_compile_options(skip_list PRIVATE -fno-exceptions -fvisibility=hidden) - target_include_directories(skip_list PUBLIC ${CMAKE_SOURCE_DIR}/include) - set_target_properties(skip_list PROPERTIES LIBRARY_OUTPUT_DIRECTORY - "${CMAKE_BINARY_DIR}/skip_list") + target_include_directories(skip_list + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) + set_target_properties( + skip_list PROPERTIES LIBRARY_OUTPUT_DIRECTORY + "${CMAKE_CURRENT_BINARY_DIR}/skip_list") set_target_properties(skip_list PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) set_target_properties( skip_list PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION @@ -175,10 +180,11 @@ if(BUILD_TESTING) add_library(hash_table SHARED HashTable.cpp) target_compile_options(hash_table PRIVATE -fno-exceptions -fvisibility=hidden) - target_include_directories(hash_table PUBLIC ${CMAKE_SOURCE_DIR}/include) + target_include_directories(hash_table + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) set_target_properties( hash_table PROPERTIES LIBRARY_OUTPUT_DIRECTORY - "${CMAKE_BINARY_DIR}/hash_table") + "${CMAKE_CURRENT_BINARY_DIR}/hash_table") set_target_properties(hash_table PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) set_target_properties( hash_table PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION @@ -266,15 +272,19 @@ if(BUILD_TESTING) set_property( DIRECTORY APPEND - PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/test_conflict_set.py) + PROPERTY CMAKE_CONFIGURE_DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/test_conflict_set.py) execute_process( - COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test_conflict_set.py - list OUTPUT_VARIABLE SCRIPT_TESTS) + COMMAND ${Python3_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/test_conflict_set.py list + OUTPUT_VARIABLE SCRIPT_TESTS) foreach(TEST ${SCRIPT_TESTS}) add_test( NAME script_test_${TEST} - COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/test_conflict_set.py - test ${TEST} --build-dir ${CMAKE_BINARY_DIR}) + COMMAND + ${Python3_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/test_conflict_set.py test ${TEST} + --build-dir ${CMAKE_CURRENT_BINARY_DIR}) endforeach() endif() @@ -308,25 +318,26 @@ if(BUILD_TESTING) # symbol visibility tests if(NOT WASM AND NOT CMAKE_BUILD_TYPE STREQUAL Debug) if(APPLE) - set(symbol_exports ${CMAKE_SOURCE_DIR}/apple-symbol-exports.txt) - set(symbol_imports ${CMAKE_SOURCE_DIR}/apple-symbol-imports.txt) + set(symbol_exports ${CMAKE_CURRENT_SOURCE_DIR}/apple-symbol-exports.txt) + set(symbol_imports ${CMAKE_CURRENT_SOURCE_DIR}/apple-symbol-imports.txt) else() - set(symbol_exports ${CMAKE_SOURCE_DIR}/symbol-exports.txt) + set(symbol_exports ${CMAKE_CURRENT_SOURCE_DIR}/symbol-exports.txt) if(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) - set(symbol_imports ${CMAKE_SOURCE_DIR}/aarch64-symbol-imports.txt) + set(symbol_imports + ${CMAKE_CURRENT_SOURCE_DIR}/aarch64-symbol-imports.txt) else() - set(symbol_imports ${CMAKE_SOURCE_DIR}/symbol-imports.txt) + set(symbol_imports ${CMAKE_CURRENT_SOURCE_DIR}/symbol-imports.txt) endif() endif() add_test( NAME conflict_set_shared_symbols COMMAND - ${CMAKE_SOURCE_DIR}/test_symbols.sh $ - ${symbol_exports} ${symbol_imports}) + ${CMAKE_CURRENT_SOURCE_DIR}/test_symbols.sh + $ ${symbol_exports} ${symbol_imports}) add_test( NAME conflict_set_static_symbols COMMAND - ${CMAKE_SOURCE_DIR}/test_symbols.sh + ${CMAKE_CURRENT_SOURCE_DIR}/test_symbols.sh $ ${symbol_exports} ${symbol_imports}) endif() @@ -369,13 +380,13 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0) if(APPLE) find_program(PANDOC_EXE pandoc) if(PANDOC_EXE) - execute_process(COMMAND ${PANDOC_EXE} ${CMAKE_SOURCE_DIR}/README.md -o - ${CMAKE_BINARY_DIR}/README.txt) - set(CPACK_RESOURCE_FILE_README ${CMAKE_BINARY_DIR}/README.txt) + execute_process(COMMAND ${PANDOC_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/README.md + -o ${CMAKE_CURRENT_BINARY_DIR}/README.txt) + set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_BINARY_DIR}/README.txt) endif() - configure_file(${CMAKE_SOURCE_DIR}/LICENSE ${CMAKE_BINARY_DIR}/LICENSE.txt - COPYONLY) - set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_BINARY_DIR}/LICENSE.txt) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/LICENSE + ${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt COPYONLY) + set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt) endif() include(CPack)