#include #include int main (int argc, char **argv) { GModule *module; char *unit_test; char *main_symbol_name; gpointer func; int (*unit_test_main) (int argc, char **argv); int ret; if (argc != 2) g_error ("Usage: %s unit_test", argv[0]); module = g_module_open (NULL, 0); if (!module) g_error ("Failed to open self for symbol lookup"); unit_test = g_path_get_basename (argv[1]); main_symbol_name = g_strdup_printf ("%s_main", unit_test); main_symbol_name = g_strdelimit (main_symbol_name, "-", '_'); if (!g_module_symbol (module, main_symbol_name, &func)) g_error ("Failed to look up main symbol for the test: %s", unit_test); unit_test_main = func; ret = unit_test_main (argc - 1, argv + 1); g_free (unit_test); g_free (main_symbol_name); g_module_close (module); return ret; }