+static std::pair<const char*, simgrid::kernel::context::ContextFactoryInitializer> context_factories[] = {
+#if HAVE_RAW_CONTEXTS
+ { "raw", &simgrid::kernel::context::raw_factory },
+#endif
+#if HAVE_UCONTEXT_CONTEXTS
+ { "ucontext", &simgrid::kernel::context::sysv_factory },
+#endif
+#if HAVE_BOOST_CONTEXTS
+ { "boost", &simgrid::kernel::context::boost_factory },
+#endif
+#if HAVE_THREAD_CONTEXTS
+ { "thread", &simgrid::kernel::context::thread_factory },
+#endif
+};
+
+static_assert(sizeof(context_factories) != 0, "No context factories are enabled for this build");
+
+// Create the list of possible contexts:
+static inline
+std::string contexts_list()
+{
+ std::string res;
+ const std::size_t n = sizeof(context_factories) / sizeof(context_factories[0]);
+ for (std::size_t i = 1; i != n; ++i) {
+ res += ", ";
+ res += context_factories[i].first;
+ }
+ return res;
+}
+
+static simgrid::config::Flag<std::string> context_factory_name(
+ "contexts/factory",
+ (std::string("Possible values: ")+contexts_list()).c_str(),
+ context_factories[0].first);
+