Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revise CMake utilities, folders, and tests #1503

Merged
merged 1 commit into from
Jan 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion benchmark/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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}")
Expand Down
9 changes: 4 additions & 5 deletions cmake/common/targets/executable.cmake
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
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")
endif()
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)
Expand All @@ -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()
9 changes: 4 additions & 5 deletions cmake/common/targets/googlebenchmark.cmake
Original file line number Diff line number Diff line change
@@ -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()
3 changes: 1 addition & 2 deletions cmake/common/targets/googletest.cmake
Original file line number Diff line number Diff line change
@@ -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")
Expand All @@ -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)
Expand Down
11 changes: 5 additions & 6 deletions cmake/common/targets/library.cmake
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
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")
endif()
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}")
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -92,15 +91,15 @@ 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
OUTPUT_NAME ${TARGET_NAME}
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)
Expand Down
1 change: 0 additions & 1 deletion src/core/json/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)

Expand Down
1 change: 0 additions & 1 deletion src/core/jsonl/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)

Expand Down
1 change: 0 additions & 1 deletion src/core/jsonpointer/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
1 change: 0 additions & 1 deletion src/core/jsonschema/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 1 addition & 2 deletions src/core/regex/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
1 change: 0 additions & 1 deletion src/core/uri/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME uri
FOLDER "Core/URI"
PRIVATE_HEADERS error.h
SOURCES uri.cc escaping.cc)

Expand Down
1 change: 0 additions & 1 deletion src/core/yaml/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME yaml
FOLDER "Core/YAML"
PRIVATE_HEADERS error.h
SOURCES yaml.cc)

Expand Down
1 change: 0 additions & 1 deletion src/extension/alterschema/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
sourcemeta_library(NAMESPACE sourcemeta PROJECT core NAME alterschema
FOLDER "Core/AlterSchema"
SOURCES alterschema.cc
# Antipattern
antipattern/const_with_type.h
Expand Down
1 change: 0 additions & 1 deletion test/alterschema/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 0 additions & 2 deletions test/json/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME json
FOLDER "Core/JSON"
SOURCES
json_array_test.cc
json_boolean_test.cc
Expand Down Expand Up @@ -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")
Expand Down
1 change: 0 additions & 1 deletion test/jsonl/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
1 change: 0 additions & 1 deletion test/jsonpointer/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 0 additions & 2 deletions test/jsonschema/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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")
Expand Down
8 changes: 4 additions & 4 deletions test/packaging/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
1 change: 0 additions & 1 deletion test/regex/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 0 additions & 1 deletion test/uri/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME uri
FOLDER "Core/URI"
SOURCES
uri_test.cc
uri_fragment_test.cc
Expand Down
1 change: 0 additions & 1 deletion test/yaml/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
sourcemeta_googletest(NAMESPACE sourcemeta PROJECT core NAME yaml
FOLDER "Core/YAML"
SOURCES
yaml_parse_test.cc)

Expand Down