From 37c5c7d4b3f983e7527a3d9960f2d2ef1bb46085 Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Tue, 28 Jan 2025 15:22:36 -0400 Subject: [PATCH] Revise CMake utilities, folders, and tests Signed-off-by: Juan Cruz Viotti --- Makefile | 2 +- benchmark/CMakeLists.txt | 2 +- cmake/common/targets/executable.cmake | 9 ++++----- cmake/common/targets/googlebenchmark.cmake | 9 ++++----- cmake/common/targets/googletest.cmake | 3 +-- cmake/common/targets/library.cmake | 11 +++++------ src/core/json/CMakeLists.txt | 1 - src/core/jsonl/CMakeLists.txt | 1 - src/core/jsonpointer/CMakeLists.txt | 1 - src/core/jsonschema/CMakeLists.txt | 1 - src/core/regex/CMakeLists.txt | 3 +-- src/core/uri/CMakeLists.txt | 1 - src/core/yaml/CMakeLists.txt | 1 - src/extension/alterschema/CMakeLists.txt | 1 - test/alterschema/CMakeLists.txt | 1 - test/json/CMakeLists.txt | 2 -- test/jsonl/CMakeLists.txt | 1 - test/jsonpointer/CMakeLists.txt | 1 - test/jsonschema/CMakeLists.txt | 2 -- test/packaging/CMakeLists.txt | 8 ++++---- test/regex/CMakeLists.txt | 1 - test/uri/CMakeLists.txt | 1 - test/yaml/CMakeLists.txt | 1 - 23 files changed, 21 insertions(+), 43 deletions(-) diff --git a/Makefile b/Makefile index a6f177797..d447bd57a 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ lint: .always test: .always $(CMAKE) -E env UBSAN_OPTIONS=print_stacktrace=1 \ $(CTEST) --test-dir ./build --build-config $(PRESET) \ - --output-on-failure --progress --parallel + --output-on-failure --parallel benchmark: .always $(CMAKE) --build ./build --config $(PRESET) --target benchmark_all diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index b5b06f368..0c048c8b9 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -14,7 +14,7 @@ endif() if(BENCHMARK_SOURCES) sourcemeta_googlebenchmark(NAMESPACE sourcemeta PROJECT core - FOLDER "Core" SOURCES ${BENCHMARK_SOURCES}) + SOURCES ${BENCHMARK_SOURCES}) target_compile_definitions(sourcemeta_core_benchmark PRIVATE CURRENT_DIRECTORY="${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/cmake/common/targets/executable.cmake b/cmake/common/targets/executable.cmake index 8b00bb45c..4f5db98f8 100644 --- a/cmake/common/targets/executable.cmake +++ b/cmake/common/targets/executable.cmake @@ -1,6 +1,6 @@ function(sourcemeta_executable) cmake_parse_arguments(SOURCEMETA_EXECUTABLE "" - "NAMESPACE;PROJECT;NAME;FOLDER;VARIANT;OUTPUT" "SOURCES" ${ARGN}) + "NAMESPACE;PROJECT;NAME;VARIANT;OUTPUT" "SOURCES" ${ARGN}) if(NOT SOURCEMETA_EXECUTABLE_PROJECT) message(FATAL_ERROR "You must pass the project name using the PROJECT option") @@ -8,17 +8,16 @@ function(sourcemeta_executable) if(NOT SOURCEMETA_EXECUTABLE_NAME) message(FATAL_ERROR "You must pass the executable name using the NAME option") endif() - if(NOT SOURCEMETA_EXECUTABLE_FOLDER) - message(FATAL_ERROR "You must pass the folder name using the FOLDER option") - endif() if(NOT SOURCEMETA_EXECUTABLE_SOURCES) message(FATAL_ERROR "You must pass the sources list using the SOURCES option") endif() if(SOURCEMETA_EXECUTABLE_NAMESPACE) set(TARGET_NAME "${SOURCEMETA_EXECUTABLE_NAMESPACE}_${SOURCEMETA_EXECUTABLE_PROJECT}_${SOURCEMETA_EXECUTABLE_NAME}") + set(FOLDER_NAME "${SOURCEMETA_EXECUTABLE_NAMESPACE}/${SOURCEMETA_EXECUTABLE_PROJECT}/${SOURCEMETA_EXECUTABLE_NAME}") else() set(TARGET_NAME "${SOURCEMETA_EXECUTABLE_PROJECT}_${SOURCEMETA_EXECUTABLE_NAME}") + set(FOLDER_NAME "${SOURCEMETA_EXECUTABLE_PROJECT}/${SOURCEMETA_EXECUTABLE_NAME}") endif() if(SOURCEMETA_EXECUTABLE_VARIANT) @@ -31,5 +30,5 @@ function(sourcemeta_executable) add_executable("${TARGET_NAME}" ${SOURCEMETA_EXECUTABLE_SOURCES}) sourcemeta_add_default_options(PRIVATE ${TARGET_NAME}) - set_target_properties("${TARGET_NAME}" PROPERTIES FOLDER "${SOURCEMETA_EXECUTABLE_FOLDER}") + set_target_properties("${TARGET_NAME}" PROPERTIES FOLDER "${FOLDER_NAME}") endfunction() diff --git a/cmake/common/targets/googlebenchmark.cmake b/cmake/common/targets/googlebenchmark.cmake index 10c61f1e8..d911a93b8 100644 --- a/cmake/common/targets/googlebenchmark.cmake +++ b/cmake/common/targets/googlebenchmark.cmake @@ -1,26 +1,25 @@ function(sourcemeta_googlebenchmark) cmake_parse_arguments(SOURCEMETA_GOOGLEBENCHMARK "" - "NAMESPACE;PROJECT;FOLDER" "SOURCES" ${ARGN}) + "NAMESPACE;PROJECT" "SOURCES" ${ARGN}) if(NOT SOURCEMETA_GOOGLEBENCHMARK_PROJECT) message(FATAL_ERROR "You must pass the project name using the PROJECT option") endif() - if(NOT SOURCEMETA_GOOGLEBENCHMARK_FOLDER) - message(FATAL_ERROR "You must pass the folder name using the FOLDER option") - endif() if(NOT SOURCEMETA_GOOGLEBENCHMARK_SOURCES) message(FATAL_ERROR "You must pass the sources list using the SOURCES option") endif() if(SOURCEMETA_GOOGLEBENCHMARK_NAMESPACE) set(TARGET_NAME "${SOURCEMETA_GOOGLEBENCHMARK_NAMESPACE}_${SOURCEMETA_GOOGLEBENCHMARK_PROJECT}_benchmark") + set(FOLDER_NAME "${SOURCEMETA_GOOGLEBENCHMARK_NAMESPACE}/${SOURCEMETA_GOOGLEBENCHMARK_PROJECT}") else() set(TARGET_NAME "${SOURCEMETA_GOOGLEBENCHMARK_PROJECT}_benchmark") + set(FOLDER_NAME "${SOURCEMETA_GOOGLEBENCHMARK_PROJECT}") endif() add_executable("${TARGET_NAME}" ${SOURCEMETA_GOOGLEBENCHMARK_SOURCES}) sourcemeta_add_default_options(PRIVATE ${TARGET_NAME}) - set_target_properties("${TARGET_NAME}" PROPERTIES FOLDER "${SOURCEMETA_GOOGLEBENCHMARK_FOLDER}") + set_target_properties("${TARGET_NAME}" PROPERTIES FOLDER "${FOLDER_NAME}") target_link_libraries("${TARGET_NAME}" PRIVATE benchmark::benchmark) target_link_libraries("${TARGET_NAME}" PRIVATE benchmark::benchmark_main) endfunction() diff --git a/cmake/common/targets/googletest.cmake b/cmake/common/targets/googletest.cmake index 101b50630..176d2872b 100644 --- a/cmake/common/targets/googletest.cmake +++ b/cmake/common/targets/googletest.cmake @@ -1,6 +1,6 @@ function(sourcemeta_googletest) cmake_parse_arguments(SOURCEMETA_GOOGLETEST "" - "NAMESPACE;PROJECT;NAME;FOLDER;VARIANT" "SOURCES" ${ARGN}) + "NAMESPACE;PROJECT;NAME;VARIANT" "SOURCES" ${ARGN}) if(SOURCEMETA_GOOGLETEST_VARIANT) set(TARGET_VARIANT "${SOURCEMETA_GOOGLETEST_VARIANT}_unit") @@ -12,7 +12,6 @@ function(sourcemeta_googletest) NAMESPACE "${SOURCEMETA_GOOGLETEST_NAMESPACE}" PROJECT "${SOURCEMETA_GOOGLETEST_PROJECT}" NAME "${SOURCEMETA_GOOGLETEST_NAME}" - FOLDER "${SOURCEMETA_GOOGLETEST_FOLDER}" VARIANT "${TARGET_VARIANT}" SOURCES "${SOURCEMETA_GOOGLETEST_SOURCES}" OUTPUT TARGET_NAME) diff --git a/cmake/common/targets/library.cmake b/cmake/common/targets/library.cmake index f58a153d8..e2f2ebe60 100644 --- a/cmake/common/targets/library.cmake +++ b/cmake/common/targets/library.cmake @@ -1,6 +1,6 @@ function(sourcemeta_library) cmake_parse_arguments(SOURCEMETA_LIBRARY "" - "NAMESPACE;PROJECT;NAME;FOLDER;VARIANT" "PRIVATE_HEADERS;SOURCES" ${ARGN}) + "NAMESPACE;PROJECT;NAME;VARIANT" "PRIVATE_HEADERS;SOURCES" ${ARGN}) if(NOT SOURCEMETA_LIBRARY_PROJECT) message(FATAL_ERROR "You must pass the project name using the PROJECT option") @@ -8,9 +8,6 @@ function(sourcemeta_library) if(NOT SOURCEMETA_LIBRARY_NAME) message(FATAL_ERROR "You must pass the library name using the NAME option") endif() - if(NOT SOURCEMETA_LIBRARY_FOLDER) - message(FATAL_ERROR "You must pass the folder name using the FOLDER option") - endif() if(SOURCEMETA_LIBRARY_NAMESPACE) set(INCLUDE_PREFIX "include/${SOURCEMETA_LIBRARY_NAMESPACE}/${SOURCEMETA_LIBRARY_PROJECT}") @@ -42,9 +39,11 @@ function(sourcemeta_library) if(SOURCEMETA_LIBRARY_NAMESPACE) set(TARGET_NAME "${SOURCEMETA_LIBRARY_NAMESPACE}_${SOURCEMETA_LIBRARY_PROJECT}_${SOURCEMETA_LIBRARY_NAME}") set(ALIAS_NAME "${SOURCEMETA_LIBRARY_NAMESPACE}::${SOURCEMETA_LIBRARY_PROJECT}::${SOURCEMETA_LIBRARY_NAME}") + set(FOLDER_NAME "${SOURCEMETA_LIBRARY_NAMESPACE}/${SOURCEMETA_LIBRARY_PROJECT}/${SOURCEMETA_LIBRARY_NAME}") else() set(TARGET_NAME "${SOURCEMETA_LIBRARY_PROJECT}_${SOURCEMETA_LIBRARY_NAME}") set(ALIAS_NAME "${SOURCEMETA_LIBRARY_PROJECT}::${SOURCEMETA_LIBRARY_NAME}") + set(FOLDER_NAME "${SOURCEMETA_LIBRARY_PROJECT}/${SOURCEMETA_LIBRARY_NAME}") endif() if(SOURCEMETA_LIBRARY_VARIANT) @@ -92,7 +91,7 @@ function(sourcemeta_library) PUBLIC_HEADER "${PUBLIC_HEADER}" PRIVATE_HEADER "${ABSOLUTE_PRIVATE_HEADERS}" EXPORT_NAME "${export_name}" - FOLDER "${SOURCEMETA_LIBRARY_FOLDER}") + FOLDER "${FOLDER_NAME}") else() set_target_properties(${TARGET_NAME} PROPERTIES @@ -100,7 +99,7 @@ function(sourcemeta_library) PUBLIC_HEADER "${PUBLIC_HEADER}" PRIVATE_HEADER "${ABSOLUTE_PRIVATE_HEADERS}" EXPORT_NAME "${export_name}" - FOLDER "${SOURCEMETA_LIBRARY_FOLDER}") + FOLDER "${FOLDER_NAME}") endif() if(SOURCEMETA_LIBRARY_SOURCES) diff --git a/src/core/json/CMakeLists.txt b/src/core/json/CMakeLists.txt index ca9dd84d5..1d96e489c 100644 --- a/src/core/json/CMakeLists.txt +++ b/src/core/json/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME json - FOLDER "Core/JSON" PRIVATE_HEADERS array.h error.h object.h value.h hash.h SOURCES grammar.h parser.h stringify.h json.cc json_value.cc) diff --git a/src/core/jsonl/CMakeLists.txt b/src/core/jsonl/CMakeLists.txt index fc5273232..8ffb53c50 100644 --- a/src/core/jsonl/CMakeLists.txt +++ b/src/core/jsonl/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME jsonl - FOLDER "Core/JSONL" PRIVATE_HEADERS iterator.h SOURCES jsonl.cc iterator.cc grammar.h) diff --git a/src/core/jsonpointer/CMakeLists.txt b/src/core/jsonpointer/CMakeLists.txt index fef5a40e9..23a7e97de 100644 --- a/src/core/jsonpointer/CMakeLists.txt +++ b/src/core/jsonpointer/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME jsonpointer - FOLDER "Core/JSON Pointer" PRIVATE_HEADERS pointer.h position.h error.h token.h walker.h subpointer_walker.h proxy.h SOURCES jsonpointer.cc stringify.h parser.h grammar.h position.cc) diff --git a/src/core/jsonschema/CMakeLists.txt b/src/core/jsonschema/CMakeLists.txt index de550e7ce..228b279a9 100644 --- a/src/core/jsonschema/CMakeLists.txt +++ b/src/core/jsonschema/CMakeLists.txt @@ -3,7 +3,6 @@ set(OFFICIAL_RESOLVER_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/official_resolver.cc") include(./official_resolver.cmake) sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME jsonschema - FOLDER "Core/JSON Schema" PRIVATE_HEADERS bundle.h resolver.h walker.h frame.h error.h unevaluated.h keywords.h transform.h diff --git a/src/core/regex/CMakeLists.txt b/src/core/regex/CMakeLists.txt index ab19f9864..ef0e01f2d 100644 --- a/src/core/regex/CMakeLists.txt +++ b/src/core/regex/CMakeLists.txt @@ -1,5 +1,4 @@ -sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME regex - FOLDER "Core/Regex") +sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME regex) if(SOURCEMETA_CORE_INSTALL) sourcemeta_library_install(NAMESPACE sourcemeta PROJECT core NAME regex) diff --git a/src/core/uri/CMakeLists.txt b/src/core/uri/CMakeLists.txt index 8b70c8898..77a93aa35 100644 --- a/src/core/uri/CMakeLists.txt +++ b/src/core/uri/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME uri - FOLDER "Core/URI" PRIVATE_HEADERS error.h SOURCES uri.cc escaping.cc) diff --git a/src/core/yaml/CMakeLists.txt b/src/core/yaml/CMakeLists.txt index a6e8bc01f..7b6bd8028 100644 --- a/src/core/yaml/CMakeLists.txt +++ b/src/core/yaml/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME yaml - FOLDER "Core/YAML" PRIVATE_HEADERS error.h SOURCES yaml.cc) diff --git a/src/extension/alterschema/CMakeLists.txt b/src/extension/alterschema/CMakeLists.txt index 50549a2b9..9a45824a1 100644 --- a/src/extension/alterschema/CMakeLists.txt +++ b/src/extension/alterschema/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME alterschema - FOLDER "Core/AlterSchema" SOURCES alterschema.cc # Antipattern antipattern/const_with_type.h diff --git a/test/alterschema/CMakeLists.txt b/test/alterschema/CMakeLists.txt index 6fe17020f..279a23324 100644 --- a/test/alterschema/CMakeLists.txt +++ b/test/alterschema/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME alterschema - FOLDER "Core/AlterSchema" SOURCES alterschema_lint_2020_12_test.cc alterschema_lint_2019_09_test.cc diff --git a/test/json/CMakeLists.txt b/test/json/CMakeLists.txt index ee3966d0d..06971d263 100644 --- a/test/json/CMakeLists.txt +++ b/test/json/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME json - FOLDER "Core/JSON" SOURCES json_array_test.cc json_boolean_test.cc @@ -27,7 +26,6 @@ target_compile_definitions(sourcemeta_core_json_unit # JSON Test Suite # See https://github.com/nst/JSONTestSuite sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME jsontestsuite - FOLDER "Core/JSON" SOURCES jsontestsuite.cc) target_compile_definitions(sourcemeta_core_jsontestsuite_unit PRIVATE JSONTESTSUITE_PATH="${PROJECT_SOURCE_DIR}/vendor/jsontestsuite") diff --git a/test/jsonl/CMakeLists.txt b/test/jsonl/CMakeLists.txt index c1761f2b9..7f7184aa9 100644 --- a/test/jsonl/CMakeLists.txt +++ b/test/jsonl/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME jsonl - FOLDER "Core/JSONL" SOURCES jsonl_parse_test.cc jsonl_parse_error_test.cc) diff --git a/test/jsonpointer/CMakeLists.txt b/test/jsonpointer/CMakeLists.txt index df90f4c78..cef502b1e 100644 --- a/test/jsonpointer/CMakeLists.txt +++ b/test/jsonpointer/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME jsonpointer - FOLDER "Core/JSON Pointer" SOURCES jsonpointer_empty_pointer_test.cc jsonpointer_get_test.cc diff --git a/test/jsonschema/CMakeLists.txt b/test/jsonschema/CMakeLists.txt index 18315c895..dae21a720 100644 --- a/test/jsonschema/CMakeLists.txt +++ b/test/jsonschema/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME jsonschema - FOLDER "Core/JSON Schema" SOURCES jsonschema_test_utils.h jsonschema_identify_2020_12_test.cc @@ -103,7 +102,6 @@ target_compile_definitions(sourcemeta_core_jsonschema_unit # JSON Schema Referencing Suite # See https://github.com/python-jsonschema/referencing-suite sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME jsonschema_referencing_suite - FOLDER "Core/JSON Schema" SOURCES referencingsuite.cc) target_compile_definitions(sourcemeta_core_jsonschema_referencing_suite_unit PRIVATE REFERENCING_SUITE_PATH="${PROJECT_SOURCE_DIR}/vendor/referencing-suite/tests") diff --git a/test/packaging/CMakeLists.txt b/test/packaging/CMakeLists.txt index a0690238a..982ee8416 100644 --- a/test/packaging/CMakeLists.txt +++ b/test/packaging/CMakeLists.txt @@ -1,14 +1,14 @@ # TODO: Get install path from a variable? -add_test(NAME packaging.find_package_configure COMMAND +add_test(NAME ${PROJECT_NAME}.find_package_configure COMMAND "${CMAKE_COMMAND}" -S "${CMAKE_CURRENT_SOURCE_DIR}/find_package" -B "${CMAKE_CURRENT_BINARY_DIR}/find_package" "-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}" "-DCMAKE_PREFIX_PATH:PATH=${CMAKE_PREFIX_PATH};${PROJECT_SOURCE_DIR}/build/dist" "-DCMAKE_TOOLCHAIN_FILE:PATH=${CMAKE_TOOLCHAIN_FILE}") -add_test(NAME packaging.find_package_build COMMAND +add_test(NAME ${PROJECT_NAME}.find_package_build COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_CURRENT_BINARY_DIR}/find_package" --config "${CMAKE_BUILD_TYPE}") -set_tests_properties(packaging.find_package_build - PROPERTIES DEPENDS packaging.find_package_configure) +set_tests_properties(${PROJECT_NAME}.find_package_build + PROPERTIES DEPENDS ${PROJECT_NAME}.find_package_configure) diff --git a/test/regex/CMakeLists.txt b/test/regex/CMakeLists.txt index 142a33554..d6a233366 100644 --- a/test/regex/CMakeLists.txt +++ b/test/regex/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME regex - FOLDER "Core/Regex" SOURCES regex_matches_test.cc regex_to_regex_test.cc) target_link_libraries(sourcemeta_core_regex_unit diff --git a/test/uri/CMakeLists.txt b/test/uri/CMakeLists.txt index d9a989531..0118cac88 100644 --- a/test/uri/CMakeLists.txt +++ b/test/uri/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME uri - FOLDER "Core/URI" SOURCES uri_test.cc uri_fragment_test.cc diff --git a/test/yaml/CMakeLists.txt b/test/yaml/CMakeLists.txt index 7811e2343..fd7257bd3 100644 --- a/test/yaml/CMakeLists.txt +++ b/test/yaml/CMakeLists.txt @@ -1,5 +1,4 @@ sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME yaml - FOLDER "Core/YAML" SOURCES yaml_parse_test.cc)