diff --git a/autogen.sh b/autogen.sh index e11f3199..2ed40307 100755 --- a/autogen.sh +++ b/autogen.sh @@ -8,7 +8,7 @@ ACLOCAL=${ACLOCAL-aclocal} AUTOHEADER=${AUTOHEADER-autoheader} AUTOCONF=${AUTOCONF-autoconf} AUTOMAKE=${AUTOMAKE-automake} -ACLOCAL_FLAGS="${ACLOCAL_FLAGS} ${FLAGS}" +ACLOCAL_FLAGS="${ACLOCAL_FLAGS--I m4} ${FLAGS}" AUTOHEADER_FLAGS="${AUTOHEADER_FLAGS} ${FLAGS}" AUTOCONF_FLAGS="${AUTOCONF_FLAGS} ${FLAGS}" AUTOMAKE_FLAGS="${AUTOMAKE_FLAGS---add-missing} ${FLAGS}" diff --git a/configure.ac b/configure.ac index 078a3d0a..45111598 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,6 @@ dnl Keep the version number in sync with main.h! AC_INIT([znc], [0.099]) +AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([znc.cpp]) AC_LANG([C++]) AC_CONFIG_HEADERS([zncconfig.h]) @@ -111,8 +112,8 @@ AC_ARG_ENABLE( [swig], This value is ignored if perl and python are disabled. If you disable swig, but still want to use these modules, please download the necessary files to modules/modperl and/or to modules/modpython. Check http://en.znc.in/wiki/Modperl and http://en.znc.in/wiki/Modpython for details.]), - [SWIG="$enableval"], - [SWIG="auto"]) + [USESWIG="$enableval"], + [USESWIG="auto"]) AC_ARG_ENABLE( [sasl], AS_HELP_STRING([--enable-sasl], [enable sasl]), [if test "$enableval" = "yes" ; then SASL=1; fi],) @@ -291,15 +292,16 @@ else fi if test "x$PERL" != xno -o "x$PYTHON" != xno; then - old_SWIG="$SWIG" - if test "x$SWIG" != "xno"; then - AC_PATH_PROG([SWIG_BINARY], [swig]) - test -z "$SWIG_BINARY" && SWIG=no + old_USESWIG="$USESWIG" + if test "x$USESWIG" != "xno"; then + AC_PROG_SWIG([1.3.40]) + test -z "$SWIG" && USESWIG=no fi - if test "x$SWIG" = xno; then - SWIG_BINARY="" - if test "x$old_SWIG" = xno; then - SWIG="no, need manual download for perl/python bindings" + if test "x$USESWIG" = xno; then + SWIG="" + AC_MSG_WARN([$SWIG_ERROR]) + if test "x$old_USESWIG" = xno; then + USESWIG="no, need manual download for perl/python bindings" AC_MSG_WARN([swig was disabled, so you should put needed sources to modules/ Please check http://en.znc.in/wiki/Modperl or http://en.znc.in/wiki/Modpython for details.]) else @@ -307,13 +309,13 @@ Please check http://en.znc.in/wiki/Modperl or http://en.znc.in/wiki/Modpython fo Please check http://en.znc.in/wiki/Modperl or http://en.znc.in/wiki/Modpython for details.]) fi else - SWIG=yes + USESWIG=yes fi else - if test "x$SWIG" = "xyes"; then + if test "x$USESWIG" = "xyes"; then AC_MSG_WARN([swig is needed only for perl and python, but both are disabled. Disabling swig.]) fi - SWIG=no + USESWIG=no fi if test "x$PERL" != "xno"; then @@ -349,6 +351,16 @@ if test "x$PYTHON" != "xno"; then AC_MSG_ERROR([pkg-config is required for modpython.]) fi PKG_CHECK_MODULES([python], [$PYTHON >= 3.0],, AC_MSG_ERROR([$PYTHON.pc not found or is wrong. Try --disable-python or install python3.])) + if test "x$USESWIG" = xyes; then : + PKG_CHECK_MODULES([python32], [$PYTHON >= 3.2], [PYTHON_32=yes], [PYTHON_32=no]) + if test "x$PYTHON_32" = xyes; then + AC_MSG_NOTICE([python 3.2+ found, requiring newer swig.]) + AC_PROG_SWIG([2.0.4]) + if test -z "$SWIG"; then + AC_MSG_ERROR([$SWIG_ERROR]) + fi + fi + fi my_saved_LIBS="$LIBS" my_saved_CXXFLAGS="$CXXFLAGS" appendLib $python_LIBS @@ -482,6 +494,7 @@ AC_SUBST([MODDIR]) AC_SUBST([DATADIR]) AC_SUBST([PERL]) AC_SUBST([PYTHON]) +AC_SUBST([SWIG]) AC_SUBST([python_CFLAGS]) AC_SUBST([python_LIBS]) AC_CONFIG_FILES([Makefile]) @@ -504,7 +517,7 @@ echo "openssl: $SSL" echo "c-ares: $ARES" echo "perl: $PERL" echo "python: $PYTHON" -echo "swig: $SWIG" +echo "swig: $USESWIG" if test x"$SASL" = "x" ; then echo "sasl: no" else diff --git a/m4/ac_pkg_swig.m4 b/m4/ac_pkg_swig.m4 new file mode 100644 index 00000000..64c33cdb --- /dev/null +++ b/m4/ac_pkg_swig.m4 @@ -0,0 +1,142 @@ +dnl @synopsis AC_PROG_SWIG([major.minor.micro]) +dnl +dnl This macro searches for a SWIG installation on your system. If +dnl found you should call SWIG via $(SWIG). You can use the optional +dnl first argument to check if the version of the available SWIG is +dnl greater than or equal to the value of the argument. It should have +dnl the format: N[.N[.N]] (N is a number between 0 and 999. Only the +dnl first N is mandatory.) +dnl +dnl If the version argument is given (e.g. 1.3.17), AC_PROG_SWIG checks +dnl that the swig package is this version number or higher. +dnl +dnl In configure.in, use as: +dnl +dnl AC_PROG_SWIG(1.3.17) +dnl SWIG_ENABLE_CXX +dnl SWIG_MULTI_MODULE_SUPPORT +dnl SWIG_PYTHON +dnl +dnl @category InstalledPackages +dnl @author Sebastian Huber +dnl @author Alan W. Irwin +dnl @author Rafael Laboissiere +dnl @author Andrew Collier +dnl @version 2004-09-20 +dnl +dnl Modified by Alexey Sokolov on 2011-05-06 +dnl @license GPLWithACException + +AC_DEFUN([AC_PROG_SWIG],[ + SWIG_ERROR="" + AC_PATH_PROG([SWIG],[swig]) + if test -z "$SWIG" ; then +dnl AC_MSG_WARN([cannot find 'swig' program. You should look at http://www.swig.org]) + SWIG_ERROR='SWIG is not installed. You should look at http://www.swig.org' + elif test -n "$1" ; then + AC_MSG_CHECKING([for SWIG version]) + [swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`] + AC_MSG_RESULT([$swig_version]) + if test -n "$swig_version" ; then + # Calculate the required version number components + [required=$1] + [required_major=`echo $required | sed 's/[^0-9].*//'`] + if test -z "$required_major" ; then + [required_major=0] + fi + [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] + [required_minor=`echo $required | sed 's/[^0-9].*//'`] + if test -z "$required_minor" ; then + [required_minor=0] + fi + [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] + [required_patch=`echo $required | sed 's/[^0-9].*//'`] + if test -z "$required_patch" ; then + [required_patch=0] + fi + # Calculate the available version number components + [available=$swig_version] + [available_major=`echo $available | sed 's/[^0-9].*//'`] + if test -z "$available_major" ; then + [available_major=0] + fi + [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] + [available_minor=`echo $available | sed 's/[^0-9].*//'`] + if test -z "$available_minor" ; then + [available_minor=0] + fi + [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] + [available_patch=`echo $available | sed 's/[^0-9].*//'`] + if test -z "$available_patch" ; then + [available_patch=0] + fi + if test $available_major -lt $required_major; then + SWIG_ERROR='SWIG version >= $1 is required. You have '"$swig_version"'. You should look at http://www.swig.org' + elif test $available_major -eq $required_major; then + if test $available_minor -lt $required_minor; then + SWIG_ERROR='SWIG version >= $1 is required. You have '"$swig_version"'. You should look at http://www.swig.org' + elif test $available_minor -eq $required_minor; then + if test $available_patch -lt $required_patch; then + SWIG_ERROR='SWIG version >= $1 is required. You have '"$swig_version"'. You should look at http://www.swig.org' + fi + fi + fi + if test -z "$SWIG_ERROR"; then + AC_MSG_NOTICE([SWIG executable is '$SWIG']) + SWIG_LIB=`$SWIG -swiglib` + AC_MSG_NOTICE([SWIG library directory is '$SWIG_LIB']) + else + SWIG="" + fi + else + SWIG_ERROR='Cannot determine SWIG version. You should look at http://www.swig.org' + SWIG="" + fi + fi + AC_SUBST([SWIG_LIB]) +]) + +# SWIG_ENABLE_CXX() +# +# Enable SWIG C++ support. This affects all invocations of $(SWIG). +AC_DEFUN([SWIG_ENABLE_CXX],[ + AC_REQUIRE([AC_PROG_SWIG]) + AC_REQUIRE([AC_PROG_CXX]) + SWIG="$SWIG -c++" +]) + +# SWIG_MULTI_MODULE_SUPPORT() +# +# Enable support for multiple modules. This effects all invocations +# of $(SWIG). You have to link all generated modules against the +# appropriate SWIG runtime library. If you want to build Python +# modules for example, use the SWIG_PYTHON() macro and link the +# modules against $(SWIG_PYTHON_LIBS). +# +AC_DEFUN([SWIG_MULTI_MODULE_SUPPORT],[ + AC_REQUIRE([AC_PROG_SWIG]) + SWIG="$SWIG -noruntime" +]) + +# SWIG_PYTHON([use-shadow-classes = {no, yes}]) +# +# Checks for Python and provides the $(SWIG_PYTHON_CPPFLAGS), +# and $(SWIG_PYTHON_OPT) output variables. +# +# $(SWIG_PYTHON_OPT) contains all necessary SWIG options to generate +# code for Python. Shadow classes are enabled unless the value of the +# optional first argument is exactly 'no'. If you need multi module +# support (provided by the SWIG_MULTI_MODULE_SUPPORT() macro) use +# $(SWIG_PYTHON_LIBS) to link against the appropriate library. It +# contains the SWIG Python runtime library that is needed by the type +# check system for example. +AC_DEFUN([SWIG_PYTHON],[ + AC_REQUIRE([AC_PROG_SWIG]) + AC_REQUIRE([AC_PYTHON_DEVEL]) + test "x$1" != "xno" || swig_shadow=" -noproxy" + AC_SUBST([SWIG_PYTHON_OPT],[-python$swig_shadow]) + AC_SUBST([SWIG_PYTHON_CPPFLAGS],[$PYTHON_CPPFLAGS]) +]) + + + diff --git a/modules/Makefile.in b/modules/Makefile.in index 4bd69b2d..d3707b7b 100644 --- a/modules/Makefile.in +++ b/modules/Makefile.in @@ -28,7 +28,8 @@ PERL := @PERL_BINARY@ PYTHON_ON:= @PYTHON@ PY_CFLAGS:= @python_CFLAGS@ PY_LDFLAGS:=@python_LIBS@ -SWIG := @SWIG_BINARY@ +SWIG := @SWIG@ +SWIG_ON := @USESWIG@ MODDIR := @MODDIR@ DATADIR := @DATADIR@ LIBZNC := @LIBZNC@