11include (CMakePackageConfigHelpers)
22
3+ # @param {string[]} REQUIRED_ARGS The list of arguments to check.
4+ # @param {string[]} ARG_KEYWORDS_MISSING_VALUES The list of arguments with missing values.
5+ function (require_argument_values REQUIRED_ARGS ARG_KEYWORDS_MISSING_VALUES)
6+ foreach (ARG IN LISTS REQUIRED_ARGS)
7+ if ("${ARG} " IN_LIST ARG_KEYWORDS_MISSING_VALUES)
8+ message (FATAL_ERROR "Missing values for argument: '${ARG} '" )
9+ endif ()
10+ endforeach ()
11+ endfunction ()
12+
313# @param {string[]} SOURCE_LIST The list of source files to check.
414# @param {bool} IS_HEADER_ONLY Returns TRUE if list only contains header files, FALSE otherwise.
515# @param {string} NON_HEADER_FILE Returns the name of the first, if any, non-header file.
616function (check_if_header_only SOURCE_LIST IS_HEADER_ONLY NON_HEADER_FILE)
7- set (_LOCAL_SOURCE_LIST "${${SOURCE_LIST} }" )
8- foreach (src_file IN LISTS _LOCAL_SOURCE_LIST )
9- if (NOT ${src_file } MATCHES ".*\\ .(h|hpp)" )
17+ set (LOCAL_SOURCE_LIST "${${SOURCE_LIST} }" )
18+ foreach (SRC_FILE IN LISTS LOCAL_SOURCE_LIST )
19+ if (NOT ${SRC_FILE } MATCHES ".*\\ .(h|hpp)" )
1020 set (${IS_HEADER_ONLY} FALSE PARENT_SCOPE)
11- set (${NON_HEADER_FILE} ${src_file } PARENT_SCOPE)
21+ set (${NON_HEADER_FILE} ${SRC_FILE } PARENT_SCOPE)
1222 return ()
1323 endif ()
1424 endforeach ()
@@ -25,55 +35,49 @@ endfunction()
2535# @param {string[]} [PRIVATE_SOURCES]
2636# @param {string[]} [PUBLIC_LINK_LIBRARIES]
2737# @param {string[]} [PRIVATE_LINK_LIBRARIES]
28- # @param {string[]} [BUILD_INCLUDE_DIR ="${PROJECT_SOURCE_DIR}/src"] The list of include paths for
29- # building the library and for external projects that builds `ystdlib` as a CMAKE subproject via
30- # the add_subdirectory() function.
38+ # @param {string[]} [BUILD_INCLUDE_DIRS ="${PROJECT_SOURCE_DIR}/src"] The list of include paths for
39+ # building the library and for external projects that builds `ystdlib` as a CMAKE subproject via the
40+ # add_subdirectory() function.
3141function (cpp_library)
32- set (oneValueArgs
42+ set (SINGLE_VALUE_ARGS
3343 NAME
3444 NAMESPACE
3545 )
36- set (multiValueArgs
46+ set (MULTI_VALUE_ARGS
3747 PUBLIC_HEADERS
3848 PRIVATE_SOURCES
3949 PUBLIC_LINK_LIBRARIES
4050 PRIVATE_LINK_LIBRARIES
41- BUILD_INCLUDE_DIR
51+ BUILD_INCLUDE_DIRS
4252 )
43- set (requireValueArgs
53+ set (REQUIRED_ARGS
4454 NAME
4555 NAMESPACE
4656 PUBLIC_HEADERS
47- BUILD_INCLUDE_DIR
4857 )
49- cmake_parse_arguments (arg "" "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
50- if (arg_KEYWORDS_MISSING_VALUES)
51- message (
52- FATAL_ERROR
53- "cpp_library missing required arguments: ${arg_KEYWORDS_MISSING_VALUES} "
54- )
55- endif ()
58+ cmake_parse_arguments (arg "" "${SINGLE_VALUE_ARGS} " "${MULTI_VALUE_ARGS} " ${ARGN} )
59+ require_argument_values(REQUIRED_ARGS arg_KEYWORDS_MISSING_VALUES)
5660
57- if (NOT DEFINED arg_BUILD_INCLUDE_DIR )
58- set (arg_BUILD_INCLUDE_DIR "${PROJECT_SOURCE_DIR} /src" )
61+ if (NOT DEFINED arg_BUILD_INCLUDE_DIRS )
62+ set (arg_BUILD_INCLUDE_DIRS "${PROJECT_SOURCE_DIR} /src" )
5963 endif ()
6064
61- set (_ALIAS_TARGET_NAME "${arg_NAMESPACE} ::${arg_NAME} " )
65+ set (ALIAS_TARGET_NAME "${arg_NAMESPACE} ::${arg_NAME} " )
6266
63- check_if_header_only(arg_PUBLIC_HEADERS _IS_VALID_INTERFACE _INVALID_HEADER_FILE )
64- if (NOT _IS_VALID_INTERFACE )
67+ check_if_header_only(arg_PUBLIC_HEADERS IS_VALID_INTERFACE INVALID_HEADER_FILE )
68+ if (NOT IS_VALID_INTERFACE )
6569 message (
6670 FATAL_ERROR
67- "Invalid interface header file ${_INVALID_HEADER_FILE } for ${_ALIAS_TARGET_NAME } ."
71+ "Invalid interface header file ${INVALID_HEADER_FILE } for ${ALIAS_TARGET_NAME } ."
6872 )
6973 endif ()
7074
71- check_if_header_only(arg_PRIVATE_SOURCES _IS_INTERFACE_LIB _)
72- if (_IS_INTERFACE_LIB )
75+ check_if_header_only(arg_PRIVATE_SOURCES IS_INTERFACE_LIB _)
76+ if (IS_INTERFACE_LIB )
7377 if (arg_PRIVATE_LINK_LIBRARIES)
7478 message (
7579 FATAL_ERROR
76- "`PRIVATE_LINK_LIBRARIES` disabled for header-only library ${_ALIAS_TARGET_NAME } ."
80+ "`PRIVATE_LINK_LIBRARIES` disabled for header-only library ${ALIAS_TARGET_NAME } ."
7781 )
7882 endif ()
7983 add_library (${arg_NAME} INTERFACE )
@@ -98,14 +102,14 @@ function(cpp_library)
98102 target_compile_features (${arg_NAME} PUBLIC cxx_std_20)
99103 endif ()
100104
101- add_library (${_ALIAS_TARGET_NAME } ALIAS ${arg_NAME} )
105+ add_library (${ALIAS_TARGET_NAME } ALIAS ${arg_NAME} )
102106
103107 target_sources (
104108 ${arg_NAME}
105109 PUBLIC
106110 FILE_SET HEADERS
107111 BASE_DIRS
108- "$<BUILD_INTERFACE:${arg_BUILD_INCLUDE_DIR } >"
112+ "$<BUILD_INTERFACE:${arg_BUILD_INCLUDE_DIRS } >"
109113 "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >"
110114 FILES ${arg_PUBLIC_HEADERS}
111115 )
@@ -120,45 +124,39 @@ endfunction()
120124# @param {string[]} [LINK_LIBRARIES]
121125# @param {string} [UNIFIED_TEST_TARGET] If set the tests are also added to this unified target.
122126function (catch2_tests)
123- set (oneValueArgs
127+ set (SINGLE_VALUE_ARGS
124128 NAME
125129 NAMESPACE
126130 UNIFIED_TEST_TARGET
127131 )
128- set (multiValueArgs
132+ set (MULTI_VALUE_ARGS
129133 SOURCES
130134 LINK_LIBRARIES
131135 )
132- set (requireValueArgs
136+ set (REQUIRED_ARGS
133137 NAME
134138 NAMESPACE
135139 SOURCES
136140 )
137- cmake_parse_arguments (arg "" "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
138- if (arg_KEYWORDS_MISSING_VALUES)
139- message (
140- FATAL_ERROR
141- "catch2_tests missing required arguments:
142- ${arg_KEYWORDS_MISSING_VALUES} "
143- )
144- endif ()
141+ cmake_parse_arguments (arg "" "${SINGLE_VALUE_ARGS} " "${MULTI_VALUE_ARGS} " ${ARGN} )
142+ require_argument_values(REQUIRED_ARGS arg_KEYWORDS_MISSING_VALUES)
145143
146- set (_ALIAS_TARGET "${arg_NAMESPACE} ::${arg_NAME} " )
147- set (_UNIT_TEST_TARGET "unit-test-${arg_NAME} " )
144+ set (ALIAS_TARGET "${arg_NAMESPACE} ::${arg_NAME} " )
145+ set (UNIT_TEST_TARGET "unit-test-${arg_NAME} " )
148146
149- add_executable (${_UNIT_TEST_TARGET } )
150- target_sources (${_UNIT_TEST_TARGET } PRIVATE ${arg_SOURCES} )
147+ add_executable (${UNIT_TEST_TARGET } )
148+ target_sources (${UNIT_TEST_TARGET } PRIVATE ${arg_SOURCES} )
151149 target_link_libraries (
152- ${_UNIT_TEST_TARGET }
150+ ${UNIT_TEST_TARGET }
153151 PRIVATE
154152 Catch2::Catch2WithMain
155- ${_ALIAS_TARGET }
153+ ${ALIAS_TARGET }
156154 ${arg_LINK_LIBRARIES}
157155 )
158- target_compile_features (${_UNIT_TEST_TARGET } PRIVATE cxx_std_20)
156+ target_compile_features (${UNIT_TEST_TARGET } PRIVATE cxx_std_20)
159157 set_property (
160158 TARGET
161- ${_UNIT_TEST_TARGET }
159+ ${UNIT_TEST_TARGET }
162160 PROPERTY
163161 RUNTIME_OUTPUT_DIRECTORY
164162 ${CMAKE_BINARY_DIR} /testbin
@@ -169,7 +167,7 @@ function(catch2_tests)
169167 target_link_libraries (
170168 ${arg_UNIFIED_TEST_TARGET}
171169 PRIVATE
172- ${_ALIAS_TARGET }
170+ ${ALIAS_TARGET }
173171 ${arg_LINK_LIBRARIES}
174172 )
175173 endif ()
@@ -183,29 +181,24 @@ endfunction()
183181# @param {string} NAMESPACE
184182# @param {string} [CONFIG_DEST_PATH] Destination to install generated config file
185183# (NAME-config.cmake).
186- # @param {string} [CONFIG_INPUT_PATH] Paht to read configure_package_config_file input file
184+ # @param {string} [CONFIG_INPUT_PATH] Path to read configure_package_config_file input file
187185# (NAME-config.cmake.in).
188- # @param {string} [CONFIG_OUTPUT_PATH] Paht to write configure_package_config_file output file
186+ # @param {string} [CONFIG_OUTPUT_PATH] Path to write configure_package_config_file output file
189187# (NAME-config.cmake).
190188function (install_library)
191- set (oneValueArgs
189+ set (SINGLE_VALUE_ARGS
192190 NAME
193191 NAMESPACE
194192 CONFIG_DEST_PATH
195193 CONFIG_INPUT_PATH
196194 CONFIG_OUTPUT_PATH
197195 )
198- set (requireValueArgs
196+ set (REQUIRED_ARGS
199197 NAME
200198 NAMESPACE
201199 )
202- cmake_parse_arguments (arg "" "${oneValueArgs} " "" ${ARGN} )
203- if (arg_KEYWORDS_MISSING_VALUES)
204- message (
205- FATAL_ERROR
206- "install_library missing required arguments: ${arg_KEYWORDS_MISSING_VALUES} "
207- )
208- endif ()
200+ cmake_parse_arguments (arg "" "${SINGLE_VALUE_ARGS} " "" ${ARGN} )
201+ require_argument_values(REQUIRED_ARGS arg_KEYWORDS_MISSING_VALUES)
209202
210203 if (NOT DEFINED arg_CONFIG_DEST_PATH)
211204 set (arg_CONFIG_DEST_PATH "${CMAKE_INSTALL_LIBDIR} /cmake/${arg_NAMESPACE} /libs" )
0 commit comments