Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Cmake: allow wildcards (*, ^) when listing factories.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Tue, 9 Feb 2021 09:25:47 +0000 (10:25 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Tue, 9 Feb 2021 11:14:10 +0000 (12:14 +0100)
examples/c/CMakeLists.txt
examples/python/CMakeLists.txt
examples/s4u/CMakeLists.txt
examples/smpi/CMakeLists.txt
examples/smpi/smpi_s4u_masterworker/CMakeLists.txt
teshsuite/kernel/CMakeLists.txt
teshsuite/python/CMakeLists.txt
teshsuite/s4u/CMakeLists.txt
teshsuite/smpi/CMakeLists.txt
tools/cmake/Tests.cmake

index cb98a17..5c833ff 100644 (file)
@@ -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} 
index fa32133..c7b515c 100644 (file)
@@ -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}
index 801dba6..0b0ef35 100644 (file)
@@ -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
index b72db9a..0e8feaa 100644 (file)
@@ -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()
index 5ffc2c3..87e5dff 100644 (file)
@@ -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()
 
index 4b6daba..b4b7554 100644 (file)
@@ -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()
 
index 2375ad5..8d5aeb0 100644 (file)
@@ -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}
index 3dbef3b..1b2d59c 100644 (file)
@@ -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)
index 411911d..912613e 100644 (file)
@@ -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()
index 3375fcf..c6f7138 100644 (file)
@@ -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()