Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagelib
Path: blob/master/spkg-install
2609 views
#!/bin/sh
# This is the spkg-install script which will be emplaced within the SPKG for
# the sage library repository whenever it is packaged.

#######################################
# Install Sage libraries
#######################################

CUR=`pwd`

if [ $? -ne 0 ]; then
   exit 1
fi

DEVEL=$SAGE_ROOT/devel

if [ ! -d "$DEVEL" ]; then
    mkdir "$DEVEL"
fi

if [ $? -ne 0 ]; then
   exit 1
fi

D=`pwd`
E=`basename "$D"`

if [ ! -d "$DEVEL/old" ]; then
    mkdir "$DEVEL/old"
fi

if [ ! -f "$DEVEL/sage-main"/.hg/00changelog.i ]; then 
   mv "$DEVEL/sage-main" "$DEVEL/old/sage-bad_delete_me"
fi

###########################################################
# Setup libcsage symlinks

## set up libcsage. this does two things: first, 
## we build libcsage so that we can set up links
## to make the sage build work. second, since this
## is a new system, we need to get rid of old 
## copies of c_lib files and put our symlinks in place
cd c_lib
scons -Q install
## always kill the libcsage, we remake the link below
rm -f "$SAGE_ROOT"/local/lib/libcsage.*
## if any of the include files have been copied over, 
## let's go ahead and get rid of them all
if [ -f "$SAGE_ROOT/local/include/stdsage.h" ]; then
    rm -f "$SAGE_ROOT/local/include/ZZ_pylong.h"
    rm -f "$SAGE_ROOT/local/include/ccobject.h"
    rm -f "$SAGE_ROOT/local/include/gmp_globals.h"
    rm -f "$SAGE_ROOT/local/include/interrupt.h"
    rm -f "$SAGE_ROOT/local/include/mpn_pylong.h"
    rm -f "$SAGE_ROOT/local/include/mpz_pylong.h"
    rm -f "$SAGE_ROOT/local/include/ntl_wrap.h"
    rm -f "$SAGE_ROOT/local/include/stdsage.h"
fi

## now make our symlinks 

## symlinks don't work on cygwin, scons -Q install will hardcopy the
## files over on Cygwin, while not on other systems.

cd "$SAGE_ROOT"/local/lib/

if [ `uname` = "Darwin" ]; then
    ln -s ../../devel/sage/c_lib/libcsage.dylib .
elif [ $UNAME != "CYGWIN" ]; then
    ln -s ../../devel/sage/c_lib/libcsage.so .
fi

cd "$SAGE_ROOT/local/include/"
rm -rf csage
ln -s ../../devel/sage/c_lib/include csage

cd "$CUR"

###########################################################


if [ -d "$DEVEL/sage-main" ]; then
    cd "$DEVEL"


    rm -f sage
    ln -sf sage-main sage
    cd sage

    # TEMPORARY HACK (2009-05-15) until we write a proper system for
    # deleting old/stale .so and .py[c] files.  We only have to do this
    # once for the first upgrade (to sage-4.0).   This line should be
    # removed no matter what in a couple of months (e.g, end of 2009).
    # Note that deleting files from build/* during spkg-install
    # is safe, since at worst it increases build time.  -- William Stein
    rm -f build/*/sage/symbolic/constants*
    rm -f build/sage/symbolic/constants*
    rm -f build/*/sage/parallel/multiprocessing.py*
    rm -f build/sage/parallel/multiprocessing.py*

    sage -sync-build

    # Pull in changes from the archive just downloaded. 
    hg pull "$CUR"
    hg merge tip
    hg ci -m "merge"
    # Make the pulled in changes take effect. 
    hg update 


    # Since we are doing an upgrade, it is very important that the
    # build always completely works with no dependency issues. It is
    # OK if the build takes a little longer, since this is a full
    # upgrade.  So we touch all pyrex code.

    echo "Deleting the scons target."
    cd c_lib
    scons -Q -c install
    scons -c "$SAGE_LOCAL"/include/
    cd ..

    "$SAGE_ROOT/sage" -b
    if [ $? -ne 0 ]; then
        echo "Error building new version of Sage."
        echo "You might try typing 'sage -ba' or write to sage-support with as much information as possible."
        exit 1
    fi

else

    cd "$CUR"
    mkdir "$DEVEL/sage-main"
    cp -pr * .hg* "$DEVEL/sage-main/"

    cd "$DEVEL"
    rm -rf sage
    ln -sf sage-main sage

    sage -ba-force

    if [ $? -ne 0 ]; then
        echo "ERROR installing Sage"
        exit 1
    fi

fi

# Create an appropriate hgrc file for the target
cat > "$DEVEL/sage-main/.hg/hgrc" <<"HEREDOC"
[diff]
git = true
HEREDOC