133 lines
3.2 KiB
Bash
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
|
||
|
|
||
|
|