wxWidgets/distrib/msw/createsetup.sh

327 lines
8.9 KiB
Bash
Raw Normal View History

#!/bin/sh
# Create an Inno Setup installer on MSW. It requires MSYS.
#
# Example:
#
# distrib/msw/createsetup.sh
#
# Prerequisites:
#
# (1) Change VERSION to the desired wxWidgets version.
# (2) Change APPDIR to the root of a wxWidgets distribution containing
# this script.
# (3) Change DESTDIR (if necessary) to a directory for creating the
# the installer.
# (4) Change SETUPCOMPILER to where Inno Setup is installed.
# (6) Make sure 'unzip' is in your path.
# (7) Make sure wxMSW-x.y.z.zip and wxWidgets-x.y.z-CHM.zip are in
# the directory $DESTDIR.
# (8) Run createsetup.sh.
#
# The necessary script files are:
#
# distrib/msw/createsetup.sh ; The main script
# distrib/msw/wxwidgets_in.iss ; The input for making the .iss
#
#-------------------------------------------------------------------------
# The version
#-------------------------------------------------------------------------
VERSION=2.7.2
#-------------------------------------------------------------------------
# The application title
#-------------------------------------------------------------------------
APPTITLE="wxWidgets"
#-------------------------------------------------------------------------
# The application author (copyright holder)
#-------------------------------------------------------------------------
AUTHOR="The wxWidgets Team"
#-------------------------------------------------------------------------
# The application vendor (organisation)
#-------------------------------------------------------------------------
VENDOR="wxWidgets"
#-------------------------------------------------------------------------
# The top-level directory of the application source tree
#-------------------------------------------------------------------------
APPDIR=c:/wx2dev/wxWindows
#-------------------------------------------------------------------------
# The destination directory of the setup
#-------------------------------------------------------------------------
DESTDIR=$APPDIR/deliver
#-------------------------------------------------------------------------
# The temporary image directory to use when preparing the setup
#-------------------------------------------------------------------------
SETUPIMAGEDIR=$DESTDIR/wxWidgets-$VERSION
#-------------------------------------------------------------------------
# The location of the setup script
#-------------------------------------------------------------------------
SETUPSCRIPTNAME=$APPDIR/distrib/msw/wxwidgets.iss
SETUPSCRIPTNAME_IN=$APPDIR/distrib/msw/wxwidgets_in.iss
#-------------------------------------------------------------------------
# The location of the zip files to be used to create the setup
#-------------------------------------------------------------------------
WXMSWARCHIVE=$DESTDIR/wxMSW-$VERSION.zip
WXCHMARCHIVE=$DESTDIR/wxWidgets-$VERSION-CHM.zip
#-------------------------------------------------------------------------
# The locations of the readme and license files
#-------------------------------------------------------------------------
READMEFILE=$SETUPIMAGEDIR/docs/readme.txt
READMEAFTERFILE=$SETUPIMAGEDIR/docs/msw/install.txt
LICENSEFILE=$SETUPIMAGEDIR/docs/licence.txt
#-------------------------------------------------------------------------
# The location of the setup compiler
#-------------------------------------------------------------------------
SETUPCOMPILER="c:/Program Files/Inno Setup 5/compil32.exe"
#-------------------------------------------------------------------------
# Misc
#-------------------------------------------------------------------------
# If your zip accepts Cygwin-style paths, then
# use cygpath, else substitute echo
CYGPATHPROG=cygpath
#CYGPATHPROG=echo
PROGNAME=$0
SCRIPTDIR=$WXWIN/distrib/msw
ZIPFLAGS=
# Seds the file represented by the 1st arg, using the expression passed as the 2nd arg.
doreplace()
{
thefile=$1
theexpr=$2
if [ -f $thefile ]; then
sed -e "$theexpr" < $thefile > $thefile.tmp
mv $thefile.tmp $thefile
else
echo "*** $thefile not found."
fi
}
unix2dosname()
{
echo $1 | sed -e "s/\//\\\\\\\/g" > /tmp/filename.tmp
RETVALUE=`cat /tmp/filename.tmp`
rm -f /tmp/filename.tmp
}
unix2dosname2()
{
echo $1 | sed -e "s/\//\\\\/g" > /tmp/filename.tmp
RETVALUE=`cat /tmp/filename.tmp`
rm -f /tmp/filename.tmp
}
doinit()
{
if [ "$VERBOSE" != "1" ]; then
ZIPFLAGS=-q
fi
}
# Do the actual spin.
dospinsetup()
{
mkdir -p $DESTDIR
cd $DESTDIR
echo Now in `pwd`
rm -f -r wxWidgets-$VERSION
rm -f -r wxMSW-$VERSION
echo Unzipping the wxMSW files...
unzip $ZIPFLAGS $WXMSWARCHIVE
# This 'pause' is only necessary because on my system, the following 'mv' seems to fail
# without it.
echo About to rename wxMSW-$VERSION to wxWidgets-$VERSION. Press Return to continue.
read ch
mv wxMSW-$VERSION wxWidgets-$VERSION
if [ ! -d wxWidgets-$VERSION ]; then
echo *** Could not find wxWidgets-$VERSION: exiting.
exit
fi
echo Unzipping the CHM files...
cd wxWidgets-$VERSION
unzip $ZIPFLAGS $WXCHMARCHIVE
echo Copying readme files...
cp docs/msw/readme.txt README-MSW.txt
cp docs/msw/install.txt INSTALL-MSW.txt
cp docs/licence.txt LICENCE.txt
cp docs/lgpl.txt COPYING.LIB
cp docs/changes.txt CHANGES.txt
cp docs/readme.txt README.txt
# Now cp some binary files to 'bin'
# TODO
# if [ ! -d bin ]; then
# mkdir bin
# fi
# cp $APPDIR/bin/tex2rtf.exe bin
# cp $APPDIR/bin/tex2rtf.chm bin
# cp $APPDIR/bin/widgets.exe bin
# cp $APPDIR/bin/life.exe bin
# cp $APPDIR/demos/life/breeder.lif bin
# cp $APPDIR/docs/htmlhelp/tex2rtf.chm bin
# Now replace %VERSION% with the real application version, and other
# variables
cp $SETUPSCRIPTNAME_IN $SETUPSCRIPTNAME
echo Replacing variables in the setup script
doreplace $SETUPSCRIPTNAME "s/%VERSION%/$VERSION/g"
doreplace $SETUPSCRIPTNAME "s/%COPYRIGHTHOLDER%/$AUTHOR/g"
doreplace $SETUPSCRIPTNAME "s/%VENDOR%/$VENDOR/g"
unix2dosname $READMEFILE
doreplace $SETUPSCRIPTNAME "s;%READMEFILE%;$RETVALUE;g"
unix2dosname $READMEAFTERFILE
doreplace $SETUPSCRIPTNAME "s;%READMEAFTERFILE%;$RETVALUE;g"
unix2dosname $LICENSEFILE
doreplace $SETUPSCRIPTNAME "s;%LICENSEFILE%;$RETVALUE;g"
doreplace $SETUPSCRIPTNAME "s/%APPTITLE%/$APPTITLE/g"
unix2dosname $SETUPIMAGEDIR
doreplace $SETUPSCRIPTNAME "s;%SOURCEDIR%;$RETVALUE;g"
unix2dosname $DESTDIR
doreplace $SETUPSCRIPTNAME "s;%OUTPUTDIR%;$RETVALUE;g"
rm -f $DESTDIR/setup*.* $DESTDIR/wxMSW-$VERSION-Setup.exe
# Inno Setup complains if this step is not done
unix2dos --unix2dos $SETUPSCRIPTNAME
# Now invoke INNO compiler on the new ISS file
# First, make a DOS filename or Inno Setup will get confused.
unix2dosname2 $SETUPSCRIPTNAME
DOSFILENAME=$RETVALUE
# Note: the double slash is Mingw32/MSYS convention for
# denoting a switch, that must not be converted into
# a path (otherwise /c = c:/)
cd `dirname $SETUPSCRIPTNAME`
BASESCRIPTNAME=`basename $SETUPSCRIPTNAME`
echo Invoking Inno Setup compiler on $BASESCRIPTNAME
"$SETUPCOMPILER" //cc $BASESCRIPTNAME
if [ ! -f $DESTDIR/setup.exe ]; then
echo "*** Error - the setup.exe was not generated."
exit
fi
cd $DESTDIR
mv setup.exe wxMSW-$VERSION-Setup.exe
echo If you saw no warnings or errors, $APPTITLE was successfully spun.
echo
}
# Get the archives
getarchives()
{
echo Getting archives...
cd $DESDIR
curl http://biolpc22.york.ac.uk/pub/$VERSION/wxMSW-$VERSION.zip
curl http://biolpc22.york.ac.uk/pub/$VERSION/wxWidgets-$VERSION-CHM.zip
# TODO
#curl http://biolpc22.york.ac.uk/pub/$VERSION/wxWidgets-Windows-Binaries.zip
echo Done getting archives.
}
# We can't use e.g. this:
# ls `cat $SRC/distrib/msw/makefile.rsp` zip -@ -u $DEST/wxWidgets-$VERSION-gen.zip
# because there's not enough space on the command line, plus we need to ignore the
# blank lines.
# So if we need to (not in this script so far) we do something like this instead:
# expandlines $SRC/setup/files.rsp temp.txt
# zip -@ `$CYGPATHPROG -w $DEST/archive.zip` < temp.txt
expandlines()
{
toexpand=$1
outputfile=$2
rm -f $outputfile
touch $outputfile
for line in `cat $toexpand` ; do
if [ $line != "" ]; then
ls $line >> $outputfile
fi
done
}
usage()
{
echo "Usage: $PROGNAME [ options ]" 1>&2
echo Options:
echo " --help Display this help message"
echo " --verbose Verbose zip operation"
echo.
echo Note that options only override settings in $SCRIPTDIR/setup.var.
exit 1
}
# Process command line options.
for i in "$@"; do
case "$i" in
--getarchives) GETARCHIVES=1 ;;
--verbose) VERBOSE=1 ;;
*)
usage
exit
;;
esac
done
doinit
if [ "$GETARCHIVES" = "1" ]; then
getarchives
fi
dospinsetup