Skip to content
Snippets Groups Projects
Commit d5daca9f authored by ram's avatar ram
Browse files

Initial revision

parent 80941823
No related branches found
No related tags found
No related merge requests found
#!/bin/sh
# Install/build cmucl cores.
# David Axmark (davida@isil.detron.se)
# Rewritten 940501.
# This script was suppled by David Axmark. It rebuilds CMU CL from sources.
# It uses his build-and-install script, and may contain sun dependencies.
#
# Try to avoid depending on locally installed stuff.
PATH=/bin:$PATH
export PATH
sed_fix ()
{
(
file=$1; shift
if test ! -f $file.before-sed
then
sedscript=/tmp/sedscript-$$
> $sedscript
while test -n "$1"
do
# Dont fail for args begginging with -n
/usr/5bin/echo "$1" >> $sedscript
shift
done
mv $file $file.before-sed
echo "Applying sed fixes to $file"
sed -f $sedscript $file.before-sed > $file
rm -f $sedscript
fi
)
}
mkdir_if_needed () { if test ! -d "$1"; then mkdir "$1"; fi }
usage ()
{
echo "Usage:$0 cmucl_version [build_options]"
echo "Example: $0 17e -all"
exit 1
}
if test -z "$1"; then usage; fi
ver=$1; shift
if expr "$ver" : "[0-9]\{1,3\}[a-z]\{1,\}" > /dev/null
then
dummy=t
else
echo "The version $ver seems funny to me. Expected somthing like 17e."
exit 1
fi
# Set a lot of variables.
sys=sunos
base=${MY_BASEDIR:-/my}/cmucl
local_dir=$base/own-builds
CMUCL_ROOT=$base
CMUCL_EMPTYFILE=/var/tmp/empty
subdir=$ver
src=$base/src/$ver
tooldir=$src/tools
build_dir=$base/build
dest=$build_dir/$sys/$subdir
lisp=variant-lisp
safe_lisp="variant-lisp -version $ver"
logfile=$build_dir/build-$ver-log-`date +%H%M%S`
report_memory_layout=\
'(format t "read-only ~X~%static ~X~%dynamic ~X~%"
sparc:target-read-only-space-start sparc:target-static-space-start
sparc:target-dynamic-space-start)'
export ver tooldir build_dir CMUCL_ROOT CMUCL_EMPTYFILE sys subdir dest src lisp
if test -z "$1"; then usage; fi
# We need this for the log file
mkdir_if_needed $build_dir
(
while test -n "$1"
do
echo "Doing: $1"
case "$1"
in
-all-build-steps)
# All steps
echo "Doing all steps nesessariy to build a cmucl core."
set - -all \
-setup -genesis -compile-c-code -compile-lisp-code -worldbuild -mk-lisp
;;
-remove-old-installation)
rm -rf $base/release-$ver
;;
-remove-build-directory)
# We leave $base/build since we want to keep the log files.
rm -rf $dest
;;
-install-distribution)
cd $base
if test -d release-$ver
then
echo "Release $ver already installed"
exit 1
fi
vername=sunos
mkdir release-$ver
cd release-$ver
any_cat $base/distributions/$ver-$vername.tar* | gtar xf -
any_cat $base/distributions/$ver-extra-$vername.tar* | gtar xf -
mkdir src; cd src
any_cat $base/distributions/$ver-source.tar.* | gtar xf -
cd $base/src
ln -s ../release-$ver/src $ver
;;
-config)
# Configure a default kernel with CLX
cd $base/release-$ver/lib
conf=`/usr/5bin/echo -e "4\n6\n"`
echo "$conf" | CMUCL_VERSION=$ver ./config
;;
-clean-up)
# Remove or compress some files that are not strictly needed
rm -rf *.BAK subsystems
cd ../doc
gzip --best *.ps *.doc *.txt
echo "Done"
;;
-apply-patch)
name=$2; shift
echo "Applying patch: $name"
if test ! -f $src/patch-$name-applied
then
patch --directory $src --strip=1 < $local_dir/$ver-$name-patch
touch $src/patch-$name-applied
fi
;;
-add-local-c-code)
# Make sure that we link again
rm -f $dest/lisp/lisp
ml=$MY_BASEDIR_VERSION/lib
clm_lib=$MY_BASEDIR_VERSION/wlisp/gina/clm/lib.sun4
local_src=17e-extra-c-code.c
local_libs="-L$ml -lreg -lpisam -lhash -lmisam \
-lmerge -lnisam -lheap -linput -lmycurses -lpcurses -lmysys \
-ldbug -lstrings $ml/rx.o $ml/replace-many.o \
$clm_lib/unixsocket.o $clm_lib/io.o"
;;
-clean-c-code)
cd $dest/lisp
gmake -f $src/lisp/GNUmakefile clean
;;
-setup)
# Fix makefile so we can use the VPATH feature.
if test ! -f $src/lisp/patch-GNUmakefile-applied
then
patch --directory $src/lisp \
< $local_dir/$ver-GNUmakefile-patch
touch $src/lisp/patch-GNUmakefile-applied
fi
# Create build directory stucture
mkdir_if_needed $build_dir/$sys
mkdir_if_needed $build_dir/$sys/$subdir
# Create directory structure if needed.
if test ! -d $build_dir/$sys/$subdir/lisp
then
cd $src
# Suns find will not do a $var/{} substitution.
# So we do this instead.
find . -type d -print | while read dir; do mkdir $dest/$dir; done
fi
# Create Config & Depends
cd $dest/lisp
# Create Config file.
cat > Config << EOF
CPPFLAGS = -I. -I/usr/include/X11 -DSUNOS # -DDEBUG
CC = gcc # -Wall -Wstrict-prototypes -Wmissing-prototypes
CPP = /lib/cpp
CFLAGS = -O
ASFLAGS = -O
NM = nm -gp
ASSEM_SRC = sparc-assem.S
ARCH_SRC = sparc-arch.c
OS_SRC = sunos-os.c os-common.c $local_src
OS_LINK_FLAGS=-static
OS_LIBS=$local_libs
VPATH=$src/lisp:$local_dir
EOF
# Create a Depends file
if test ! -f Depends
then
> Depends
# Create fake internals.h so make depend works.
> internals.h
gmake -f $src/lisp/GNUmakefile depend
rm -f internals.h
fi
;;
-genesis)
echo "Map file for ldb version 0" > $dest/lisp/lisp.map
$safe_lisp -noinit << EOF
(setf (ext:search-list "target:") '("$dest/"))
(setf (ext:search-list "src:") '("$base/src/$ver/"))
(load "src:compiler/sparc/parms")
(load "src:compiler/generic/new-genesis")
$report_memory_layout
(in-package :lisp)
(setf *genesis-core-name* "target:lisp/kernel.core")
(setf *genesis-c-header-name* t)
(setf *genesis-symbol-table* "target:lisp/lisp.map")
(setf *genesis-map-name* t)
(setf *target-page-size* 8192)
(genesis nil)
(ext:quit)
EOF
;;
-compile-c-code)
cd $dest/lisp
gmake -f $src/lisp/GNUmakefile all
;;
-compile-lisp-code)
sed_fix $tooldir/compile-all \
"s;/afs/cs/project/clisp/build/;$base/build/;" \
"s;/afs/cs/project/clisp/;$base/;"
chmod a+x $tooldir/compile-all
cd $build_dir
echo "Starting compile of all lisp code. This takes a long time."
LISP=$safe_lisp \
$tooldir/compile-all -target sunos -release $ver -lisp $base/release-$ver \
-noupdate -nocompile hemlock
;;
-worldbuild)
cd $build
$safe_lisp -noinit << EOF
(setf (search-list "target:") '("$dest/" "$src/"))
(load "target:compiler/sparc/parms")
$report_memory_layout
(load "target:bootstrap" :if-does-not-exist nil)
(load "target:tools/setup")
(load "target:compiler/generic/new-genesis" :if-source-newer :compile)
(load "target:tools/worldbuild" :if-source-newer :compile)
$report_memory_layout
(quit)
EOF
;;
-mk-lisp)
sed_fix $tooldir/mk-lisp "s;/@sys/;/\$sys/;"
chmod a+x $tooldir/mk-lisp
cd $dest
$tooldir/mk-lisp -now $ver :no-hemlock
;;
-install-as)
new_ver=$2; shift
if test "$ver" = "$new_ver"
then
echo "buildver $ver can not be equal to installver $new_ver"
exit 1
fi
echo "Inststalling new core as version $new_ver"
mkdir_if_needed $base/release-$new_ver
mkdir_if_needed $base/release-$new_ver/bin
mkdir_if_needed $base/release-$new_ver/lib
# Make symlinks to original version.
cd $base/release-$new_ver
rm -f doc man src
ln -s ../release-$ver/doc ../release-$ver/man ../release-$ver/src .
cd $base/release-$new_ver/lib
for file in `echo ../../release-$ver/lib/*`
do
rm -f ./`basename $file`; ln -s $file .
done
rm -f $base/release-$new_ver/bin/lisp $base/release-$new_ver/lib/lisp.core
cp $dest/lisp/lisp $base/release-$new_ver/bin/lisp
cp $dest/lisp.core $base/release-$new_ver/lib/lisp.core
;;
-make-default)
# Change symlink so this becomes the default version
new_ver=$2; shift
cd $base
rm -f release; ln -s release-$new_ver release
;;
*)
echo "No such function: $1"
exit 1
;;
esac
shift
done
) 2>&1 | tee $logfile
#!/bin/sh
# Start a CMU CL lisp.
# This script was suppled by David Axmark. It supports starting various
# different versions of CMU CL, and is used by his build-and-install script.
# It may contain Sun dependencies.
MY_BASEDIR=${MY_BASEDIR:-/my}
BASE_DIR=$MY_BASEDIR/cmucl
# We require all arguments to this script to come before other
# arguments. This is so we dont have to try to pass on arguments
# with spaces, quotes and so on in them.
VERSION=
VARIANT=
# Default version/variant may be changed in the environment.
if test -n "$CMUCL_VERSION"; then VERSION=-$CMUCL_VERSION; fi
if test -n "$CMUCL_VARIANT"; then VARIANT=-$CMUCL_VARIANT; fi
while test -n "$1" -a -z "$END_LOOP"
do
case $1
in
-version) VERSION=-$2; shift; shift;;
-variant) VARIANT=-$2; shift; shift;;
-prod) PROD=t; shift;;
*) END_LOOP=t;;
esac
done
if test -n "$VERSION" -a ! -d "$BASE_DIR/release$VERSION"
then
echo "Could not find lisp version $VERSION."
if test -n "LISP_MUST_HAVE_RIGHT_CORE"
then
exit 1
fi
echo "Trying to use default version"
VERSION=
fi
if test -n "$PROD"
then
BASE=$MY_BASEDIR/production/interview
else
BASE=$BASE_DIR/release$VERSION
fi
LISP=$BASE/bin/lisp
CORE=$BASE/lib/lisp.core
CMUCLLIB=$BASE/lib
PATH=$BASE/bin:$PATH
# Avoid tmpfs filesystems for CMUCL_EMPTYFILE
CMUCL_EMPTYFILE=/var/tmp/empty
export PATH CMUCLLIB CMUCL_EMPTYFILE
# Use this systems version as default if it exists. Ex if we are running
# under /my/ok we will use the -ok core.
MY_VERSION=`basename ${MY_BASEDIR_VERSION:-/}`
if test -n "$MY_VERSION" -a -f $CORE$VARIANT-$MY_VERSION
then
VARIANT="$VARIANT-$MY_VERSION"
fi
if test -n "$VARIANT" -a ! -f $CORE$VARIANT
then
echo "Could not find lisp variant $CORE$VARIANT."
if test -n "LISP_MUST_HAVE_RIGHT_CORE"
then
exit 1
fi
echo "Trying to use default variant"
VARIANT=
else
CORE="$CORE$VARIANT"
fi
exec $LISP -core $CORE "$@"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment