#! /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="" pb=no threads=yes nothreads=no temproot="" help=no gzipmanpages=yes installowner="" installgroup="" installbin="" installlib="" installman="" 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=KernelLib installkerneltarget=installkernellib installzlibtarget=installzlib installlz4target=installlz4 # 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="" elif uname -a | egrep 'armv|aarch64' > /dev/null 2>&1 ; then m32=arm32le m64=arm64le tm32=tarm32le tm64=tarm64le 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 ;; --nothreads) threads=no ;; --64) bits=64 ;; --32) bits=32 ;; --pb) pb=yes ;; --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=//'` ;; --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 [ "$m" = "pb" ] ; then echo "Don't select pb using -m or --machine, because pb needs the" echo " machine as the kernel host machine. Instead, use --pb to select" echo " a pb (portable bytecode) build." exit 1 fi if [ "$bits" = "" ] ; then if uname -a | egrep 'amd64|x86_64|aarch64' > /dev/null 2>&1 ; then bits=64 else bits=32 fi fi if [ "$threads" = "" ] ; then threads=yes fi if [ "$m" = "" ] ; then machine_supplied=no if [ $pb = yes ] ; then m=pb if [ $bits = 64 ] ; then mpbhost=$m64 ; else mpbhost=$m32 ; fi else 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 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 [ "$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 " --nothreads specify non-threaded version ($nothreads)" 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 (the default)" echo " --kernelobj build kernel.o instead of libkernel.a" echo " --installprefix= final installation root ($installprefix)" echo " --installbin= bin directory ($installbin)" echo " --installlib= lib directory ($installlib)" echo " --installman= manpage directory ($installman)" echo " --temproot= staging root ($temproot)" echo " --installowner= install with owner ($installowner)" echo " --installgroup= install with group ($installgroup)" echo " --installschemename= install with group ($installschemename)" echo " --installpetitename= install with group ($installpetitename)" echo " --installscriptname= install with group ($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 if [ "$m" = "" ] ; then maybem="" else maybem=$m fi echo 'No suitable machine type found in "boot".' echo "" echo "Available machine types:" echo " $machs" if [ "$machine_supplied" = "no" ] ; then echo "" if [ "$m" = "" ] ; then echo "If the problem is that the machine type was not inferred," echo "you can try" else echo "If the problem is that the inferred machine type $m is" echo "not correct, you can try" fi echo " $0 -m=" echo "to specify one of the available machine types." fi echo "" if [ "$m" = "" ] ; then echo 'If no directory in "boot" exists for the correct machine type,' echo "then you can use Racket v7.1 or later with" else echo "Since no directory in "'"boot"'" exists for $m, you can try" echo "using Racket v7.1 or later with" fi echo " racket rktboot/main.rkt --machine $maybem" echo "to create the boot files, and then try $0 again." if [ -f boot/pb/scheme.boot ] ; then echo "" echo "Alternatively, a pb machine type is available, so try" echo " $0 --pb" echo " make $maybem.bootquick" echo "to create the boot files using a portable-bytecode build," echo "and then try $0 again." fi 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.tar.gz https://github.com/nanopass/nanopass-framework-scheme/archive/v1.9.tar.gz && tar -zxf v1.9.tar.gz && mv nanopass-framework-scheme-1.9 nanopass && rm v1.9.tar.gz) || exit 1 fi if [ "${zlibDep}" != "" ] ; then if [ ! -f 'zlib/configure' ] ; then rmdir zlib > /dev/null 2>&1 (curl -L -o v1.2.11.tar.gz https://github.com/madler/zlib/archive/v1.2.11.tar.gz && tar -xzf v1.2.11.tar.gz && mv zlib-1.2.11 zlib && rm v1.2.11.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.8.3.tar.gz https://github.com/lz4/lz4/archive/v1.8.3.tar.gz && tar -xzf v1.8.3.tar.gz && mv lz4-1.8.3 lz4 && rm v1.8.3.tar.gz) || exit 1 fi fi if [ ! -f 'stex/Mf-stex' ] ; then rmdir stex > /dev/null 2>&1 (curl -L -o v1.2.1.tar.gz https://github.com/dybvig/stex/archive/v1.2.1.tar.gz && tar -zxf v1.2.1.tar.gz && mv stex-1.2.1 stex && rm v1.2.1.tar.gz) || exit 1 fi fi ./workarea $m $w $mpbhost sed -e 's/$(m)/'$m'/g'\ -e 's/$(workarea)/'$w'/g'\ makefiles/Makefile.in > Makefile sed -e 's/$(m)/'$m'/g'\ makefiles//Makefile-csug.in > csug/Makefile sed -e 's/$(m)/'$m'/g'\ 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 warningFlags="-Wpointer-arith -Wall -Wextra -Werror -Wno-implicit-fallthrough" optFlags=-O2 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 warningFlags=$warningFlags optFlags=$optFlags KernelCFlags=$KernelCFlags Kernel=\${${Kernel}} KernelLinkDeps=\${${Kernel}LinkDeps} KernelLinkLibs=\${${Kernel}LinkLibs} END