From 61d109a6e5794cf393d1f9d5bebda10f8efce902 Mon Sep 17 00:00:00 2001 From: Yaakov Selkowitz Date: Tue, 25 Dec 2012 21:50:14 -0600 Subject: Fix engine loading portability Use GModule APIs for determining engine filenames. Also, link with the -no-undefined flag, required on PE platforms. --- src/capplet/mate-notification-properties.c | 5 +++-- src/daemon/engines.c | 7 ++----- src/themes/coco/Makefile.am | 2 +- src/themes/nodoka/Makefile.am | 2 +- src/themes/slider/Makefile.am | 2 +- src/themes/standard/Makefile.am | 2 +- 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/capplet/mate-notification-properties.c b/src/capplet/mate-notification-properties.c index 2c5612e..0a641b5 100644 --- a/src/capplet/mate-notification-properties.c +++ b/src/capplet/mate-notification-properties.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -186,7 +187,7 @@ static gchar* get_theme_name(const gchar* filename) { /* TODO: Remove magic numbers. Strip "lib" and ".so" */ gchar* result = g_strdup(filename + 3); - result[strlen(result) - 3] = '\0'; + result[strlen(result) - strlen("." G_MODULE_SUFFIX)] = '\0'; return result; } @@ -210,7 +211,7 @@ static void notification_properties_dialog_setup_themes(NotificationAppletDialog { while ((filename = g_dir_read_name(dir))) { - if (g_str_has_prefix(filename, "lib") && g_str_has_suffix(filename, ".so")) + if (g_str_has_suffix(filename, "." G_MODULE_SUFFIX)) { theme_name = get_theme_name(filename); diff --git a/src/daemon/engines.c b/src/daemon/engines.c index 23a2ade..2217f28 100644 --- a/src/daemon/engines.c +++ b/src/daemon/engines.c @@ -56,12 +56,9 @@ static ThemeEngine* active_engine = NULL; static ThemeEngine* load_theme_engine(const char *name) { ThemeEngine* engine; - char* filename; char* path; - filename = g_strdup_printf("lib%s.so", name); - path = g_build_filename(ENGINES_DIR, filename, NULL); - g_free (filename); + path = g_module_build_path (ENGINES_DIR, name); engine = g_new0(ThemeEngine, 1); engine->ref_count = 1; @@ -113,7 +110,7 @@ static ThemeEngine* load_theme_engine(const char *name) if (engine->module != NULL && !g_module_close (engine->module)) { - g_warning("%s: %s", filename, g_module_error()); + g_warning("%s: %s", name, g_module_error()); } g_free(engine); diff --git a/src/themes/coco/Makefile.am b/src/themes/coco/Makefile.am index bdfa229..52f7a6f 100644 --- a/src/themes/coco/Makefile.am +++ b/src/themes/coco/Makefile.am @@ -5,5 +5,5 @@ engine_LTLIBRARIES = libcoco.la libcoco_la_SOURCES = coco-theme.c -libcoco_la_LDFLAGS = -module -avoid-version +libcoco_la_LDFLAGS = -module -avoid-version -no-undefined libcoco_la_LIBADD = $(THEME_LIBS) diff --git a/src/themes/nodoka/Makefile.am b/src/themes/nodoka/Makefile.am index 71ab399..38b797c 100644 --- a/src/themes/nodoka/Makefile.am +++ b/src/themes/nodoka/Makefile.am @@ -5,5 +5,5 @@ engine_LTLIBRARIES = libnodoka.la libnodoka_la_SOURCES = nodoka-theme.c -libnodoka_la_LDFLAGS = -module -avoid-version +libnodoka_la_LDFLAGS = -module -avoid-version -no-undefined libnodoka_la_LIBADD = $(THEME_LIBS) diff --git a/src/themes/slider/Makefile.am b/src/themes/slider/Makefile.am index a94ceaa..46dcdd2 100644 --- a/src/themes/slider/Makefile.am +++ b/src/themes/slider/Makefile.am @@ -7,7 +7,7 @@ AM_CPPFLAGS = $(THEME_CFLAGS) libslider_la_SOURCES = theme.c -libslider_la_LDFLAGS = -module -avoid-version +libslider_la_LDFLAGS = -module -avoid-version -no-undefined libslider_la_LIBADD = \ $(THEME_LIBS) \ $(NULL) diff --git a/src/themes/standard/Makefile.am b/src/themes/standard/Makefile.am index 9d6a6ae..d5b4a2a 100644 --- a/src/themes/standard/Makefile.am +++ b/src/themes/standard/Makefile.am @@ -3,7 +3,7 @@ enginedir = $(libdir)/mate-notification-daemon/engines engine_LTLIBRARIES = libstandard.la libstandard_la_SOURCES = theme.c -libstandard_la_LDFLAGS = -module -avoid-version +libstandard_la_LDFLAGS = -module -avoid-version -no-undefined libstandard_la_LIBADD = $(NOTIFICATION_DAEMON_LIBS) INCLUDES = $(NOTIFICATION_DAEMON_CFLAGS) -- cgit v1.2.1