Skip to content

Commit 9951a0a

Browse files
committed
CMakeLists.txt: add run-version* targets
Generate run-version-<test> target for each test from run_tests, make it a dependency of run-version target. and, if run_add_version_dep vesioble is set to ON (the default), set "run-version" as a dependency of the "run" target. Signed-off-by: Eugene Syromiatnikov <[email protected]>
1 parent 6746201 commit 9951a0a

File tree

1 file changed

+90
-42
lines changed

1 file changed

+90
-42
lines changed

source/CMakeLists.txt

Lines changed: 90 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,11 @@ set(run_tests evp_fetch
218218
x509storeissuer
219219
CACHE STRING "List of tests to run")
220220

221+
set(run_add_version_dep
222+
ON
223+
CACHE BOOL "Whether to print version information on run " +
224+
"(call all the tests with -V option before the main run)")
225+
221226
# Per-test options, the format: test option values
222227
set(run_evp_fetch_pqs
223228
evp_fetch "" "" "-q"
@@ -300,6 +305,15 @@ add_custom_target(run
300305
COMMENT "Run perf tests"
301306
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
302307

308+
# Version target
309+
add_custom_target(run-version
310+
COMMENT "Get version information for perf tests"
311+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
312+
if (run_add_version_dep)
313+
add_dependencies(run run-version)
314+
endif()
315+
316+
303317
if(WIN32)
304318
# Prepare the PATH value for the generated batch files on Windows
305319
get_target_property(crypto_path OpenSSL::Crypto IMPORTED_LOCATION)
@@ -309,6 +323,75 @@ if(WIN32)
309323
set(win32_path "${crypto_path};${ssl_path};%PATH%")
310324
endif()
311325

326+
#
327+
# gen_run_target(<cmd> <test> [VAR <var>] [NAME <name>])
328+
#
329+
# Generates a target that runs <cmd> and depends on target <test> and sets
330+
# <var> to the target's name.
331+
#
332+
function(gen_run_taget _CMD _TEST)
333+
include(CMakeParseArguments)
334+
335+
set(_Options "")
336+
set(_OneValueArgs VAR NAME)
337+
set(_MultiValueArgs "")
338+
cmake_parse_arguments(GEN_RUN_TARGET
339+
"${_Options}"
340+
"${_OneValueArgs}"
341+
"${_MultiValueArgs}"
342+
${ARGN}
343+
)
344+
345+
#
346+
# In order to execute the command on Windows, we need
347+
# to add OPENSSL_ROOT_DIR to PATH variable so runtime
348+
# linker can find OpenSSL 's .dll files. Adjusting PATH on Windows
349+
# requires us to generate a .bat file with two commands:
350+
# set PATH=c:\...\OPENSSL_ROOT_DIR;%PATH%
351+
# command_to_exec with_options
352+
#
353+
string(REGEX REPLACE " *" ";" cmd "${_CMD}")
354+
string(REGEX REPLACE "[^0-9A-Za-z]" "-" cmd_target_name "${cmd}")
355+
# A hack for lesser OSes that cannot normally distinguish lower-
356+
# and uppercase letters.
357+
if (WIN32 OR APPLE)
358+
string(REGEX REPLACE "[A-Z]" "\\0_" cmd_target_name
359+
"${cmd_target_name}")
360+
endif()
361+
if (NOT GEN_RUN_TARGET_NAME)
362+
set(GEN_RUN_TARGET_NAME "run-${cmd_target_name}")
363+
endif()
364+
string(REPLACE ";" " " cmd_desc "${cmd}")
365+
366+
367+
if(WIN32)
368+
#
369+
# generate .bat file and target to execute it.
370+
#
371+
file(GENERATE OUTPUT "${cmd_target_name}.bat"
372+
CONTENT "set PATH=${win32_path}\n${_CMD}"
373+
NEWLINE_STYLE WIN32)
374+
add_custom_target("${GEN_RUN_TARGET_NAME}"
375+
COMMAND "${cmd_target_name}.bat"
376+
DEPENDS "${_TEST}"
377+
COMMENT "Run ${cmd_desc}"
378+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
379+
USES_TERMINAL)
380+
else()
381+
add_custom_target("${GEN_RUN_TARGET_NAME}"
382+
COMMAND ${cmd}
383+
DEPENDS "${_TEST}"
384+
COMMENT "Run ${cmd_desc}"
385+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
386+
USES_TERMINAL)
387+
endif()
388+
389+
if (GEN_RUN_TARGET_VAR)
390+
set("${GEN_RUN_TARGET_VAR}" "${GEN_RUN_TARGET_NAME}" PARENT_SCOPE)
391+
endif()
392+
endfunction()
393+
394+
# run targets generation
312395
foreach(test IN LISTS run_tests)
313396
set(cmds "${test}")
314397

@@ -357,48 +440,13 @@ foreach(test IN LISTS run_tests)
357440
endforeach()
358441
set(cmds ${new_cmds})
359442

443+
# Run target
360444
foreach(cmd IN LISTS cmds)
361-
#
362-
# In order to execute the command on Windows, we need
363-
# to add OPENSSL_ROOT_DIR to PATH variable so runtime
364-
# linker can find OpenSSL 's .dll files. Adjusting PATH on Windows
365-
# requires us to generate a .bat file with two commands:
366-
# set PATH=c:\...\OPENSSL_ROOT_DIR;%PATH%
367-
# command_to_exec with_options
368-
#
369-
# raw_cmd variable keeps the command to execute
370-
#
371-
set(raw_cmd "${cmd}")
372-
string(REGEX REPLACE " *" ";" cmd "${cmd}")
373-
string(REGEX REPLACE "[^0-9A-Za-z]" "-" cmd_target_name "${cmd}")
374-
# A hack for lesser OSes that cannot normally distinguish lower-
375-
# and uppercase letters.
376-
if (WIN32 OR APPLE)
377-
string(REGEX REPLACE "[A-Z]" "\\0_" cmd_target_name
378-
"${cmd_target_name}")
379-
endif()
380-
string(REPLACE ";" " " cmd_desc "${cmd}")
381-
if(WIN32)
382-
#
383-
# generate .bat file and target to execute it.
384-
#
385-
file(GENERATE OUTPUT "${cmd_target_name}.bat"
386-
CONTENT "set PATH=${win32_path}\n${raw_cmd}"
387-
NEWLINE_STYLE WIN32)
388-
add_custom_target("run-${cmd_target_name}"
389-
COMMAND "${cmd_target_name}.bat"
390-
DEPENDS "${test}"
391-
COMMENT "Run ${cmd_desc}"
392-
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
393-
USES_TERMINAL)
394-
else()
395-
add_custom_target("run-${cmd_target_name}"
396-
COMMAND ${cmd}
397-
DEPENDS "${test}"
398-
COMMENT "Run ${cmd_desc}"
399-
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
400-
USES_TERMINAL)
401-
endif()
402-
add_dependencies(run "run-${cmd_target_name}")
445+
gen_run_taget("${cmd}" "${test}" VAR run_target_name)
446+
add_dependencies(run "${run_target_name}")
403447
endforeach()
448+
449+
# Per-test version taget
450+
gen_run_taget("${test} -V" "${test}" NAME "run-version-${test}")
451+
add_dependencies(run-version "run-version-${test}")
404452
endforeach()

0 commit comments

Comments
 (0)