From: Arnaud Giersch Date: Tue, 9 Feb 2021 09:25:47 +0000 (+0100) Subject: Cmake: allow wildcards (*, ^) when listing factories. X-Git-Tag: v3.27~415 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/05dd461f6aeebc59e86278534cd28b3462ff8021 Cmake: allow wildcards (*, ^) when listing factories. --- diff --git a/examples/c/CMakeLists.txt b/examples/c/CMakeLists.txt index cb98a17b3e..5c833fff62 100644 --- a/examples/c/CMakeLists.txt +++ b/examples/c/CMakeLists.txt @@ -112,12 +112,12 @@ foreach(x ${CMAKE_HOME_DIRECTORY}/examples/c/${x}/${x}.tesh) endforeach() -ADD_TESH_FACTORIES(app-masterworker-multicore "thread;ucontext;raw;boost" +ADD_TESH_FACTORIES(app-masterworker-multicore "*" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/c/app-masterworker --setenv bindir=${CMAKE_BINARY_DIR}/examples/c/app-masterworker --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms ${CMAKE_HOME_DIRECTORY}/examples/c/app-masterworker/app-masterworker-multicore.tesh) -ADD_TESH_FACTORIES(app-masterworker-vivaldi "thread;ucontext;raw;boost" +ADD_TESH_FACTORIES(app-masterworker-vivaldi "*" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/c/app-masterworker --setenv bindir=${CMAKE_BINARY_DIR}/examples/c/app-masterworker --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms @@ -126,9 +126,9 @@ ADD_TESH_FACTORIES(app-masterworker-vivaldi "thread;ucontext;raw;boost" if(CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "i386" AND CMAKE_SIZEOF_VOID_P EQUAL 8) # Thread-local storage (TLS) is needed for parallel execution, but it doesn't # play well with Ucontexts on 64bit SunOS (at least on x86_64). - set(parallel-factories "thread;raw;boost") + set(parallel-factories "^ucontext") else() - set(parallel-factories "thread;ucontext;raw;boost") + set(parallel-factories "*") endif() ADD_TESH_FACTORIES(c-app-bittorrent-parallel "raw" --cfg contexts/nthreads:4 ${CONTEXTS_SYNCHRO} diff --git a/examples/python/CMakeLists.txt b/examples/python/CMakeLists.txt index fa32133393..c7b515c18d 100644 --- a/examples/python/CMakeLists.txt +++ b/examples/python/CMakeLists.txt @@ -5,7 +5,7 @@ foreach(example actor-create actor-daemon actor-join actor-kill actor-migrate ac set(examples_src ${examples_src} ${CMAKE_CURRENT_SOURCE_DIR}/${example}/${example}.py) if(enable_python) - ADD_TESH_FACTORIES(python-${example} "thread;ucontext;raw;boost" + ADD_TESH_FACTORIES(python-${example} "*" --setenv srcdir=${CMAKE_CURRENT_SOURCE_DIR}/${example} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv pythoncmd=${PYTHON_EXECUTABLE} diff --git a/examples/s4u/CMakeLists.txt b/examples/s4u/CMakeLists.txt index 801dba6b5b..0b0ef351e7 100644 --- a/examples/s4u/CMakeLists.txt +++ b/examples/s4u/CMakeLists.txt @@ -12,7 +12,7 @@ set(_dht-kademlia_sources dht-kademlia/s4u-dht-kademlia.cpp dht-kademlia/s4u-dht dht-kademlia/routing_table.cpp dht-kademlia/routing_table.hpp dht-kademlia/answer.cpp dht-kademlia/answer.hpp dht-kademlia/message.hpp) -set(_actor-stacksize_factories "raw;boost;ucontext") # Threads ignore modifications of the stack size +set(_actor-stacksize_factories "^thread") # Threads ignore modifications of the stack size # The maestro-set example only works for threads and when not using windows. set(_maestro-set_factories "thread") @@ -24,7 +24,7 @@ foreach (example mc-bugged1 mc-bugged2 mc-failing-assert mc-electric-fence) if(NOT SIMGRID_HAVE_MC) set(_${example}_disable 1) endif() - set(_${example}_factories "ucontext;raw;boost") + set(_${example}_factories "^thread") endforeach() if(SIMGRID_HAVE_MC) @@ -92,7 +92,7 @@ foreach (example actor-create actor-daemon actor-exiting actor-join actor-kill # Use default factories unless specified otherwise if(NOT DEFINED _${example}_factories) - set(_${example}_factories "thread;ucontext;raw;boost") + set(_${example}_factories "*") endif() # message("Factories of ${example}: ${_${example}_factories}") @@ -161,9 +161,9 @@ ENDIF() if(CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "i386" AND CMAKE_SIZEOF_VOID_P EQUAL 8) # Thread-local storage (TLS) is needed for parallel execution, but it doesn't # play well with Ucontexts on 64bit SunOS (at least on x86_64). - set(parallel-factories "thread;raw;boost") + set(parallel-factories "^ucontext") else() - set(parallel-factories "thread;ucontext;raw;boost") + set(parallel-factories "*") endif() foreach(example app-bittorrent app-masterworkers @@ -178,12 +178,12 @@ endforeach() # ns3-tests if(SIMGRID_HAVE_NS3) - ADD_TESH_FACTORIES(s4u-network-ns3 "thread;ucontext;raw;boost" + ADD_TESH_FACTORIES(s4u-network-ns3 "*" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/s4u --setenv bindir=${CMAKE_BINARY_DIR}/examples/s4u --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms ${CMAKE_HOME_DIRECTORY}/examples/s4u/network-ns3/s4u-network-ns3.tesh) - ADD_TESH_FACTORIES(s4u-network-ns3-wifi "thread;ucontext;raw;boost" + ADD_TESH_FACTORIES(s4u-network-ns3-wifi "*" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/s4u --setenv bindir=${CMAKE_BINARY_DIR}/examples/s4u --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms diff --git a/examples/smpi/CMakeLists.txt b/examples/smpi/CMakeLists.txt index b72db9af8c..0e8feaa292 100644 --- a/examples/smpi/CMakeLists.txt +++ b/examples/smpi/CMakeLists.txt @@ -75,7 +75,7 @@ if(enable_smpi) # MC is currently broken with threads (deadlock => timeout) if(SIMGRID_HAVE_MC) ADD_TESH(smpi-mc-only-send-determinism --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/mc --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/examples/smpi/mc ${CMAKE_HOME_DIRECTORY}/examples/smpi/mc/only_send_deterministic.tesh) - ADD_TESH_FACTORIES(smpi-mc-sendsend "ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/mc --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/examples/smpi/mc ${CMAKE_HOME_DIRECTORY}/examples/smpi/mc/sendsend.tesh) + ADD_TESH_FACTORIES(smpi-mc-sendsend "^thread" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/mc --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/examples/smpi/mc ${CMAKE_HOME_DIRECTORY}/examples/smpi/mc/sendsend.tesh) endif() ADD_TESH(smpi-tracing --setenv bindir=${CMAKE_BINARY_DIR}/examples/smpi/trace --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/trace --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/examples/smpi/trace ${CMAKE_HOME_DIRECTORY}/examples/smpi/trace/trace.tesh) @@ -84,7 +84,7 @@ if(enable_smpi) ADD_TESH(smpi-replay --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/examples/smpi ${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/replay.tesh) ADD_TESH(smpi-replay-override-replayer --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/examples/smpi ${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/replay-override-replayer.tesh) ADD_TESH(smpi-gemm --setenv bindir=${CMAKE_BINARY_DIR}/examples/smpi/gemm --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/gemm --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/examples/smpi/gemm ${CMAKE_HOME_DIRECTORY}/examples/smpi/gemm/gemm.tesh) - ADD_TESH_FACTORIES(smpi-energy "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/smpi/energy --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/bin --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/energy.tesh) + ADD_TESH_FACTORIES(smpi-energy "*" --setenv bindir=${CMAKE_BINARY_DIR}/examples/smpi/energy --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/bin --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/energy.tesh) ADD_TESH(smpi-ampi --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/examples/smpi ${CMAKE_HOME_DIRECTORY}/examples/smpi/ampi_test/ampi_test.tesh) endif() diff --git a/examples/smpi/smpi_s4u_masterworker/CMakeLists.txt b/examples/smpi/smpi_s4u_masterworker/CMakeLists.txt index 5ffc2c32e8..87e5dff81b 100644 --- a/examples/smpi/smpi_s4u_masterworker/CMakeLists.txt +++ b/examples/smpi/smpi_s4u_masterworker/CMakeLists.txt @@ -3,7 +3,7 @@ if(enable_smpi) add_executable (masterworker_mailbox_smpi EXCLUDE_FROM_ALL masterworker_mailbox_smpi.cpp) target_link_libraries(masterworker_mailbox_smpi simgrid) - ADD_TESH_FACTORIES(smpi-s4u-masterworker "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_s4u_masterworker --cd ${CMAKE_BINARY_DIR}/examples/smpi/smpi_s4u_masterworker ${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_s4u_masterworker/s4u_smpi.tesh) + ADD_TESH_FACTORIES(smpi-s4u-masterworker "*" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_s4u_masterworker --cd ${CMAKE_BINARY_DIR}/examples/smpi/smpi_s4u_masterworker ${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_s4u_masterworker/s4u_smpi.tesh) add_dependencies(tests masterworker_mailbox_smpi) endif() diff --git a/teshsuite/kernel/CMakeLists.txt b/teshsuite/kernel/CMakeLists.txt index 4b6daba2a1..b4b7554ba2 100644 --- a/teshsuite/kernel/CMakeLists.txt +++ b/teshsuite/kernel/CMakeLists.txt @@ -10,15 +10,15 @@ endforeach() ## Add the easy tests: only simcall-generic for now foreach(x simcall-generic) set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.tesh) - ADD_TESH_FACTORIES(tesh-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/kernel/${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/kernel/${x} ${x}.tesh) + ADD_TESH_FACTORIES(tesh-${x} "*" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/kernel/${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/kernel/${x} ${x}.tesh) endforeach() ## Add the tests for stack-overflow set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/stack-overflow/stack-overflow.tesh) if (NOT enable_memcheck AND NOT enable_address_sanitizer AND NOT enable_thread_sanitizer) - ADD_TESH_FACTORIES(stack-overflow "ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/kernel/stack-overflow --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/kernel/stack-overflow stack-overflow.tesh) + ADD_TESH_FACTORIES(stack-overflow "^thread" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/kernel/stack-overflow --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/kernel/stack-overflow stack-overflow.tesh) if (WIN32) - SET_TESH_PROPERTIES(stack-overflow "ucontext;raw;boost" WILL_FAIL true) + SET_TESH_PROPERTIES(stack-overflow "^thread" WILL_FAIL true) endif() endif() diff --git a/teshsuite/python/CMakeLists.txt b/teshsuite/python/CMakeLists.txt index 2375ad576a..8d5aeb0a85 100644 --- a/teshsuite/python/CMakeLists.txt +++ b/teshsuite/python/CMakeLists.txt @@ -4,7 +4,7 @@ foreach(example borken-context corrupt-stack) set(examples_src ${examples_src} ${CMAKE_CURRENT_SOURCE_DIR}/${example}/${example}.py) if(enable_python) - ADD_TESH_FACTORIES(tesh-python-${example} "thread;ucontext;raw;boost" + ADD_TESH_FACTORIES(tesh-python-${example} "*" --setenv srcdir=${CMAKE_CURRENT_SOURCE_DIR}/${example} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv pythoncmd=${PYTHON_EXECUTABLE} diff --git a/teshsuite/s4u/CMakeLists.txt b/teshsuite/s4u/CMakeLists.txt index 3dbef3becc..1b2d59c4fe 100644 --- a/teshsuite/s4u/CMakeLists.txt +++ b/teshsuite/s4u/CMakeLists.txt @@ -30,7 +30,7 @@ foreach(x actor actor-autorestart actor-suspend cloud-interrupt-migration cloud-two-execs concurrent_rw vm-live-migration) set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.tesh) - ADD_TESH_FACTORIES(tesh-s4u-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x}/${x}.tesh) + ADD_TESH_FACTORIES(tesh-s4u-${x} "*" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/teshsuite/s4u/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/s4u/${x}/${x}.tesh) endforeach() foreach(x basic-link-test host-on-off host-on-off-actors host-on-off-recv is-router listen_async pid storage_client_server trace-integration) diff --git a/teshsuite/smpi/CMakeLists.txt b/teshsuite/smpi/CMakeLists.txt index 411911d0c5..912613e7c0 100644 --- a/teshsuite/smpi/CMakeLists.txt +++ b/teshsuite/smpi/CMakeLists.txt @@ -61,20 +61,20 @@ set(bin_files ${bin_files} ${CMAKE_CURRENT_SOURCE_DIR}/hostfile if(enable_smpi) if(NOT WIN32) - ADD_TESH_FACTORIES(tesh-smpi-macro-shared "thread;ucontext;raw;boost" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-shared --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/macro-shared macro-shared.tesh) - ADD_TESH_FACTORIES(tesh-smpi-auto-shared "thread;ucontext;raw;boost" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/auto-shared --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/auto-shared auto-shared.tesh) - ADD_TESH_FACTORIES(tesh-smpi-macro-partial-shared "thread;ucontext;raw;boost" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-partial-shared --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/macro-partial-shared macro-partial-shared.tesh) - ADD_TESH_FACTORIES(tesh-smpi-macro-partial-shared-communication "thread;ucontext;raw;boost" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-partial-shared-communication --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/macro-partial-shared-communication macro-partial-shared-communication.tesh) + ADD_TESH_FACTORIES(tesh-smpi-macro-shared "*" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-shared --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/macro-shared macro-shared.tesh) + ADD_TESH_FACTORIES(tesh-smpi-auto-shared "*" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/auto-shared --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/auto-shared auto-shared.tesh) + ADD_TESH_FACTORIES(tesh-smpi-macro-partial-shared "*" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-partial-shared --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/macro-partial-shared macro-partial-shared.tesh) + ADD_TESH_FACTORIES(tesh-smpi-macro-partial-shared-communication "*" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/macro-partial-shared-communication --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/macro-partial-shared-communication macro-partial-shared-communication.tesh) endif() foreach(x coll-allgather coll-allgatherv coll-allreduce coll-alltoall coll-alltoallv coll-barrier coll-bcast coll-gather coll-reduce coll-reduce-scatter coll-scatter macro-sample pt2pt-dsend pt2pt-pingpong type-hvector type-indexed type-struct type-vector bug-17132 timers io-simple io-simple-at io-all io-all-at io-shared io-ordered topo-cart-sub) - ADD_TESH_FACTORIES(tesh-smpi-${x} "thread;ucontext;raw;boost" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/${x} ${x}.tesh) + ADD_TESH_FACTORIES(tesh-smpi-${x} "*" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/${x} ${x}.tesh) endforeach() if(SMPI_FORTRAN) - ADD_TESH_FACTORIES(tesh-smpi-fort_args "thread;ucontext;raw;boost" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/fort_args --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/fort_args fort_args.tesh) + ADD_TESH_FACTORIES(tesh-smpi-fort_args "*" --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/fort_args --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/fort_args fort_args.tesh) endif() foreach (ALLGATHER 2dmesh 3dmesh bruck GB loosely_lr NTSLR NTSLR_NB pair rdb rhv ring SMP_NTS smp_simple spreading_simple @@ -145,7 +145,7 @@ if(enable_smpi) # Simple privatization tests if(HAVE_PRIVATIZATION) foreach(PRIVATIZATION dlopen mmap) - ADD_TESH_FACTORIES(tesh-smpi-privatization-${PRIVATIZATION} "thread;ucontext;raw;boost" --setenv privatization=${PRIVATIZATION} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/privatization --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/privatization privatization.tesh) + ADD_TESH_FACTORIES(tesh-smpi-privatization-${PRIVATIZATION} "*" --setenv privatization=${PRIVATIZATION} --setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/privatization --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/privatization privatization.tesh) endforeach() endif() endif() diff --git a/tools/cmake/Tests.cmake b/tools/cmake/Tests.cmake index 3375fcf9fa..c6f7138501 100644 --- a/tools/cmake/Tests.cmake +++ b/tools/cmake/Tests.cmake @@ -50,25 +50,53 @@ MACRO(ADD_TESH NAME) endif() ENDMACRO() +# Build a list variable named FACTORIES_LIST with the given arguments, but: +# - replace wildcard "*" with all known factories +# - if the list begins with "^", take the complement +# - finally remove unsupported factories +# +# Used by ADD_TESH_FACTORIES, and SET_TESH_PROPERTIES +MACRO(SETUP_FACTORIES_LIST) + set(ALL_KNOWN_FACTORIES "thread;boost;raw;ucontext") + + if("${ARGV}" STREQUAL "*") # take all known factories + SET(FACTORIES_LIST ${ALL_KNOWN_FACTORIES}) + elseif("${ARGV}" MATCHES "^\\^") # exclude given factories + SET(FACTORIES_LIST ${ALL_KNOWN_FACTORIES}) + STRING(SUBSTRING "${ARGV}" 1 -1 EXCLUDED) + LIST(REMOVE_ITEM FACTORIES_LIST ${EXCLUDED}) + else() # take given factories + SET(FACTORIES_LIST "${ARGV}") + endif() + + # Exclude unsupported factories. Threads are always available, thanks to C++11 threads. + if(NOT HAVE_BOOST_CONTEXTS) + LIST(REMOVE_ITEM FACTORIES_LIST "boost") + endif() + if(NOT HAVE_RAW_CONTEXTS) + LIST(REMOVE_ITEM FACTORIES_LIST "raw") + endif() + if(NOT HAVE_UCONTEXT_CONTEXTS) + LIST(REMOVE_ITEM FACTORIES_LIST "ucontext") + endif() + + # Check that there is no unknown factory + FOREACH(FACTORY ${FACTORIES_LIST}) + if(NOT FACTORY IN_LIST ALL_KNOWN_FACTORIES) + message(FATAL_ERROR "Unknown factory: ${FACTORY}") + endif() + ENDFOREACH() +ENDMACRO() + MACRO(ADD_TESH_FACTORIES NAME FACTORIES) SET(ARGR ${ARGV}) LIST(REMOVE_AT ARGR 0) # remove name FOREACH(I ${FACTORIES}) # remove all factories LIST(REMOVE_AT ARGR 0) ENDFOREACH() - FOREACH(FACTORY ${FACTORIES}) - if ((${FACTORY} STREQUAL "thread" ) OR # Always available, thanks to C++11 threads - (${FACTORY} STREQUAL "boost" AND HAVE_BOOST_CONTEXTS) OR - (${FACTORY} STREQUAL "raw" AND HAVE_RAW_CONTEXTS) OR - (${FACTORY} STREQUAL "ucontext" AND HAVE_UCONTEXT_CONTEXTS)) - ADD_TESH("${NAME}-${FACTORY}" "--cfg" "contexts/factory:${FACTORY}" ${ARGR}) - endif() - if ((NOT ${FACTORY} STREQUAL "thread") AND - (NOT ${FACTORY} STREQUAL "boost") AND - (NOT ${FACTORY} STREQUAL "raw") AND - (NOT ${FACTORY} STREQUAL "ucontext")) - message(FATAL_ERROR "Cannot add a tesh for an unknown factory: ${FACTORY}") - endif() + SETUP_FACTORIES_LIST(${FACTORIES}) + FOREACH(FACTORY ${FACTORIES_LIST}) + ADD_TESH("${NAME}-${FACTORY}" "--cfg" "contexts/factory:${FACTORY}" ${ARGR}) ENDFOREACH() ENDMACRO() @@ -78,13 +106,9 @@ MACRO(SET_TESH_PROPERTIES NAME FACTORIES) FOREACH(I ${FACTORIES}) # remove all factories LIST(REMOVE_AT ARGR 0) ENDFOREACH() - FOREACH(FACTORY ${FACTORIES}) - if ((${FACTORY} STREQUAL "thread" ) OR # Always available, thanks to C++11 threads - (${FACTORY} STREQUAL "boost" AND HAVE_BOOST_CONTEXTS) OR - (${FACTORY} STREQUAL "raw" AND HAVE_RAW_CONTEXTS) OR - (${FACTORY} STREQUAL "ucontext" AND HAVE_UCONTEXT_CONTEXTS)) - set_tests_properties("${NAME}-${FACTORY}" PROPERTIES ${ARGR}) - endif() + SETUP_FACTORIES_LIST(${FACTORIES}) + FOREACH(FACTORY ${FACTORIES_LIST}) + set_tests_properties("${NAME}-${FACTORY}" PROPERTIES ${ARGR}) ENDFOREACH() ENDMACRO()