#!/bin/sh # configure -- prepare to compile/install hmake # author: Malcolm.Wallace@cs.york.ac.uk # (nhc13config - March 1998) # (nhc98config - May 1999) # (configure - Oct 1999) # (hacked for just hmake - December 1999) # (updated - January 2002) # When incrementing this version number, don't forget to change the # corresponding definition in Makefile.inc! HMAKEVERSION="3.13 (2006-11-01)" export HMAKEVERSION if uname >/dev/null 2>&1 then OS=`uname -s` else OS=unknown fi # Note for people building binary packages of hmake: # The variable INSTALLDIR, default /usr/local, changed with --prefix= # gives the final destination of everything. The configure script # hard-wires this path into scripts when you give the --install flag. # However, if you set the environment variable DESTDIR, the installation # process will still hardwire your INSTALLDIR into scripts, but actually # install the files in $DESTDIR$INSTALLDIR. In this way, you can build # a complete installation tree in a temporary directory, then tar it up # as a package with all the scripts pointing to the correct final location. INSTALLDIR=/usr/local USER=${USER-`whoami 2>/dev/null`} MACHINE=`script/harch` PWD=`pwd` case $OS in CYGWIN*) PWD=`cygpath -w "$PWD" | tr '\\\\' '/'` case $PWD in # further path mangling required for CYGWIN file://?/*) PWD=`echo $PWD | sed -e "s|^file://||" |\ sed -e "s|^[^/]|&:|"` ;; //?/*) PWD=`echo $PWD | sed -e "s|^//||" |\ sed -e "s|^[^/]|&:|"` ;; esac READLINE="" EXE=.exe ;; *) EXE="" ;; esac case "$PWD" in *' '*) echo "Error: hmake will not build in a directory with spaces anywhere" echo " in the full pathname." echo "Suggestion: move the build tree somewhere else." exit 1 ;; esac # We need a working `echo' command: at least Solaris2.6 may not have it. case `echo -n hello | wc -c | ( read n ; echo $n )` in 5) ;; *) echo "The builtin 'echo' command doesn't do '-n' - emulating it." ${CCC} -o script/echo script/echo.c echo () { $PWD/script/echo "$@"; } ;; esac BUILDWITH= GHCSYM= BUILDLIBDIR=$PWD/lib BUILDBINDIR=$PWD/script BUILDDIR=$PWD/targets INSTALL=no LIB=yes BIN=yes MAN=yes if [ -f targets/$MACHINE/config.cache ] then # cached settings override defaults above . targets/$MACHINE/config.cache else if [ ! -d targets/$MACHINE ] then mkdir -p targets/$MACHINE fi fi while [ "$1" != "" ] do case $1 in +lib) LIB=yes ;; -lib) LIB=no ;; +bin) BIN=yes ;; -bin) BIN=no ;; +man) MAN=yes ;; -man) MAN=no ;; --buildwith=*) BUILDWITH=`echo "$1" | cut -c13-` ;; --buildopts=*) BUILDOPTS=$BUILDOPTS" "`echo "$1" | cut -c13-` ;; --builddir=*) BUILDDIR=`echo "$1" | cut -c12-` ;; --prefix=*) INSTALLDIR=`echo "$1" | cut -c10-` ;; --installdir=*) INSTALLDIR=`echo "$1" | cut -c14-` ;; --bindir=*) BINDIR=`echo "$1" | cut -c10-` ;; --libdir=*) LIBDIR=`echo "$1" | cut -c10-` ;; --confdir=*) CONFDIR=`echo "$1" | cut -c11-` ;; --mandir=*) MANDIR=`echo "$1" | cut -c10-` ;; --hbcdir=*) HBCDIR=`echo "$1" | cut -c10-` ;; --ghcdir=*) GHCDIR=`echo "$1" | cut -c10-` ;; --install) INSTALL=yes ;; --config) INSTALL=no ;; --help|-h) echo "`basename $0` options: [default in brackets]" echo " --config Configure only (do not install) [default]" echo " --install Configure AND install now" echo " --help / -h Display these options and quit" echo " --version / -v Display version of hmake" echo echo " --buildwith=comp Build hmake with given compiler [detected]" echo " --buildopts=flags Give extra flags to build-compiler [none]" #echo #echo " --hbcdir=dir Tell hmake about hbc/LML installation in dir [detected]" #echo " --ghcdir=dir Tell hmake about ghc installation in dir [detected]" echo echo " --builddir=dir Build intermediate object files under dir [./targets]" echo " --prefix=rootdir |" echo " --installdir=rootdir | Use rootdir as base for installation [/usr/local]" echo " --bindir=dir Install scripts in dir [\$rootdir/bin]" echo " --libdir=dir Install libraries in dir [\$rootdir/lib/hmake]" echo " --confdir=dir Install configuration data in dir [\$libdir]" echo " --mandir=dir Install man pages in dir [\$rootdir/man/man1]" echo echo " [+/-]bin Do/don't (re-)install scripts [+bin]" echo " [+/-]lib Do/don't (re-)install executables [+lib]" echo " [+/-]man Do/don't (re-)install man pages [+man]" exit 0 ;; --version|-v) echo "hmake: $HMAKEVERSION" echo ' [' $INSTALLINFO ']' exit 0 ;; *) echo "`basename $0`: unrecognised option $1" echo ' (use --help for option information)' exit 1 ;; esac shift done echo Configuring for hmake... '[' $HMAKEVERSION ']' if [ -f targets/$MACHINE/config.cache ] then echo "Starting with earlier config in targets/$MACHINE/config.cache" echo '[' $INSTALLINFO ']' echo ' (but cmdline options have precedence)' fi INSTALLINFO="config: $MACHINE/$BUILDWITH by $USER@`uname -n` on `date`" LIBDIR=${LIBDIR-$INSTALLDIR/lib/hmake} CONFDIR=${CONFDIR-$LIBDIR} BINDIR=${BINDIR-$INSTALLDIR/bin} MANDIR=${MANDIR-$INSTALLDIR/man/man1} #HBCDIR=${HBCDIR} #GHCDIR=${GHCDIR} case $OS in CYGWIN*) INSTALLDIR=`cygpath -w "$INSTALLDIR" | tr '\\\\' '/'` BUILDDIR=`cygpath -w "$BUILDDIR" | tr '\\\\' '/'` LIBDIR=`cygpath -w "$LIBDIR" | tr '\\\\' '/'` CONFDIR=`cygpath -w "$CONFDIR" | tr '\\\\' '/'` BINDIR=`cygpath -w "$BINDIR" | tr '\\\\' '/'` ;; *) ;; esac case $MACHINE in *Darwin[56]) CCC=${CC-cc};; *) CCC=${CC-gcc};; esac #case $OS in # SunOS) LIBCOMPAT=" -lsocket" ;; # NetBSD) LIBCOMPAT=" -lcompat" ;; # *) LIBCOMPAT= ;; #esac # Detect Haskell compilers and choose one for building with. # (Also generates a little script for configuring hmake later.) if [ -d src ] # Delay this step if it is a binary (src-less) distribution. then echo "--------" CCC=$CCC script/confhc $BUILDWITH echo "--------" fi echo " Configuration report for hmake." if [ "$INSTALL" = "no" ] then echo " (You can re-run `basename $0` to change settings before proceeding.)" echo "You wish (eventually) to install the following components in these locations:" echo " (Installation directories are not created/checked at this stage.)" echo "Final install root: $INSTALLDIR" if [ "$LIB" = "yes" ] then echo "hmake binaries: $LIBDIR/$MACHINE" echo "hmakerc: $CONFDIR/$MACHINE" else echo "Executables and libs: (none)" fi if [ "$BIN" = "yes" ] then echo "Scripts: $BINDIR" else echo "Scripts: (none)" fi if [ "$MAN" = "yes" ] then echo "Man pages: $MANDIR" else echo "Man pages: (none)" fi if [ -d src ] # Don't bother with these if unpacking a binary distribution then echo echo "Now we check/create your build directories:" echo "Config directory: targets/$MACHINE" echo "Build directory root:" echo -n " $BUILDDIR" if [ ! -d $BUILDDIR ] then mkdir -p $BUILDDIR; echo ' (created)' else echo ' (exists)' fi echo "Object files build in:" echo -n " $BUILDDIR/$MACHINE" if [ ! -d $BUILDDIR/$MACHINE ] then mkdir -p $BUILDDIR/$MACHINE; echo ' (created)' else echo ' (exists)' fi echo "Executables and libs:" echo -n " $BUILDLIBDIR/$MACHINE" if [ ! -d $BUILDLIBDIR/$MACHINE ] then mkdir -p $BUILDLIBDIR/$MACHINE; echo ' (created)' else echo ' (exists)' fi else echo echo "Checking your binary distribution for integrity:" echo -n "Config directory: targets/$MACHINE" if [ ! -d targets/$MACHINE ] then mkdir -p targets/$MACHINE; echo ' (created ok)' else echo ' (exists)' fi echo -n "Executables and libs: $BUILDLIBDIR/$MACHINE" if [ ! -d $BUILDLIBDIR/$MACHINE ] then echo ' (***MISSING!)' echo 'Help! Have you got the right executables for your machine?' exit 1 else echo ' (ok)' fi fi fi echo # The following tests are unnecessary in a binary (src-less) distribution. if [ -d src ] then if [ "$BUILDWITH" = "" ] then BUILDWITH=`cat targets/$MACHINE/buildwith` echo "I have guessed you will build hmake with: $BUILDWITH" else echo "You are going to build hmake with: $BUILDWITH" fi GHCSYM=`cat targets/$MACHINE/ghcsym || true` if [ "$BUILDOPTS" != "" ] then echo "You gave the following extra build options: $BUILDOPTS" fi if [ "$EXE" = "" ] then echo -n "Testing for the curses library: " if [ "$CURSES" = "" ] then cat >curses.c < void test (void) { mvaddstr(1,2,"hello world"); } int main (void) { test(); } !!! if ${CCC} -o curses curses.c >/dev/null 2>/dev/null then CURSES="" else if ${CCC} -o curses curses.c -lncurses >/dev/null 2>/dev/null then CURSES="-lncurses" else if ${CCC} -o curses curses.c -lcurses >/dev/null 2>/dev/null then CURSES="-lcurses" else if ${CCC} -o curses curses.c -lcurses -ltermcap \ >/dev/null 2>/dev/null then CURSES="-lcurses -ltermcap" else CURSES="-ltermcap -lcurses" # don't know a good default? fi fi fi fi rm -f curses curses.o curses.c echo -n "$CURSES " echo '(detected) ' else echo -n "$CURSES " echo '(cached) ' fi echo -n "Testing for the readline library: " if [ "$READLINE" = "" ] then echo 'main(){readline();}' >rd.c if ${CCC} -o rd.out rd.c -lreadline >/dev/null 2>&1 then echo '-lreadline (detected)' READLINE="-DUSE_READLINE=1 -lreadline" else if ${CCC} -o rd.out rd.c -lreadline $CURSES >/dev/null 2>&1 then echo "-lreadline $CURSES (detected)" READLINE="-DUSE_READLINE=1 -lreadline $CURSES" else echo "no (detected)" READLINE="" fi fi else echo -n "$READLINE " echo '(cached) ' fi rm -f rd.c rd.out fi if [ "$EXE" = "" ] then echo "Executables need .exe suffix? no (detected)" else echo "Executables need .exe suffix? yes (detected)" fi TRUE=/bin/true if [ ! -x $TRUE ] then TRUE=/usr/bin/true echo "Found /usr/bin/true not /bin/true" fi else # do the following only in binary distributions if [ -f lib/$MACHINE/config ] then . lib/$MACHINE/config echo "Your binary distribution of hmake was built by $BUILDWITH." else echo "ERROR: Your distribution of hmake has no sources and no executables!" exit 1 fi # compiler detection deferred from earlier because of BUILDWITH variable echo "--------" script/confhc $BUILDWITH echo "--------" sh targets/$MACHINE/hmake3.config # ...and setup an hmakerc file fi echo if [ "$INSTALL" = "no" ] then if [ -d src ] # Don't overwrite config if unpacking binary distribution! then echo "Adding Makefile config script to" echo " $BUILDLIBDIR/$MACHINE..." ( echo "BUILDWITH=$BUILDWITH"; echo "BUILDOPTS=\"$BUILDOPTS\""; echo "INSTALLVER=\"$HMAKEVERSION\""; echo "INSTALLINFO=\"$INSTALLINFO\""; echo "BUILDBASEDIR=$BUILDDIR"; echo "READLINE=\"$READLINE\""; echo "EXE=$EXE"; echo "GHCSYM=`cat targets/$MACHINE/ghcsym || true`"; echo "TRUE=$TRUE"; ) >$BUILDLIBDIR/$MACHINE/config echo "Adding build scripts for hmake, hmake-config, and hi to" echo " $BUILDBINDIR..." sed -e "s|ExecutableDir|$BUILDLIBDIR|" script/hmake.inst |\ sed -e "s|ConfDir|$BUILDLIBDIR|" |\ sed -e "s|InstallVer|$HMAKEVERSION|" |\ sed -e "s|^BUILTBY=$|BUILTBY=${BUILDWITH}|" |\ sed -e "s|ScriptDir|$BUILDBINDIR|" >$BUILDBINDIR/hmake sed -e "s|ExecutableDir|$BUILDLIBDIR|" script/hmake-config.inst |\ sed -e "s|ConfDir|$BUILDLIBDIR|" |\ sed -e "s|ScriptDir|$BUILDBINDIR|" >$BUILDBINDIR/hmake-config sed -e "s|ExecutableDir|$BUILDLIBDIR|" script/hi.inst |\ sed -e "s|ConfDir|$BUILDLIBDIR|" |\ sed -e "s|InstallVer|$HMAKEVERSION|" |\ sed -e "s|ScriptDir|$BUILDBINDIR|" >$BUILDBINDIR/hi chmod +x $BUILDBINDIR/hmake $BUILDBINDIR/hmake-config $BUILDBINDIR/hi echo "Updating targets/$MACHINE/hmake3.config..." echo "$BUILDBINDIR/hmake-config $BUILDLIBDIR/$MACHINE/hmakerc \ default $BUILDWITH" >>targets/$MACHINE/hmake3.config fi else # [ "$INSTALL" = "yes" ] echo "Installation directories are now created/checked." echo "Install directory root is:" echo " $DESTDIR$INSTALLDIR" if [ "$BIN" = "yes" ] then echo "Scripts go into:" echo -n " $DESTDIR$BINDIR" if [ ! -d $DESTDIR$BINDIR ] then mkdir -p $DESTDIR$BINDIR; echo ' (created)' else echo ' (exists)' fi echo -n " harch " cp script/harch $DESTDIR$BINDIR echo -n "hmake " sed -e "s|ExecutableDir|$LIBDIR|" script/hmake.inst |\ sed -e "s|ConfDir|$CONFDIR|" |\ sed -e "s|InstallVer|$HMAKEVERSION|" |\ sed -e "s|^BUILTBY=$|BUILTBY=${BUILDWITH}|" |\ sed -e "s|ScriptDir|$BINDIR|" >$DESTDIR$BINDIR/hmake echo -n "hmake-config " sed -e "s|ExecutableDir|$LIBDIR|" script/hmake-config.inst |\ sed -e "s|ConfDir|$CONFDIR|" |\ sed -e "s|ScriptDir|$BINDIR|" >$DESTDIR$BINDIR/hmake-config echo -n "hi " sed -e "s|ExecutableDir|$LIBDIR|" script/hi.inst |\ sed -e "s|ConfDir|$CONFDIR|" |\ sed -e "s|InstallVer|$HMAKEVERSION|" |\ sed -e "s|ScriptDir|$BINDIR|" >$DESTDIR$BINDIR/hi echo chmod a+rx $DESTDIR$BINDIR/hmake $DESTDIR$BINDIR/harch $DESTDIR$BINDIR/hi chmod a+rx $DESTDIR$BINDIR/hmake-config else echo 'Not (re-)installing scripts' fi if [ "$LIB" = "yes" ] then echo "Executables and object lib files go into:" echo -n " $DESTDIR$LIBDIR/$MACHINE" if [ ! -d $DESTDIR$LIBDIR/$MACHINE ] then mkdir -p $DESTDIR$LIBDIR/$MACHINE; echo ' (created)' else echo ' (exists)' fi echo -n " " for file in $BUILDLIBDIR/$MACHINE/* do echo -n "`basename $file` " if [ -f $file ]; then cp -p $file $DESTDIR$LIBDIR/$MACHINE; fi done echo echo "Conf files go into:" echo -n " $DESTDIR$CONFDIR/$MACHINE" if [ ! -d $DESTDIR$CONFDIR/$MACHINE ] then mkdir -p $DESTDIR$CONFDIR/$MACHINE; echo ' (created)' else echo ' (exists)' fi ln -f $DESTDIR$LIBDIR/$MACHINE/runhs $DESTDIR$BINDIR mv $DESTDIR$LIBDIR/$MACHINE/hmakerc $DESTDIR$CONFDIR/$MACHINE || true echo else echo 'Not (re-)installing executables and library files' fi if [ "$MAN" = "yes" ] then echo "Man pages go into:" echo -n " $DESTDIR$MANDIR" if [ ! -d $DESTDIR$MANDIR ] then mkdir -p $DESTDIR$MANDIR; echo ' (created)' else echo ' (exists)' fi for file in man/* do echo -n " `basename $file` " cp $file $DESTDIR$MANDIR done echo else echo 'Not (re-)installing man pages' fi fi echo "Saving current configuration in targets/$MACHINE/config.cache" ( echo "INSTALLDIR=$INSTALLDIR" ; if [ "$LIBDIR" != "$INSTALLDIR/lib/hmake" ]; then echo "LIBDIR=$LIBDIR" ; fi; if [ "$CONFDIR" != "$LIBDIR" ]; then echo "CONFDIR=$CONFDIR" ; fi; if [ "$MANDIR" != "$INSTALLDIR/man/man1" ]; then echo "MANDIR=$MANDIR" ; fi; if [ "$BINDIR" != "$INSTALLDIR/bin" ]; then echo "BINDIR=$BINDIR" ; fi; if [ "$HBCDIR" != "" ]; then echo "HBCDIR=$HBCDIR" ; fi; if [ "$GHCDIR" != "" ]; then echo "GHCDIR=$GHCDIR" ; fi; echo "BUILDWITH=$BUILDWITH" ; echo "BUILDOPTS=\"$BUILDOPTS\"" ; echo "BUILDDIR=$BUILDDIR" ; echo "LIB=$LIB" ; echo "BIN=$BIN" ; echo "MAN=$MAN" ; echo "EXE=$EXE" ; echo "READLINE=\"$READLINE\"" ; echo "INSTALLVER=\"$HMAKEVERSION\"" ; echo "INSTALLINFO=\"$INSTALLINFO\"" ; ) >targets/$MACHINE/config.cache echo "Done." if [ "$INSTALL" = "yes" ] then echo echo " Please ensure $BINDIR is in your PATH variable." fi echo exit 0