548 lines
15 KiB
Bash
Executable file
548 lines
15 KiB
Bash
Executable file
#! /bin/sh
|
|
|
|
# configure
|
|
# Copyright 1984-2017 Cisco Systems, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
machs=""; last=""; sep0=""; sep1=""; sep2=""; sep3=""; sep4=" and ";
|
|
for fn in boot/*/scheme.boot ; do
|
|
machs=$machs$sep0$last
|
|
last=`echo $fn | sed -e 's/boot\/\(.*\)\/scheme.boot/\1/'`
|
|
sep0=$sep1; sep1=", "; sep2=$sep3; sep3=$sep4; sep4=", and "
|
|
done
|
|
machs=$machs$sep2$last
|
|
|
|
m=""
|
|
w=""
|
|
threads=no
|
|
temproot=""
|
|
help=no
|
|
gzipmanpages=yes
|
|
installowner=""
|
|
installgroup=""
|
|
installbin=""
|
|
installlib=""
|
|
installman=""
|
|
installdoc=""
|
|
installcsug=""
|
|
installreleasenotes=""
|
|
installschemename="scheme"
|
|
installpetitename="petite"
|
|
installscriptname="scheme-script"
|
|
disablex11=no
|
|
disablecurses=no
|
|
: ${CC:="gcc"}
|
|
: ${CPPFLAGS:=""}
|
|
: ${CFLAGS:=""}
|
|
: ${LD:="ld"}
|
|
: ${LDFLAGS:=""}
|
|
: ${AR:="ar"}
|
|
: ${ARFLAGS:="rc"}
|
|
: ${RANLIB:="ranlib"}
|
|
: ${WINDRES:="windres"}
|
|
zlibInc=-I../zlib
|
|
LZ4Inc=-I../lz4/lib
|
|
zlibDep=../zlib/libz.a
|
|
LZ4Dep=../lz4/lib/liblz4.a
|
|
zlibLib=../zlib/libz.a
|
|
LZ4Lib=../lz4/lib/liblz4.a
|
|
zlibHeaderDep="../zlib/zconf.h ../zlib/zlib.h"
|
|
LZ4HeaderDep="../lz4/lib/lz4.h ../lz4/lib/lz4frame.h"
|
|
Kernel=KernelO
|
|
installkerneltarget=installkernelobj
|
|
installzlibtarget=
|
|
installlz4target=
|
|
|
|
# On WSL, set OS to "Windows_NT" to create a Windows
|
|
# build instead of a Linux (on Windows) build:
|
|
if [ "$OS" = "Windows_NT" ] ; then
|
|
CONFIG_UNAME="CYGWIN_NT-"
|
|
else
|
|
CONFIG_UNAME=`uname`
|
|
fi
|
|
|
|
case "${CONFIG_UNAME}" in
|
|
Linux)
|
|
if uname -a | egrep 'i386|i686|amd64|athlon|x86_64' > /dev/null 2>&1 ; then
|
|
m32=i3le
|
|
m64=a6le
|
|
tm32=ti3le
|
|
tm64=ta6le
|
|
elif uname -a | grep -i power > /dev/null 2>&1 ; then
|
|
m32=ppc32le
|
|
m64=""
|
|
tm32=tppc32le
|
|
tm64=""
|
|
fi
|
|
installprefix=/usr
|
|
installmansuffix=share/man
|
|
;;
|
|
QNX)
|
|
if uname -a | egrep 'x86' > /dev/null 2>&1 ; then
|
|
m32=i3qnx
|
|
tm32=ti3qnx
|
|
fi
|
|
installprefix=/usr/local
|
|
installmansuffix=man
|
|
;;
|
|
FreeBSD)
|
|
if uname -a | egrep 'i386|i686|amd64|athlon|x86_64' > /dev/null 2>&1 ; then
|
|
m32=i3fb
|
|
m64=a6fb
|
|
tm32=ti3fb
|
|
tm64=ta6fb
|
|
fi
|
|
installprefix=/usr/local
|
|
installmansuffix=man
|
|
;;
|
|
OpenBSD)
|
|
if uname -a | egrep 'i386|i686|amd64|athlon|x86_64' > /dev/null 2>&1 ; then
|
|
m32=i3ob
|
|
m64=a6ob
|
|
tm32=ti3ob
|
|
tm64=ta6ob
|
|
fi
|
|
installprefix=/usr/local
|
|
installmansuffix=man
|
|
;;
|
|
NetBSD)
|
|
if uname -a | egrep 'i386|i686|amd64|athlon|x86_64' > /dev/null 2>&1 ; then
|
|
m32=i3nb
|
|
m64=a6nb
|
|
tm32=ti3nb
|
|
tm64=ta6nb
|
|
fi
|
|
installprefix=/usr
|
|
installmansuffix=share/man
|
|
gzipmanpages=no
|
|
;;
|
|
Darwin)
|
|
if uname -a | egrep 'i386|i686|amd64|athlon|x86_64' > /dev/null 2>&1 ; then
|
|
m32=i3osx
|
|
m64=a6osx
|
|
tm32=ti3osx
|
|
tm64=ta6osx
|
|
fi
|
|
installprefix=/usr/local
|
|
installmansuffix=share/man
|
|
;;
|
|
SunOS)
|
|
if uname -a | egrep 'i386|i686|amd64|athlon|x86_64' > /dev/null 2>&1 ; then
|
|
m32=i3s2
|
|
m64=a6s2
|
|
tm32=ti3s2
|
|
tm64=ta6s2
|
|
installprefix=/usr
|
|
installmansuffix=share/man
|
|
gzipmanpages=no
|
|
fi
|
|
;;
|
|
CYGWIN_NT-*)
|
|
if uname -a | egrep 'i386|i686|amd64|athlon|x86_64' > /dev/null 2>&1 ; then
|
|
m32=i3nt
|
|
m64=a6nt
|
|
tm32=ti3nt
|
|
tm64=ta6nt
|
|
installprefix=/usr/local
|
|
installmansuffix=share/man
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
threads=""
|
|
bits=""
|
|
|
|
while [ $# != 0 ] ; do
|
|
case $1 in
|
|
-m=*)
|
|
m=`echo $1 | sed -e 's/^-m=//'`
|
|
;;
|
|
--machine=*)
|
|
m=`echo $1 | sed -e 's/^--machine=//'`
|
|
;;
|
|
--threads)
|
|
threads=yes
|
|
;;
|
|
--64)
|
|
bits=64
|
|
;;
|
|
--32)
|
|
bits=32
|
|
;;
|
|
--installprefix=*)
|
|
installprefix=`echo $1 | sed -e 's/^--installprefix=//'`
|
|
;;
|
|
--installlib=*)
|
|
installlib=`echo $1 | sed -e 's/^--installlib=//'`
|
|
;;
|
|
--installbin=*)
|
|
installbin=`echo $1 | sed -e 's/^--installbin=//'`
|
|
;;
|
|
--installman=*)
|
|
installman=`echo $1 | sed -e 's/^--installman=//'`
|
|
;;
|
|
--installdoc=*)
|
|
installdoc=`echo $1 | sed -e 's/^--installdoc=//'`
|
|
;;
|
|
--installcsug=*)
|
|
installcsug=`echo $1 | sed -e 's/^--installcsug=//'`
|
|
;;
|
|
--installreleasenotes=*)
|
|
installreleasenotes=`echo $1 | sed -e 's/^--installreleasenotes=//'`
|
|
;;
|
|
--installowner=*)
|
|
installowner=`echo $1 | sed -e 's/^--installowner=//'`
|
|
;;
|
|
--installgroup=*)
|
|
installgroup=`echo $1 | sed -e 's/^--installgroup=//'`
|
|
;;
|
|
--installschemename=*)
|
|
installschemename=`echo $1 | sed -e 's/^--installschemename=//'`
|
|
;;
|
|
--installpetitename=*)
|
|
installpetitename=`echo $1 | sed -e 's/^--installpetitename=//'`
|
|
;;
|
|
--installscriptname=*)
|
|
installscriptname=`echo $1 | sed -e 's/^--installscriptname=//'`
|
|
;;
|
|
--toolprefix=*)
|
|
toolprefix=`echo $1 | sed -e 's/^--toolprefix=//'`
|
|
CC="${toolprefix}${CC}"
|
|
LD="${toolprefix}${LD}"
|
|
AR="${toolprefix}${AR}"
|
|
RANLIB="${toolprefix}${RANLIB}"
|
|
WINDRES="${toolprefix}${WINDRES}"
|
|
;;
|
|
--gzip-man-pages)
|
|
gzipmanpages=yes
|
|
;;
|
|
--nogzip-man-pages)
|
|
gzipmanpages=no
|
|
;;
|
|
--temproot=*)
|
|
temproot=`echo $1 | sed -e 's/^--temproot=//'`
|
|
;;
|
|
--workarea=*)
|
|
w=`echo $1 | sed -e 's/^--workarea=//'`
|
|
;;
|
|
--help)
|
|
help=yes
|
|
;;
|
|
--disable-x11)
|
|
disablex11=yes
|
|
;;
|
|
--disable-curses)
|
|
disablecurses=yes
|
|
;;
|
|
--libkernel)
|
|
Kernel=KernelLib
|
|
installkerneltarget=installkernellib
|
|
if [ "$zlibInc" != "" ]; then
|
|
installzlibtarget=installzlib
|
|
fi
|
|
if [ "$LZ4Inc" != "" ]; then
|
|
installlz4target=installlz4
|
|
fi
|
|
;;
|
|
--kernelobj)
|
|
Kernel=KernelO
|
|
installkerneltarget=installkernelobj
|
|
installzlibtarget=
|
|
installlz4target=
|
|
;;
|
|
CC=*)
|
|
CC=`echo $1 | sed -e 's/^CC=//'`
|
|
;;
|
|
CPPFLAGS=*)
|
|
CPPFLAGS=`echo $1 | sed -e 's/^CPPFLAGS=//'`
|
|
;;
|
|
CFLAGS=*)
|
|
CFLAGS=`echo $1 | sed -e 's/^CFLAGS=//'`
|
|
;;
|
|
LD=*)
|
|
LD=`echo $1 | sed -e 's/^LD=//'`
|
|
;;
|
|
LDFLAGS=*)
|
|
LDFLAGS=`echo $1 | sed -e 's/^LDFLAGS=//'`
|
|
;;
|
|
AR=*)
|
|
AR=`echo $1 | sed -e 's/^AR=//'`
|
|
;;
|
|
ARFLAGS=*)
|
|
ARFLAGS=`echo $1 | sed -e 's/^ARFLAGS=//'`
|
|
;;
|
|
RANLIB=*)
|
|
RANLIB=`echo $1 | sed -e 's/^RANLIB=//'`
|
|
;;
|
|
WINDRES=*)
|
|
WINDRES=`echo $1 | sed -e 's/^WINDRES=//'`
|
|
;;
|
|
ZLIB=*)
|
|
zlibLib=`echo $1 | sed -e 's/^ZLIB=//'`
|
|
zlibInc=
|
|
zlibDep=
|
|
zlibHeaderDep=
|
|
installzlibtarget=
|
|
;;
|
|
LZ4=*)
|
|
LZ4Lib=`echo $1 | sed -e 's/^LZ4=//'`
|
|
LZ4Inc=
|
|
LZ4Dep=
|
|
LZ4HeaderDep=
|
|
installlz4target=
|
|
;;
|
|
*)
|
|
echo "option '$1' unrecognized or missing an argument; try $0 --help"
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ "$bits" = "" ] ; then
|
|
if uname -a | egrep 'amd64|x86_64' > /dev/null 2>&1 ; then
|
|
bits=64
|
|
else
|
|
bits=32
|
|
fi
|
|
fi
|
|
|
|
if [ "$threads" = "" ] ; then
|
|
threads=no
|
|
fi
|
|
|
|
if [ "$m" = "" ] ; then
|
|
if [ $bits = 64 ] ; then
|
|
if [ $threads = yes ] ; then m=$tm64 ; else m=$m64 ; fi
|
|
else
|
|
if [ $threads = yes ] ; then m=$tm32 ; else m=$m32 ; fi
|
|
fi
|
|
fi
|
|
|
|
if [ "$w" = "" ] ; then
|
|
w=$m
|
|
fi
|
|
|
|
if [ "$installbin" = "" ] ; then
|
|
installbin=$installprefix/bin
|
|
fi
|
|
|
|
if [ "$installlib" = "" ] ; then
|
|
installlib=$installprefix/lib
|
|
fi
|
|
|
|
if [ "$installman" = "" ] ; then
|
|
installman=$installprefix/$installmansuffix
|
|
fi
|
|
|
|
if [ "$installdoc" = "" ] ; then
|
|
installdoc=$installprefix/share/doc
|
|
fi
|
|
|
|
if [ "$installcsug" = "" ] ; then
|
|
installcsug=$installdoc/csug9.5
|
|
fi
|
|
|
|
if [ "$installreleasenotes" = "" ] ; then
|
|
installreleasenotes=$installdoc/csv9
|
|
fi
|
|
|
|
if [ "$disablex11" = "no" ] ; then
|
|
if [ $m = a6osx ] || [ $m = ta6osx ] ; then
|
|
if [ ! -d /opt/X11/include/ ] ; then
|
|
disablex11=yes
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ "$help" = "yes" ]; then
|
|
echo "Purpose:"
|
|
echo " $0 determines the machine type and constructs a custom Makefile"
|
|
echo " and Mf-install, taking into account the options below."
|
|
echo ""
|
|
echo "Options (defaults shown in parens):"
|
|
echo " --machine=<machine type> explicitly specify machine type ($m)"
|
|
echo " -m=<machine type> same as --machine <machine type> ($m)"
|
|
echo " --threads specify threaded version ($threads)"
|
|
echo " --32|--64 specify 32/64-bit version ($bits)"
|
|
echo " --disable-x11 disable X11 support"
|
|
echo " --disable-curses disable [n]curses support"
|
|
echo " --libkernel build libkernel.a instead of kernel.o"
|
|
echo " --kernelobj build kernel.o (the default)"
|
|
echo " --installprefix=<pathname> final installation root ($installprefix)"
|
|
echo " --installbin=<pathname> bin directory ($installbin)"
|
|
echo " --installlib=<pathname> lib directory ($installlib)"
|
|
echo " --installman=<pathname> manpage directory ($installman)"
|
|
echo " --installdoc=<pathname> documentation root ($installdoc)"
|
|
echo " --installcsug=<pathname> guide directory ($installcsug)"
|
|
# abbreviate "release notes" to fit default help in 80 cols:
|
|
echo " --installreleasenotes=<pathname> notes directory ($installreleasenotes)"
|
|
echo " --temproot=<pathname> staging root ($temproot)"
|
|
echo " --installowner=<ownername> install with owner ($installowner)"
|
|
echo " --installgroup=<groupname> install with group ($installgroup)"
|
|
echo " --installschemename=<schemename> install scheme as ($installschemename)"
|
|
echo " --installpetitename=<petitename> install petite as ($installpetitename)"
|
|
echo " --installscriptname=<scriptname> install scheme-script as ($installscriptname)"
|
|
echo " --toolprefix=<prefix> prefix tool (compiler, linker, ...) names"
|
|
echo " --[no]gzip-man-pages compress manual pages ($gzipmanpages)"
|
|
echo " --workarea=<pathname> build directory ($w)"
|
|
echo " CC=<C compiler> C compiler"
|
|
echo " CPPFLAGS=<C preprocessor flags> additional C preprocessor flags ($CPPFLAGS)"
|
|
echo " CFLAGS=<C compiler flags> additional C compiler flags ($CFLAGS)"
|
|
echo " LD=<linker> linker"
|
|
echo " LDFLAGS=<linker flags> additional linker flags ($LDFLAGS)"
|
|
echo " AR=<archiver> archiver"
|
|
echo " ARFLAGS=<archiver flgs> archiver flags"
|
|
echo " RANLIB=<archive indexer> archive indexer"
|
|
echo " WINDRES=<resource compiler> resource compiler"
|
|
echo " ZLIB=<lib> link to <lib> instead of own zlib"
|
|
echo " LZ4=<lib> link to <lib> instead of own LZ4"
|
|
echo ""
|
|
echo "Available machine types: $machs"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 --machine=i3le"
|
|
echo ""
|
|
echo " set machine-type to i3le rather than to determined type"
|
|
echo ""
|
|
echo " $0 --threads --installprefix=/usr/local"
|
|
echo ""
|
|
echo " specify threaded version and set installation directory to /usr/local."
|
|
echo ""
|
|
echo " $0 --installprefix=/usr/local --temproot=/tmp"
|
|
echo ""
|
|
echo " declare the final destination to be /usr/local but staging area"
|
|
echo " to be /tmp/usr/local. Make will record the final destination in the"
|
|
echo " installed manual pages but actually install the system and manual"
|
|
echo " pages in the staging area."
|
|
echo ""
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$m" = "" -o ! -f boot/$m/scheme.boot ] ; then
|
|
echo "no suitable machine type found"
|
|
echo "try rerunning as $0 -m=<machine type>"
|
|
echo "available machine types: $machs"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -d '.git' ] && command -v git >/dev/null 2>&1 ; then
|
|
git submodule init && git submodule update || exit 1
|
|
else
|
|
if [ ! -f 'nanopass/nanopass.ss' ] ; then
|
|
rmdir nanopass > /dev/null 2>&1
|
|
(curl -L -o v1.9.2.tar.gz https://github.com/nanopass/nanopass-framework-scheme/archive/v1.9.2.tar.gz && tar -zxf v1.9.2.tar.gz && mv nanopass-framework-scheme-1.9.2 nanopass && rm v1.9.2.tar.gz) || exit 1
|
|
fi
|
|
|
|
if [ "${zlibDep}" != "" ] ; then
|
|
if [ ! -f 'zlib/configure' ] ; then
|
|
rmdir zlib > /dev/null 2>&1
|
|
(curl -L -o v1.2.12.tar.gz https://github.com/madler/zlib/archive/v1.2.12.tar.gz && tar -xzf v1.2.12.tar.gz && mv zlib-1.2.12 zlib && rm v1.2.12.tar.gz) || exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "${LZ4Dep}" != "" ] ; then
|
|
if [ ! -f 'lz4/lib/Makefile' ] ; then
|
|
rmdir lz4 > /dev/null 2>&1
|
|
(curl -L -o v1.9.3.tar.gz https://github.com/lz4/lz4/archive/v1.9.3.tar.gz && tar -xzf v1.9.3.tar.gz && mv lz4-1.9.3 lz4 && rm v1.9.3.tar.gz) || exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ ! -f 'stex/Mf-stex' ] ; then
|
|
rmdir stex > /dev/null 2>&1
|
|
(curl -L -o v1.2.2.tar.gz https://github.com/dybvig/stex/archive/v1.2.2.tar.gz && tar -zxf v1.2.2.tar.gz && mv stex-1.2.2 stex && rm v1.2.2.tar.gz) || exit 1
|
|
fi
|
|
fi
|
|
|
|
./workarea $m $w
|
|
|
|
sed -e 's/$(m)/'$m'/g'\
|
|
-e 's/$(workarea)/'$w'/g'\
|
|
makefiles/Makefile.in > Makefile
|
|
|
|
sed -e 's/$(m)/'$m'/g'\
|
|
-e "s;^installdir=.*\$;installdir=$installcsug;"\
|
|
makefiles//Makefile-csug.in > csug/Makefile
|
|
|
|
sed -e 's/$(m)/'$m'/g'\
|
|
-e "s;^installdir=.*\$;installdir=$installreleasenotes;"\
|
|
makefiles//Makefile-release_notes.in > release_notes/Makefile
|
|
|
|
cat makefiles/Makefile-workarea.in > $w/Makefile
|
|
|
|
sed -e 's/$(m)/'$m'/g'\
|
|
-e 's/$(workarea)/'$w'/g'\
|
|
makefiles/Mf-boot.in > $w/Mf-boot
|
|
|
|
sed -e "s;^m=none\$;m=$m;"\
|
|
-e "s;^InstallBin=.*\$;InstallBin=$installbin;"\
|
|
-e "s;^InstallLib=.*\$;InstallLib=$installlib;"\
|
|
-e "s;^InstallMan=.*\$;InstallMan=$installman/man1;"\
|
|
-e "s;^InstallOwner=.*\$;InstallOwner=$installowner;"\
|
|
-e "s;^InstallGroup=.*\$;InstallGroup=$installgroup;"\
|
|
-e "s;^TempRoot=.*;TempRoot=$temproot;"\
|
|
-e "s;^GzipManPages=.*$;GzipManPages=$gzipmanpages;"\
|
|
-e "s;^InstallSchemeName=.*$;InstallSchemeName=$installschemename;"\
|
|
-e "s;^InstallPetiteName=.*$;InstallPetiteName=$installpetitename;"\
|
|
-e "s;^InstallScriptName=.*$;InstallScriptName=$installscriptname;"\
|
|
-e "s;^InstallKernelTarget=.*$;InstallKernelTarget=$installkerneltarget;"\
|
|
-e "s;^InstallZlibTarget=.*$;InstallZlibTarget=$installzlibtarget;"\
|
|
-e "s;^InstallLZ4Target=.*$;InstallLZ4Target=$installlz4target;"\
|
|
makefiles/Mf-install.in > $w/Mf-install
|
|
|
|
cat > $w/c/config.h << END
|
|
#define SCHEME_SCRIPT "$installscriptname"
|
|
#ifndef WIN32
|
|
#define DEFAULT_HEAP_PATH "$installlib/csv%v/%m"
|
|
#endif
|
|
END
|
|
|
|
if [ "$disablex11" = "yes" ]; then
|
|
echo '#define DISABLE_X11' >> $w/c/config.h
|
|
fi
|
|
|
|
cursesLib=-lcurses
|
|
ncursesLib=-lncurses
|
|
|
|
if [ "$disablecurses" = "yes" ]; then
|
|
echo '#define DISABLE_CURSES' >> $w/c/config.h
|
|
cursesLib=
|
|
ncursesLib=
|
|
fi
|
|
|
|
cat > $w/c/Mf-config << END
|
|
CC=$CC
|
|
CPPFLAGS=$CPPFLAGS
|
|
CFLAGS=$CFLAGS
|
|
LD=$LD
|
|
LDFLAGS=$LDFLAGS
|
|
AR=$AR
|
|
ARFLAGS=$ARFLAGS
|
|
RANLIB=$RANLIB
|
|
WINDRES=$WINDRES
|
|
cursesLib=$cursesLib
|
|
ncursesLib=$ncursesLib
|
|
zlibInc=$zlibInc
|
|
LZ4Inc=$LZ4Inc
|
|
zlibDep=$zlibDep
|
|
LZ4Dep=$LZ4Dep
|
|
zlibLib=$zlibLib
|
|
LZ4Lib=$LZ4Lib
|
|
zlibHeaderDep=$zlibHeaderDep
|
|
LZ4HeaderDep=$LZ4HeaderDep
|
|
Kernel=\${${Kernel}}
|
|
KernelLinkDeps=\${${Kernel}LinkDeps}
|
|
KernelLinkLibs=\${${Kernel}LinkLibs}
|
|
END
|