268 lines
6.9 KiB
Bash
268 lines
6.9 KiB
Bash
|
#!/bin/sh
|
||
|
|
||
|
# Make a distribution of an application.
|
||
|
|
||
|
# If your zip accepts Cygwin-style paths, then
|
||
|
# use cygpath, else substitute echo
|
||
|
CYGPATHPROG=cygpath
|
||
|
#CYGPATHPROG=echo
|
||
|
|
||
|
PROGNAME=$0
|
||
|
SCRIPTDIR=`pwd`
|
||
|
|
||
|
. $SCRIPTDIR/setup.var
|
||
|
|
||
|
# Set this to the required version
|
||
|
VERSION=
|
||
|
|
||
|
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
|
||
|
}
|
||
|
|
||
|
findversion()
|
||
|
{
|
||
|
echo "#include <stdio.h>" > /tmp/appver.c
|
||
|
echo "#include \"$VERSIONSYMBOLFILE\"" >> /tmp/appver.c
|
||
|
echo "int main() { printf(\"%.2f\", $VERSIONSYMBOL); }" >> /tmp/appver.c
|
||
|
gcc /tmp/appver.c -I$APPDIR -o /tmp/appver
|
||
|
VERSION=`/tmp/appver`
|
||
|
rm -f /tmp/appver /tmp/appver.c
|
||
|
}
|
||
|
|
||
|
makesetup()
|
||
|
{
|
||
|
if [ -d $SETUPIMAGEDIR ]; then
|
||
|
echo Removing existing $SETUPIMAGEDIR
|
||
|
rm -f -r $SETUPIMAGEDIR
|
||
|
fi
|
||
|
|
||
|
echo Making the $SETUPIMAGEDIR for preparing the setup
|
||
|
mkdir -p $SETUPIMAGEDIR
|
||
|
|
||
|
if [ -f $READMEFILE ]; then
|
||
|
echo Copying readme.txt
|
||
|
cp $READMEFILE $SETUPIMAGEDIR
|
||
|
else
|
||
|
echo "*** Warning - $READMEFILE not found"
|
||
|
fi
|
||
|
|
||
|
if [ -f $LICENSEFILE ]; then
|
||
|
echo Copying licence.txt
|
||
|
cp $LICENSEFILE $SETUPIMAGEDIR
|
||
|
else
|
||
|
echo "*** Warning - $LICENSEFILE not found"
|
||
|
fi
|
||
|
|
||
|
cp $APPDIR/docs/gpl.txt $SETUPIMAGEDIR
|
||
|
cp $APPDIR/docs/lgpl.txt $SETUPIMAGEDIR
|
||
|
cp $APPDIR/docs/licendoc.txt $SETUPIMAGEDIR
|
||
|
|
||
|
echo Copying sample configuration settings file...
|
||
|
cp $APPDIR/configs/wxwin250.wxs $SETUPIMAGEDIR
|
||
|
|
||
|
if [ "$RESOURCESFILE" != "" ] && [ "$RESOURCESDIR" != "" ]; then
|
||
|
if [ -d $RESOURCESDIR ]; then
|
||
|
cd $RESOURCESDIR
|
||
|
echo Compiling resource file $RESOURCESFILE
|
||
|
zip $SETUPIMAGEDIR/$RESOURCESFILE *
|
||
|
else
|
||
|
echo "*** Warning - $RESOURCESDIR directory not found"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ "$MAKEMANUAL" != "0" ]; then
|
||
|
if [ -d $MANUALDIR ]; then
|
||
|
cd $MANUALDIR
|
||
|
make
|
||
|
|
||
|
for EACHFILE in $MANUALFILES ; do
|
||
|
if [ -f $EACHFILE ]; then
|
||
|
echo Copying $EACHFILE
|
||
|
cp $EACHFILE $SETUPIMAGEDIR
|
||
|
else
|
||
|
echo "*** Warning - $EACHFILE not found"
|
||
|
fi
|
||
|
done
|
||
|
else
|
||
|
echo "*** Warning - $MANUALDIR not found"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ -f $WXMANUALCHM ]; then
|
||
|
echo Copying wxWindows manual $WXMANUALCHM
|
||
|
cp $WXMANUALCHM $SETUPIMAGEDIR
|
||
|
else
|
||
|
echo "*** Warning - $WXMANUALCHM not found"
|
||
|
fi
|
||
|
|
||
|
if [ -f $APPBINARY ]; then
|
||
|
echo Copying binary $APPBINARY
|
||
|
cp $APPBINARY $SETUPIMAGEDIR
|
||
|
else
|
||
|
echo "*** Error - $APPBINARY not found"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [ "$UPX" != "0" ]; then
|
||
|
echo Compressing binary
|
||
|
upx $SETUPIMAGEDIR/`basename $APPBINARY`
|
||
|
fi
|
||
|
|
||
|
# Time to regenerate the Inno Install script
|
||
|
if [ "$INNO" != "0" ]; then
|
||
|
echo Generating $SETUPSCRIPTNAME
|
||
|
rm -f $SETUPSCRIPTNAME
|
||
|
|
||
|
sh $SCRIPTDIR/makeinno.sh $SETUPIMAGEDIR $INNOTOP $INNOBOTTOM $SETUPSCRIPTNAME
|
||
|
|
||
|
if [ ! -f $SETUPSCRIPTNAME ]; then
|
||
|
echo "*** Error - something went wrong with the script file generation."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Now replace %VERSION% with the real application version, and other
|
||
|
# variables
|
||
|
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/%APPNAME%/$APPNAME/g"
|
||
|
doreplace $SETUPSCRIPTNAME "s/%APPTITLE%/$APPTITLE/g"
|
||
|
|
||
|
unix2dosname $SETUPIMAGEDIR
|
||
|
doreplace $SETUPSCRIPTNAME "s;%SOURCEDIR%;$RETVALUE;g"
|
||
|
|
||
|
unix2dosname $DESTDIR
|
||
|
doreplace $SETUPSCRIPTNAME "s;%OUTPUTDIR%;$RETVALUE;g"
|
||
|
|
||
|
doreplace $SETUPSCRIPTNAME "s/%APPEXTENSION%/$APPEXTENSION/g"
|
||
|
|
||
|
# FIXME: how do we get the first name in the list?
|
||
|
if [ "$MANUALFILES" != "" ]; then
|
||
|
HELPFILE=`basename $MANUALFILES`
|
||
|
unix2dosname $HELPFILE
|
||
|
doreplace $SETUPSCRIPTNAME "s;%HELPFILE%;$RETVALUE;g"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
rm -f $DESTDIR/setup*.*
|
||
|
|
||
|
# 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 $APPNAME-$VERSION-setup.exe
|
||
|
|
||
|
echo If you saw no warnings or errors, $APPTITLE was successfully spun.
|
||
|
echo
|
||
|
}
|
||
|
|
||
|
# We can't use e.g. this:
|
||
|
# ls `cat $SRC/distrib/msw/makefile.rsp` zip -@ -u $DEST/wxWindows-$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 " --upx Compress executable with UPX"
|
||
|
echo " --no-upx Do not compress executable with UPX"
|
||
|
echo " --inno Build the setup.exe"
|
||
|
echo " --no-inno Do not build the setup.exe"
|
||
|
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
|
||
|
--inno) INNO=1 ;;
|
||
|
--no-inno) INNO=0 ;;
|
||
|
--upx) UPX=1 ;;
|
||
|
--no-upx) UPX=0 ;;
|
||
|
*)
|
||
|
usage
|
||
|
exit
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
findversion
|
||
|
makesetup
|
||
|
|