###########################################
## PARI
###########################################

cd src

# Prepare all variables for building PARI/GP, except for CFLAGS

# This is needed or there are weird locale problems involving rpath
# with building Sage:
LANG=C
export LANG

# Pari ignores LDFLAGS when linking libpari-gmp.so, so we trick it:
DLLDFLAGS="$LDFLAGS"
export DLLDFLAGS

# PARI does not build correctly with LD set (which is set by
# sage-env).  PARI actually needs LD set to a compiler to do the
# linking, not to the linker directly.
unset LD

# Let the user pass extra parameters to PARI's "Configure", e.g.
# to specify desired graphics support (which is disabled by default):
if [ -z "$PARI_CONFIGURE" ]; then
    echo "============================================================"
    echo "Configuring PARI/GP without graphics support (for plotting)."
    echo "If you need it, pass the appropriate option(s) to PARI by"
    echo "setting and exporting \$PARI_CONFIGURE prior to building"
    echo "Sage (or at least before you build/install the PARI spkg),"
    echo "e.g. by typing at the shell prompt:"
    echo "    export PARI_CONFIGURE=\"--graphic=auto\""
    echo "or"
    echo "    export PARI_CONFIGURE=\"--with-fltk\""
    echo "Note that PARI doesn't treat it as an error if the requested"
    echo "graphics library or the corresponding header files are not"
    echo "found; it will then simply disable graphics support."
    echo "Please consult the PARI documentation for further details."
    echo "============================================================"

    PARI_CONFIGURE="--graphic=none"
else
    echo "============================================================"
    echo "Configuring PARI/GP with additional user-specified options:"
    echo "    PARI_CONFIGURE=\"$PARI_CONFIGURE\""

    # Do NOT add "--graphic=none" if the user provided one of these:
    #     "--with-fltk[=...]", "--with-qt[=...]"
    # Comment by leif: This misbehavoir seems to have been fixed in
    #                  PARI 2.4.3; the following doesn't hurt though:
    if ! (echo "$PARI_CONFIGURE" | egrep -- "--with-fltk|--with-qt") \
          >/dev/null;
    then
        echo "To avoid unexpected behavior, we prepend \"--graphic=none\":"
        PARI_CONFIGURE="--graphic=none $PARI_CONFIGURE"
        echo "    \"$PARI_CONFIGURE\""
        echo "(Disabling graphics can be overridden by user settings.)"
    fi
    echo "============================================================"
fi

# Allow the user to enable PARI self-tuning.
# This is time-consuming, but some may want to do it.
# Comment by leif: Also, PARI's Configure calls "make" (instead of $MAKE)
#                  if we do tuning, so:
#            TODO: Replace that in our patched version of Configure!
if [ "$SAGE_TUNE_pari" = yes -o "$SAGE_TUNE_PARI" = yes ]; then
    echo
    echo 'PARI/GP will be tuned for your system since you set SAGE_TUNE_pari="yes".'
    echo 'This can take a long time.'
    echo 'WARNING: Tuning PARI/GP is unreliable. You may find your build of PARI'
    echo 'fails, or PARI/GP does not work properly once built. We recommend to'
    echo 'build this package with SAGE_CHECK="yes".'
    echo
    PARI_CONFIGURE="$PARI_CONFIGURE --tune"
else
    echo
    echo 'To minimize Sage build time and to ensure the best reliability, PARI/GP'
    echo 'will not be tuned for your system. Experience shows tuning can be'
    echo 'unreliable. If you do want to tune PARI/GP, set the environment'
    echo 'variable SAGE_TUNE_pari="yes" by typing the following before building'
    echo 'Sage (or at least before building/installing PARI/GP):'
    echo '  SAGE_TUNE_pari=yes'
    echo '  export SAGE_TUNE_pari'
    echo 'If you do this, we strongly recommend to also enable checking. For this,'
    echo 'type the following:'
    echo '  SAGE_CHECK=yes'
    echo '  export SAGE_CHECK'
    echo
fi

unset GP_INSTALL_PREFIX # we do not want this to be set by the user

# In addition, a lot of variables used (internally) by PARI might un-
# intentionally get their values from the "global" environment, so it's
# safer to clear them here (not further messing up PARI's scripts):
unset static tune timing_fun error
unset enable_tls
unset with_fltk with_qt
unset with_ncurses_lib
unset with_readline_include with_readline_lib without_readline
unset with_gmp_include with_gmp_lib without_gmp
unset dfltbindir dfltdatadir dfltemacsdir dfltincludedir
unset dfltlibdir dfltmandir dfltsysdatadir dfltobjdir

export CFLAGS=$CFLAGS_O3

if [ "$SAGE_DEBUG" = yes ]; then

    # Compile kernel files with -O1 instead of -funroll-loops; -O0 gives
    # a segmentation fault on some OS X systems when doing
    # factor(10356613*10694706299664611221)
    # See #13921, also reported upstream:
    # - http://pari.math.u-bordeaux.fr/archives/pari-dev-1301/msg00000.html
    PARI_MAKEFLAGS="KERNELCFLAGS=-O1 $PARI_MAKEFLAGS"
fi


# Build PARI/GP
# Configure PARI/GP, forcing bash instead of /bin/sh.  It is not
# strictly necessary to use bash, but it hopefully makes the script
# less system-dependent.  Since Sage assumes the existence of bash
# anyway, it doesn't hurt either. -- jdemeyer
#
# Note that "--graphic=none" is (usually) added to PARI_CONFIGURE:
#--with-gmp-include="/usr/include/x86_64-linux-gnu" \
bash ./Configure --prefix="$SAGE_LOCAL" \
    --with-readline="$SAGE_LOCAL" $SAGE_CONFIGURE_GMP \
    --with-runtime-perl="/usr/bin/env perl" \
    --mt=pthread \
    --kernel=gmp $PARI_CONFIGURE || \
    sdh_die "Error configuring PARI with readline and GMP kernel failed."

sdh_make $PARI_MAKEFLAGS gp


# install non-parallel (-j1) because of race conditions
sdh_make_install -j1
