diff --git a/acconfig.h b/acconfig.h index c4561e84..cb7bcba0 100644 --- a/acconfig.h +++ b/acconfig.h @@ -9,6 +9,7 @@ #undef HAVE_POPT_H #undef HAVE_SOCKS_H #undef HAVE_PL_PERL +#undef HAVE_STATIC_PERL /* macros/curses checks */ #undef HAS_CURSES diff --git a/configure.in b/configure.in index a3b05df1..85bb2fb9 100644 --- a/configure.in +++ b/configure.in @@ -17,25 +17,25 @@ AC_CHECK_HEADERS(string.h stdlib.h unistd.h dirent.h sys/ioctl.h libintl.h) AC_ARG_WITH(socks, [ --with-socks Build with socks support], if test x$withval = xyes; then - want_socks=yes + want_socks=yes else - if test "x$withval" = xno; then - want_socks=no - else - want_socks=yes - fi + if test "x$withval" = xno; then + want_socks=no + else + want_socks=yes + fi fi, want_socks=no) AC_ARG_WITH(textui, [ --with-textui Build text frontend], if test x$withval = xyes; then - want_textui=yes + want_textui=yes else if test "x$withval" = xno; then want_textui=no else - want_textui=yes + want_textui=yes fi fi, want_textui=yes) @@ -43,12 +43,12 @@ AC_ARG_WITH(textui, AC_ARG_WITH(bot, [ --with-bot Build irssi-bot], if test x$withval = xyes; then - want_irssibot=yes + want_irssibot=yes else if test "x$withval" = xno; then want_irssibot=no else - want_irssibot=yes + want_irssibot=yes fi fi, want_irssibot=no) @@ -56,12 +56,12 @@ AC_ARG_WITH(bot, AC_ARG_WITH(proxy, [ --with-proxy Build irssi-proxy], if test x$withval = xyes; then - want_irssiproxy=yes + want_irssiproxy=yes else if test "x$withval" = xno; then want_irssiproxy=no else - want_irssiproxy=yes + want_irssiproxy=yes fi fi, want_irssiproxy=no) @@ -77,30 +77,43 @@ else PERL_LIB_DIR="$prefix" fi -AC_ARG_ENABLE(perl, -[ --enable-perl[=dir] Enable Perl scripting, you can specify the Perl libraries installation path], +AC_ARG_ENABLE(perl-path, +[ --enable-perl-path=dir Specify where to install the Perl libraries for irssi], if test x$enableval = xyes; then - want_perl=yes + want_perl=yes else if test "x$enableval" = xno; then want_perl=no else - want_perl=yes + want_perl=yes PERL_LIB_DIR="$enableval" perl_lib_dir_given=yes fi fi, want_perl=yes) +AC_ARG_ENABLE(perl, +[ --enable-perl[=yes|no|static] Build with Perl support - also specifies + if it should be built into main irssi binary + (static) or as module (default)], + if test x$enableval = xyes; then + want_perl=yes + elif test x$enableval = xstatic; then + want_perl=static + else + want_perl=no + fi, + want_perl=yes) + AC_ARG_WITH(servertest, [ --with-servertest Build servertest], if test x$withval = xyes; then - want_servertest=yes + want_servertest=yes else if test "x$withval" = xno; then want_servertest=no else - want_servertest=yes + want_servertest=yes fi fi, want_servertest=no) @@ -110,24 +123,24 @@ AC_ARG_ENABLE(memdebug, if test x$enableval = xyes; then want_memdebug=yes else - if test "x$enableval" = xno; then - want_memdebug=no - else - want_memdebug=yes - fi + if test "x$enableval" = xno; then + want_memdebug=no + else + want_memdebug=yes + fi fi, want_memdebug=no) AC_ARG_ENABLE(ipv6, [ --enable-ipv6 Enable IPv6 support], if test x$enableval = xyes; then - want_ipv6=yes + want_ipv6=yes else - if test "x$enableval" = xno; then - want_ipv6=no - else - want_ipv6=yes - fi + if test "x$enableval" = xno; then + want_ipv6=no + else + want_ipv6=yes + fi fi, want_ipv6=no) @@ -190,11 +203,10 @@ dnl ** AM_PATH_GLIB(1.2.0,,, gmodule) if test "x$GLIB_LIBS" = "x"; then - AC_ERROR([GLib is required to build Irssi]) + AC_ERROR([GLib is required to build irssi]) fi PROG_LIBS="$PROG_LIBS $GLIB_LIBS" -AC_SUBST(PROG_LIBS) dnl ** dnl ** curses checks @@ -237,7 +249,7 @@ else fi AC_PATH_PROG(sedpath, sed) -if test "$want_perl" = "yes"; then +if test "$want_perl" != "no"; then AC_PATH_PROG(perlpath, perl) AC_MSG_CHECKING(for Perl compile flags) @@ -246,7 +258,12 @@ if test "$want_perl" = "yes"; then AC_MSG_RESULT([not found, building without Perl.]) want_perl=no else - PERL_LDFLAGS="`$perlpath -MExtUtils::Embed -e ldopts` " + PERL_LDFLAGS="`$perlpath -MExtUtils::Embed -e ldopts` 2>/dev/null" + + if test "$want_perl" != "static"; then + dnl * find libperl.a so we could + libperl_a=`echo $PERL_LDFLAGS|$perlpath -e 'foreach (split(/ /, )) { if (/^-L(.*)/ && -f $1."/libperl.a") { print $1."/libperl.a" } };'` + fi dnl * Perl 5.004 and older use perl_xxx variables while dnl * later use PL_perl_xxx variables .. @@ -255,9 +272,11 @@ if test "$want_perl" = "yes"; then AC_DEFINE(HAVE_PL_PERL) fi - dnl * dynaloader.a -> libperl_dynaloader.la - dynaloader=`echo $PERL_LDFLAGS | $sedpath 's/.* \([[^ ]]*\.a\).*/\1/'` - PERL_LDFLAGS=`echo $PERL_LDFLAGS | $sedpath 's/ [[^ ]]*\.a/ libperl_dynaloader.la/'` + dnl * don't check dynaloader if libperl.a wasn't found.. + if test "x$libperl_a" != "x"; then + dnl * dynaloader.a -> libperl_dynaloader.la + dynaloader=`echo $PERL_LDFLAGS | $sedpath 's/.* \([[^ ]]*\.a\).*/\1/'` + fi dnl * remove all database stuffs PERL_LDFLAGS=`echo $PERL_LDFLAGS | $sedpath 's/-ldb //'` @@ -277,16 +296,26 @@ if test "$want_perl" = "yes"; then dnl * must not be in LIBADD line PERL_LDFLAGS=`echo $PERL_LDFLAGS | $sedpath 's/-rdynamic //'` - if test "x$dynaloader" = "x"; then - AC_MSG_RESULT([error parsing ldopts, building without Perl.]) - want_perl=no + if test "x$want_perl" = "xstatic"; then + AC_MSG_RESULT(ok) + elif test "x$dynaloader" = "x"; then + AC_MSG_RESULT([error parsing ldopts, building Perl into irssi binary instead of as module]) + want_perl=static else AC_MSG_RESULT(ok) - - AC_SUBST(PERL_CFLAGS) - AC_SUBST(PERL_LDFLAGS) - AC_SUBST(PERL_LIB_DIR) + PERL_LDFLAGS=`echo $PERL_LDFLAGS | $sedpath 's/ [[^ ]]*\.a/ libperl_dynaloader.la/'` + PERL_LDFLAGS=`echo $PERL_LDFLAGS | $sedpath 's/ -lperl/ libperl_orig.la/'` fi + + if test "x$want_perl" = "xstatic"; then + PERL_LDFLAGS="../perl/.libs/libperl.a $PERL_LDFLAGS" + PROG_LIBS="$PROG_LIBS $PERL_LDFLAGS" + PERL_LDFLAGS= + AC_DEFINE(HAVE_STATIC_PERL) + fi + AC_SUBST(PERL_LDFLAGS) + AC_SUBST(PERL_CFLAGS) + AC_SUBST(PERL_LIB_DIR) fi fi @@ -296,7 +325,9 @@ AM_CONDITIONAL(BUILD_IRSSIBOT, test "$want_irssibot" = "yes") AM_CONDITIONAL(BUILD_IRSSIPROXY, test "$want_irssiproxy" = "yes") AM_CONDITIONAL(BUILD_PLUGINS, test "$want_plugins" = "yes") AM_CONDITIONAL(BUILD_SERVERTEST, test "$want_servertest" = "yes") -AM_CONDITIONAL(HAVE_PERL, test "$want_perl" = "yes") +AM_CONDITIONAL(HAVE_PERL, test "$want_perl" != "no") + +AC_SUBST(PROG_LIBS) dnl ** dnl ** Keep all the libraries here so each frontend doesn't need to @@ -433,8 +464,8 @@ irssi.spec irssi-version.h irssi-config) -dnl ** for building from objdir -if test "x$want_perl" = "xyes"; then +dnl ** for building from objdir + linking perl libraries so libtool finds them +if test "x$want_perl" != "xno"; then old_dir=`pwd` && cd $srcdir && whole_dir=`pwd` && cd $old_dir if test "x$old_dir" != "x$whole_dir"; then @@ -442,11 +473,14 @@ if test "x$want_perl" = "xyes"; then ln -sf $file `echo $file|sed "s?$whole_dir/??"` done fi - if test ! -d src/perl/.libs; then - mkdir -p src/perl/.libs - fi - if test ! -L src/perl/.libs/DynaLoader.a; then - ln -s $dynaloader src/perl/.libs/DynaLoader.a + + dnl * building as module + if test "x$want_perl" = "xyes"; then + if test ! -d src/perl/.libs; then + mkdir -p src/perl/.libs + fi + ln -sf $dynaloader src/perl/.libs/DynaLoader.a + ln -sf $libperl_a src/perl/.libs/libperl_orig.a fi fi @@ -463,7 +497,14 @@ fi echo "Building irssi bot ......... : $want_irssibot" echo "Building irssi proxy ....... : $want_irssiproxy" echo "Building with IPv6 support . : $want_ipv6" -echo "Building with Perl support . : $want_perl" +if test "x$want_perl" = "xstatic"; then + echo "Building with Perl support . : static (in irssi binary)" +elif test "x$want_perl" = "xyes"; then + echo "Building with Perl support . : module" +else + echo "Building with Perl support . : no" +fi + if test "x$want_perl" = "xyes"; then if test "x$PERL_LIB_DIR" = "x"; then echo "Perl library directory ..... : (default - usually /usr/local/lib/perl_site)" diff --git a/src/fe-text/irssi.c b/src/fe-text/irssi.c index 56932326..df11ea66 100644 --- a/src/fe-text/irssi.c +++ b/src/fe-text/irssi.c @@ -40,6 +40,11 @@ #include +#ifdef HAVE_STATIC_PERL +void perl_init(void); +void perl_deinit(void); +#endif + void irc_init(void); void irc_deinit(void); @@ -105,6 +110,9 @@ static void textui_finish_init(void) fe_common_core_finish_init(); fe_common_irc_finish_init(); +#ifdef HAVE_STATIC_PERL + perl_init(); +#endif signal_emit("irssi init finished", 0); screen_refresh_thaw(); @@ -127,6 +135,10 @@ static void textui_deinit(void) gui_entry_deinit(); deinit_screen(); +#ifdef HAVE_STATIC_PERL + perl_deinit(); +#endif + theme_unregister(); fe_common_irc_deinit(); diff --git a/src/perl/Makefile.am b/src/perl/Makefile.am index ae038bc8..785b8205 100644 --- a/src/perl/Makefile.am +++ b/src/perl/Makefile.am @@ -1,9 +1,9 @@ moduledir = $(libdir)/irssi/modules -module_LTLIBRARIES = libirssi_perl.la +module_LTLIBRARIES = libperl.la -libirssi_perl_la_LDFLAGS = -avoid-version +libperl_la_LDFLAGS = -avoid-version -irssi-perl.c: perl-signals.h +perl.c: perl-signals.h INCLUDES = $(GLIB_CFLAGS) \ -DSCRIPTDIR=\""$(libdir)/irssi/scripts"\" \ @@ -11,8 +11,8 @@ INCLUDES = $(GLIB_CFLAGS) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/src/core -libirssi_perl_la_SOURCES = \ - irssi-perl.c \ +libperl_la_SOURCES = \ + perl.c \ perl-common.c \ xsinit.c @@ -54,6 +54,7 @@ IRC_SOURCES = \ EXTRA_DIST = \ libperl_dynaloader.la \ + libperl_orig.la \ get-signals.pl \ $(CORE_SOURCES) \ $(IRC_SOURCES) @@ -63,9 +64,9 @@ noinst_HEADERS = \ perl-common.h all-local: - for dir in core irc; do cd $$dir && if [ ! -f Makefile ]; then if [ "x$(PERL_LIB_DIR)" = "x" ]; then $(perlpath) Makefile.PL; else $(perlpath) Makefile.PL LIB=$(PERL_LIB_DIR); fi; fi && $(MAKE) && cd ..; done + for dir in common irc; do cd $$dir && if [ ! -f Makefile ]; then if [ "x$(PERL_LIB_DIR)" = "x" ]; then $(perlpath) Makefile.PL; else $(perlpath) Makefile.PL LIB=$(PERL_LIB_DIR); fi; fi && $(MAKE) && cd ..; done install-exec-local: - for dir in core irc; do cd $$dir && make install && cd ..; done + for dir in common irc; do cd $$dir && make install && cd ..; done -libirssi_perl_la_LIBADD = $(PERL_LDFLAGS) +libperl_la_LIBADD = $(PERL_LDFLAGS) diff --git a/src/perl/irc/module.h b/src/perl/irc/module.h index 58a0b31f..2e0e7823 100644 --- a/src/perl/irc/module.h +++ b/src/perl/irc/module.h @@ -1,4 +1,4 @@ -#include "../core/module.h" +#include "../common/module.h" #include "irc-servers.h" #include "irc-channels.h" diff --git a/src/perl/libperl_orig.la b/src/perl/libperl_orig.la new file mode 100644 index 00000000..c83ffc42 --- /dev/null +++ b/src/perl/libperl_orig.la @@ -0,0 +1,25 @@ +# libsilc.la - a libtool library file +# Generated by ltmain.sh - GNU libtool 1.3.5 (1.385.2.206 2000/05/27 11:12:27) + +# The name that we can dlopen(3). +dlname='' + +# Names of this library. +library_names='' + +# The name of the static archive. +old_library='libperl_orig.a' + +# Libraries that this one depends upon. +dependency_libs='' + +# Version information for libsilc. +current=0 +age=0 +revision=0 + +# Is this an already installed library? +installed=no + +# Directory that this library needs to be installed in: +libdir='' diff --git a/src/perl/irssi-perl.c b/src/perl/perl.c similarity index 99% rename from src/perl/irssi-perl.c rename to src/perl/perl.c index 44dcd7b6..bf1ae551 100644 --- a/src/perl/irssi-perl.c +++ b/src/perl/perl.c @@ -666,7 +666,7 @@ static void irssi_perl_autorun(void) g_free(path); } -void irssi_perl_init(void) +void perl_init(void) { perl_common_init(); @@ -681,7 +681,7 @@ void irssi_perl_init(void) irssi_perl_autorun(); } -void irssi_perl_deinit(void) +void perl_deinit(void) { irssi_perl_stop(); perl_common_deinit();