diff --git a/Makefile.in b/Makefile.in index 843af3b..0c69591 100644 --- a/Makefile.in +++ b/Makefile.in @@ -118,7 +118,7 @@ $(OBJDBG)/%.o: \ $(DEPENDS) @echo $< ... - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @$(CC) \ $(CFLAGS) \ @@ -130,7 +130,7 @@ $(OBJDBG)/%.o: \ %.rc @echo $< ... - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @$(WINDRES) $< -O coff -o $@ #---[ Release Rules ]-------------------------------------------------------------------- @@ -140,7 +140,7 @@ $(OBJRLS)/%.o: \ $(DEPENDS) @echo $< ... - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @$(CC) \ $(CFLAGS) \ -DNDEBUG=1 \ @@ -150,7 +150,7 @@ $(OBJRLS)/%.o: \ %.rc @echo $< ... - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @$(WINDRES) $< -O coff -o $@ #---[ Misc Rules ]----------------------------------------------------------------------- @@ -159,7 +159,7 @@ $(POTDIR)/$(MODULE_NAME)/%.pot: \ %.c @echo $(notdir $@) ... - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @$(XGETTEXT) \ --language=C \ --keyword=_ \ @@ -173,7 +173,7 @@ $(POTDIR)/$(MODULE_NAME)/%.pot: \ %.rc @echo $< ... - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @touch $@ @@ -184,47 +184,9 @@ all: \ $(POTDIR)/$(MODULE_NAME).pot Release: \ - $(BINRLS)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@ \ + $(BINRLS)/$(MODULE_NAME)@DLLEXT@ \ $(BINRLS)/$(PACKAGE_NAME)d@EXEEXT@ -$(BINRLS)/lib$(MODULE_NAME).a: \ - $(foreach SRC, $(basename $(CORE_SOURCES)), $(OBJRLS)/$(SRC).o) - - @$(MKDIR) `dirname $@` - @echo $< ... - - @$(AR) rcs $@ $^ - -$(BINRLS)/$(MODULE_NAME)@DLLEXT@: \ - $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJRLS)/$(SRC).o) \ - $(BINRLS)/lib$(MODULE_NAME).a - - @$(MKDIR) `dirname $@` - @echo $< ... - @$(LD) \ - -shared -Wl,-soname,$(@F) \ - -o $@ \ - $(LDFLAGS) \ - $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJRLS)/$(SRC).o) \ - -L$(BINRLS) -l$(MODULE_NAME) \ - $(V3270_LIBS) \ - $(LIBS) \ - $(GTK_LIBS) - -$(BINRLS)/$(PACKAGE_NAME)d@EXEEXT@: \ - $(foreach SRC, $(basename $(SERVICE_SOURCES)), $(OBJRLS)/$(SRC).o) \ - $(BINRLS)/lib$(MODULE_NAME).a - - @$(MKDIR) `dirname $@` - @echo $< ... - @$(LD) \ - -o $@ \ - $(foreach SRC, $(basename $(SERVICE_SOURCES)), $(OBJRLS)/$(SRC).o) \ - -L$(BINRLS) \ - $(LDFLAGS) \ - $(LIBS) \ - -l$(MODULE_NAME) \ - $(GLIB_LIBS) #---[ Install Targets ]------------------------------------------------------------------ @@ -257,31 +219,22 @@ locale: \ #---[ Debug Targets ]-------------------------------------------------------------------- Debug: \ - $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@ \ - $(BINDBG)/$(MODULE_NAME)@EXEEXT@ \ - $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@ - -Debug-plugin: \ - $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@ \ + $(BINDBG)/$(MODULE_NAME)@DLLEXT@ \ $(BINDBG)/$(MODULE_NAME)@EXEEXT@ -Debug-service: \ - $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@ - $(BINDBG)/lib$(MODULE_NAME).a: \ $(foreach SRC, $(basename $(CORE_SOURCES)), $(OBJDBG)/$(SRC).o) - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @echo $< ... @$(AR) rcs $@ $^ $(BINDBG)/$(MODULE_NAME)@EXEEXT@: \ - $(foreach SRC, $(basename $(TEST_SOURCES)), $(OBJDBG)/$(SRC).o) \ - $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@ + $(foreach SRC, $(basename $(TEST_SOURCES)), $(OBJDBG)/$(SRC).o) - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @echo $< ... @$(LD) \ -o $@ \ @@ -290,15 +243,15 @@ $(BINDBG)/$(MODULE_NAME)@EXEEXT@: \ -Wl,-rpath,$(BINDBG) \ $(LDFLAGS) \ $(LIBS) \ - -l$(MODULE_NAME) \ $(V3270_LIBS) \ - $(GTK_LIBS) + $(GTK_LIBS) \ + $(GLIB_LIBS) $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@: \ $(foreach SRC, $(basename $(SERVICE_SOURCES)), $(OBJDBG)/$(SRC).o) \ $(BINDBG)/lib$(MODULE_NAME).a - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @echo $< ... @$(LD) \ -o $@ \ @@ -310,43 +263,11 @@ $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@: \ -l$(MODULE_NAME) \ $(GLIB_LIBS) -run-plugin: \ - $(BINDBG)/$(MODULE_NAME)@EXEEXT@ - - @LD_LIBRARY_PATH=$(BINDBG) \ - $(BINDBG)/$(MODULE_NAME)@EXEEXT@ - -run-service: \ - $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@ - - @LD_LIBRARY_PATH=$(BINDBG) \ - $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@ - -$(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@: \ - $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ - - @echo $< ... - @rm -f $@ - @$(LN_S) \ - @DLLPREFIX@$(MODULE_NAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ \ - $@ - -$(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@: \ - $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ - - @rm -f $@ - @$(LN_S) \ - @DLLPREFIX@$(MODULE_NAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@ \ - $@ - -$(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@: \ +$(BINDBG)/$(MODULE_NAME)@DLLEXT@: \ $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJDBG)/$(SRC).o) \ $(BINDBG)/lib$(MODULE_NAME).a - @rm -f $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@ - @rm -f $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ - - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @echo $< ... @$(LD) \ -shared -Wl,-soname,$(@F) \ @@ -358,6 +279,23 @@ $(BINDBG)/@DLLPREFIX@$(MODULE_NAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MIN $(LIBS) \ $(GTK_LIBS) + +run: \ + run-plugin + +run-plugin: \ + $(BINDBG)/$(MODULE_NAME)@EXEEXT@ + + @LD_LIBRARY_PATH=$(BINDBG) \ + $(BINDBG)/$(MODULE_NAME)@EXEEXT@ + +run-service: \ + $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@ + + @LD_LIBRARY_PATH=$(BINDBG) \ + $(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@ + + #---[ Clean Targets ]-------------------------------------------------------------------- clean: \ diff --git a/src/plugin/plugin.c b/src/plugin/plugin.c index 3eb60c9..8dee804 100644 --- a/src/plugin/plugin.c +++ b/src/plugin/plugin.c @@ -45,6 +45,10 @@ #include #include + int pw3270_plugin_stop(GtkWidget *window, GtkWidget *terminal) { + g_object_set_data(G_OBJECT(terminal), "ipc-object-info", NULL); + } + int pw3270_plugin_start(GtkWidget *window, GtkWidget *terminal) { // Creates IPC, associate it with the terminal window diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index 29548cb..aa1eb5e 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -34,13 +34,37 @@ * */ + #include #include #include #include #include + /*---[ Globals ]------------------------------------------------------------------------------------*/ + + const gchar * plugin_path = ".bin/Debug"; + const gchar * plugin_name = "ipc3270." G_MODULE_SUFFIX; + /*---[ Implement ]----------------------------------------------------------------------------------*/ + static void close_module(GtkWidget *widget, GModule *module) + { + g_message("Closing module %p",module); + + static void (*stop)(GtkWidget *window, GtkWidget *terminal) = NULL; + if(!g_module_symbol(module,"pw3270_plugin_stop",(gpointer) &stop)) + { + g_message("Can't get stop method from plugin: %s",g_module_error()); + } + else + { + stop(gtk_widget_get_toplevel(widget),widget); + } + + g_module_close(module); + g_message("Module %p was closed",module); + } + static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { GtkWidget * window = gtk_application_window_new(app); @@ -54,9 +78,38 @@ gtk_container_add(GTK_CONTAINER(window),terminal); gtk_widget_show_all (window); - pw3270_plugin_start(window, terminal); + // Load plugin + { + g_autofree gchar * plugin = g_build_filename(plugin_path,plugin_name,NULL); + + g_message("Loading %s",plugin); + + GModule * module = g_module_open(plugin,G_MODULE_BIND_LOCAL); + + if(module) + { + g_signal_connect (terminal, "destroy", G_CALLBACK(close_module), module); + } + else + { + g_message("Can't open \"%s\": %s",plugin,g_module_error()); + gtk_main_quit(); + } + + static void (*start)(GtkWidget *window, GtkWidget *terminal) = NULL; + if(!g_module_symbol(module,"pw3270_plugin_start",(gpointer) &start)) + { + g_message("Can't get start method from \"%s\": %s",plugin,g_module_error()); + gtk_main_quit(); + } + + g_message("Starting plugin %p",module); + start(window,terminal); + + } - const gchar *url = getenv("LIB3270_DEFAULT_HOST"); + // Setup title. + const gchar *url = lib3270_get_url(v3270_get_session(terminal)); if(url) { v3270_set_url(terminal,url); -- libgit2 0.21.2