Commit 2aa1277d authored by Tor Lillqvist's avatar Tor Lillqvist

Support added for building using a GNU toolchain on Win32,

	i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).

	* README.win32: Updated.
	* build-dll makefile.cygwin tests/makefile.cygwin: New files.
	* glib.h glib.def glibconfig.h.win32 makefile.msc: Slight updates.
	* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
	* gmain.c gutils.c testglib.c tests/string-test.c: Test for
	NATIVE_WIN32, not _MSC_VER.
	* gmutex.c: Must declare g_thread_functions_for_glib_use as
	exported (using the GUTILS_C_VAR macro).
	* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
	* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
	* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
	value of g_thread_functions_for_glib_use (?).
	* makefile.msc tests/makefile.msc: Cosmetics.
parent 0269749a
1999-04-24 Tor Lillqvist <tml@iki.fi>
Support added for building using a GNU toolchain on Win32,
i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).
* README.win32: Updated.
* build-dll makefile.cygwin tests/makefile.cygwin: New files.
* glib.h glib.def glibconfig.h.win32: Slight updates.
* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
* gmain.c gutils.c testglib.c tests/string-test.c: Test for
NATIVE_WIN32, not _MSC_VER.
* gmutex.c: Must declare g_thread_functions_for_glib_use as
exported (using the GUTILS_C_VAR macro).
* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
value of g_thread_functions_for_glib_use (?).
* makefile.msc tests/makefile.msc: Cosmetics.
Fri Apr 23 14:29:25 BST 1999 Tony Gale <gale@gtk.org>
* glib.h: Fix typo in g_string_ncasecmp macro (by me).
......
1999-04-24 Tor Lillqvist <tml@iki.fi>
Support added for building using a GNU toolchain on Win32,
i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).
* README.win32: Updated.
* build-dll makefile.cygwin tests/makefile.cygwin: New files.
* glib.h glib.def glibconfig.h.win32: Slight updates.
* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
* gmain.c gutils.c testglib.c tests/string-test.c: Test for
NATIVE_WIN32, not _MSC_VER.
* gmutex.c: Must declare g_thread_functions_for_glib_use as
exported (using the GUTILS_C_VAR macro).
* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
value of g_thread_functions_for_glib_use (?).
* makefile.msc tests/makefile.msc: Cosmetics.
Fri Apr 23 14:29:25 BST 1999 Tony Gale <gale@gtk.org>
* glib.h: Fix typo in g_string_ncasecmp macro (by me).
......
1999-04-24 Tor Lillqvist <tml@iki.fi>
Support added for building using a GNU toolchain on Win32,
i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).
* README.win32: Updated.
* build-dll makefile.cygwin tests/makefile.cygwin: New files.
* glib.h glib.def glibconfig.h.win32: Slight updates.
* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
* gmain.c gutils.c testglib.c tests/string-test.c: Test for
NATIVE_WIN32, not _MSC_VER.
* gmutex.c: Must declare g_thread_functions_for_glib_use as
exported (using the GUTILS_C_VAR macro).
* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
value of g_thread_functions_for_glib_use (?).
* makefile.msc tests/makefile.msc: Cosmetics.
Fri Apr 23 14:29:25 BST 1999 Tony Gale <gale@gtk.org>
* glib.h: Fix typo in g_string_ncasecmp macro (by me).
......
1999-04-24 Tor Lillqvist <tml@iki.fi>
Support added for building using a GNU toolchain on Win32,
i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).
* README.win32: Updated.
* build-dll makefile.cygwin tests/makefile.cygwin: New files.
* glib.h glib.def glibconfig.h.win32: Slight updates.
* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
* gmain.c gutils.c testglib.c tests/string-test.c: Test for
NATIVE_WIN32, not _MSC_VER.
* gmutex.c: Must declare g_thread_functions_for_glib_use as
exported (using the GUTILS_C_VAR macro).
* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
value of g_thread_functions_for_glib_use (?).
* makefile.msc tests/makefile.msc: Cosmetics.
Fri Apr 23 14:29:25 BST 1999 Tony Gale <gale@gtk.org>
* glib.h: Fix typo in g_string_ncasecmp macro (by me).
......
1999-04-24 Tor Lillqvist <tml@iki.fi>
Support added for building using a GNU toolchain on Win32,
i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).
* README.win32: Updated.
* build-dll makefile.cygwin tests/makefile.cygwin: New files.
* glib.h glib.def glibconfig.h.win32: Slight updates.
* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
* gmain.c gutils.c testglib.c tests/string-test.c: Test for
NATIVE_WIN32, not _MSC_VER.
* gmutex.c: Must declare g_thread_functions_for_glib_use as
exported (using the GUTILS_C_VAR macro).
* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
value of g_thread_functions_for_glib_use (?).
* makefile.msc tests/makefile.msc: Cosmetics.
Fri Apr 23 14:29:25 BST 1999 Tony Gale <gale@gtk.org>
* glib.h: Fix typo in g_string_ncasecmp macro (by me).
......
1999-04-24 Tor Lillqvist <tml@iki.fi>
Support added for building using a GNU toolchain on Win32,
i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).
* README.win32: Updated.
* build-dll makefile.cygwin tests/makefile.cygwin: New files.
* glib.h glib.def glibconfig.h.win32: Slight updates.
* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
* gmain.c gutils.c testglib.c tests/string-test.c: Test for
NATIVE_WIN32, not _MSC_VER.
* gmutex.c: Must declare g_thread_functions_for_glib_use as
exported (using the GUTILS_C_VAR macro).
* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
value of g_thread_functions_for_glib_use (?).
* makefile.msc tests/makefile.msc: Cosmetics.
Fri Apr 23 14:29:25 BST 1999 Tony Gale <gale@gtk.org>
* glib.h: Fix typo in g_string_ncasecmp macro (by me).
......
1999-04-24 Tor Lillqvist <tml@iki.fi>
Support added for building using a GNU toolchain on Win32,
i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).
* README.win32: Updated.
* build-dll makefile.cygwin tests/makefile.cygwin: New files.
* glib.h glib.def glibconfig.h.win32: Slight updates.
* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
* gmain.c gutils.c testglib.c tests/string-test.c: Test for
NATIVE_WIN32, not _MSC_VER.
* gmutex.c: Must declare g_thread_functions_for_glib_use as
exported (using the GUTILS_C_VAR macro).
* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
value of g_thread_functions_for_glib_use (?).
* makefile.msc tests/makefile.msc: Cosmetics.
Fri Apr 23 14:29:25 BST 1999 Tony Gale <gale@gtk.org>
* glib.h: Fix typo in g_string_ncasecmp macro (by me).
......
1999-04-24 Tor Lillqvist <tml@iki.fi>
Support added for building using a GNU toolchain on Win32,
i.e. gcc -mno-cygwin on cygwin (a.k.a. mingw32, using egcs-1.1.2).
* README.win32: Updated.
* build-dll makefile.cygwin tests/makefile.cygwin: New files.
* glib.h glib.def glibconfig.h.win32: Slight updates.
* gmain.c: No need to include <fcntl.h> and <io.h> on Win32.
* gmain.c gutils.c testglib.c tests/string-test.c: Test for
NATIVE_WIN32, not _MSC_VER.
* gmutex.c: Must declare g_thread_functions_for_glib_use as
exported (using the GUTILS_C_VAR macro).
* gutils.c gmodule/libgplugin_[ab].c: LibMain not needed.
* gmodule/gmoduleconf.h.win32: Need underscore with gcc.
* gthread/gthread.c: With gcc on Win32, must use memcpy to assign
value of g_thread_functions_for_glib_use (?).
* makefile.msc tests/makefile.msc: Cosmetics.
Fri Apr 23 14:29:25 BST 1999 Tony Gale <gale@gtk.org>
* glib.h: Fix typo in g_string_ncasecmp macro (by me).
......
......@@ -5,32 +5,35 @@ Win32 API only, and not any POSIX emulation layer except that provided
by the Microsoft runtime C library. Additionally, a pthreads emulation
library is used.
As for now, to build GLib on Win32, you need the Microsoft compiler
and tools. Both the compiler from MSVC 5.0 and from MSVC 6.0 have been
used successfully.
To build GLib on Win32, you can use either the Microsoft compiler and
tools, or egcs-1.1.2 running under cygwin-b20.1. Both the compiler
from MSVC 5.0 and from MSVC 6.0 have been used successfully. If you
build with egcs, note that the produced executables and DLLs do *not*
require the cygwin dll ("mingw32"). That's the whole point of this
porting effort, more or less.
The egcs support was added quite recently, but seems to work in all
respects. Debugging with gdk works.
Before building you must get the pthreads library for Windows from
http://sourceware.cygnus.com/pthreads-win32/. The pthreads-win32
snapshot from 1999-03-16 is mostly OK. Edit the location of the
pthreads library and include files in makefile.msc. Also edit the BIN
definition in makefile.msc.
snapshot from 1999-04-07 is the one that should be used. Edit the
location of the pthreads library and include files in
makefile.msc.
Build with `nmake -f makefile.msc`. Install with `nmake -f
makefile.msc install`.
If using the Microsoft toolchain, build with `nmake -f
makefile.msc`. Install with `nmake -f makefile.msc install`.
If using egcs, build using `make -f makefile.cygwin`.
To test the GLib functions, go to the tests subdirectory and enter
`nmake -f makefile.msc check`.
Support for building using the cygwin tools (without depending on the
cygwin runtime, i.e. "mingw32"), and maybe LCC-Win32 might be added
later. When using the cygwin tools *with* the cygwin runtime the
normal Unix configuration method should work as if on Unix (knock on
wood).
If you would want to use the cygwin tools to generate executables that
*do* usethe cygwin runtime the normal Unix configuration method should
work as if on Unix (knock on wood).
With a little work, it might be possible to use the ./configure
mechanism also with a "mingw32" configuration. I.e. building GLib for
Win32 would use the cygwin tools (and runtime), but the produced
libraries would not depend on the cygwin runtime being present.
mechanism also with a "mingw32" configuration.
The following preprocessor macros are used for conditional compilation
related to Win32:
......@@ -42,17 +45,20 @@ related to Win32:
- NATIVE_WIN32 is defined when compiling for Win32, *and* without
any POSIX emulation, other that to the extent provided by the
(Microsoft) C library, or the pthreads-win32 library. For instance,
pathnames use the native Windows syntax.
bundled Microsoft C library and the pthreads-win32 library. For
instance, pathnames are in the native Windows syntax.
- _MSC_VER is defined when using the Microsoft compiler.
The Win32 port uses the combination with both of those on.
Currently the Win32 port uses the combination with all three of those
on, but eventually "gcc -mno-cygwin" will be supported also, and in
that case _MSC_VER wouldn't be defined.
Additionally, there are the compiler-specific macros:
- _MSC_VER is defined when using the Microsoft compiler
- __GNUC__ is defined when using GCC (i.e. egcs)
Some of the usage of these macros is probably a bit mixed up, and will
have to be straightened out when actually trying other combinations.
Some of the usage of these macros was a bit mixed up, and had to be
straightened out when adding the gcc support. In particular, I used to
check for _MSC_VER in some places where I really wanted to check for
the Microsoft C library, and those checks has now been changed to
NATIVE_WIN32.
The pthreads for Win32 package that the thread support uses isn't
quite ready yet, and thus threads really should not be relied upon.
#!/bin/sh
# Temporary hack until building dlls with gcc -mno-cygwin is easier
LD=ld
DLLTOOL=dlltool
AS=as
library=$1; shift
version=$1; shift;
def=$1; shift
ldargs="$*"
defswitch=""
[ -n "$def" -a "$def" != '-' ] && defswitch="--def $def"
libname=$library
[ $version != '-' ] && libname=$library-$version
dllfile=$libname.dll
for F in $ldargs; do
case $F in
*.o) objs="$objs $F";;
esac
done
$LD -s --base-file $library.base --dll -o $dllfile $ldargs -e _DllMain@12 -lmingw32
$DLLTOOL --as=$AS --dllname $dllfile $defswitch --base-file $library.base --output-exp $library.exp $objs
$LD -s --base-file $library.base $library.exp --dll -o $dllfile $ldargs -e _DllMain@12 -lmingw32
$DLLTOOL --as=$AS --dllname $dllfile $defswitch --base-file $library.base --output-exp $library.exp $objs
$LD $library.exp --dll -o $dllfile $ldargs -e _DllMain@12 -lmingw32
$DLLTOOL --as=$AS --dllname $dllfile $defswitch --output-lib lib$libname.a $objs
rm $library.base $library.exp
......@@ -56,7 +56,6 @@ EXPORTS
g_date_is_last_of_month
g_date_is_leap_year
g_date_julian
g_date_julian
g_date_monday_week_of_year
g_date_monday_weeks_in_year
g_date_new
......@@ -377,9 +376,13 @@ EXPORTS
g_string_new
g_string_prepend
g_string_prepend_c
g_string_readline
g_string_readline_buffered
g_string_sized_new
g_string_sprintf
g_string_sprintfa
g_string_tokenise
g_string_tokenise_free
g_string_truncate
g_string_up
g_strjoinv
......
......@@ -2750,8 +2750,10 @@ GIOChannel *g_io_channel_win32_new_stream_socket (int socket);
*/
#ifdef NATIVE_WIN32
# define MAXPATHLEN 1024
# ifdef _MSC_VER
#ifdef _MSC_VER
typedef int pid_t;
#endif
/* These POSIXish functions are available in the Microsoft C library
* prefixed with underscore (which of course technically speaking is
......@@ -2768,6 +2770,9 @@ typedef int pid_t;
# define getcwd _getcwd
# define getpid _getpid
# define access _access
#ifdef __GNUC__
# define stat _stat
#endif
# define open _open
# define read _read
# define write _write
......@@ -2802,7 +2807,6 @@ DIR* gwin_opendir (const gchar *dirname);
struct dirent* gwin_readdir (DIR *dir);
void gwin_rewinddir (DIR *dir);
gint gwin_closedir (DIR *dir);
# endif /* _MSC_VER */
#endif /* NATIVE_WIN32 */
......
......@@ -56,7 +56,6 @@ EXPORTS
g_date_is_last_of_month
g_date_is_leap_year
g_date_julian
g_date_julian
g_date_monday_week_of_year
g_date_monday_weeks_in_year
g_date_new
......@@ -377,9 +376,13 @@ EXPORTS
g_string_new
g_string_prepend
g_string_prepend_c
g_string_readline
g_string_readline_buffered
g_string_sized_new
g_string_sprintf
g_string_sprintfa
g_string_tokenise
g_string_tokenise_free
g_string_truncate
g_string_up
g_strjoinv
......
......@@ -2750,8 +2750,10 @@ GIOChannel *g_io_channel_win32_new_stream_socket (int socket);
*/
#ifdef NATIVE_WIN32
# define MAXPATHLEN 1024
# ifdef _MSC_VER
#ifdef _MSC_VER
typedef int pid_t;
#endif
/* These POSIXish functions are available in the Microsoft C library
* prefixed with underscore (which of course technically speaking is
......@@ -2768,6 +2770,9 @@ typedef int pid_t;
# define getcwd _getcwd
# define getpid _getpid
# define access _access
#ifdef __GNUC__
# define stat _stat
#endif
# define open _open
# define read _read
# define write _write
......@@ -2802,7 +2807,6 @@ DIR* gwin_opendir (const gchar *dirname);
struct dirent* gwin_readdir (DIR *dir);
void gwin_rewinddir (DIR *dir);
gint gwin_closedir (DIR *dir);
# endif /* _MSC_VER */
#endif /* NATIVE_WIN32 */
......
......@@ -54,11 +54,6 @@
#include <windows.h>
#endif /* NATIVE_WIN32 */
#ifdef _MSC_VER
#include <fcntl.h>
#include <io.h>
#endif /* _MSC_VER */
/* Types */
typedef struct _GTimeoutData GTimeoutData;
......@@ -576,7 +571,7 @@ g_source_remove_by_funcs_user_data (GSourceFuncs *funcs,
void
g_get_current_time (GTimeVal *result)
{
#ifndef _MSC_VER
#ifndef NATIVE_WIN32
struct timeval r;
g_return_if_fail (result != NULL);
......
......@@ -81,16 +81,6 @@ const guint glib_micro_version = GLIB_MICRO_VERSION;
const guint glib_interface_age = GLIB_INTERFACE_AGE;
const guint glib_binary_age = GLIB_BINARY_AGE;
#if defined (NATIVE_WIN32) && defined (__LCC__)
int __stdcall
LibMain (void *hinstDll,
unsigned long dwReason,
void *reserved)
{
return 1;
}
#endif /* NATIVE_WIN32 && __LCC__ */
void
g_atexit (GVoidFunc func)
{
......@@ -736,7 +726,6 @@ g_iochannel_wakeup_peer (GIOChannel *channel)
#endif /* Old IO Channels */
#ifdef NATIVE_WIN32
#ifdef _MSC_VER
int
gwin_ftruncate (gint fd,
......@@ -898,6 +887,4 @@ gwin_closedir (DIR *dir)
return 0;
}
#endif /* _MSC_VER */
#endif /* NATIVE_WIN32 */
/* glibconfig.h.win32 */
/* Handcrafted for Microsoft C. */
/* Handcrafted for Microsoft C and gcc -mno-cygwin ("mingw32"). */
#ifndef GLIBCONFIG_H
#define GLIBCONFIG_H
......@@ -65,11 +65,22 @@ typedef unsigned int guint32;
#define G_HAVE_GINT64 1
/* These are compiler specific */
#ifdef _MSC_VER
typedef __int64 gint64;
typedef unsigned __int64 guint64;
#define G_GINT64_CONSTANT(val) (val##i64)
#elif __GNUC__
typedef long long gint64;
typedef unsigned long long guint64;
#define G_GINT64_CONSTANT(val) (val##LL)
#endif
/* These depend on the C library. Using this file means the we
* use the (bundled) Microsoft msvcrt.dll.
*/
#define G_GINT64_FORMAT "I64i"
#define G_GUINT64_FORMAT "I64u"
#define G_GINT64_CONSTANT(val) (val##i64)
#define GPOINTER_TO_INT(p) ((gint)(p))
#define GPOINTER_TO_UINT(p) ((guint)(p))
......@@ -82,7 +93,9 @@ typedef unsigned __int64 guint64;
#define g_memmove(d,s,n) G_STMT_START { memmove ((d), (s), (n)); } G_STMT_END
#define G_HAVE_ALLOCA 1
#ifdef _MSC_VER
#define alloca _alloca
#endif
#define GLIB_MAJOR_VERSION 1
#define GLIB_MINOR_VERSION 3
......@@ -106,7 +119,7 @@ typedef unsigned __int64 guint64;
* printf ("sizeof (pthread_mutex_t) = %d\n", sizeof (pthread_mutex_t));
* printf ("PTHREAD_MUTEX_INITIALIZER = ");
* for (i = 0; i < sizeof (pthread_mutex_t); i++)
* printf ("%u, ", (unsigned) ((char *) &m)[i]);
* printf ("%u, ", (unsigned) ((unsigned char *) &m)[i]);
* printf ("\n");
* exit(0);
* }
......@@ -119,7 +132,7 @@ struct _GStaticMutex
struct _GMutex *runtime_mutex;
union {
/* The size of the pad array should be sizeof (pthread_mutext_t) */
/* This value corresponds to the 1999-03-16 version of pthreads-win32 */
/* This value corresponds to the 1999-04-07 version of pthreads-win32 */
char pad[4];
double dummy_double;
void *dummy_pointer;
......@@ -127,7 +140,7 @@ struct _GStaticMutex
} aligned_pad_u;
};
/* This should be NULL followed by the bytes in PTHREAD_MUTEX_INITIALIZER */
#define G_STATIC_MUTEX_INIT { NULL, { { 1, 0, 0, 0 } } }
#define G_STATIC_MUTEX_INIT { NULL, { { 255, 255, 255, 255 } } }
#define g_static_mutex_get_mutex(mutex) \
(g_thread_use_default_impl ? ((GMutex*) &((mutex)->aligned_pad_u)) : \
g_static_mutex_get_mutex_impl (&((mutex)->runtime_mutex)))
......@@ -172,7 +185,7 @@ struct _GStaticMutex
/* Define if this is Win32, possibly using the Cygwin emulation layer. */
#define WIN32 1
/* Define if this is Win32 without Cygwin. */
/* Define if this is Win32 using the Microsoft C runtime. */
#define NATIVE_WIN32 1
#ifdef __cplusplus
......
......@@ -54,11 +54,6 @@
#include <windows.h>
#endif /* NATIVE_WIN32 */
#ifdef _MSC_VER
#include <fcntl.h>
#include <io.h>
#endif /* _MSC_VER */
/* Types */
typedef struct _GTimeoutData GTimeoutData;
......@@ -576,7 +571,7 @@ g_source_remove_by_funcs_user_data (GSourceFuncs *funcs,
void
g_get_current_time (GTimeVal *result)
{
#ifndef _MSC_VER
#ifndef NATIVE_WIN32
struct timeval r;
g_return_if_fail (result != NULL);
......
......@@ -27,16 +27,6 @@
#include <gmodule.h>
#include <stdlib.h>
#if defined (NATIVE_WIN32) && defined (__LCC__)
int __stdcall
LibMain(void *hinstDll,
unsigned long dwReason,
void *reserved)
{
return 1;
}
#endif /* NATIVE_WIN32 && __LCC__ */
G_MODULE_EXPORT void
gplugin_a_func (void)
{
......
......@@ -26,16 +26,6 @@
#include <gmodule.h>
#if defined (NATIVE_WIN32) && defined (__LCC__)
int __stdcall
LibMain(void *hinstDll,
unsigned long dwReason,
void *reserved)
{
return 1;
}
#endif /* NATIVE_WIN32 && __LCC__ */
G_MODULE_EXPORT const gchar*
g_module_check_init (GModule *module)
{
......
......@@ -50,7 +50,7 @@ static void g_thread_fail (void);
gboolean g_thread_use_default_impl = TRUE;
gboolean g_threads_got_initialized = FALSE;
GThreadFunctions g_thread_functions_for_glib_use = {
GUTILS_C_VAR GThreadFunctions g_thread_functions_for_glib_use = {
(GMutex*(*)())g_thread_fail, /* mutex_new */
NULL, /* mutex_lock */
NULL, /* mutex_trylock */
......
......@@ -64,8 +64,11 @@ g_thread_init (GThreadFunctions* init)
else
g_thread_use_default_impl = FALSE;
#if defined (WIN32) && defined (__GNUC__)
memcpy(&g_thread_functions_for_glib_use, init, sizeof (*init));
#else
g_thread_functions_for_glib_use = *init;
#endif
/* It is important, that g_threads_got_initialized is not set before the
* thread initialization functions of the different modules are called
*/
......
......@@ -81,16 +81,6 @@ const guint glib_micro_version = GLIB_MICRO_VERSION;
const guint glib_interface_age = GLIB_INTERFACE_AGE;
const guint glib_binary_age = GLIB_BINARY_AGE;
#if defined (NATIVE_WIN32) && defined (__LCC__)
int __stdcall
LibMain (void *hinstDll,
unsigned long dwReason,
void *reserved)
{
return 1;
}
#endif /* NATIVE_WIN32 && __LCC__ */
void
g_atexit (GVoidFunc func)
{
......@@ -736,7 +726,6 @@ g_iochannel_wakeup_peer (GIOChannel *channel)
#endif /* Old IO Channels */
#ifdef NATIVE_WIN32
#ifdef _MSC_VER
int
gwin_ftruncate (gint fd,
......@@ -898,6 +887,4 @@ gwin_closedir (DIR *dir)
return 0;
}
#endif /* _MSC_VER */
#endif /* NATIVE_WIN32 */
## Makefile for building the GLib, gmodule and gthread DLLs with
## egcs on cygwin.
## Use: make -f makefile.cygwin install
# Change this to wherever you want to install the DLLs. This directory
# should be in your PATH.
BIN = /bin
# This is the location of pthreads for Win32,
# see http://sourceware.cygnus.com/pthreads-win32/
PTHREADS = ../pthreads-snap-1999-04-07
PTHREAD_LIB = -L$(PTHREADS) -lpthread
PTHREAD_INC = -I $(PTHREADS)
################################################################
# Nothing much configurable below
CC = gcc -mno-cygwin -mpentium
CP = cp
LD = ld
DLLTOOL = dlltool
INSTALL = install
GLIB_VER = 1.3
CFLAGS = -g -O2 -I. -DHAVE_CONFIG_H
all : \
glibconfig.h \
config.h \
glib-$(GLIB_VER).dll \
gthread-$(GLIB_VER).dll \
gmodule/gmoduleconf.h \
gmodule-$(GLIB_VER).dll \
testglib.exe \
testgmodule.exe \
testgdate.exe \
testgdateparser.exe \
testgthread.exe
install : all
$(INSTALL) glib-$(GLIB_VER).dll $(BIN)
$(INSTALL) gmodule-$(GLIB_VER).dll $(BIN)
$(INSTALL) gthread-$(GLIB_VER).dll $(BIN)
glib_OBJECTS = \
garray.o \
gcache.o \
gcompletion.o \
gdataset.o \
gdate.o \
gerror.o \
ghook.o \
ghash.o \
giochannel.o \
giowin32.o \
glist.o \
gmain.o \
gmem.o \
gmessages.o \
gmutex.o \
gnode.o \
gprimes.o \
gqueue.o \
grand.o \
gslist.o \
gstack.o \
gtimer.o \
gtree.o \
grel.o \
gstring.o \
gstrfuncs.o \
gscanner.o \
gutils.o
glib-$(GLIB_VER).dll : $(glib_OBJECTS) glib.def
./build-dll glib $(GLIB_VER) glib.def $(glib_OBJECTS) -lmsvcrt -lkernel32 -luser32 -ladvapi32 -lwsock32
glibconfig.h: glibconfig.h.win32
$(CP) glibconfig.h.win32 glibconfig.h
config.h: config.h.win32
$(CP) config.h.win32 config.h
.c.o :
$(CC) $(CFLAGS) -c -DGLIB_COMPILATION -DG_LOG_DOMAIN=g_log_domain_glib $<
gmodule_OBJECTS = \
gmodule.o
gmodule-$(GLIB_VER).dll : $(gmodule_OBJECTS) gmodule/gmodule.def
./build-dll gmodule $(GLIB_VER) gmodule/gmodule.def $(gmodule_OBJECTS) -L. -lglib-$(GLIB_VER) -lmsvcrt -lkernel32 -luser32 -ladvapi32 -lwsock32
gmodule.o : gmodule/gmodule.c gmodule/gmodule-win32.c
$(CC) $(CFLAGS) -Igmodule -c -DG_LOG_DOMAIN=g_log_domain_gmodule gmodule/gmodule.c
gmodule/gmoduleconf.h: gmodule/gmoduleconf.h.win32
$(CP) gmodule/gmoduleconf.h.win32 gmodule/gmoduleconf.h
gthread_OBJECTS = \
gthread.o
gthread-$(GLIB_VER).dll : $(gthread_OBJECTS) glib-$(GLIB_VER).dll gthread/gthread.def
./build-dll gthread $(GLIB_VER) gthread/gthread.def $(gthread_OBJECTS) -L. -lglib-$(GLIB_VER) $(PTHREAD_LIB) -lmsvcrt -lkernel32 -luser32 -ladvapi32 -lwsock32
gthread.o : gthread/gthread.c gthread/gthread-posix.c
$(CC) $(CFLAGS) $(PTHREAD_INC) -DG_LOG_DOMAIN=\"GThread\" -c gthread/gthread.c
testglib.exe : glib-$(GLIB_VER).dll testglib.o
$(CC) $(CFLAGS) -o testglib testglib.o -L. -lglib-$(GLIB_VER) -lmsvcrt $(LDFLAGS)
testglib.o : testglib.c
$(CC) -c $(CFLAGS) testglib.c
testgdate.exe : glib-$(GLIB_VER).dll testgdate.o
$(CC) $(CFLAGS) -o testgdate.exe testgdate.o -L. -lglib-$(GLIB_VER) -lmsvcrt $(LDFLAGS)
testgdate.o : testgdate.c
$(CC) -c $(CFLAGS) testgdate.c
testgdateparser.exe : glib-$(GLIB_VER).dll testgdateparser.o
$(CC) $(CFLAGS) -o testgdateparser.exe testgdateparser.o -L. -lglib-$(GLIB_VER) -lmsvcrt $(LDFLAGS)
testgdateparser.o : testgdateparser.c
$(CC) -c $(CFLAGS) testgdateparser.c
testgmodule.exe : glib-$(GLIB_VER).dll gmodule-$(GLIB_VER).dll testgmodule.o libgplugin_a.dll libgplugin_b.dll
# Wow, do we really have to do it like this to get some symbols
# exported from a .exe? Apparently yes. Does the __declspec(dllexport)
# actually do anything in egcs-1.1.2?
$(CC) $(CFLAGS) -Wl,--base-file,testgmodule.base -o testgmodule.exe testgmodule.o -L. -lglib-$(GLIB_VER) -lgmodule-$(GLIB_VER) -lmsvcrt $(LDFLAGS)
$(DLLTOOL) --base-file testgmodule.base --output-exp testgmodule.exp testgmodule.o
$(CC) $(CFLAGS) -Wl,--base-file,testgmodule.base,testgmodule.exp -o testgmodule.exe testgmodule.o -L. -lglib-$(GLIB_VER) -lgmodule-$(GLIB_VER) -lmsvcrt $(LDFLAGS)