David Kirkby

Email: <david.kirkby AT SPAMFREE onetel DOT net>

...

An spkg-install for 'lcalc', for which I hope the functionality will be added at a earlier stage in the build process.

# This spkg-install was written for 'lcalc', but in such a way that it is
# hoped it can be used much more widely in Sage. As such, it does things that
# are not needed for 'lcalc', but will be used to test the general principles

if [ -z "$SAGE_LOCAL" ] ; then
   echo "SAGE_LOCAL undefined ... exiting";
   echo "Maybe run 'sage -sh'?"
   exit 1
fi

# Force an exit on all errors. However, it will be desirable to unset this
# sometimes, as you might want to test for a particular error and exit with
# a message. You can't do that with 'set -e'. So use 'set +e' to unset it
set -e

# Compile for 64-bit if SAGE64 is set to 'yes' or '1'
if [ "x$SAGE64" = "xyes" ] || [ "x$SAGE64" = "x1" ]  ; then
   CFLAGS="$CFLAGS -m64 "
   CXXFLAGS="$CXXFLAGS -m64 "
   FFLAGS="$FFLAGS -m64 "
fi

# If SAGE_DEBUG is set either unset (the default), set to '1', 'yes',  or 'TRUE'
# then build with debugging information. Otherwise, don't add debugging information.

# Since both the Sun and GNU compilers accept -g to give debugging information
# there is no need to do anything specific to one compiler or the other.

if [ "x$SAGE_DEBUG" = "x" ] || [ "x$SAGE_DEBUG" = "x1" ] ; then
  echo "Code will be built with debugging information present. Set 'SAGE_DEBUG' to '0' if you don't want that."
  CFLAGS="$CFLAGS -g "
  CXXFLAGS="$CXXFLAGS -g "
  FFLAGS="$FFLAGS -g "
elif [ "x$SAGE_DEBUG" = "xyes" ] || [ "x$SAGE_DEBUG" = "xTRUE" ] ; then
  echo "Code will be built with debugging information present. Set 'SAGE_DEBUG' to '0' if you don't want that."
  CFLAGS="$CFLAGS -g "
  CXXFLAGS="$CXXFLAGS -g "
  FFLAGS="$FFLAGS -g "
fi

# Display all warnings from the compilers. Do so in a way that works for
# both The GNU Compiler Collection (gcc, g++, gfortran), as well as for
# Sun's compilers. Since the compilers use different methods, the compiler
# must be tested. In fact, not all Sun compilers use the same method.

# gcc/g++/gfortran uses -Wall to show this.

# The best flags for the Sun Studio 12 compiler suite are below. It is possible some of these
# flags may not work with older version of Sun compilers. It would also need
# more testing, before being more widely used in Sage.


# Determine if the C compiler is the Sun or GNU compiler. This is based on the fact that
# 'gcc --version' will print 'GNU' somewhere in the output, and the Sun compiler will print
# 'sun' somewhere in the output if called with the options '-flags'. The exit code of grep is used,
# as I'm advised this is the best way to do this. 

# Add appropriate flag(s) to show all warnings.
if "$CC" -flags 2>&1 | grep -i sun  ;  then
  CFLAGS="$CFLAGS -errshort=full "
  SUN_COMPILER=1
elif "$CC" --version | grep 'GCC'  ; then
  CFLAGS="$CFLAGS -Wall "
  GNU_COMPILER=1
else
  echo "The spkg-install file can't work out what C compiler you are using"
  echo "No flags will be added to show extra warnings while compiling C"
fi

# Determine if the C++ compiler is the Sun or GNU compiler
# Add appropriate flag(s) to show all warnings.
if "$CXX" -flags 2>&1 | grep -i sun  ;  then
  CXXFLAGS="$CXXFLAGS +w2 "
  SUN_COMPILER=1
elif "$CXX" --version | grep 'GCC'  ; then
  CXXFLAGS="$CXXFLAGS -Wall "
  GNU_COMPILER=1
else
  echo "The spkg-install file can't work out what C++ compiler you are using"
  echo "No flags will be added to show extra warnings while compiling C++"
fi


# Determine if the Fortran compiler is the Sun or GNU compiler
# Add appropriate flag(s) to show all warnings.
if [ -z "$SAGE_FORTRAN" ] ; then
   echo "No Fortran compiler has been defined. No flags will be added to detect warnings, as the compiler type is unknown"
else
   if "$SAGE_FORTRAN" -flags 2>&1 | grep -i sun  ;  then
      FFLAGS="$FFLAGS -w2 "
      SUN_COMPILER=1
   elif "$SAGE_FORTRAN" --version | grep 'GCC'  ; then
      FFLAGS="$FFLAGS -Wall "
      GNU_COMPILER=1
   else
      echo "The spkg-install file can't work out what Fortran compiler you are using"
      echo "No flags will be added to show extra warnings while compiling Fortran"
   fi
fi

# Checks that the user is not mixing the Sun and GNU compilers. This problem
# has been seen on code built with the aid of SCons, but in general could
# happen with any code if the user has specified a C compiler but not a C++ one.
# This problem is even more likely to occur with the Fortran compiler - I've done
# it myself when building Sage!

if [ "x$SUN_COMPILER" = "x1" ] && [ "x$GNU_COMPILER" = "x1" ] ; then
  echo "You are mixing the Sun and GNU C/C++/Fortran compilers"
  echo "Such a combination will lead to problems. Check CC, CXX & SAGE_FORTRAN carefully."
  echo "Exiting ..."
  exit 1
fi

cd src

if [ `uname` = "SunOS" ]; then
    LCALC_LIBS="-lpari -lmpfr -lgmpxx -lgmp -liberty"
else
    LCALC_LIBS="-lpari -lmpfr -lgmpxx -lgmp"
fi

export CC CXX CFLAGS CXXFLAGS LCALC_LIBS SAGE_FORTRAN FFLAGS

echo "Building Rubinstein's lcalc program using CC=$CC"
echo "                                          CCX=$CXX"
echo "                                          SAGE_FORTRAN=$SAGE_FORTRAN"
echo "                                          CFLAGS=$CFLAGS"
echo "                                          CXXFLAGS=$CXXFLAGS"
echo "                                          FFLAGS=$FFLAGS"
echo "                                          LCALC_LIBS=$LCALC_LIBS"

# disable Cygwin build for now
if [ `uname` = "CYGWIN" ]; then
    echo "Sorry, the lcalc build is currently broken"
    echo 1
fi

cd src

set +e

success() {
    if [ $? -ne 0 ]; then
        echo "Error building lcalc '$1'"
        exit 1
    fi
}

set -e

export DEFINES=""
cp ../../patches/Makefile.sage Makefile
make lcalc
success 'plain'

echo "Now copying over the lcalc binary"
cp lcalc "$SAGE_LOCAL/bin"
success 'install'


DavidKirkby (last edited 2009-08-04 11:28:23 by DavidKirkby)