# -*- 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
    ;;

    *)
    ;;
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"

      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=""
AC_MSG_CHECKING([if we can install the Perl modules])
if test "x$install_perl" = "xyes" ; then
    PERLTARGS="perlmodules"
    PERLINSTALLTARGS="perlinstall"
    PERLUNINSTALLTARGS="perluninstall"
    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)


#       Reset LIBS to pre-libwrap value   (???)
#
AGENTLIBS=$LIBS
LIBS=$NONAGENTLIBS



##
#   Python checks
##

PYTHONTARGS=""
PYTHONINSTALLTARGS=""
PYTHONUNINSTALLTARGS=""
PYTHONCLEANTARGS=""
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"
    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)


