mirror of
https://github.com/irssi/irssi.git
synced 2025-02-02 15:08:01 -05:00
Check if libtool creates libraries in .libs dir. Check if -lgmodule
doesn't work. #include "../config.h" instead of <config.h>, this should fix problems when config.h is found in some -I dir. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1125 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
0d62878d6e
commit
e66e10af19
@ -10,6 +10,7 @@
|
||||
#undef HAVE_SOCKS_H
|
||||
#undef HAVE_PL_PERL
|
||||
#undef HAVE_STATIC_PERL
|
||||
#undef HAVE_GMODULE
|
||||
|
||||
/* macros/curses checks */
|
||||
#undef HAS_CURSES
|
||||
|
91
configure.in
91
configure.in
@ -253,13 +253,32 @@ if test "x$GLIB_DIR" != "x"; then
|
||||
GLIB_LDEXTRA=`$GLIB_DIR/glib-config --libs gmodule|sed -e 's/-lglib//' -e 's/-lgmodule//' -e 's,-L/usr/local/lib ,,'|sed 's/ \+/ /g'`
|
||||
full_glib_dir="`pwd`/$GLIB_DIR"
|
||||
GLIB_CFLAGS="-I$full_glib_dir -I$full_glib_dir/gmodule"
|
||||
GLIB_LIBS="$full_glib_dir/.libs/libglib.a $full_glib_dir/gmodule/.libs/libgmodule.a $GLIB_LDEXTRA"
|
||||
if test -f $full_glib_dir/.libs/libglib.a; then
|
||||
GLIB_LIBS="$full_glib_dir/.libs/libglib.a $GLIB_LDEXTRA"
|
||||
if test -f $full_glib_dir/gmodule/.libs/libgmodule.a; then
|
||||
GLIB_LIBS="$GLIB_LIBS $full_glib_dir/gmodule/.libs/libgmodule.a"
|
||||
fi
|
||||
elif test -f $full_glib_dir/libglib.a; then
|
||||
GLIB_LIBS="$full_glib_dir/libglib.a $GLIB_LDEXTRA"
|
||||
if test -f $full_glib_dir/gmodule/libgmodule.a; then
|
||||
GLIB_LIBS="$GLIB_LIBS $full_glib_dir/gmodule/libgmodule.a"
|
||||
fi
|
||||
else
|
||||
AC_ERROR([GLIB was not compiled properly, libglib.a not found])
|
||||
fi
|
||||
AC_SUBST(GLIB_DIR)
|
||||
AC_SUBST(GLIB_CFLAGS)
|
||||
AC_SUBST(GLIB_LIBS)
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
AM_PATH_GLIB(1.2.0,,, gmodule)
|
||||
if test "x$GLIB_LIBS" = "x"; then
|
||||
echo "*** trying without -lgmodule"
|
||||
glib_config_args=
|
||||
AM_PATH_GLIB(1.2.0)
|
||||
else
|
||||
AC_DEFINE(HAVE_GMODULE)
|
||||
fi
|
||||
if test "x$GLIB_LIBS" = "x"; then
|
||||
echo
|
||||
echo "*** If you don't have GLIB, you can get it from ftp://ftp.gtk.org"
|
||||
@ -274,52 +293,64 @@ PROG_LIBS="$PROG_LIBS $GLIB_LIBS"
|
||||
|
||||
dnl **
|
||||
dnl ** check if we can link dynamic libraries to modules
|
||||
dnl ** also checks if libraries are built to .libs dir
|
||||
dnl **
|
||||
|
||||
AC_MSG_CHECKING([if we can link dynamic libraries with modules])
|
||||
DYNLIB_MODULES=no
|
||||
|
||||
dnl ** compile object file
|
||||
cat > conftest.c <<EOF
|
||||
#include <math.h>
|
||||
int modfunc(void){return (int)floor(1.2);}
|
||||
EOF
|
||||
./libtool --mode=compile $CC $CFLAGS -c conftest.c 2> /dev/null > /dev/null
|
||||
if test ! -s conftest.lo; then
|
||||
AC_MSG_RESULT([no, error compiling test module])
|
||||
AC_ERROR([error compiling test module])
|
||||
fi
|
||||
|
||||
dnl ** link to library
|
||||
./libtool --mode=link $CC $CFLAGS $LDFLAGS -module -rpath /usr/lib conftest.lo -lm -o libconftest.la > /dev/null
|
||||
if test -s .libs/libconftest.a; then
|
||||
LIBDIR=.libs/
|
||||
elif test -s libconftest.a; then
|
||||
LIBDIR=
|
||||
else
|
||||
./libtool --mode=link $CC $CFLAGS $LDFLAGS -module -rpath /usr/lib conftest.lo -lm -o libconftest.la > /dev/null
|
||||
if test ! -s .libs/libconftest.so -a -s .libs/libconftest.so.0.0; then
|
||||
mv .libs/libconftest.so.0.0 .libs/libconftest.so
|
||||
fi
|
||||
if test ! -s .libs/libconftest.so; then
|
||||
AC_MSG_RESULT([no, error linking test module])
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
AC_ERROR([error, can't even find .a library])
|
||||
fi
|
||||
|
||||
dnl ** check if dynamic linking worked
|
||||
if test ! -s ${LIBDIR}libconftest.so -a -s ${LIBDIR}libconftest.so.0.0; then
|
||||
mv ${LIBDIR}libconftest.so.0.0 ${LIBDIR}libconftest.so
|
||||
fi
|
||||
if test ! -s ${LIBDIR}libconftest.so; then
|
||||
AC_MSG_RESULT([no, error linking test module])
|
||||
else
|
||||
cat > conftest.c <<EOF
|
||||
#include <gmodule.h>
|
||||
main() {
|
||||
GModule *m; int (*modfunc)(void);
|
||||
m = g_module_open(".libs/libconftest.so", 0);
|
||||
if (!m) g_print("error loading: %s", g_module_error());
|
||||
else if (!g_module_symbol(m, "modfunc", (gpointer *) &modfunc))
|
||||
g_print("modfunc() symbol not found from module");
|
||||
else if (modfunc() == 1) g_print("ok"); else g_print("wrong result?! 1 vs %d", modfunc());
|
||||
return 0; }
|
||||
GModule *m; int (*modfunc)(void);
|
||||
m = g_module_open("${LIBDIR}libconftest.so", 0);
|
||||
if (!m) g_print("error loading: %s", g_module_error());
|
||||
else if (!g_module_symbol(m, "modfunc", (gpointer *) &modfunc))
|
||||
g_print("modfunc() symbol not found from module");
|
||||
else if (modfunc() == 1) g_print("ok"); else g_print("wrong result?! 1 vs %d", modfunc());
|
||||
return 0; }
|
||||
EOF
|
||||
$CC $CFLAGS conftest.c -o conftest `$GLIB_CONFIG --cflags --libs gmodule` 2> /dev/null > /dev/null
|
||||
if test ! -s conftest; then
|
||||
AC_MSG_RESULT([no, error compiling test program])
|
||||
$CC $CFLAGS conftest.c -o conftest `$GLIB_CONFIG --cflags --libs gmodule` 2> /dev/null > /dev/null
|
||||
if test ! -s conftest; then
|
||||
AC_MSG_RESULT([no, error compiling test program])
|
||||
else
|
||||
status="`./conftest`"
|
||||
if test "x$status" = "xok"; then
|
||||
DYNLIB_MODULES=yes
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
status="`./conftest`"
|
||||
if test "x$status" = "xok"; then
|
||||
DYNLIB_MODULES=yes
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no, error running: $status])
|
||||
fi
|
||||
AC_MSG_RESULT([no, error running: $status])
|
||||
fi
|
||||
fi
|
||||
rm -rf conftest.* libconftest.la .libs
|
||||
fi
|
||||
rm -rf conftest.* libconftest.* .libs
|
||||
|
||||
dnl **
|
||||
dnl ** curses checks
|
||||
@ -509,11 +540,11 @@ for c in $CHAT_MODULES; do
|
||||
FE_COMMON_LIBS="$FE_COMMON_LIBS../fe-common/$c/libfe_common_$c.a "
|
||||
fi
|
||||
for s in `eval echo \\$${c}_MODULES`; do
|
||||
CHAT_LIBS="$CHAT_LIBS ../$c/$s/.libs/lib${c}_$s.a"
|
||||
CHAT_LIBS="$CHAT_LIBS ../$c/$s/${LIBDIR}lib${c}_$s.a"
|
||||
module_inits="$module_inits ${c}_${s}_init();"
|
||||
module_deinits="${c}_${s}_deinit(); $module_deinits"
|
||||
if test -d $srcdir/src/fe-common/$c/$s; then
|
||||
FE_COMMON_LIBS="$FE_COMMON_LIBS../fe-common/$c/$s/.libs/libfe_common_${c}_$s.a "
|
||||
FE_COMMON_LIBS="$FE_COMMON_LIBS../fe-common/$c/$s/${LIBDIR}libfe_common_${c}_$s.a "
|
||||
fe_module_inits="$fe_module_inits fe_${c}_${s}_init();"
|
||||
fe_module_deinits="fe_${c}_${s}_deinit(); $fe_module_deinits"
|
||||
fi
|
||||
|
@ -5,7 +5,7 @@
|
||||
#define IRSSI_WEBSITE "http://irssi.org"
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#include "../config.h"
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
@ -39,7 +39,9 @@
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include <gmodule.h>
|
||||
#ifdef HAVE_GMODULE
|
||||
# include <gmodule.h>
|
||||
#endif
|
||||
|
||||
#include "core/memdebug.h"
|
||||
#include "nls.h"
|
||||
|
@ -239,7 +239,8 @@ char *module_get_name(const char *path)
|
||||
return module_name;
|
||||
}
|
||||
|
||||
GModule *module_open(const char *name)
|
||||
#ifdef HAVE_GMODULE
|
||||
static GModule *module_open(const char *name)
|
||||
{
|
||||
struct stat statbuf;
|
||||
GModule *module;
|
||||
@ -310,9 +311,11 @@ static int module_load_name(const char *path, const char *name)
|
||||
signal_emit("module loaded", 1, rec);
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
int module_load(const char *path)
|
||||
{
|
||||
#ifdef HAVE_GMODULE
|
||||
char *name;
|
||||
int ret;
|
||||
|
||||
@ -326,10 +329,14 @@ int module_load(const char *path)
|
||||
g_free(name);
|
||||
|
||||
return ret;
|
||||
#else
|
||||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
void module_unload(MODULE_REC *module)
|
||||
{
|
||||
#ifdef HAVE_GMODULE
|
||||
void (*module_deinit) (void);
|
||||
char *deinitfunc;
|
||||
|
||||
@ -353,6 +360,7 @@ void module_unload(MODULE_REC *module)
|
||||
g_module_close(module->gmodule);
|
||||
g_free(module->name);
|
||||
g_free(module);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void uniq_get_modules(char *key, void *value, GSList **list)
|
||||
|
@ -21,7 +21,9 @@ enum {
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
#ifdef HAVE_GMODULE
|
||||
GModule *gmodule;
|
||||
#endif
|
||||
} MODULE_REC;
|
||||
|
||||
extern GSList *modules;
|
||||
|
Loading…
x
Reference in New Issue
Block a user