blob: 23f8c7ebd02036ba827d0f95b0d800193c0ad208 [file] [log] [blame]
# -*- autoconf -*-
#########################################
##
# Perl & Python support
##
#########################################
##
# Check whether Net-SNMP configuration will support Perl
##
# Inputs:
# install_perl: whether or not to install the Perl modules
# yes/no/try (i.e. 'maybe' - the default)
# embed_perl: whether or not to embed Perl support within the agent
# yes/no/try (i.e. 'maybe' - the default)
#
# ac_cv_path_PERLPROG: Path to perl binary
# Embedded Perl requires Perl modules, and the perl binary
#
if test "x$embed_perl" = "xtry" ; then
if test "x$install_perl" = "xno" ; then
install_perl="try"
fi
if test "x$ac_cv_path_PERLPROG" = "x" -o "x$ac_cv_path_PERLPROG" = "xno" ; then
install_perl="no"
embed_perl="no"
fi
fi
# Perl modules require the perl binary
#
if test "x$install_perl" != "xno" ; then
myperl=$ac_cv_path_PERLPROG
if test $myperl = "no" ; then
if test "x$install_perl" = "xtry" ; then
install_perl="no"
else
AC_MSG_ERROR(--enable-embedded-perl requested but no perl executable found)
fi
fi
fi
# Perl modules require shared libraries
#
if test "x$install_perl" != "xno" ; then
if test "x$enable_shared" != "xyes"; then
if test "x$install_perl" = "xtry" ; then
install_perl="no"
else
AC_MSG_ERROR(Perl support requires --enable-shared)
fi
fi
fi
# Perl modules can only be installed from within the source tree
#
if test "x$install_perl" != "xno" ; then
AC_MSG_CHECKING([if we are in the source tree so we can install Perl modules])
if test "x$srcdir" = "x." -o -d perl/agent/default_store ; then
AC_MSG_RESULT([Yes])
else
if test "x$install_perl" = "xtry" ; then
install_perl="no"
AC_MSG_RESULT([No])
else
AC_MSG_ERROR([Perl modules can not be built outside the source directory])
fi
fi
fi
# The rest of the Perl-related checks aren't relevant
# if we're not using the Perl modules
#
if test "x$install_perl" != "xno" ; then
##
# Check compiler compatability
##
# What compiler was used to build the perl binary?
#
if test "xenable_perl_cc_checks" != "xno" ; then
AC_MSG_CHECKING([for Perl cc])
changequote(, )
PERLCC=`$myperl -V:cc | $myperl -n -e 'print if (s/^\s*cc=.([-=\w\s\/]+).;\s*/$1/);'`
changequote([, ])
if test "x$PERLCC" != "x" ; then
AC_MSG_RESULT([$PERLCC])
else
if test "x$install_perl" = "xtry" ; then
install_perl="no"
else
AC_MSG_ERROR([Could not determine the compiler that was used to build $myperl. Either set the environment variable PERLPROG to a different perl binary or use --without-perl-modules to build without Perl.])
fi
fi
fi
# Was GCC used to build the perl binary?
#
if test "x$install_perl" != "xno" ; then
AC_MSG_CHECKING([whether $PERLCC is a GNU C compiler])
OLDCC=$CC
CC="$PERLCC"
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([], [[
#ifndef __GNUC__
choke me
#endif
]])], [perlcc_is_gnu=yes], [perlcc_is_gnu=no])
AC_MSG_RESULT([$perlcc_is_gnu])
CC=$OLDCC
# Check compatability: Gnu Net-SNMP vs Non-Gnu perl
#
if test "x$GCC" = "xyes" -a "x$perlcc_is_gnu" = "xno" ; then
if test "x$install_perl" = "xtry" ; then
install_perl="no"
else
AC_MSG_ERROR([This build is using a GNU C compiler ($CC) while Perl has been compiled with a non-GNU (or non-working) compiler ($PERLCC). This likely won't work for building with Perl support. Either specify a different compiler (--with-cc=PATH), disable this check (--disable-perl-cc-checks) or build without Perl (--without-perl-modules).])
fi
fi
fi
# Check compatability: Non-Gnu Net-SNMP vs Gnu perl
#
if test "x$install_perl" != "xno" ; then
if test "x$GCC" != "xyes" -a "x$perlcc_is_gnu" = "xyes" ; then
if test "x$install_perl" = "xtry" ; then
install_perl="no"
else
AC_MSG_ERROR([This build is using a non-GNU C compiler ($CC) while Perl has been compiled with a GNU compiler ($PERLCC). This likely won't work for building with Perl support. Either specify a different compiler (--with-cc=PATH), disable this check (--disable-perl-cc-checks) or build without Perl (--without-perl-modules).])
fi
fi
fi
# Are we clear to proceed?
#
if test "x$install_perl" = "xtry" ; then
install_perl="yes"
else
if test "x$install_perl" = "xno" ; then
install_perl="no"
embed_perl="no"
fi
fi
##
# Determine compilation environment needed for embedded Perl
##
# System-specific requirements
#
case $target_os in
solaris*)
if test "x$embed_perl" != "xno" ; then
# Check for LARGEFILE support (Solaris)
#
AC_MSG_CHECKING([for problematic Perl cc flags on Suns])
if $myperl -V:ccflags | $GREP LARGEFILE > /dev/null ; then
if test "x$embed_perl" = "xtry" ; then
embed_perl="no"
else
AC_MSG_ERROR([Perl was compiled with LARGEFILE support which will break Net-SNMP. Either set the environment variable PERLPROG to a different perl binary or use --disable-embedded-perl to turn off embedded Perl functionality altogether.])
fi
else
AC_MSG_RESULT([none known])
fi
fi
;;
# Embedded perl typically fails on HP-UX and Mac OS X
# We really need to investigate why, and check for this explicitly
# But for the time being, turn this off by default
hpux*|darwin8*|darwin9*|darwin10*)
if test "x$embed_perl" = "xtry" ; then
AC_MSG_WARN([Embedded perl defaulting to off])
embed_perl="no"
fi
;;
*)
;;
esac
# Compiler flags
#
if test "x$embed_perl" != "xno" ; then
AC_MSG_CHECKING([for Perl CFLAGS])
perlcflags=`$myperl -MExtUtils::Embed -e ccopts`
if test "x$perlcflags" != "x" ; then
AC_MSG_RESULT([$perlcflags])
CFLAGS="$CFLAGS $perlcflags"
else
if test "x$embed_perl" = "xtry" ; then
embed_perl="no"
else
AC_MSG_ERROR([Could not determine the C compiler flags that were used to build $myperl. Either set the environment variable PERLPROG to a different Perl binary or use --disable-embedded-perl to turn off embedded Perl functionality altogether.])
fi
fi
fi
# Linker flags
#
if test "x$embed_perl" != "xno" ; then
AC_MSG_CHECKING([for Perl LDFLAGS])
netsnmp_perlldopts=`$myperl -MExtUtils::Embed -e ldopts`
if test "x$netsnmp_perlldopts" != "x" ; then
AC_MSG_RESULT([$netsnmp_perlldopts])
else
if test "x$embed_perl" = "xtry" ; then
embed_perl="no"
else
AC_MSG_ERROR([Could not determine the linker options that were used to build $myperl. Either set the environment variable PERLPROG to a different Perl binary or use --disable-embedded-perl to turn off embedded Perl functionality altogether.])
fi
fi
if test "x$enable_as_needed" != "xno" ; then
# Just-in-time linking will embed the Perl library within
# the Net-SNMP library (rather than the agent application)
#
PERLLDOPTS_FOR_LIBS="$netsnmp_perlldopts"
# Perl ccdlflags (RPATH to libperl, hopefully)
#
AC_MSG_CHECKING([for Perl CCDLFLAGS])
changequote(, )
netsnmp_perlccdlflags=`$myperl -V:ccdlflags | $myperl -n -e 'print $1 '"if (/^\s*ccdlflags='([^']+)';/);"`
changequote([, ])
AC_MSG_RESULT([$netsnmp_perlccdlflags])
PERLLDOPTS_FOR_APPS="$netsnmp_perlccdlflags"
else
# Otherwise embed the Perl library within the application
#
PERLLDOPTS_FOR_LIBS="$netsnmp_perlldopts"
# link *applications* against libperl
PERLLDOPTS_FOR_APPS="$netsnmp_perlldopts"
fi
fi
# 'Perl_eval_pv' function (and equivalents)
#
if test "x$embed_perl" != "xno" ; then
# Three possible versions of this routine:
# eval_pv (to 5.003_97d)
# perl_eval_pv (5.004/5.005)
# Perl_eval_pv (from 5.6ff)
#
OLDLIBS="$LIBS"
LIBS="$LIBS $netsnmp_perlldopts"
AC_CHECK_FUNCS(eval_pv)
AC_CHECK_FUNC(perl_eval_pv,
AC_DEFINE(HAVE_PERL_EVAL_PV_LC, 1,
[Define to 1 if you have `the perl_eval_pv' function.]))
AC_CHECK_FUNC(Perl_eval_pv,
AC_DEFINE(HAVE_PERL_EVAL_PV_UC, 1,
[Define to 1 if you have the `Perl_eval_pv' function.]))
LIBS="$OLDLIBS"
#
# Note that autoconf flattens case when defining tokens,
# so we need to explicitly distinguish between the latter two.
if test "x$ac_cv_func_perl_eval_pv" != "xyes" -a "x$ac_cv_func_Perl_eval_pv" != "xyes" -a "x$ac_cv_func_eval_pv" != "xyes" ; then
if test "x$embed_perl" = "xtry" ; then
embed_perl="no"
else
AC_MSG_ERROR([Could not find the eval_pv, perl_eval_pv or Perl_eval_pv functions needed for embedded Perl support. Either set the environment variable PERLPROG to a different perl binary or use --disable-embedded-perl to turn off embedded Perl functionality altogether.])
fi
else
# Activate Embedded Perl
#
AC_DEFINE(NETSNMP_EMBEDDED_PERL, 1,
[Define if you are embedding perl in the main agent.])
OTHERAGENTLIBOBJS="snmp_perl.o"
OTHERAGENTLIBLOBJS="snmp_perl.lo"
OTHERAGENTLIBLFTS="snmp_perl.ft"
EMBEDPERLINSTALL="embedperlinstall"
EMBEDPERLUNINSTALL="embedperluninstall"
embed_perl="yes"
fi
else
EMBEDPERLINSTALL=""
EMBEDPERLUNINSTALL=""
embed_perl="no"
fi
fi
##
# Report and configure results
##
AC_SUBST(EMBEDPERLINSTALL)
AC_SUBST(EMBEDPERLUNINSTALL)
AC_SUBST(PERLLDOPTS_FOR_LIBS)
AC_SUBST(PERLLDOPTS_FOR_APPS)
# Results of Embedded Perl checks
#
AC_MSG_CHECKING([for potential embedded Perl support])
if test "x$embed_perl" != "xyes" ; then
AC_MSG_CACHE_ADD(Embedded Perl support: disabled)
AC_MSG_RESULT([disabled])
else
AC_MSG_CACHE_ADD(Embedded Perl support: enabled)
AC_MSG_RESULT([enabled])
fi
# Results of Perl Module checks
#
PERLTARGS=""
PERLINSTALLTARGS=""
PERLUNINSTALLTARGS=""
PERLFEATURES=""
AC_MSG_CHECKING([if we can install the Perl modules])
if test "x$install_perl" = "xyes" ; then
PERLTARGS="perlmodules"
PERLINSTALLTARGS="perlinstall"
PERLUNINSTALLTARGS="perluninstall"
PERLFEATURES="perlfeatures"
if test "x$embed_perl" = "xyes" ; then
AC_MSG_CACHE_ADD(SNMP Perl modules: building -- embeddable)
AC_MSG_RESULT([yes -- and embeddable])
else
AC_MSG_CACHE_ADD(SNMP Perl modules: building -- not embeddable)
AC_MSG_RESULT([yes -- not embeddable])
fi
else
AC_MSG_RESULT([no])
AC_MSG_CACHE_ADD(SNMP Perl modules: disabled)
fi
AC_SUBST(PERLTARGS)
AC_SUBST(PERLINSTALLTARGS)
AC_SUBST(PERLUNINSTALLTARGS)
AC_SUBST(PERLARGS)
AC_SUBST(PERLFEATURES)
# Reset LIBS to pre-libwrap value (???)
#
AGENTLIBS=$LIBS
LIBS=$NONAGENTLIBS
##
# Python checks
##
PYTHONTARGS=""
PYTHONINSTALLTARGS=""
PYTHONUNINSTALLTARGS=""
PYTHONCLEANTARGS=""
PYTHONFEATURES=""
AC_MSG_CHECKING([if we should install the python bindings])
if test "x$install_python" = "xyes" ; then
PYTHONTARGS="pythonmodules"
PYTHONINSTALLTARGS="pythoninstall"
PYTHONUNINSTALLTARGS="pythonuninstall"
PYTHONCLEANTARGS="pythonclean"
PYTHONFEATURES="pythonfeatures"
AC_MSG_CACHE_ADD(SNMP Python modules: building for $PYTHONPROG)
AC_MSG_RESULT([yes])
else
AC_MSG_CACHE_ADD(SNMP Python modules: disabled)
AC_MSG_RESULT([no])
fi
AC_SUBST(PYTHONTARGS)
AC_SUBST(PYTHONINSTALLTARGS)
AC_SUBST(PYTHONUNINSTALLTARGS)
AC_SUBST(PYTHONCLEANTARGS)
AC_SUBST(PYTHONARGS)
AC_SUBST(PYTHONFEATURES)