From 72ca813b6b004eddae6c0e66073972a474ae6055 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Mon, 19 May 2025 13:39:17 -0600 Subject: [PATCH] CMake: Handle CMP0174 in Lagom CMake functions, and support CUSTOM_MAIN --- Meta/Lagom/CMakeLists.txt | 25 +++++++++++++++++++------ Meta/Lagom/Tools/CMakeLists.txt | 2 +- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index bad83836c84..5c36929d838 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -28,6 +28,12 @@ cmake_policy(SET CMP0058 NEW) # take effect in `check_linker_flag` checks. cmake_policy(SET CMP0056 NEW) +# Ensure that when single-value arguments are passed to `cmake_parse_arguments()` +# with no or empty string arguments, they are still defined. +if (POLICY CMP0174) + cmake_policy(SET CMP0174 NEW) +endif() + get_filename_component( SERENITY_PROJECT_ROOT "${PROJECT_SOURCE_DIR}/../.." ABSOLUTE CACHE @@ -239,12 +245,15 @@ function(lagom_lib target_name fs_name) endfunction() function(lagom_test source) - cmake_parse_arguments(LAGOM_TEST "" "NAME;WORKING_DIRECTORY" "LIBS" ${ARGN}) - if (NOT DEFINED LAGOM_TEST_NAME) + cmake_parse_arguments(PARSE_ARGV 1 LAGOM_TEST "" "CUSTOM_MAIN;NAME;WORKING_DIRECTORY" "LIBS") + if (NOT LAGOM_TEST_NAME) get_filename_component(LAGOM_TEST_NAME ${source} NAME_WE) endif() + if (NOT LAGOM_TEST_CUSTOM_MAIN) + set(LAGOM_TEST_CUSTOM_MAIN "$") + endif() add_executable(${LAGOM_TEST_NAME} ${source}) - target_link_libraries(${LAGOM_TEST_NAME} PRIVATE AK LibCore LibFileSystem LibTest LibTestMain ${LAGOM_TEST_LIBS}) + target_link_libraries(${LAGOM_TEST_NAME} PRIVATE AK LibCore LibFileSystem LibTest ${LAGOM_TEST_CUSTOM_MAIN} ${LAGOM_TEST_LIBS}) add_test( NAME ${LAGOM_TEST_NAME} COMMAND ${LAGOM_TEST_NAME} @@ -260,9 +269,13 @@ function(lagom_utility name) endfunction() function(serenity_test test_src sub_dir) - cmake_parse_arguments(PARSE_ARGV 2 SERENITY_TEST "MAIN_ALREADY_DEFINED" "CUSTOM_MAIN;NAME" "LIBS") - # FIXME: Pass MAIN_ALREADY_DEFINED and CUSTOM_MAIN to support tests that use them. - lagom_test(${test_src} LIBS ${SERENITY_TEST_LIBS} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} NAME ${SERENITY_TEST_NAME}) + cmake_parse_arguments(PARSE_ARGV 2 SERENITY_TEST "" "CUSTOM_MAIN;NAME" "LIBS") + lagom_test(${test_src} + LIBS ${SERENITY_TEST_LIBS} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + NAME ${SERENITY_TEST_NAME} + CUSTOM_MAIN ${SERENITY_TEST_CUSTOM_MAIN} + ) endfunction() function(serenity_bin name) diff --git a/Meta/Lagom/Tools/CMakeLists.txt b/Meta/Lagom/Tools/CMakeLists.txt index 9954844eda0..893d7fd61d6 100644 --- a/Meta/Lagom/Tools/CMakeLists.txt +++ b/Meta/Lagom/Tools/CMakeLists.txt @@ -4,7 +4,7 @@ function(lagom_tool tool) # alias for parity with exports add_executable(Lagom::${tool} ALIAS ${tool}) target_link_libraries(${tool} AK LibCoreMinimal LibFileSystem GenericClangPlugin ${LAGOM_TOOL_LIBS}) - if (NOT DEFINED LAGOM_TOOL_INSTALL) + if (NOT LAGOM_TOOL_INSTALL) set(LAGOM_TOOL_INSTALL ${INSTALL_LAGOM_TOOLS}) endif() if (DEFINED LAGOM_TOOL_INSTALL AND LAGOM_TOOL_INSTALL)