
# Copyright (C) Igor Sysoev
# Copyright (C) Nginx, Inc.


echo "checking for perl"


NGX_PERL_VER=`$NGX_PERL -v 2>&1 | grep '^This is perl' 2>&1 \
                                | sed -e 's/^This is perl, \(.*\)/\1/'`

if test -n "$NGX_PERL_VER"; then
    echo " + perl version: $NGX_PERL_VER"

    if [ "`$NGX_PERL -e 'use 5.006001; print "OK"'`" != "OK" ]; then
        echo
        echo "$0: error: perl 5.6.1 or higher is required"
        echo

        exit 1;
    fi

    if [ "`$NGX_PERL -MExtUtils::Embed -e 'print "OK"'`" != "OK" ]; then
        echo
        echo "$0: error: perl module ExtUtils::Embed is required"
        echo

        exit 1;
    fi

    NGX_PERL_CFLAGS="$CFLAGS `$NGX_PERL -MExtUtils::Embed -e ccopts`"
    NGX_PM_CFLAGS=`$NGX_PERL -MExtUtils::Embed -e ccopts`

    # gcc 4.1/4.2 warn about unused values in pTHX_
    NGX_PERL_CFLAGS=`echo $NGX_PERL_CFLAGS \
                     | sed -e 's/-Wunused-value/-Wno-unused-value/'`
    # icc8 warns 'declaration hides parameter "my_perl"' in ENTER and LEAVE
    NGX_PERL_CFLAGS=`echo $NGX_PERL_CFLAGS \
                     | sed -e 's/-wd171/-wd171 -wd1599/'`

    ngx_perl_ldopts=`$NGX_PERL -MExtUtils::Embed -e ldopts`

    ngx_perl_dlext=`$NGX_PERL -MConfig -e 'print $Config{dlext}'`

    if $NGX_PERL -V:usemultiplicity | grep define > /dev/null; then
        have=NGX_HAVE_PERL_MULTIPLICITY . auto/have
        echo " + perl interpreter multiplicity found"
    fi

    if $NGX_PERL -V:useithreads | grep undef > /dev/null; then
        # FreeBSD port wants to link with -pthread non-threaded perl
        ngx_perl_ldopts=`echo $ngx_perl_ldopts | sed 's/ -pthread//'`
    fi

    CORE_LINK="$CORE_LINK $ngx_perl_ldopts"
    LINK_DEPS="$LINK_DEPS $NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.$ngx_perl_dlext"

    if test -n "$NGX_PERL_MODULES"; then
        have=NGX_PERL_MODULES value="(u_char *) \"$NGX_PERL_MODULES\""
        . auto/define
        NGX_PERL_MODULES_MAN=$NGX_PERL_MODULES/man3
    fi

else
    echo
    echo "$0: error: perl 5.6.1 or higher is required"
    echo

    exit 1;
fi
