-#include "private.h"
-#include <lua5.1/lauxlib.h>
-
-
-#ifdef HAVE_RUBY
-/* Damn Ruby. They load their full config.h, which breaks since we also load ours.
- * So, we undef the offending defines
- */
-#undef PACKAGE_VERSION
-#undef PACKAGE_NAME
-#undef PACKAGE_TARNAME
-#undef PACKAGE_STRING
-#undef PACKAGE_BUGREPORT
-#undef _GNU_SOURCE
-#include <ruby.h>
- void SIMIX_ctx_ruby_factory_init(smx_context_factory_t *factory);
-#include "smx_context_ruby.c"
-#endif
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_context, simix, "Context switching mecanism");
-
-const char *xbt_ctx_factory_to_use = NULL;
+#include "xbt/xbt_os_thread.h"
+#include "smx_private.h"
+#include "simgrid/sg_config.h"
+#include "internal_config.h"
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_context, simix,
+ "Context switching mechanism");
+
+char* smx_context_factory_name = NULL; /* factory name specified by --cfg=contexts/factory:value */
+smx_ctx_factory_initializer_t smx_factory_initializer_to_use = NULL;
+int smx_context_stack_size = 128 * 1024;
+int smx_context_stack_size_was_set = 0;
+#ifdef HAVE_THREAD_LOCAL_STORAGE
+static __thread smx_context_t smx_current_context_parallel;
+#else
+static xbt_os_thread_key_t smx_current_context_key = 0;
+#endif
+static smx_context_t smx_current_context_serial;
+static int smx_parallel_contexts = 1;
+static int smx_parallel_threshold = 2;
+static e_xbt_parmap_mode_t smx_parallel_synchronization_mode = XBT_PARMAP_DEFAULT;