#! /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= explicitly specify machine type ($m)" echo " -m= same as --machine ($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= final installation root ($installprefix)" echo " --installbin= bin directory ($installbin)" echo " --installlib= lib directory ($installlib)" echo " --installman= manpage directory ($installman)" echo " --installdoc= documentation root ($installdoc)" echo " --installcsug= guide directory ($installcsug)" # abbreviate "release notes" to fit default help in 80 cols: echo " --installreleasenotes= notes directory ($installreleasenotes)" echo " --temproot= staging root ($temproot)" echo " --installowner= install with owner ($installowner)" echo " --installgroup= install with group ($installgroup)" echo " --installschemename= install scheme as ($installschemename)" echo " --installpetitename= install petite as ($installpetitename)" echo " --installscriptname= install scheme-script as ($installscriptname)" echo " --toolprefix= prefix tool (compiler, linker, ...) names" echo " --[no]gzip-man-pages compress manual pages ($gzipmanpages)" echo " --workarea= build directory ($w)" echo " CC= C compiler" echo " CPPFLAGS= additional C preprocessor flags ($CPPFLAGS)" echo " CFLAGS= additional C compiler flags ($CFLAGS)" echo " LD= linker" echo " LDFLAGS= additional linker flags ($LDFLAGS)" echo " AR= archiver" echo " ARFLAGS= archiver flags" echo " RANLIB= archive indexer" echo " WINDRES= resource compiler" echo " ZLIB= link to instead of own zlib" echo " LZ4= link to 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=" 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