#! /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