
# Copyright (C) Igor Sysoev


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 [ "`echo 'use 5.006001; print "OK"' | $NGX_PERL 2>&1`" != OK ]; then
        echo
        echo "$0: error: perl 5.6.1 or higher is required"
        echo

        exit 1;
    fi

    CFLAGS="$CFLAGS `$NGX_PERL -MExtUtils::Embed -e ccopts`"
    ngx_perl_ldopts=`$NGX_PERL -MExtUtils::Embed -e ldopts`

    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 define > /dev/null; then
        have=NGX_HAVE_PERL_CLONE . auto/have
        echo " + perl_clone() found"

    else
        # 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.so"

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

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

    exit 1;
fi
