
- Separate 64 and 32 bit MSIs - Add wix bundle to combine MSIs into single installer - Use basic wix UI - Use merge modules to install vcredist package - Add script to locate vcredist merge modules - Fix installer status text by adding WixUI_ErrorProgressText ref Merge modules seems to be the preferred method for installing the redistributable package, which should decrease the package size and speed up installation. This commit also addresses a bug where the installer does not work when VC redistributable is not already installed. The 32 and 64 bit components were split into separate MSIs because Windows Installer only officially supports packages containing a single architecture. A package bundle is then created containing both MSIs so only a single file needs to be distributed. There seemed to be no trivial way to get the path to the vcredist merge modules bundled with visual studio so I added a script (locate-vcredist.bat) that handles this. It will need to be updated in the future for compatibility with newer VS platform toolsets. Some paths and name were changed, here's a summary: 32-bit install path: C:\Program Files (x86)\Chez Scheme 9.4.1\ 64-bit install path: C:\Program Files\Chez Scheme 9.4.1\ installer file name: ChezScheme.exe installer product name: Chez Scheme 9.4.1 x64 original commit: a8867749df27db41ebbafeb0dc914e5e6680cf9e
368 lines
10 KiB
Bash
Executable File
368 lines
10 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=""
|
|
installschemename="scheme"
|
|
installpetitename="petite"
|
|
installscriptname="scheme-script"
|
|
: ${CC:="gcc"}
|
|
: ${CPPFLAGS:=""}
|
|
: ${CFLAGS:=""}
|
|
: ${LDFLAGS:=""}
|
|
|
|
# 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=//'`
|
|
;;
|
|
--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=//'`
|
|
;;
|
|
--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
|
|
;;
|
|
CC=*)
|
|
CC=`echo $1 | sed -e 's/^CC=//'`
|
|
;;
|
|
CPPFLAGS=*)
|
|
CPPFLAGS=`echo $1 | sed -e 's/^CPPFLAGS=//'`
|
|
;;
|
|
CFLAGS=*)
|
|
CFLAGS=`echo $1 | sed -e 's/^CFLAGS=//'`
|
|
;;
|
|
LDFLAGS=*)
|
|
LDFLAGS=`echo $1 | sed -e 's/^LDFLAGS=//'`
|
|
;;
|
|
*)
|
|
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 [ "$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 " --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 " --[no]gzip-man-pages compress manual pages ($gzipmanpages)"
|
|
echo " --workarea=<pathname> build directory ($w)"
|
|
echo " CPPFLAGS=<C preprocessor flags> additional C preprocessor flags ($CPPFLAGS)"
|
|
echo " CFLAGS=<C compiler flags> additional C compiler flags ($CFLAGS)"
|
|
echo " LDFLAGS=<linker flags> additional linker flags ($LDFLAGS)"
|
|
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 && (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 [ ! -f 'zlib/configure' ] ; then
|
|
rmdir zlib && (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
|
|
|
|
if [ ! -f 'stex/Mf-stex' ] ; then
|
|
rmdir stex && (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
|
|
|
|
sed -e 's/$(m)/'$m'/g'\
|
|
-e 's/$(workarea)/'$w'/g'\
|
|
makefiles/Makefile.in > 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;^InstallPrefix=.*\$;InstallPrefix=$installprefix;"\
|
|
-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;"\
|
|
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
|
|
|
|
cat > $w/c/Mf-config << END
|
|
CC=$CC
|
|
CPPFLAGS=$CPPFLAGS
|
|
CFLAGS=$CFLAGS
|
|
LDFLAGS=$LDFLAGS
|
|
END
|