diff --git a/configure.ac b/configure.ac index c731b392..1c186016 100644 --- a/configure.ac +++ b/configure.ac @@ -217,65 +217,41 @@ dnl ********************************************************************* dnl ** PERL ************************************************************* dnl ********************************************************************* -if test "$perl" = yes; then +AS_IF([test "$perl" = yes], [ AC_MSG_CHECKING(for plugin interface used by Perl) - if test "$plugin" = yes; then + AS_IF([test "$plugin" = yes], [ AC_MSG_RESULT([yes]) - AC_PATH_PROG(perlpath, perl) - AC_MSG_CHECKING(for Perl compile flags) - PERL_CFLAGS=`$perlpath -MExtUtils::Embed -e ccopts 2>/dev/null` - if test "_$PERL_CFLAGS" = _ ; then - AC_MSG_RESULT([not found, building without perl.]) - perl=no - else - PERL_LDFLAGS=`$perlpath -MExtUtils::Embed -e ldopts |$sedpath 's/-lgdbm //'` - PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-ldb //'` - PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lndbm //'` - if test "$system" = "Linux"; then - PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lnsl //'` - PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lposix //'` - fi - PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lc //'` - AC_MSG_RESULT(ok) - AC_MSG_CHECKING(for perl >= 5.8.0) - PERL_VER=`$perlpath -e 'print $]>= 5.008?"yes":"no"'` - if test "$PERL_VER" = "yes"; then - original_cflags="$CFLAGS" - original_ldflags="$LDFLAGS" - CFLAGS="$PERL_CFLAGS" - LDFLAGS="$PERL_LDFLAGS" - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - #define PERL_NO_INLINE_FUNCTIONS - #include - #include - ]], [[]])],[perl_is_usable=yes],[perl_is_usable=no]) - CFLAGS="$original_cflags" - LDFLAGS="$original_ldflags" - if test x$perl_is_usable = xno ; then - AC_MSG_RESULT(no) - perl=no - else - AC_MSG_RESULT(yes) - AC_MSG_CHECKING(if perl plugin will be backward compatible) - if test "$perl_old" = "yes"; then - AC_MSG_RESULT(yes) - AC_DEFINE(OLD_PERL) - else - AC_MSG_RESULT(no) - fi - fi - else - AC_MSG_RESULT(no) - echo "perl version too old, building without perl." - perl=no - fi - fi - else + AX_PERL_EXT_FLAGS([PERL_CFLAGS], [PERL_LDFLAGS]) + original_cflags="$CFLAGS" + original_ldflags="$LDFLAGS" + CFLAGS="$PERL_CFLAGS" + LDFLAGS="$PERL_LDFLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + #define PERL_NO_INLINE_FUNCTIONS + #include + #include + ]], [[]])],[perl_is_usable=yes],[perl_is_usable=no]) + CFLAGS="$original_cflags" + LDFLAGS="$original_ldflags" + AS_IF([test "$perl_is_usable" = "no"], [ + AC_MSG_WARN([perl test failed to compile, disabling]) + perl=no + ], [ + AC_MSG_CHECKING([if perl plugin will be backward compatible]) + AS_IF([test "$perl_old" = "yes"], [ + AC_MSG_RESULT([yes]) + AC_DEFINE(OLD_PERL) + ], [ + AC_MSG_RESULT([no]) + ]) + ]) + ], [ AC_MSG_RESULT([plugins are disabled, use the --enable-plugin option for Perl]) perl=no - fi -fi + ]) +]) + dnl ********************************************************************* dnl ** PYTHON *********************************************************** dnl ********************************************************************* diff --git a/m4/ax_perl_ext_flags.m4 b/m4/ax_perl_ext_flags.m4 new file mode 100644 index 00000000..03f16435 --- /dev/null +++ b/m4/ax_perl_ext_flags.m4 @@ -0,0 +1,116 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_perl_ext_flags.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PERL_EXT_FLAGS([CFLAGS-VARIABLE], [LDFLAGS-VARIABLE], [EXTRA-MODULES]) +# AX_PERL_EXT_CFLAGS([CFLAGS-VARIABLE]) +# AX_PERL_EXT_LDFLAGS([LDFLAGS-VARIABLE], [EXTRA-MODULES]) +# +# DESCRIPTION +# +# Fetches the linker flags and C compiler flags for compiling and linking +# programs that embed a Perl interpreter. If the EXTRA-MODULES argument is +# submitted, it is a space separated list of extra modules to link. The +# flags will be stored in the provided variables. +# +# Examples: +# +# AX_PERL_EXT_FLAGS([PERLXS_CFLAGS], [PERLXS_LDFLAGS]) +# AC_SUBST([PERLXS_CFLAGS]) +# AC_SUBST([PERLXS_LDFLAGS]) +# +# AX_PERL_EXT_CFLAGS([PERLXS_CFLAGS]) +# AC_SUBST([PERLXS_CFLAGS]) +# +# AX_PERL_EXT_LDFLAGS([PERLXS_LDFLAGS], [-std Socket]) +# +# LICENSE +# +# Copyright (c) 2009 Mats Kindahl of Sun Microsystems +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +#serial 5 + +AC_DEFUN([AX_PERL_EXT_CFLAGS], +[AC_CHECK_PROG(PERL,perl,perl) + _AX_PERL_EXT_MODULE_CHECK([ExtUtils::Embed], [have_embed=yes], + [have_embed=no]) + AS_IF([test $have_embed = no], + AC_MSG_ERROR([Require ExtUtils::Embed to proceed])) + _AX_PERL_EXT_EMBED_CHECK([$1],[ccopts]) +]) + + +AC_DEFUN([AX_PERL_EXT_LDFLAGS], +[AC_CHECK_PROG(PERL,perl,perl) + _AX_PERL_EXT_MODULE_CHECK([ExtUtils::Embed], [have_embed=yes], + [have_embed=no]) + AS_IF([test $have_embed = no], + AC_MSG_ERROR([Require ExtUtils::Embed to proceed])) + _AX_PERL_EXT_EMBED_CHECK([$1],[ldopts],[$2]) +]) + + +AC_DEFUN([AX_PERL_EXT_FLAGS], +[AC_CHECK_PROG(PERL,perl,perl) + _AX_PERL_EXT_MODULE_CHECK([ExtUtils::Embed], [have_embed=yes], + [have_embed=no]) + AS_IF([test $have_embed = no], + AC_MSG_ERROR([Require ExtUtils::Embed to proceed])) + _AX_PERL_EXT_EMBED_CHECK([$1],[ccopts]) + _AX_PERL_EXT_EMBED_CHECK([$2],[ldopts],[$3]) +]) + + +dnl _AX_PERL_EXT_MODULE_CHECK(MODULE-NAME, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) +dnl +dnl Check for the existance of the perl module given by MODULE-NAME. +dnl +AC_DEFUN([_AX_PERL_EXT_MODULE_CHECK], +[AC_MSG_CHECKING([for perl module $1]) + $PERL "-M$1" -e exit > /dev/null 2>&1 + AS_IF([test $? -eq 0], + [AC_MSG_RESULT(yes) + $2], + [AC_MSG_RESULT(no) + $3]) +]) + +dnl _AX_PERL_EXT_EMBED_CHECK(VARIABLE, COMMAND, [EXTRA-FLAGS]) Use +dnl +dnl ExtUtils::Embed fetch flags for embedding Perl in a C/C++ +dnl application +dnl +AC_DEFUN([_AX_PERL_EXT_EMBED_CHECK], +[AC_MSG_CHECKING([for perl $2 embed flags]) + ax_c_perlxs_extras="$3" + $1=`$PERL -MExtUtils::Embed -e $2 ${ax_c_perlxs_extras:+"-- $3"}` + AC_MSG_RESULT($$1) +]) diff --git a/plugins/perl/Makefile.am b/plugins/perl/Makefile.am index bec4e5ce..83239672 100644 --- a/plugins/perl/Makefile.am +++ b/plugins/perl/Makefile.am @@ -7,7 +7,7 @@ libdir = $(hexchatlibdir) lib_LTLIBRARIES = perl.la perl_la_SOURCES = perl.c perl_la_LDFLAGS = $(PERL_LDFLAGS) $(PLUGIN_LDFLAGS) -module -perl_la_LIBADD = $(PERL_LIBS) $(GLIB_LIBS) +perl_la_LIBADD = $(GLIB_LIBS) perl_la_CFLAGS = $(PERL_CFLAGS) $(GLIB_CFLAGS) -I$(top_srcdir)/src/common BUILT_SOURCES = hexchat.pm.h irc.pm.h