Fri Nov 20 14:43:44 1998  Tim Janik  <timj@gtk.org>

	* gmodule.c (_g_module_build_path): added empty default imlementation
	so gmodule.so compiles on systems that are not yet supported, fix from
	Erik Bagfors <bagfors@hpc2n.umu.se>.

1998-11-13  Nuno Ferreira  <nmrf@rnl.ist.utl.pt>

	* Makefile.am (INCLUDES): The previous commit message is wrong
	about the -I$(top_srcdir) being redundant. I put it back.

Wed Nov 11 23:23:22 EST 1998 Jeff Garzik <jgarzik@pobox.com>

        * Makefile.am : INCLUDES is the right way to add to CFLAGS, not 
        DEFS.  Also there are bugs with '+=' in makefiles.
        Got rid of DEFS line by moving G_LOG_DOMAIN setting into INCLUDES.
        Removed redundant -I from INCLUDES.

Tue Oct 27 04:00:11 1998  Tim Janik  <timj@gtk.org>

	* testgmodule.c (main): changed the #ifdef WIN32 test to NATIVE_WIN32,
	this needs to be more constistent throughout the code, do we go for
	NATIVE_WIN32 or WIN32?

	* gmodule.c (LibMain): special cased the #ifdef __LCC__ case for
	NATIVE_WIN32, since lcc maybe used on other platforms as well.
	* libgplugin_a.c (LibMain): 
	* libgplugin_b.c (LibMain): 
	likewise. not sure i like this special requirement for lcc in here.

	* gmodule-dl.c (_g_module_build_path): 
	feature empty "" directories and prepend the module name with "lib".

	* gmodule-dld.c (_g_module_build_path): 
	* gmodule-win32.c (_g_module_build_path): 
	feature empty "" directories.
	
	* we need some more magic in the _g_module_build_path variants
	so we don't append/prepend lib and .so, .sl or .dll for those names
	that already contain it.

	* applied patch from Tor Lillqvist for g_module_build_path() and
	windows support.

1998-10-20: Tor Lillqvist <tml@iki.fi>
        
	* gmodule/gmodule-win32.c:
        New file.

        * gmodule/gmodule.c gmodule/gmodule.h:
        Added the funcion g_module_build_path that builds the path to
        a module file, decorating the name according to the system's
        conventions.  Added the Windows implementation.

	* gmodule/libgplugin_a.c gmodule/libgplugin_b.c:
        Added LibMain for LCC-Win32.

        * gmodule/testgmodule.c:
        Handle Windows dll names.

1998-10-25  Raja R Harinath  <harinath@cs.umn.edu>

	* gmodule.h: Remove `#pragma }'.
	* gmoduleconf.h.in: Likewise.

Wed Oct 21 19:58:27 1998  Tim Janik  <timj@gtk.org>

	* gmodule.c (g_module_symbol): fixed a string pointer bug that could
 	cause garbage error messages from g_module_symbol() for systems that
	NEED_USCORE.

Mon Sep 21 01:54:48 1998  Tim Janik  <timj@gtk.org>

	* gmodule.h: 
	* gmodule.c: renamed old _de_init functionality to _unload.
	modules are now expected to export:
	G_MODULE_EXPORT const gchar* g_module_check_init (GModule *module);
	and
	G_MODULE_EXPORT void g_module_unload (GModule *module);
	returning a string other than NULL from g_module_check_init() will
 	prevent the module from being loaded. a call to g_module_make_resident()
	from g_module_unload() will prevent the module from being unloaded and
	still make it resident.

Thu Sep 17 06:34:22 1998  Tim Janik  <timj@gtk.org>

	* gmodule.h: 
	* gmodule.c: implemented g_module_make_resident() which can be
	used to make modules resident.
	fixed a buglet about the optional "g_module_de_init" function in
	modules, which could get invoked twice on very obscure occasions.

Tue Sep 15 14:57:30 1998  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am: Update to libtool-1.2b,
	change library versioning scheme to drop LT_RELEASE
	from the -l line, while keeping it in the soname.

Thu Aug 20 07:08:16 1998  Tim Janik  <timj@gtk.org>

	* gmodule.c: provide no operation implementation for the underlying
	_g_module_* functions, so we at least compile on systems that have
 	neither of G_MODULE_IMPL_DL or G_MODULE_IMPL_DLD.

Mon Aug 17 03:41:52 1998  Tim Janik  <timj@gtk.org>

	* gmodule.h:
	* gmodule.c (g_module_open): changed the return type for the
	GModuleCheckInit function to be a string, describing the error
	condition.
	(g_module_symbol): show the failing symbol on error messages.

Fri Aug 14 02:24:39 1998  Tim Janik  <timj@gtk.org>

	* Makefile.am: feature the G_LOG_DOMAIN macro to set the log domain
	to "GModule" upon compilation. we currently have to add this definition
	to the DEFS variable.
	* testgmodule.c: we need an ugly #undef G_LOG_DOMAIN at the start
	of this file currently, since automake doesn't support per target
	_CFLAGS yet.

Mon Aug 10 03:35:57 1998  Tim Janik  <timj@gtk.org>

	* gmodule.c: minor changes to internal interface.
	* gmodule-dl.c: 
	* gmodule-dld.c: put some comments into the files, and provided
	better error checking for shl_findsym(). whish i had a system to
 	test this stuff on.

Mon Aug 10 02:18:31 1998  Tim Janik  <timj@gtk.org>

	* Makefile.am (lib_LTLIBRARIES): for now, skip the dependency on
	-lglib for libgmodule-1.1.la, libgplugin_a.la and libgplugin_b.la
	since this clashes with inter-library-dependencies for not installed
	libraries. glib-config takes care of this for the usuall case, but
	there needs to be a better way...

Sun Aug  9 15:57:38 1998  Tim Janik  <timj@gtk.org>

	* testgmodule.c: test program for GModule.
	* libgplugin_a.c: 
	* libgplugin_b.c: test plugins for testgmodule.c.

	* gmodule.h: 
	* gmodule.c: GModule library implementation, which is basically
	a wrapper about system specifc dynamic loading facilities.
	

Sun Aug  9 10:31:05 1998  Tim Janik  <timj@gtk.org>

	* ChangeLog start for gmodule.
