Version 11, interface, binary age 0.

Thu Nov 22 13:14:18 2001  Owen Taylor  <otaylor@redhat.com>

        * configure.in (GLIB_MICRO_VERSION): Version 11,
        interface, binary age 0.

        * NEWS: Updated.

        * tests/Makefile.am (libmoduletestplugin_[ab]_la_LDFLAGS):
        Add dummy -rpath argument. On some (but not all) platforms,
        libtool will only build a convenience library without this.
        (#63486, Dan Winship)

        * Makefile.am (EXTRA_DIST): Add README.in, INSTALL.in -
        autoconf-2.5x checks for 'make dist' in the tarball
        when you make distcheck.

        * glib/Makefile.am (EXTRA_DIST): Distribute
        makefile.msc/mingw.in, glib.rc.in.

        * tests/patterntest.c: Include string.h.

        * glib/gpattern.c (g_utf8_reverse): doc parsing fix.
This commit is contained in:
Owen Taylor
2001-11-22 18:56:12 +00:00
committed by Owen Taylor
parent e767aa0a4f
commit 4ab50f038b
25 changed files with 262 additions and 427 deletions

View File

@@ -10,10 +10,6 @@ makefile.mingw
_libs
.libs
so_locations
libgmodule-1.3.la
libgplugin_a.la
libgplugin_b.la
gmoduleconf.h
stamp-h
testgmodule
gmodule.rc

View File

@@ -1,3 +1,9 @@
Mon Nov 19 16:12:12 2001 Owen Taylor <otaylor@redhat.com>
* Makefile.am makefile.msc.in makefile.mingw.in: Remove
testgmodule and associated plugin files; we don't need _both_ this
and ../tests/module-test.c
2001-11-16 Michael Meeks <michael@ximian.com>
* gmodule.c (parse_libtool_archive): fix leak.

View File

@@ -34,7 +34,6 @@ libglib = $(top_builddir)/glib/libglib-1.3.la
top_builddir_full=`cd \$(top_builddir); pwd`
lib_LTLIBRARIES = libgmodule-1.3.la
noinst_LTLIBRARIES = libgplugin_a.la libgplugin_b.la
if MS_LIB_AVAILABLE
noinst_DATA = gmodule-1.3.lib
@@ -55,7 +54,6 @@ endif
if OS_WIN32
export_symbols = -export-symbols gmodule.def
plugin_rpath = -rpath `pwd`
install-libtool-import-lib:
$(INSTALL) .libs/libgmodule-1.3.dll.a $(DESTDIR)$(libdir)
@@ -76,19 +74,6 @@ libgmodule_1_3_la_LIBADD = @G_MODULE_WIN32_RESOURCE@ @G_MODULE_LIBS_EXTRA@ @G_MO
libgmodule_1_3_la_DEPENDENCIES = @G_MODULE_WIN32_RESOURCE@ @GMODULE_DEF@
libgplugin_a_la_SOURCES = libgplugin_a.c
libgplugin_a_la_LDFLAGS = @G_MODULE_LDFLAGS@ -avoid-version -module $(no_undefined) $(plugin_rpath)
libgplugin_a_la_LIBADD = @G_MODULE_LIBS@ @G_MODULE_LIBS_EXTRA@ @G_MODULE_PLUGIN_LIBS@ libgmodule-1.3.la $(libglib)
libgplugin_b_la_SOURCES = libgplugin_b.c
libgplugin_b_la_LDFLAGS = @G_MODULE_LDFLAGS@ -avoid-version -module $(no_undefined) $(plugin_rpath)
libgplugin_b_la_LIBADD = @G_MODULE_LIBS@ @G_MODULE_LIBS_EXTRA@ @G_MODULE_PLUGIN_LIBS@ libgmodule-1.3.la $(libglib)
noinst_PROGRAMS = testgmodule
testgmodule_LDFLAGS += @G_MODULE_LDFLAGS@
testgmodule_LDADD = @TESTGMODULE_EXP@ libgmodule-1.3.la $(libglib) @G_MODULE_LIBS@
testgmodule_DEPENDENCIES = @TESTGMODULE_EXP@
if OS_WIN32
@G_MODULE_WIN32_RESOURCE@ : gmodule.rc
$(top_srcdir)/build/win32/lt-compile-resource gmodule.rc @G_MODULE_WIN32_RESOURCE@

View File

@@ -1,73 +0,0 @@
/* libgplugin_a.c - test plugin for testgmodule
* Copyright (C) 1998 Tim Janik
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#include <gmodule.h>
#include <stdlib.h>
G_MODULE_EXPORT void
gplugin_a_func (void)
{
g_print ("GPluginA: Hello world\n");
}
G_MODULE_EXPORT void
gplugin_clash_func (void)
{
g_print ("GPluginA: Hello plugin clash\n");
}
G_MODULE_EXPORT void
g_clash_func (void)
{
g_print ("GPluginA: Hello global clash\n");
}
G_MODULE_EXPORT void
gplugin_say_boo_func (void)
{
g_print ("GPluginA: BOOH!\n");
}
G_MODULE_EXPORT void
gplugin_a_module_func (GModule *module)
{
void (*f) (void) = NULL;
gchar *string;
gchar *basename = g_path_get_basename (g_module_name (module));
string = "gplugin_say_boo_func";
g_print ("GPluginA: retrieve symbol `%s' from \"%s\"\n",
string, basename);
g_free (basename);
if (!g_module_symbol (module, string, (gpointer) &f))
{
g_print ("error: %s\n", g_module_error ());
exit (1);
}
g_print ("GPluginA: call that function(%p): ", f);
f ();
}

View File

@@ -1,65 +0,0 @@
/* libgplugin_b.c - test plugin for testgmodule
* Copyright (C) 1998 Tim Janik
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#include <gmodule.h>
G_MODULE_EXPORT const gchar*
g_module_check_init (GModule *module)
{
g_print ("GPluginB: check-init\n");
return NULL;
}
G_MODULE_EXPORT void
g_module_unload (GModule *module)
{
g_print ("GPluginB: unloaded\n");
}
G_MODULE_EXPORT void
gplugin_b_func (void)
{
g_print ("GPluginB: Hello world\n");
}
G_MODULE_EXPORT void
gplugin_clash_func (void)
{
g_print ("GPluginB: Hello plugin clash\n");
}
G_MODULE_EXPORT void
g_clash_func (void)
{
g_print ("GPluginB: Hello global clash\n");
}
G_MODULE_EXPORT void
gplugin_say_boo_func (void)
{
g_print ("GPluginB: BOOH!\n");
}

View File

@@ -16,9 +16,7 @@ DEFINES = -DHAVE_CONFIG_H -DG_LOG_DOMAIN=\"GModule\" -DG_ENABLE_DEBUG
all : \
gmoduleconf.h \
libgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.a \
testgmodule.exe \
libgplugin_a.dll libgplugin_b.dll
libgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.a
gmodule_OBJECTS = \
gmodule.o
@@ -34,20 +32,6 @@ libgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.a : $(gmodule_OBJECTS) gmod
gmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.rc : gmodule.rc
cp $< $@
################ test prog
testgmodule.exe : libgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.a testgmodule.o
# We have to generate an .exp file separately with dlltool, and link
# with that. Sigh.
dlltool --output-exp testgmodule.exp testgmodule.o
$(CC) $(CFLAGS) -o testgmodule.exe testgmodule.o testgmodule.exp -L ../glib -lglib-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@ -L . -lgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@ $(LFLAGS)
libgplugin_a.dll : libgplugin_a.o
$(BUILD_DLL) libgplugin_a - libgplugin_a.o -L ../glib -lglib-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@ -L . -lgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@
libgplugin_b.dll : libgplugin_b.o
$(BUILD_DLL) libgplugin_b - libgplugin_b.o -L ../glib -lglib-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@ -L . -lgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@
################ Other stuff
clean::

View File

@@ -12,8 +12,7 @@ DEFINES = -DHAVE_CONFIG_H -DG_LOG_DOMAIN=\"GModule\"
all : \
gmoduleconf.h \
libgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@-@LT_CURRENT_MINUS_AGE@.dll \
testgmodule.exe
libgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@-@LT_CURRENT_MINUS_AGE@.dll
gmodule_OBJECTS = \
gmodule.obj
@@ -25,19 +24,5 @@ libgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@-@LT_CURRENT_MINUS_AGE@.dll
$(CC) $(CFLAGS) -LD -Fe$@ $(gmodule_OBJECTS) \
..\glib\glib-$(GLIB_VER).lib $(LDFLAGS) /implib:gmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.lib /def:gmodule.def
################ test prog
testgmodule.exe : libgmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@-@LT_CURRENT_MINUS_AGE@.dll testgmodule.obj libgplugin_a.dll libgplugin_b.dll
$(CC) $(CFLAGS) testgmodule.obj gmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.lib \
..\glib\glib-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.lib $(LDFLAGS) /subsystem:console
libgplugin_a.dll : libgplugin_a.obj
$(CC) $(CFLAGS) -LD libgplugin_a.obj gmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.lib \
..\glib\glib-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.lib $(LDFLAGS)
libgplugin_b.dll : libgplugin_b.obj
$(CC) $(CFLAGS) -LD libgplugin_b.obj gmodule-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.lib \
..\glib\glib-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@.lib $(LDFLAGS)
clean::
del gmoduleconf.h

View File

@@ -1,221 +0,0 @@
/* testgmodule.c - test program for GMODULE
* Copyright (C) 1998 Tim Janik
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/*
* Modified by the GLib Team and others 1997-2000. See the AUTHORS
* file for a list of people on the GLib Team. See the ChangeLog
* files for a list of changes. These files are distributed with
* GLib at ftp://ftp.gtk.org/pub/gtk/.
*/
#undef G_LOG_DOMAIN
#include <gmodule.h>
#include "gmoduleconf.h"
G_MODULE_EXPORT void
g_clash_func (void)
{
g_print ("GModule: Hello global clash\n");
}
typedef void (*SimpleFunc) (void);
typedef void (*GModuleFunc) (GModule *);
static SimpleFunc plugin_clash_func = NULL;
int
main (int arg,
char *argv[])
{
GModule *module_self, *module_a, *module_b;
gchar *string;
gchar *basename;
gchar *plugin_a, *plugin_b;
SimpleFunc f_a, f_b, f_self;
GModuleFunc gmod_f;
string = g_get_current_dir ();
g_print ("testgmodule (%s):\n", string);
plugin_a = g_strconcat (string, G_DIR_SEPARATOR_S "libgplugin_a", NULL);
plugin_b = g_strconcat (string, G_DIR_SEPARATOR_S "libgplugin_b", NULL);
g_free (string);
/* module handles
*/
g_print ("get main module handle\n");
module_self = g_module_open (NULL, G_MODULE_BIND_LAZY);
if (!module_self)
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
g_print ("check that not yet bound symbols in shared libraries of main module are retrievable:\n");
string = "g_module_close";
basename = g_path_get_basename (g_module_name (module_self));
g_print ("retrieve symbol `%s' from \"%s\":\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_self, string, (gpointer) &f_self))
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
g_print ("retrieved symbol `%s' as %p\n", string, f_self);
g_print ("load plugin from \"%s\"\n", plugin_a);
module_a = g_module_open (plugin_a, G_MODULE_BIND_LAZY);
if (!module_a)
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
g_print ("load plugin from \"%s\"\n", plugin_b);
module_b = g_module_open (plugin_b, G_MODULE_BIND_LAZY);
if (!module_b)
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
/* get plugin specific symbols and call them
*/
string = "gplugin_a_func";
basename = g_path_get_basename (g_module_name (module_a));
g_print ("retrieve symbol `%s' from \"%s\"\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_a, string, (gpointer) &f_a))
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
string = "gplugin_b_func";
basename = g_path_get_basename (g_module_name (module_b));
g_print ("retrieve symbol `%s' from \"%s\"\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_b, string, (gpointer) &f_b))
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
g_print ("call plugin function(%p) A: ", f_a);
f_a ();
g_print ("call plugin function(%p) B: ", f_b);
f_b ();
/* get and call globally clashing functions
*/
string = "g_clash_func";
basename = g_path_get_basename (g_module_name (module_self));
g_print ("retrieve symbol `%s' from \"%s\"\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_self, string, (gpointer) &f_self))
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
basename = g_path_get_basename (g_module_name (module_a));
g_print ("retrieve symbol `%s' from \"%s\"\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_a, string, (gpointer) &f_a))
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
basename = g_path_get_basename (g_module_name (module_b));
g_print ("retrieve symbol `%s' from \"%s\"\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_b, string, (gpointer) &f_b))
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
g_print ("call plugin function(%p) self: ", f_self);
f_self ();
g_print ("call plugin function(%p) A: ", f_a);
f_a ();
g_print ("call plugin function(%p) B: ", f_b);
f_b ();
/* get and call clashing plugin functions
*/
string = "gplugin_clash_func";
basename = g_path_get_basename (g_module_name (module_self));
g_print ("retrieve symbol `%s' from \"%s\"\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_self, string, (gpointer) &f_self))
f_self = NULL;
g_print ("retrieved function `%s' from self: %p\n", string, f_self);
basename = g_path_get_basename (g_module_name (module_a));
g_print ("retrieve symbol `%s' from \"%s\"\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_a, string, (gpointer) &f_a))
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
basename = g_path_get_basename (g_module_name (module_b));
g_print ("retrieve symbol `%s' from \"%s\"\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_b, string, (gpointer) &f_b))
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
g_print ("call plugin function(%p) A: ", f_a);
plugin_clash_func = f_a;
plugin_clash_func ();
g_print ("call plugin function(%p) B: ", f_b);
plugin_clash_func = f_b;
plugin_clash_func ();
/* call gmodule function form A
*/
string = "gplugin_a_module_func";
basename = g_path_get_basename (g_module_name (module_a));
g_print ("retrieve symbol `%s' from \"%s\"\n", string, basename);
g_free (basename);
if (!g_module_symbol (module_a, string, (gpointer) &gmod_f))
{
g_print ("error: %s\n", g_module_error ());
return 1;
}
g_print ("call plugin A's module function(%p):\n{\n", gmod_f);
gmod_f (module_b);
g_print ("}\n");
/* unload plugins
*/
g_print ("unload plugin A:\n");
if (!g_module_close (module_a))
g_print ("error: %s\n", g_module_error ());
g_print ("unload plugin B:\n");
if (!g_module_close (module_b))
g_print ("error: %s\n", g_module_error ());
#if 0
g_log_set_fatal_mask ("GModule", G_LOG_FATAL_MASK|G_LOG_LEVEL_WARNING);
g_module_symbol (0, 0, 0);
g_warning("jahooo");
g_on_error_query (".libs/testgmodule");
#endif
return 0;
}