Skip to content

Commit c971a53

Browse files
committed
Add custom generator expressions for tests with multiple conditional dependencies.
1 parent ab18508 commit c971a53

File tree

22 files changed

+241
-119
lines changed

22 files changed

+241
-119
lines changed

cmake/GeneratorExpressions.cmake

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
2+
#
3+
# CMake Generator Expressions Utility by Parra Studios
4+
# Expands generator expressions during configuration phase.
5+
#
6+
# Copyright (C) 2016 - 2020 Vicente Eduardo Ferrer Garcia <[email protected]>
7+
#
8+
# Licensed under the Apache License, Version 2.0 (the "License");
9+
# you may not use this file except in compliance with the License.
10+
# You may obtain a copy of the License at
11+
#
12+
# http://www.apache.org/licenses/LICENSE-2.0
13+
#
14+
# Unless required by applicable law or agreed to in writing, software
15+
# distributed under the License is distributed on an "AS IS" BASIS,
16+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17+
# See the License for the specific language governing permissions and
18+
# limitations under the License.
19+
#
20+
21+
# Usage:
22+
# cmake_expand_generator_expressions(EXPANSION
23+
# $<$<BOOL:${OPTION_BUILD_LOADERS_RB}>:rb_loader>
24+
# $<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
25+
# )
26+
#
27+
# Result will be stored in EXPANSION variable:
28+
# message(STATUS "${EXPANSION}")
29+
#
30+
# Note:
31+
# This macro is very slow when run on the first time,
32+
# but at least is something meanwhile this PR is not implemented:
33+
# https://gitlab.kitware.com/cmake/cmake/-/issues/19467
34+
35+
macro(cmake_expand_generator_expressions output)
36+
set(CMAKE_GENERATOR_EXPRESSION_LIST "${ARGN}")
37+
set(GENERATOR_EXPRESSION_TEMP_PATH "${CMAKE_CURRENT_BINARY_DIR}/cmake_expand_generator_expressions")
38+
string(REGEX REPLACE ";" " " CMAKE_GENERATOR_EXPRESSION_LIST "${CMAKE_GENERATOR_EXPRESSION_LIST}")
39+
string(REGEX REPLACE "\n" " " CMAKE_GENERATOR_EXPRESSION_LIST "${CMAKE_GENERATOR_EXPRESSION_LIST}")
40+
set(contents
41+
"file(GENERATE"
42+
" OUTPUT \"${GENERATOR_EXPRESSION_TEMP_PATH}/output.tmp\""
43+
" CONTENT \"${CMAKE_GENERATOR_EXPRESSION_LIST}\""
44+
")"
45+
)
46+
file(WRITE
47+
"${GENERATOR_EXPRESSION_TEMP_PATH}/CMakeLists.txt"
48+
${contents}
49+
)
50+
execute_process(COMMAND ${CMAKE_COMMAND} -Wno-dev ${GENERATOR_EXPRESSION_TEMP_PATH}
51+
WORKING_DIRECTORY ${GENERATOR_EXPRESSION_TEMP_PATH}
52+
OUTPUT_VARIABLE discard
53+
)
54+
file(READ
55+
"${GENERATOR_EXPRESSION_TEMP_PATH}/output.tmp"
56+
GENERATED_OUTPUT
57+
)
58+
# This is to avoid possible side effects, but I decided to remove it for caching purposes
59+
# file(REMOVE_RECURSE "${GENERATOR_EXPRESSION_TEMP_PATH}")
60+
string(REGEX REPLACE " " ";" GENERATED_OUTPUT "${GENERATED_OUTPUT}")
61+
set(${output} "${GENERATED_OUTPUT}")
62+
endmacro()

source/cli/metacallcli/CMakeLists.txt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -185,18 +185,21 @@ add_test(NAME ${target}
185185
# Define dependencies
186186
#
187187

188-
# TODO: Generator expressions do not work in add_dependencies
189-
# add_dependencies(${target}
190-
# $<$<BOOL:${OPTION_BUILD_LOADERS_NODE}>:node_loader>
191-
# $<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
192-
# $<$<BOOL:${OPTION_BUILD_LOADERS_RB}>:rb_loader>
193-
# $<$<BOOL:${OPTION_BUILD_LOADERS_CS}>:cs_loader>
194-
# $<$<BOOL:${OPTION_BUILD_LOADERS_JSM}>:jsm_loader>
195-
# $<$<BOOL:${OPTION_BUILD_LOADERS_JS}>:js_loader>
196-
# $<$<BOOL:${OPTION_BUILD_LOADERS_MOCK}>:mock_loader>
197-
# $<$<BOOL:${OPTION_BUILD_LOADERS_C}>:c_loader>
198-
# $<$<BOOL:${OPTION_BUILD_LOADERS_FILE}>:file_loader>
199-
# )
188+
include(GeneratorExpressions)
189+
190+
cmake_expand_generator_expressions(DEPENDENCIES
191+
$<$<BOOL:${OPTION_BUILD_LOADERS_NODE}>:node_loader>
192+
$<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
193+
$<$<BOOL:${OPTION_BUILD_LOADERS_RB}>:rb_loader>
194+
$<$<BOOL:${OPTION_BUILD_LOADERS_CS}>:cs_loader>
195+
$<$<BOOL:${OPTION_BUILD_LOADERS_JSM}>:jsm_loader>
196+
$<$<BOOL:${OPTION_BUILD_LOADERS_JS}>:js_loader>
197+
$<$<BOOL:${OPTION_BUILD_LOADERS_MOCK}>:mock_loader>
198+
$<$<BOOL:${OPTION_BUILD_LOADERS_C}>:c_loader>
199+
$<$<BOOL:${OPTION_BUILD_LOADERS_FILE}>:file_loader>
200+
)
201+
202+
add_dependencies(${target} ${DEPENDENCIES})
200203

201204
#
202205
# Define test labels

source/tests/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ add_subdirectory(metacall_node_inline_test)
133133
add_subdirectory(metacall_node_async_test)
134134
add_subdirectory(metacall_node_reentrant_test)
135135
add_subdirectory(metacall_node_port_test)
136-
#add_subdirectory(metacall_node_python_port_mock_test) # TODO
137-
#add_subdirectory(metacall_node_python_port_ruby_test) # TODO
136+
add_subdirectory(metacall_node_python_port_mock_test)
137+
add_subdirectory(metacall_node_python_port_ruby_test)
138138
add_subdirectory(metacall_distributable_test)
139139
add_subdirectory(metacall_cast_test)
140140
add_subdirectory(metacall_init_fini_test)

source/tests/metacall_cast_test/CMakeLists.txt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,13 @@ add_test(NAME ${target}
122122
# Define dependencies
123123
#
124124

125-
# TODO: Generator expressions do not work in add_dependencies
126-
# add_dependencies(${target}
127-
# $<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
128-
# )
125+
include(GeneratorExpressions)
126+
127+
cmake_expand_generator_expressions(DEPENDENCIES
128+
$<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
129+
)
130+
131+
add_dependencies(${target} ${DEPENDENCIES})
129132

130133
#
131134
# Define test properties

source/tests/metacall_clear_test/CMakeLists.txt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,13 @@ add_test(NAME ${target}
142142
# Define dependencies
143143
#
144144

145-
# TODO: Generator expressions do not work in add_dependencies
146-
# add_dependencies(${target}
147-
# $<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
148-
# )
145+
include(GeneratorExpressions)
146+
147+
cmake_expand_generator_expressions(DEPENDENCIES
148+
$<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
149+
)
150+
151+
add_dependencies(${target} ${DEPENDENCIES})
149152

150153
#
151154
# Define test properties

source/tests/metacall_distributable_test/CMakeLists.txt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -142,17 +142,20 @@ add_test(NAME ${target}
142142
# Define dependencies
143143
#
144144

145-
# TODO: Generator expressions do not work in add_dependencies
146-
# add_dependencies(${target}
147-
# $<$<BOOL:${OPTION_BUILD_LOADERS_NODE}>:node_loader>
148-
# $<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
149-
# $<$<BOOL:${OPTION_BUILD_LOADERS_RB}>:rb_loader>
150-
# $<$<BOOL:${OPTION_BUILD_LOADERS_CS}>:cs_loader>
151-
# $<$<BOOL:${OPTION_BUILD_LOADERS_JSM}>:jsm_loader>
152-
# $<$<BOOL:${OPTION_BUILD_LOADERS_JS}>:js_loader>
153-
# $<$<BOOL:${OPTION_BUILD_LOADERS_MOCK}>:mock_loader>
154-
# $<$<BOOL:${OPTION_BUILD_LOADERS_C}>:c_loader>
155-
# )
145+
include(GeneratorExpressions)
146+
147+
cmake_expand_generator_expressions(DEPENDENCIES
148+
$<$<BOOL:${OPTION_BUILD_LOADERS_NODE}>:node_loader>
149+
$<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
150+
$<$<BOOL:${OPTION_BUILD_LOADERS_RB}>:rb_loader>
151+
$<$<BOOL:${OPTION_BUILD_LOADERS_CS}>:cs_loader>
152+
$<$<BOOL:${OPTION_BUILD_LOADERS_JSM}>:jsm_loader>
153+
$<$<BOOL:${OPTION_BUILD_LOADERS_JS}>:js_loader>
154+
$<$<BOOL:${OPTION_BUILD_LOADERS_MOCK}>:mock_loader>
155+
$<$<BOOL:${OPTION_BUILD_LOADERS_C}>:c_loader>
156+
)
157+
158+
add_dependencies(${target} ${DEPENDENCIES})
156159

157160
#
158161
# Define test properties

source/tests/metacall_ducktype_test/CMakeLists.txt

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,15 @@ add_test(NAME ${target}
122122
# Define dependencies
123123
#
124124

125-
# TODO: Generator expressions do not work in add_dependencies
126-
# add_dependencies(${target}
127-
# $<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
128-
# $<$<BOOL:${OPTION_BUILD_LOADERS_RB}>:rb_loader>
129-
# $<$<BOOL:${OPTION_BUILD_LOADERS_JS}>:js_loader>
130-
# )
125+
include(GeneratorExpressions)
126+
127+
cmake_expand_generator_expressions(DEPENDENCIES
128+
$<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
129+
$<$<BOOL:${OPTION_BUILD_LOADERS_RB}>:rb_loader>
130+
$<$<BOOL:${OPTION_BUILD_LOADERS_JS}>:js_loader>
131+
)
132+
133+
add_dependencies(${target} ${DEPENDENCIES})
131134

132135
#
133136
# Define test properties

source/tests/metacall_duplicated_handle_test/CMakeLists.txt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,13 @@ add_test(NAME ${target}
122122
# Define dependencies
123123
#
124124

125-
# TODO: Generator expressions do not work in add_dependencies
126-
# add_dependencies(${target}
127-
# $<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
128-
# )
125+
include(GeneratorExpressions)
126+
127+
cmake_expand_generator_expressions(DEPENDENCIES
128+
$<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
129+
)
130+
131+
add_dependencies(${target} ${DEPENDENCIES})
129132

130133
#
131134
# Define test properties

source/tests/metacall_duplicated_symbols_test/CMakeLists.txt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,13 @@ add_test(NAME ${target}
122122
# Define dependencies
123123
#
124124

125-
# TODO: Generator expressions do not work in add_dependencies
126-
# add_dependencies(${target}
127-
# $<$<BOOL:${OPTION_BUILD_LOADERS_RB}>:rb_loader>
128-
# )
125+
include(GeneratorExpressions)
126+
127+
cmake_expand_generator_expressions(DEPENDENCIES
128+
$<$<BOOL:${OPTION_BUILD_LOADERS_RB}>:rb_loader>
129+
)
130+
131+
add_dependencies(${target} ${DEPENDENCIES})
129132

130133
#
131134
# Define test properties

source/tests/metacall_handle_export_test/CMakeLists.txt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,14 @@ add_test(NAME ${target}
142142
# Define dependencies
143143
#
144144

145-
# TODO: Generator expressions do not work in add_dependencies
146-
# add_dependencies(${target}
147-
# $<$<BOOL:${OPTION_BUILD_LOADERS_NODE}>:node_loader>
148-
# $<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
149-
# )
145+
include(GeneratorExpressions)
146+
147+
cmake_expand_generator_expressions(DEPENDENCIES
148+
$<$<BOOL:${OPTION_BUILD_LOADERS_NODE}>:node_loader>
149+
$<$<BOOL:${OPTION_BUILD_LOADERS_PY}>:py_loader>
150+
)
151+
152+
add_dependencies(${target} ${DEPENDENCIES})
150153

151154
#
152155
# Define test properties

0 commit comments

Comments
 (0)