changeset 16364:a5a64fcad0ca

Kill the libpurpleperl hack library and move the init stuff to perl.so itself. This works fine for me and I'm hoping will work fine on Solaris as well. When it gets tested we'll want to drop libpurpleperl.c but until I know it works I don't want to drop it (because of mtn's die die dir merge stuff).
author Etan Reisner <pidgin@unreliablesource.net>
date Fri, 27 Apr 2007 04:25:21 +0000
parents f4c72a722741
children ca09f5b57672
files libpurple/plugins/perl/Makefile.am libpurple/plugins/perl/perl.c
diffstat 2 files changed, 22 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/plugins/perl/Makefile.am	Wed Apr 25 02:36:05 2007 +0000
+++ b/libpurple/plugins/perl/Makefile.am	Fri Apr 27 04:25:21 2007 +0000
@@ -1,13 +1,11 @@
 plugindir = $(libdir)/purple
-hackdir = $(plugindir)/private
 
 perl_dirs = common
 
 plugin_LTLIBRARIES = perl.la
-hack_LTLIBRARIES = libpurpleperl.la
 
 perl_la_LDFLAGS = -module -avoid-version
-perl_la_LIBADD = $(GLIB_LIBS) $(PERL_LIBS) libpurpleperl.la
+perl_la_LIBADD = $(GLIB_LIBS) $(PERL_LIBS)
 perl_la_SOURCES = \
 	perl.c \
 	perl-common.c \
@@ -17,12 +15,7 @@
 
 perl_la_DEPENDENCIES = \
 	.libs/libperl_orig.a \
-	.libs/DynaLoader.a \
-	libpurpleperl.la
-
-libpurpleperl_la_LDFLAGS = -module -avoid-version
-libpurpleperl_la_LIBADD = $(GLIB_LIBS)
-libpurpleperl_la_SOURCES = libpurpleperl.c
+	.libs/DynaLoader.a
 
 .libs/libperl_orig.a:
 	@mkdir -p .libs
@@ -89,8 +82,7 @@
 EXTRA_DIST = \
 	Makefile.mingw \
 	common/Makefile.mingw \
-	$(common_sources) \
-	libpurpleperl.c
+	$(common_sources)
 
 common/Makefile: common/Makefile.PL
 	@if test "x${top_srcdir}" != "x${top_builddir}"; then \
--- a/libpurple/plugins/perl/perl.c	Wed Apr 25 02:36:05 2007 +0000
+++ b/libpurple/plugins/perl/perl.c	Fri Apr 27 04:25:21 2007 +0000
@@ -608,4 +608,23 @@
 	loader_info.exts = g_list_append(loader_info.exts, "pl");
 }
 
+#ifdef __SUNPRO_C
+#pragma init (my_init)
+#else
+void __attribute__ ((constructor)) my_init(void);
+#endif
+
+void
+my_init(void)
+{
+	/* Mostly evil hack... puts perl.so's symbols in the global table but
+	 * does not create a circular dependency because g_module_open will
+	 * only open the library once. */
+	/* Do we need to keep track of the returned GModule here so that we
+	 * can g_module_close it when this plugin gets unloaded?
+	 * At the moment I don't think this plugin can ever get unloaded but
+	 * in case that becomes possible this wants to get noted. */
+	g_module_open("perl.so", 0);
+}
+
 PURPLE_INIT_PLUGIN(perl, init_plugin, info)