wxWidgets/distrib/scripts/msw/makeinno.sh

133 lines
3.2 KiB
Bash

#! /bin/sh
# Make an Inno Setup distribution list, where files and dirs are represented by
# sections like this:
# [Dirs]
# Name: {app}\backgrounds
#
# [Files]
# Source: C:\program\setup\about.htm; DestDir: {app}\; DestName: about.htm
#
#
# Usage: makeinno.sh sourcedir inno-topfile inno-bottomfile destfile
# For example: makeinno.sh c:/project/allfiles c:/project/innotop.txt c:/project/innobott.txt c:/project/project.iss
#
PROGNAME=$0
SOURCEDIR=$1
TOPFILE=$2
BOTTOMFILE=$3
INNOFILE=$4
TEMPDIR=/tmp
dochecks()
{
if [ "$SOURCEDIR" = "" ] || [ "$TOPFILE" = "" ] || [ "$BOTTOMFILE" = "" ] || [ "$INNOFILE" = "" ] ; then
usage
fi
if [ ! -d $SOURCEDIR ]; then
echo "Sorry, the source directory $SOURCEDIR does not exist."
usage
fi
if [ ! -f $TOPFILE ]; then
echo "Sorry, the Inno Setup header $TOPFILE does not exist."
usage
fi
if [ ! -f $BOTTOMFILE ]; then
echo "Sorry, the Inno Setup header $BOTTOMFILE does not exist."
usage
fi
if [ ! -d $TEMPDIR ]; then
mkdir $TEMPDIR
fi
}
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
}
generateinno()
{
# SRCDIR=`cygpath -u $SRCDIR`
# DESTDIR=`cygpath -u $DESTDIR`
# TEMPDIR=`cygpath -u $TEMP`
# Generate a list of all files in the distribution.
# We pass the output through sed in order to remove the preceding "./"
cd $SOURCEDIR
find . -print | sed -e "s/\.\\///g" > $TEMPDIR/files1.tmp
echo "[Dirs]" > $TEMPDIR/files2.tmp
for line in `cat $TEMPDIR/files1.tmp` ; do
# If a directory, add to file
if [ -d $line ] ; then
# The relative path
# TODO: make into DOS filename form
#line2=`cygpath -w $line`
line2=$line
echo " Name: {app}\\"$line2 >> $TEMPDIR/files2.tmp
fi
done
echo "" >> $TEMPDIR/files2.tmp
echo "[Files]" >> $TEMPDIR/files2.tmp
for line in `cat $TEMPDIR/files1.tmp` ; do
# If not a directory, add to file
if [ ! -d $line ] ; then
# The relative path
# TODO: make into DOS filename form
#line2=`cygpath -w $line`
line2=$line
# The absolute path
# TODO: make into DOS filename form
#line1=`cygpath -w $SOURCEDIR`"\\"$line2
line1=$SOURCEDIR"\\"$line2
#pathonly=`find $line -printf "%h"`
pathonly=`dirname $line`
echo " Source: "$line1"; DestDir: {app}\\"$pathonly >> $TEMPDIR/files2.tmp
fi
done
echo "" >> $TEMPDIR/files2.tmp
doreplace $TEMPDIR/files2.tmp "s/\//\\\/g"
# Concatenate the 3 sections
cat $TOPFILE $TEMPDIR/files2.tmp $BOTTOMFILE > $INNOFILE
rm -f $TEMPDIR/files1.tmp
}
usage()
{
echo Usage: $PROGNAME sourcedir inno-topfile inno-bottomfile destfile
echo For example: $PROGNAME c:/project/allfiles c:/project/innotop.txt c:/project/innobott.txt c:/project/project.iss
echo Remember to use paths of the form c:/thing rather than /c/thing.
exit 1
}
dochecks
generateinno