diff options
Diffstat (limited to 'harness/tools/genbuild.pl')
-rw-r--r-- | harness/tools/genbuild.pl | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/harness/tools/genbuild.pl b/harness/tools/genbuild.pl new file mode 100644 index 0000000..b17ab6a --- /dev/null +++ b/harness/tools/genbuild.pl @@ -0,0 +1,43 @@ +#!/usr/bin/env perl + +$comment=""; + +print "#include <stdio.h>\n"; +print "#include <dlfcn.h>\n"; +print "#include <pthread.h>\n"; +print "#include \"plugin.h\"\n\n"; + +print "int load_plugin_from_dl(dlhandle_t dl, plugin_t* plug)\n"; +print "{\n"; +print " void* ptr;\n"; +print " int ret = 0;\n"; +print "\n"; +print " const char** name = dlsym(dl, \"plugin_name\");\n"; +print " if (name) {\n"; +print " plug->plugin_name = *name;\n"; +print " } else {\n"; +print " plug->plugin_name = NULL;\n"; +print " }\n"; +print " plug->state = NULL;\n"; +print " plug->library_handle = dl;\n"; +print "\n"; +while (<>) { + if (/^\s*EXPORT\(\s*((?:\w|\s*\*\s*)+)\s*\(\*(\w+)\)\s*\((.*)\)\);/) { + print "\n"; + print " ptr = dlsym(dl, \"$2\");\n"; + print " if (!ptr) {\n"; + print " fprintf(stderr, \"Plugin missing %s\\n\", \"$2\");\n"; + print " ret |= 1;\n"; + print " }\n"; + print " plug->$2 = ptr;\n"; + $comment=""; + } +} +print "\n if (!ret) {\n"; +print " if(pthread_mutex_init(&plug->lock, NULL)) {\n"; +print " fprintf(stderr, \"Failed to initalize plugin lock\");\n"; +print " ret |= 1;\n"; +print " }\n"; +print " }\n"; +print "\n return ret;\n"; +print "}\n"; |