+Sat May 8 01:52:29 CDT 1999 Shawn T. Amundson
+
+ * configure.in
+ gerror.c
+ gmain.c
+ gstrfuncs.c
+ gutils.c
+ ltconfig
+ ltmain.sh
+ gmodule/Makefile.am
+ gmodule/gmodule.c
+ gmodule/gmoduleconf.h.in
+ gmodule/gmodule-beos.c
+ gthread/Makefile.am: Port to BeOS by myself and Richard Offer.
+
1999-05-06 Tor Lillqvist <tml@iki.fi>
* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
+Sat May 8 01:52:29 CDT 1999 Shawn T. Amundson
+
+ * configure.in
+ gerror.c
+ gmain.c
+ gstrfuncs.c
+ gutils.c
+ ltconfig
+ ltmain.sh
+ gmodule/Makefile.am
+ gmodule/gmodule.c
+ gmodule/gmoduleconf.h.in
+ gmodule/gmodule-beos.c
+ gthread/Makefile.am: Port to BeOS by myself and Richard Offer.
+
1999-05-06 Tor Lillqvist <tml@iki.fi>
* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
+Sat May 8 01:52:29 CDT 1999 Shawn T. Amundson
+
+ * configure.in
+ gerror.c
+ gmain.c
+ gstrfuncs.c
+ gutils.c
+ ltconfig
+ ltmain.sh
+ gmodule/Makefile.am
+ gmodule/gmodule.c
+ gmodule/gmoduleconf.h.in
+ gmodule/gmodule-beos.c
+ gthread/Makefile.am: Port to BeOS by myself and Richard Offer.
+
1999-05-06 Tor Lillqvist <tml@iki.fi>
* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
+Sat May 8 01:52:29 CDT 1999 Shawn T. Amundson
+
+ * configure.in
+ gerror.c
+ gmain.c
+ gstrfuncs.c
+ gutils.c
+ ltconfig
+ ltmain.sh
+ gmodule/Makefile.am
+ gmodule/gmodule.c
+ gmodule/gmoduleconf.h.in
+ gmodule/gmodule-beos.c
+ gthread/Makefile.am: Port to BeOS by myself and Richard Offer.
+
1999-05-06 Tor Lillqvist <tml@iki.fi>
* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
+Sat May 8 01:52:29 CDT 1999 Shawn T. Amundson
+
+ * configure.in
+ gerror.c
+ gmain.c
+ gstrfuncs.c
+ gutils.c
+ ltconfig
+ ltmain.sh
+ gmodule/Makefile.am
+ gmodule/gmodule.c
+ gmodule/gmoduleconf.h.in
+ gmodule/gmodule-beos.c
+ gthread/Makefile.am: Port to BeOS by myself and Richard Offer.
+
1999-05-06 Tor Lillqvist <tml@iki.fi>
* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
+Sat May 8 01:52:29 CDT 1999 Shawn T. Amundson
+
+ * configure.in
+ gerror.c
+ gmain.c
+ gstrfuncs.c
+ gutils.c
+ ltconfig
+ ltmain.sh
+ gmodule/Makefile.am
+ gmodule/gmodule.c
+ gmodule/gmoduleconf.h.in
+ gmodule/gmodule-beos.c
+ gthread/Makefile.am: Port to BeOS by myself and Richard Offer.
+
1999-05-06 Tor Lillqvist <tml@iki.fi>
* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
+Sat May 8 01:52:29 CDT 1999 Shawn T. Amundson
+
+ * configure.in
+ gerror.c
+ gmain.c
+ gstrfuncs.c
+ gutils.c
+ ltconfig
+ ltmain.sh
+ gmodule/Makefile.am
+ gmodule/gmodule.c
+ gmodule/gmoduleconf.h.in
+ gmodule/gmodule-beos.c
+ gthread/Makefile.am: Port to BeOS by myself and Richard Offer.
+
1999-05-06 Tor Lillqvist <tml@iki.fi>
* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
+Sat May 8 01:52:29 CDT 1999 Shawn T. Amundson
+
+ * configure.in
+ gerror.c
+ gmain.c
+ gstrfuncs.c
+ gutils.c
+ ltconfig
+ ltmain.sh
+ gmodule/Makefile.am
+ gmodule/gmodule.c
+ gmodule/gmoduleconf.h.in
+ gmodule/gmodule-beos.c
+ gthread/Makefile.am: Port to BeOS by myself and Richard Offer.
+
1999-05-06 Tor Lillqvist <tml@iki.fi>
* makefile.msc.in makefile.cygwin.in glibconfig.h.win32.in
#undef HAVE_LONG_DOUBLE
#undef HAVE_POLL
#undef HAVE_PWD_H
+#undef HAVE_PW_GECOS
#undef HAVE_SYS_PARAM_H
#undef HAVE_SYS_POLL_H
#undef HAVE_SYS_SELECT_H
#undef G_THREAD_SOURCE
+#undef GLIB_NATIVE_BEOS
+
/* #undef PACKAGE */
/* #undef VERSION */
AC_CANONICAL_HOST
+AC_MSG_CHECKING(for the BeOS)
+case $host in
+ *-*-beos*)
+ AC_DEFINE(GLIB_NATIVE_BEOS, 1)
+ glib_native_beos="yes"
+ AC_MSG_RESULT([$glib_native_beos])
+ ;;
+ default)
+ glib_native_beos="no"
+ AC_MSG_RESULT($glib_native_beos)
+ ;;
+esac
+
dnl figure debugging default, prior to $ac_help setup
dnl
AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
dnl *** g_module checks ***
dnl ***********************
G_MODULE_LIBS=
+G_MODULE_PLUGIN_LIBS=
G_MODULE_LDFLAGS=
dnl G_MODULE_IMPL= don't reset, so cmd-line can override
G_MODULE_NEED_USCORE=0
,)
,)
fi
+dnl *** load_image (BeOS)
+if test -z "$G_MODULE_IMPL" -a "x$glib_native_beos" = "xyes"; then
+ AC_CHECK_LIB(root, load_image,
+ G_MODULE_LIBS="-lbe -lroot -L\$(top_builddir_full)/.libs -lglib"
+ G_MODULE_PLUGIN_LIBS="-L\$(top_builddir_full)/gmodule/.libs -lgmodule"
+ G_MODULE_IMPL=G_MODULE_IMPL_BEOS
+,)
+fi
dnl *** dlopen() and dlsym() in libdl
if test -z "$G_MODULE_IMPL"; then
AC_CHECK_LIB(dl, dlopen,
fi
AC_SUBST(G_MODULE_IMPL)
AC_SUBST(G_MODULE_LIBS)
+AC_SUBST(G_MODULE_PLUGIN_LIBS)
AC_SUBST(G_MODULE_LDFLAGS)
AC_SUBST(G_MODULE_HAVE_DLERROR)
AC_SUBST(G_MODULE_NEED_USCORE)
AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2)
fi
+case $host in
+ *-*-beos*)
+ G_THREAD_LIBS="-lbe -lroot -L\$(top_builddir_full)/.libs -lglib "
+ ;;
+ *)
+ ;;
+esac
+
+
AC_MSG_CHECKING(thread related libraries)
AC_MSG_RESULT($G_THREAD_LIBS)
g_mutex_has_default="$mutex_has_default"
g_mutex_sizeof="$glib_cv_sizeof_gmutex"
g_mutex_contents="$glib_cv_byte_contents_gmutex"
+
+if test "x$glib_native_beos" = "xyes"; then
+ glib_native_beos_def="\$glib_native_beos_def
+#define GLIB_NATIVE_BEOS 1"
+fi
])
AC_OUTPUT([
void
g_on_error_stack_trace (const gchar *prg_name)
{
-#ifndef NATIVE_WIN32
+#if !defined(NATIVE_WIN32) && ! defined(GLIB_NATIVE_BEOS)
pid_t pid;
gchar buf[16];
gchar *args[4] = { "gdb", NULL, NULL, NULL };
static void
stack_trace (char **args)
{
-#ifndef NATIVE_WIN32
+#if !defined(NATIVE_WIN32) && !defined(GLIB_NATIVE_BEOS)
pid_t pid;
int in_fd[2];
int out_fd[2];
void
g_on_error_stack_trace (const gchar *prg_name)
{
-#ifndef NATIVE_WIN32
+#if !defined(NATIVE_WIN32) && ! defined(GLIB_NATIVE_BEOS)
pid_t pid;
gchar buf[16];
gchar *args[4] = { "gdb", NULL, NULL, NULL };
static void
stack_trace (char **args)
{
-#ifndef NATIVE_WIN32
+#if !defined(NATIVE_WIN32) && !defined(GLIB_NATIVE_BEOS)
pid_t pid;
int in_fd[2];
int out_fd[2];
void
g_on_error_stack_trace (const gchar *prg_name)
{
-#ifndef NATIVE_WIN32
+#if !defined(NATIVE_WIN32) && ! defined(GLIB_NATIVE_BEOS)
pid_t pid;
gchar buf[16];
gchar *args[4] = { "gdb", NULL, NULL, NULL };
static void
stack_trace (char **args)
{
-#ifndef NATIVE_WIN32
+#if !defined(NATIVE_WIN32) && !defined(GLIB_NATIVE_BEOS)
pid_t pid;
int in_fd[2];
int out_fd[2];
void
g_on_error_stack_trace (const gchar *prg_name)
{
-#ifndef NATIVE_WIN32
+#if !defined(NATIVE_WIN32) && ! defined(GLIB_NATIVE_BEOS)
pid_t pid;
gchar buf[16];
gchar *args[4] = { "gdb", NULL, NULL, NULL };
static void
stack_trace (char **args)
{
-#ifndef NATIVE_WIN32
+#if !defined(NATIVE_WIN32) && !defined(GLIB_NATIVE_BEOS)
pid_t pid;
int in_fd[2];
int out_fd[2];
#include <windows.h>
#endif /* NATIVE_WIN32 */
+#ifdef GLIB_NATIVE_BEOS
+#include <net/socket.h>
+#endif /* GLIB_NATIVE_BEOS */
+
/* Types */
typedef struct _GTimeoutData GTimeoutData;
#include <sys/select.h>
#endif /* HAVE_SYS_SELECT_H */
+#ifdef GLIB_NATIVE_BEOS
+#undef NO_FD_SET
+#endif /* GLIB_NATIVE_BEOS */
+
#ifndef NO_FD_SET
# define SELECT_MASK fd_set
#else /* !NO_FD_SET */
char *msg;
#ifdef HAVE_STRSIGNAL
+#ifdef GLIB_NATIVE_BEOS
+extern const char * strsignal(int);
+#else /* !GLIB_NATIVE_BEOS */
+ /* this is declared differently (const) in string.h on BeOS */
extern char *strsignal (int sig);
+#endif
return strsignal (signum);
#elif NO_SYS_SIGLIST
switch (signum)
if (pw)
{
g_user_name = g_strdup (pw->pw_name);
+#ifdef HAVE_PW_GECOS
g_real_name = g_strdup (pw->pw_gecos);
+#else
+ g_real_name = g_strdup (g_user_name);
+#endif
if (!g_home_dir)
g_home_dir = g_strdup (pw->pw_dir);
}
#include <windows.h>
#endif /* NATIVE_WIN32 */
+#ifdef GLIB_NATIVE_BEOS
+#include <net/socket.h>
+#endif /* GLIB_NATIVE_BEOS */
+
/* Types */
typedef struct _GTimeoutData GTimeoutData;
#include <sys/select.h>
#endif /* HAVE_SYS_SELECT_H */
+#ifdef GLIB_NATIVE_BEOS
+#undef NO_FD_SET
+#endif /* GLIB_NATIVE_BEOS */
+
#ifndef NO_FD_SET
# define SELECT_MASK fd_set
#else /* !NO_FD_SET */
gmodule-dld.c \
gmodule-os2.c \
gmodule-win32.c \
+ gmodule-beos.c \
gmoduleconf.h.win32
BUILT_SOURCES = gmoduleconf.h
libglib = $(top_builddir)/libglib.la # -lglib
+top_builddir_full=`cd \$(top_builddir); pwd`
+
lib_LTLIBRARIES = libgmodule.la libgplugin_a.la libgplugin_b.la
libgmodule_la_SOURCES = gmodule.c
libgplugin_a_la_SOURCES = libgplugin_a.c
libgplugin_a_la_LDFLAGS = @G_MODULE_LDFLAGS@ -avoid-version -module
-libgplugin_a_la_LIBADD = @G_MODULE_LIBS@ # $(libglib)
+libgplugin_a_la_LIBADD = @G_MODULE_LIBS@ @G_MODULE_PLUGIN_LIBS@ # $(libglib)
libgplugin_b_la_SOURCES = libgplugin_b.c
libgplugin_b_la_LDFLAGS = @G_MODULE_LDFLAGS@ -avoid-version -module
-libgplugin_b_la_LIBADD = @G_MODULE_LIBS@ # $(libglib)
+libgplugin_b_la_LIBADD = @G_MODULE_LIBS@ @G_MODULE_PLUGIN_LIBS@ # $(libglib)
noinst_PROGRAMS = testgmodule
testgmodule_LDFLAGS += @G_MODULE_LDFLAGS@
--- /dev/null
+/* GMODULE - GLIB wrapper code for dynamic module loading
+ * Copyright (C) 1998 Tim Janik
+ *
+ * BeOS GMODULE implementation
+ * Copyright (C) 1999 Richard Offer and Shawn T. Amundson (amundson@gtk.org)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+/*
+ * MT safe
+ */
+
+#include <be/kernel/image.h> /* image (aka DSO) handling functions... */
+
+/*
+ * The BeOS doesn't use the same symantics as Unix's dlopen....
+ *
+ */
+#ifndef RTLD_GLOBAL
+#define RTLD_GLOBAL 0
+#endif /* RTLD_GLOBAL */
+#ifndef RTLD_LAZY
+#define RTLD_LAZY 1
+#endif /* RTLD_LAZY */
+#ifndef RTLD_NOW
+#define RTLD_NOW 0
+#endif /* RTLD_NOW */
+
+
+/*
+ * Points to Ponder
+ *
+ * You can load the same DSO more than once, in which case you'll have
+ * different image_id's. While this means that we don't have to worry about
+ * reference counts, it could lead to problems in the future....
+ * richard.
+ */
+
+#include <Errors.h>
+#include <stdio.h>
+
+/* --- functions --- */
+static gpointer
+_g_module_open (const gchar *file_name,
+ gboolean bind_lazy)
+{
+ image_id handle;
+
+ handle = load_add_on (file_name);
+ if (handle < B_OK) {
+ g_module_set_error (g_strdup_printf("failed to load_add_on(%s), reason: %s",
+ (gchar *) file_name, strerror(handle)));
+ return NULL;
+ }
+
+ return (gpointer) handle;
+}
+
+static gpointer
+_g_module_self (void)
+{
+ image_info info;
+ int32 cookie = 0;
+ status_t status;
+
+ /* Is it always the first one? I'm guessing yes. */
+ if ((status = get_next_image_info(0, &cookie, &info)) == B_OK)
+ return (gpointer) info.id;
+ else
+ {
+ g_module_set_error (g_strdup_printf("get_next_image_info() for self failed, reason: %s", strerror(status)));
+ return NULL;
+ }
+}
+
+static void
+_g_module_close (gpointer handle,
+ gboolean is_unref)
+{
+ image_info info;
+ gchar *name;
+
+ if (unload_add_on((image_id) handle) != B_OK)
+ {
+ /* Try and get the name of the image. */
+ if (get_image_info((image_id) handle, &info) != B_OK)
+ name = g_strdup("(unknown)");
+ else
+ name = g_strdup (info.name);
+
+ g_module_set_error (g_strdup_printf("failed to unload_add_on(%s)",
+ name));
+ g_free (name);
+ }
+}
+
+static gpointer
+_g_module_symbol (gpointer handle,
+ const gchar *symbol_name)
+{
+ image_id id;
+ gpointer p;
+ status_t status;
+ image_info info;
+ gchar name[256];
+ int32 name_len;
+ int32 type;
+ int32 n;
+
+ id = (image_id) handle;
+
+ if ((status = get_image_info(id, &info)) != B_OK)
+ {
+ g_module_set_error (g_strdup_printf("failed get_image_info(), reason: %s", strerror(status)));
+ return NULL;
+ }
+
+ name_len = 256;
+ type = B_SYMBOL_TYPE_ANY;
+ n = 0;
+ while ((status = get_nth_image_symbol(id, n, name, &name_len, &type, (void **)&p)) == B_OK)
+ {
+ if (!strncmp (name, symbol_name, strlen(symbol_name)))
+ {
+ return p;
+ }
+
+ if (!strcmp (name, "_end"))
+ {
+ g_module_set_error (g_strdup_printf("g_module_symbol(): no symbol matching '%s'", symbol_name));
+ return NULL;
+ }
+
+ name_len = 256;
+ type = B_SYMBOL_TYPE_ANY;
+ n++;
+ }
+
+ g_module_set_error (g_strdup_printf("failed get_image_symbol(%s), reason: %s", symbol_name, strerror(status)));
+ return NULL;
+}
+
+static gchar*
+_g_module_build_path (const gchar *directory,
+ const gchar *module_name)
+{
+ printf("WARNING: _g_module_build_path() untested!\n");
+ if (directory && *directory) {
+ if (strncmp (module_name, "lib", 3) == 0)
+ return g_strconcat (directory, "/", module_name, NULL);
+ else
+ return g_strconcat (directory, "/lib", module_name, ".so", NULL);
+ } else if (strncmp (module_name, "lib", 3) == 0)
+ return g_strdup (module_name);
+ else
+ return g_strconcat ("lib", module_name, ".so", NULL);
+}
#include "gmodule-win32.c"
#elif (G_MODULE_IMPL == G_MODULE_IMPL_OS2)
#include "gmodule-os2.c"
+#elif (G_MODULE_IMPL == G_MODULE_IMPL_BEOS)
+#include "gmodule-beos.c"
#else
#undef CHECK_ERROR
#define CHECK_ERROR(rv) { g_module_set_error ("dynamic modules are " \
#define G_MODULE_IMPL_DLD 2
#define G_MODULE_IMPL_WIN32 3
#define G_MODULE_IMPL_OS2 4
+#define G_MODULE_IMPL_BEOS 5
#define G_MODULE_IMPL @G_MODULE_IMPL@
#undef G_MODULE_HAVE_DLERROR
char *msg;
#ifdef HAVE_STRSIGNAL
+#ifdef GLIB_NATIVE_BEOS
+extern const char * strsignal(int);
+#else /* !GLIB_NATIVE_BEOS */
+ /* this is declared differently (const) in string.h on BeOS */
extern char *strsignal (int sig);
+#endif
return strsignal (signum);
#elif NO_SYS_SIGLIST
switch (signum)
libglib = $(top_builddir)/libglib.la # -lglib
+top_builddir_full=`cd \$(top_builddir); pwd`
+
lib_LTLIBRARIES = libgthread.la
libgthread_la_SOURCES = gthread.c
if (pw)
{
g_user_name = g_strdup (pw->pw_name);
+#ifdef HAVE_PW_GECOS
g_real_name = g_strdup (pw->pw_gecos);
+#else
+ g_real_name = g_strdup (g_user_name);
+#endif
if (!g_home_dir)
g_home_dir = g_strdup (pw->pw_dir);
}
library_names_spec='${libname}.so'
dynamic_linker="$host_os ld.so"
shlibpath_var=LIBRARY_PATH
+ deplibs_check_method=pass_all
lt_cv_dlopen="load_add_on"
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
# }
# /* impgen.c ends here */
;;
+ *-*-beos*)
+ allow_undefined=no
+ ;;
*)
allow_undefined=yes
;;