#! /bin/sh
#
# This file is part of the PARI/GP package.
#
# PARI/GP is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation. It is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY WHATSOEVER.
#
# Check the License for details. You should have received a copy of it, along
# with the package; see the file 'COPYING'. If not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

# Configuration file for GP/PARI.  Run Configure --help for Usage.
#
# Perl's Configure and GNU autoconfig were of much help in writing these files.
# $Id$

TOP=`pwd`
MAKE=${MAKE:-make}
config_dir=config
data_dir=data
doc_dir=doc
examples_dir=examples
misc_dir=misc
src_dir=src
desc_dir=src/desc

case "$RUNTEST" in /*);; */*) RUNTEST="$TOP/$RUNTEST";; esac

cd $config_dir
# Process options, initialize
. ./get_head # do we need head -n # or head -# ?
. ./version
echo "Configuring pari-$pari_release_verbose $patchlevel_verbose"
command_line0="$0 $@"
. ./get_config_options
####################### CONFIGURE - SHELL ###################################
. ./get_nl # how to get echo without \n ? (for config questions)
. ./get_PATH
#  We might need the following :
echo Looking for some tools first ...
_tools_list='gzip cc gcc ld perl zcat'
pathspace=`echo $PATH | sed -e "s/$dir_sep/ /g" | sed -e 's,\\\\,/,g'`

for file in $_tools_list; do
  x=`./locate $file '' $pathspace`
  eval $file=$x
  case $x in
# support also DOS filesystems (hard drive prepended)
   ?:/*|/*) echo ..."$file is $x";;
      *) echo ..."I could not find $file." >&2;;
  esac
done
if test -z "$zcat" -a -n "$gzip"; then zcat="$gzip -dc"; fi

####################### CONFIGURE - ARCHITECTURE ############################
. ./get_archos # arch, osname
config_log="$TOP/config-$arch-$osname$$.log"
cat > $config_log<< EOT
This file contains messages produced while configuring
  pari-$pari_release $patchlevel_verbose
to aid debugging if Configure makes a mistake. Command line was
  > $command_line0

EOT
exec 5>> $config_log

####################### CONFIGURE - COMPILATION #############################
# $_cc_list (includes 'optimization'), extraflag
. ./get_cc
#
. ./get_mt
# doubleformat, sizeof_long
. ./get_double_format
# asmarch, pretty
. ./get_kernel
# _dl_list, DLCFLAGS, update CFLAGS
. ./get_dlcflags
# $_ld_list
. ./get_ld
# $_dlld_list
. ./get_dlld
# $_perl_list
. ./get_perl
####################### CONFIGURE - LIBC ####################################
. ./get_libc # $_has_list, RT_LIBS, DL_LIBS
####################### CONFIGURE - LIBRARIES ###############################
# Looking for libraries: gmp, X11, fltk, Qt, readline
echo Checking for optional libraries and headers...
# $_gmp_list
if test "$kernlvl1" = "gmp"; then
  . ./get_gmp
fi
# $_graphic_list
. ./get_graphic_lib
# $_readline_list (includes 'readline')
case "$without_readline" in
  yes);;
  *) . ./get_readline
esac
#############################################################################
case $kernlvl1 in
gmp) libpari_base=pari-gmp;;
none) libpari_base=pari;;
esac
case $enable_tls in
yes) libpari_base="${libpari_base}-tls"
esac

if test `expr $VersionMinor % 2` = 0; then
  libpari_base=$libpari_base-$version
fi

####################### CONFIGURE - MAKE ####################################
. ./get_install # $_install_list
. ./get_objdir  # objdir, cdobjdir
. ./get_static  # static
# For dynamic linking, before and after installing
runpath=\"$libdir\"
LDDYN="-lpari"
# get_modld needs $includedir from get_install, static, and LDDYN
. ./get_modld   # $_modld_list

# Which copy, SHELL ?
case "$osname" in
  os2) ln_s=cp;      make_sh=sh;;
  *)   ln_s="ln -s"; make_sh="/bin/sh";;
esac
####################### CONFIGURE - CLEANUP #################################
rm -f gmon.out # created by Configure -pg
rm -f *.gcno *.gcda # created by Configure -gcov
####################### CONFIGURE - SPIT ####################################
. ./get_tests #_test_list
# Now spit out the results
cat << EOT
==========================================================================
EOT
cd "$TOP"
if test ! -d $objdir; then mkdir -p $objdir; fi
rm -f $objdir/config.log; mv $config_log $objdir/config.log
dflt_conf_file=$objdir/$dflt_conf_file

cat > $dflt_conf_file << EOT
# Config file for Pari $release -- $pretty

EOT
case "$osname" in
  os2|mingw) shell_q='"'; echo "shell_q='\"'"  >> $dflt_conf_file;;
    *) shell_q="'"; echo "shell_q=\"'\"" >> $dflt_conf_file;;
esac

for variable in\
  pari_release pari_release_verbose version libpari_base static objdir\
  arch asmarch osname pretty\
  kernlvl0 kernlvl1 RT_LIBS DL_LIBS MT_LIBS LIBS\
  dir_sep runpath runpathprefix LDDYN RUNTEST\
  ln_s make_sh\
  sizeof_long doubleformat\
  thread_engine enable_tls\
  runtime_perl\
  $_tools_list\
  $_test_list\
  $_install_list\
  $_perl_list\
  $_cc_list\
  $_ld_list\
  $_dl_list\
  $_dlld_list\
  $_graphic_list\
  $_modld_list\
  $_readline_list\
  $_gmp_list\
  $_has_list; do
  eval "echo $variable=\'"'$'"$variable\'" \>\> $dflt_conf_file
done

. $config_dir/extract_files

#  Building...
cat << EOT
==========================================================================
EOT

if test -n "$tune"; then
  echo "Building and tuning PARI (this may take a while)"
  echo
  (cd $objdir; rm -f parilvl1.h pariinl.h;\
  $MAKE tune && tune -t > tune.h.new && mv tune.h.new tune.h && cat tune.h\
    && rm -f parilvl1.h pariinl.h && $MAKE gp)
else
  echo $n "Shall we try to build pari $version.$patch ($status) now (y/n)? $c"
  dflt=n; rep='y n'; . $config_dir/myread
fi

mkobjdir=`$config_dir/objdir`
cdobjdir=
if test "$objdir" != "$mkobjdir"; then
  cdobjdir="cd $objdir; "
fi

case $ans in
y) if (cd $objdir; $MAKE gp); then
     echo $n "Shall we install the files where they belong (y/n)? $c"
     dflt=n; rep='y n'; . $config_dir/myread
     case $ans in
       y) $MAKE install;;
       n) echo "Ok. Type \"${cdobjdir}make install\" when you are ready";;
     esac
   fi;;
n) echo "Ok. Type \"${cdobjdir}make install\" when you are ready";;
esac
echo 'Bye !'
