165 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/Makefile
 | 
						|
+++ b/Makefile
 | 
						|
@@ -4,7 +4,24 @@ SOFTWARE=hotplug2
 | 
						|
 VERSION=1.0-alpha
 | 
						|
 
 | 
						|
 BINS=hotplug2 hotplug2-modwrap
 | 
						|
-SUBDIRS=parser rules workers
 | 
						|
+SUBDIRS=parser rules
 | 
						|
+
 | 
						|
+hotplug2-objs := \
 | 
						|
+	hotplug2.o netlink.o seqnum.o settings.o uevent.o xmemutils.o \
 | 
						|
+	workers/loader.o parser/parser.o parser/buffer.o parser/token.o \
 | 
						|
+	parser/token_queue.o parser/lexer.o rules/ruleset.o rules/rule.o \
 | 
						|
+	rules/condition.o rules/expression.o rules/execution.o \
 | 
						|
+	rules/command.o
 | 
						|
+
 | 
						|
+ifdef STATIC_WORKER
 | 
						|
+  ifeq ($(wildcard workers/worker_$(STATIC_WORKER).c),)
 | 
						|
+    $(error Worker source worker/worker_$(STATIC_WORKER).c not found)
 | 
						|
+  endif
 | 
						|
+  hotplug2-objs += action.o workers/worker_$(STATIC_WORKER).o
 | 
						|
+else
 | 
						|
+  SUBDIRS += workers
 | 
						|
+endif
 | 
						|
+
 | 
						|
 DESTDIR=
 | 
						|
 
 | 
						|
 
 | 
						|
@@ -13,13 +30,16 @@ all: $(BINS)
 | 
						|
 install:
 | 
						|
 	$(INSTALL_BIN) $(BINS) $(DESTDIR)/sbin/
 | 
						|
 
 | 
						|
-
 | 
						|
-hotplug2: hotplug2.o netlink.o seqnum.o settings.o uevent.o xmemutils.o \
 | 
						|
-          workers/loader.o parser/parser.o parser/buffer.o parser/token.o \
 | 
						|
-          parser/token_queue.o parser/lexer.o rules/ruleset.o rules/rule.o \
 | 
						|
-          rules/condition.o rules/expression.o rules/execution.o \
 | 
						|
-          rules/command.o 
 | 
						|
+hotplug2: $(hotplug2-objs)
 | 
						|
 
 | 
						|
 coldplug2: coldplug2.o
 | 
						|
 
 | 
						|
 include common.mak
 | 
						|
+
 | 
						|
+ifdef STATIC_WORKER
 | 
						|
+  CFLAGS += -DSTATIC_WORKER=1
 | 
						|
+else
 | 
						|
+  CFLAGS += $(FPIC)
 | 
						|
+  LDFLAGS += -ldl
 | 
						|
+endif
 | 
						|
+
 | 
						|
--- a/common.mak
 | 
						|
+++ b/common.mak
 | 
						|
@@ -1,7 +1,10 @@
 | 
						|
 # vim:set sw=8 nosta:
 | 
						|
 
 | 
						|
-CFLAGS=-Os -Wall -g -fPIC
 | 
						|
-LDFLAGS=-g -ldl
 | 
						|
+COPTS=-Os -Wall -g
 | 
						|
+LDFLAGS=-g
 | 
						|
+
 | 
						|
+CFLAGS=$(COPTS)
 | 
						|
+FPIC=-fPIC
 | 
						|
 
 | 
						|
 INSTALL=install -c -m 644
 | 
						|
 INSTALL_BIN=install -c -m 755
 | 
						|
--- a/workers/loader.c
 | 
						|
+++ b/workers/loader.c
 | 
						|
@@ -1,5 +1,23 @@
 | 
						|
 #include "loader.h"
 | 
						|
 
 | 
						|
+#ifdef STATIC_WORKER
 | 
						|
+
 | 
						|
+extern struct worker_module_t worker_module;
 | 
						|
+static struct loader_ctx_t static_ctx = {
 | 
						|
+	.module = &worker_module
 | 
						|
+};
 | 
						|
+
 | 
						|
+struct loader_ctx_t *worker_load(const char *name)
 | 
						|
+{
 | 
						|
+	return &static_ctx;
 | 
						|
+}
 | 
						|
+
 | 
						|
+void worker_free(struct loader_ctx_t *ctx)
 | 
						|
+{
 | 
						|
+}
 | 
						|
+
 | 
						|
+#else
 | 
						|
+
 | 
						|
 struct loader_ctx_t *worker_load(const char *name) {
 | 
						|
 	struct loader_ctx_t *ctx;
 | 
						|
 
 | 
						|
@@ -12,7 +30,7 @@ struct loader_ctx_t *worker_load(const c
 | 
						|
 		return NULL;
 | 
						|
 	}
 | 
						|
 	
 | 
						|
-	ctx->module = dlsym(ctx->dl_handle, "module");
 | 
						|
+	ctx->module = dlsym(ctx->dl_handle, "worker_module");
 | 
						|
 	if (ctx->module == NULL) {
 | 
						|
 		fprintf(stderr, "Loader error: %s\n", dlerror());
 | 
						|
 		worker_free(ctx);
 | 
						|
@@ -31,3 +49,5 @@ void worker_free(struct loader_ctx_t *ct
 | 
						|
 	
 | 
						|
 	free(ctx);
 | 
						|
 }
 | 
						|
+
 | 
						|
+#endif
 | 
						|
--- a/hotplug2.c
 | 
						|
+++ b/hotplug2.c
 | 
						|
@@ -261,17 +261,21 @@ int main(int argc, char *argv[]) {
 | 
						|
 	}
 | 
						|
 
 | 
						|
 	/* Load the worker. */
 | 
						|
+#ifndef STATIC_WORKER
 | 
						|
 	if (settings->worker_name == NULL) {
 | 
						|
 		fprintf(stderr, "Missing worker name.\n");
 | 
						|
 		settings_clear(settings);
 | 
						|
 		exit(1);
 | 
						|
 	}
 | 
						|
+#endif
 | 
						|
 	settings->worker = worker_load(settings->worker_name);
 | 
						|
+#ifndef STATIC_WORKER
 | 
						|
 	if (settings->worker == NULL) {
 | 
						|
 		fprintf(stderr, "Unable to load worker: %s\n", settings->worker_name);
 | 
						|
 		settings_clear(settings);
 | 
						|
 		exit(1);
 | 
						|
 	}
 | 
						|
+#endif
 | 
						|
 	
 | 
						|
 	/* Prepare a netlink connection to the kernel. */
 | 
						|
 	settings->netlink_socket = netlink_init();
 | 
						|
--- a/workers/worker_example.c
 | 
						|
+++ b/workers/worker_example.c
 | 
						|
@@ -62,7 +62,7 @@ static int worker_example_process(void *
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
-struct worker_module_t module = {
 | 
						|
+struct worker_module_t worker_module = {
 | 
						|
 	"Hotplug2 example module",
 | 
						|
 	worker_example_init,
 | 
						|
 	worker_example_deinit,
 | 
						|
--- a/workers/worker_fork.c
 | 
						|
+++ b/workers/worker_fork.c
 | 
						|
@@ -443,7 +443,7 @@ static int worker_fork_process(void *in_
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
-struct worker_module_t module = {
 | 
						|
+struct worker_module_t worker_module = {
 | 
						|
 	"Hotplug2 forking module",
 | 
						|
 	worker_fork_init,
 | 
						|
 	worker_fork_deinit,
 | 
						|
--- a/workers/worker_single.c
 | 
						|
+++ b/workers/worker_single.c
 | 
						|
@@ -18,7 +18,7 @@ static int worker_single_process(void *s
 | 
						|
 	return 0;
 | 
						|
 }
 | 
						|
 
 | 
						|
-struct worker_module_t module = {
 | 
						|
+struct worker_module_t worker_module = {
 | 
						|
 	"Hotplug2 single process module",
 | 
						|
 	worker_single_init,
 | 
						|
 	worker_single_deinit,
 |