# -*- 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 "x$enable_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)