#! /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.

srcdir=`dirname "$0"`

machs=""; last=""; sep0=""; sep1=""; sep2=""; sep3=""; sep4=" and ";
for fn in "$srcdir"/boot/*/scheme.boot ; do
    next=`echo $fn | sed -e 's/.*\/boot\/\(.*\)\/scheme.boot/\1/'`
    if [ "$next" != '*' ] ; then
        machs=$machs$sep0$last
        last=$next
        sep0=$sep1; sep1=", "; sep2=$sep3; sep3=$sep4; sep4=", and "
    fi
done
if [ "$srcdir" != "." ]; then
    for fn in boot/*/scheme.boot ; do
        next=`echo $fn | sed -e 's/boot\/\(.*\)\/scheme.boot/\1/'`
        if [ "$next" != '*' ] ; then
            machs=$machs$sep0$last
            last=$next
            sep0=$sep1; sep1=", "; sep2=$sep3; sep3=$sep4; sep4=", and "
        fi
    done
fi
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"
cflagsset=no
disablex11=no
disablecurses=no
disableiconv=no
addflags=yes
addwarningflags=no
default_warning_flags="-Wpointer-arith -Wall -Wextra -Wno-implicit-fallthrough"
: ${CC:="gcc"}
: ${CPPFLAGS:=""}
: ${CFLAGS:=""}
: ${LD:="ld"}
: ${LDFLAGS:=""}
: ${LIBS:=""}
: ${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)
    unixsuffix=le
    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)
    unixsuffix=fb
    installprefix=/usr/local
    installmansuffix=man
    ;;
  OpenBSD)
    unixsuffix=ob
    installprefix=/usr/local
    installmansuffix=man
    ;;
  NetBSD)
    unixsuffix=nb
    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
    elif uname -a | egrep 'arm|aarch' > /dev/null 2>&1 ; then
      m64=arm64osx
      tm64=tarm64osx
    elif uname -a | egrep 'Power' > /dev/null 2>&1 ; then
      m64=ppc32osx
      tm64=tppc32osx
      default_warning_flags=""
    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

if [ "$unixsuffix" != "" ] ; then
    if uname -a | egrep 'i386|i686|amd64|athlon|x86_64' > /dev/null 2>&1 ; then
        m32=i3${unixsuffix}
        m64=a6${unixsuffix}
        tm32=ti3${unixsuffix}
        tm64=ta6${unixsuffix}
    elif uname -a | egrep 'power|ppc' > /dev/null 2>&1 ; then
        m32=ppc32${unixsuffix}
        tm32=tppc32${unixsuffix}
    elif uname -a | egrep 'armv|aarch64' > /dev/null 2>&1 ; then
        m32=arm32${unixsuffix}
        m64=arm64${unixsuffix}
        tm32=tarm32${unixsuffix}
        tm64=tarm64${unixsuffix}
    fi
fi

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
      ;;
    --disable-iconv)
      disableiconv=yes
      ;;
    --disable-auto-flags)
      addflags=no
      ;;
    --enable-warning-flags)
      addwarningflags=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=//'`
      cflagsset=yes
      ;;
    LD=*)
      LD=`echo $1 | sed -e 's/^LD=//'`
      ;;
    LDFLAGS=*)
      LDFLAGS=`echo $1 | sed -e 's/^LDFLAGS=//'`
      ;;
    LIBS=*)
      LIBS=`echo $1 | sed -e 's/^LIBS=//'`
      ;;
    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|arm64|ppc64|powerpc64' > /dev/null 2>&1 ; then
    bits=64
  else
    bits=32
  fi
fi

if [ "$threads" = "" ] ; then
  threads=yes
fi

if [ $bits = 64 ] ; then
  if [ $threads = yes ] ; then defaultm=$tm64 ; else defaultm=$m64 ; fi
else
  if [ $threads = yes ] ; then defaultm=$tm32 ; else defaultm=$m32 ; fi
fi

if [ "$m" = "" ] ; then
  machine_supplied=no
  if [ $pb = yes ] ; then
     m=pb
     if [ $bits = 64 ] ; then mpbhost=$m64 ; else mpbhost=$m32 ; fi
     flagsm=$mpbhost
     if [ "$mpbhost" = "" ] ; then
         echo "Could not infer current machine type."
         echo ""
         echo "Event for a pb build, a machine type is needed to select C compiler"
         echo "and linker flags. You can use"
         echo "  $0 --pb -m=<machine type>"
         echo "to specify the available machine type, but since it wasn't inferred,"
         echo "probably your OS and architecture combination is not supported."
         exit 1
     fi
  else      
    m=$defaultm
    flagsm=$m
  fi
elif [ $pb = yes ] ; then
  mpbhost=$m
  flagsm=$m
  m=pb
else
  flagsm=$m
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 [ "$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 "  --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 "  --disable-iconv                   disable iconv support"
  echo "  --disable-auto-flags              no auto additions to CFLAGS/LDFLAGS/LIBS"
  echo "  --enable-warning-flags            add GCC warning flags to CFLAGS"
  echo "  --libkernel                       build libkernel.a (the default)"
  echo "  --kernelobj                       build kernel.o instead of libkernel.a"
  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 "  --temproot=<pathname>             staging root ($temproot)"
  echo "  --installowner=<ownername>        install with owner ($installowner)"
  echo "  --installgroup=<groupname>        install with group ($installgroup)"
  echo "  --installschemename=<schemename>  install with group ($installschemename)"
  echo "  --installpetitename=<petitename>  install with group ($installpetitename)"
  echo "  --installscriptname=<scriptname>  install with group ($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>   C preprocessor flags"
  echo "  CFLAGS=<C compiler flags>         C compiler flags"
  echo "  LD=<linker>                       linker"
  echo "  LDFLAGS=<linker flags>            additional linker flags"
  echo "  LIBS=<libraries>                  additional libraries"
  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

optFlags=-O2

if [ "$cflagsset" = "no" -o "$addwarningflags" = "yes" ] ; then
    warningFlags="$default_warning_flags"
else
    warningFlags=""
fi

# Infer flags needed for threads:
case "${flagsm}" in
  *le|*fb|*ob|*nb)
      threadFlags="-D_REENTRANT -pthread"
      threadLibs="-lpthread"
      ;;
  *s2)
      threadFlags="-pthread"
      threadLibs="-lpthread"
      ;;
  *)
      threadFlags=""
      threadLibs=""
      ;;
esac

flagsmuni=`echo $flagsm | sed -e 's/^t//'`
muni=`echo $m | sed -e 's/^t//'`

# Set default CFLAGS if not provided at all. Assuming that the
# compiler is for the right platform, compilation should generally
# succeed if no flags are set; anything required should be propagated
# a different way
if [ "$cflagsset" = "no" ] ; then
  case "${flagsmuni}" in
    a6le)
        CFLAGS="-m64 -msse2 ${optFlags}"
        ;;
    a6nt)
        CFLAGS="${optFlags}"
        ;;
    a6*)
        CFLAGS="-m64 ${optFlags}"
        ;;
    i3le)
        CFLAGS="-m32 -msse2 ${optFlags}"
        ;;
    i3nt)
        CFLAGS="${optFlags}"
        ;;
    i3qnx)
        CC=qcc
        CFLAGS="-m32 -N2048K ${optFlags}"
        ;;
    i3*)
        CFLAGS="-m32 ${optFlags}"
        ;;
    arm32*)
        CFLAGS="-m32 ${optFlags}"
        ;;
    arm64osx)
        CFLAGS="-arch arm64 ${optFlags}"
        ;;
    ppc32osx)
        CFLAGS="${optFlags}"
        ;;
    ppc32*)
        CFLAGS="-m32 ${optFlags}"
        ;;
  esac
fi

# architecture-specific for Mf-unix
case "${muni}" in
  pb)
      Cpu=PORTABLE_BYTECODE
      mdarchsrc=pb
      ;;
  a6*)
      Cpu=X86_64
      mdarchsrc=i3le
      ;;
  i3*)
      Cpu=I386
      mdarchsrc=i3le
      ;;
  arm32*)
      Cpu=ARMV6
      mdarchsrc=arm32le
      ;;
  arm64*)
      Cpu=AARCH64
      mdarchsrc=arm32le
      ;;
  ppc32*)
      Cpu=PPC32
      mdarchsrc=ppc32
      ;;
esac

# Add automatic thread compilation flags, unless suppressed by --disable-auto-flags
if [ "$addflags" = "yes" ] ; then
  if [ "$threadFlags" != "" ] ; then
    CFLAGS="${CFLAGS} ${threadFlags}"
  fi
fi

cursesLib=-lcurses
ncursesLib=-lncurses

if [ "$disablecurses" = "yes" ]; then
  cursesLib=
  ncursesLib=
fi

if [ "$disableiconv" = "yes" ]; then
    iconvLib=
    CPPFLAGS="${CPPFLAGS} -DDISABLE_ICONV"
else
    iconvLib="-liconv"
fi

# Add automatic linking flags, unless suppressed by --disable-auto-flags
if [ "$addflags" = "yes" ] ; then
  case "${flagsm}" in
    *le)
        LDFLAGS="${LDFLAGS} -rdynamic"
        ;;
    *fb|*nb)
        LDFLAGS="${LDFLAGS} -rdynamic -L/usr/local/lib"
        ;;
    *ob)
        LDFLAGS="${LDFLAGS} -rdynamic -Wl,--export-dynamic -Wl,-zwxneeded -L/usr/local/lib"
        ;;
    *)
        ;;
  esac

  case "${flagsm}" in
    *le)
        LIBS="${LIBS} -lm -ldl ${ncursesLib} -lrt"
        ;;
    *fb|*ob)
        LIBS="${LIBS} ${iconvLib} -lm ${ncursesLib}"
        ;;
    *nb)
        if [ "$disablecurses" = "no" ]; then
            iconvLib="/usr/lib/i18n/libiconv_std.a"
        fi
        LIBS="${LIBS} ${iconvLib} -lm /usr/pkg/lib/libncurses.a"
        ;;
    *s2)
        LIBS="${LIBS} -lnsl -ldl -lm ${cursesLib} -lrt"
        ;;
    *osx)
        LIBS="${LIBS} ${iconvLib} -lm ${ncursesLib}"
        ;;
    *nt)
        LIBS="${LIBS} -lshell32 -luser32 -lole32 -lrpcrt4 -luuid"
        ;;
    8qnx)
        if [ "$disablecurses" = "no" ]; then
            iconvLib="/usr/local/lib/libiconv.so"
        fi
        LIBS="${LIBS} -lm ${iconvLib} -lsocket ${ncursesLib}"
        ;;
  esac
  if [ "$threadLibs" != "" ] ; then
    LIBS="${LIBS} ${threadLibs}"
  fi
fi

# more compile and link flags for c/Mf-unix and mats/Mf-unix
mdinclude=
mdcppflags=
mdcflags=
mdldflags=
mdlinkflags= 
zlibConfigureFlags=
exePostStep=":"

# compile flags for c/Mf-unix and mats/Mf-unix
case "${flagsmuni}" in
    *le)
        mdcflags="-fPIC -shared"
        ;;
    *fb|*ob)
        mdcflags="-fPIC -shared"
        mdinclude="-I/usr/local/include -I/usr/X11R6/include"
        ;;
    *nb)
        mdcflags="-fPIC -shared"
        mdinclude="-I/usr/X11R7/include -I/usr/pkg/include -I/usr/pkg/include/ncurses -I/usr/X11R6/include"
        ;;
    *osx)
        mdcflags="-dynamiclib -undefined dynamic_lookup"
        ;;
    *s2)
        mdcflags="-fPIC -shared"
        mdcppflags="-DSOLARIS"
        ;;
    *qnx)
        mdcflags="-fPIC -shared"
        mdinclude="-I/usr/local/include"
        ;;
esac

# dynamic linking flags for c/Mf-unix
case "${flagsmuni}" in
    a6le)
        mdldflags="-melf_x86_64"
        ;;
    i3le)
        mdldflags="-melf_i386"
        ;;
    *le)
        ;;
    i3nb)
        mdldflags="-m elf_i386"
        ;;
    *fb|*ob|*nb)
        ;;
    *osx)
        ;;
    a6s2)
        mdldflags="-melf_x86_64"
        ;;
    i3s2)
        mdldflags="-melf_i386"
        ;;
    i3qnx)
        mdlinkflags="-Wl,--export-dynamic"
        mdldflags="-mi386nto"
        ;;
esac

# post-link-executable step for c/Mf-unix
case "${flagsmuni}" in
    *nb)
        exePostStep='paxctl +m ${Scheme}'
        ;;
esac

# zlib configure flags for c/Mf-unix
case "${flagsmuni}" in
    a6*)
        zlibConfigureFlags="--64"
        ;;
esac

if [ -f boot/$m/scheme.boot -o -f "$srcdir"/boot/$m/scheme.boot ] ; then
  echo "Configuring for $m"
else
  if [ "$m" = "" ] ; then
      maybem="<machine type>"
  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=<machine type>"
      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

case "$srcdir" in
    /*)
        upsrcdir=$srcdir
        ;;
    *)
        upsrcdir=../$srcdir
        ;;
esac

if "$srcdir"/workarea $m $w $mpbhost ; then
    :
else
    # not a recognized host, or other error
    exit 1
fi

sed -e 's/$(m)/'$m'/g'\
    -e 's/$(defaultm)/'$defaultm'/g'\
    -e 's/$(workarea)/'$w'/g'\
  "$srcdir"/makefiles/Makefile.in > Makefile

mkdir -p csug
sed -e 's/$(m)/'$m'/g'\
    -e "s;^srcdir = .*\$;srcdir = $upsrcdir/csug;"\
    "$srcdir"/makefiles//Makefile-csug.in > csug/Makefile

mkdir -p release_notes
sed -e 's/$(m)/'$m'/g'\
    "$srcdir"/makefiles//Makefile-release_notes.in > release_notes/Makefile

cat "$srcdir"/makefiles/Makefile-workarea.in > $w/Makefile

sed -e 's/$(m)/'$m'/g'\
    -e 's/$(m)/'$m'/g'\
    -e 's/$(workarea)/'$w'/g'\
    "$srcdir"/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;"\
    "$srcdir"/makefiles/Mf-install.in > $w/Mf-install

cat > $w/c/next_config.h << END
#define SCHEME_SCRIPT "$installscriptname"
#ifndef WIN32
#define DEFAULT_HEAP_PATH "$installlib/csv%v/%m"
#endif
END

if [ "$disablecurses" = "yes" ]; then
  echo '#define DISABLE_CURSES' >> $w/c/next_config.h
fi

if [ "$disablex11" = "yes" ]; then
  echo '#define DISABLE_X11' >> $w/c/next_config.h
fi

if [ ! -f "$w/c/config.h" ] ; then
   mv $w/c/next_config.h $w/c/config.h
elif `cmp -s $w/c/next_config.h $w/c/config.h` ; then
   rm $w/c/next_config.h
else
   mv $w/c/next_config.h $w/c/config.h
fi

case "$srcdir" in
    /*)
        upupsrcdir=$srcdir
        ;;
    *)
        upupsrcdir=../../$srcdir
        ;;
esac

cat > $w/c/Mf-config << END
upupsrcdir=$upupsrcdir
m=$m
Cpu=$Cpu
mdarchsrc=$mdarchsrc
mdinclude=$mdinclude
mdcppflags=$mdcppflags
mdldflags=$mdldflags
mdlinkflags=$mdlinkflags
exePostStep=$exePostStep
zlibConfigureFlags=
CC=$CC
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
LD=$LD
LDFLAGS=$LDFLAGS
LIBS=$LIBS
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
KernelCFlags=$KernelCFlags
Kernel=\${${Kernel}}
KernelLinkDeps=\${${Kernel}LinkDeps}
KernelLinkLibs=\${${Kernel}LinkLibs}
C=\${CC} \${CPPFLAGS} \${CFLAGS} \${warningFlags}
END

cat > $w/mats/Mf-config << END
upupsrcdir=$upupsrcdir
m=$m
mdcflags=$mdcflags
CC=$CC
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
END
