From: Julian Smart Date: Thu, 9 Nov 2006 22:27:27 +0000 (+0000) Subject: Added simple setup-creating script. See top of createsetup.sh for details. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/a04be1e3e8373bcf0989db0380faa6f84d6c3da5 Added simple setup-creating script. See top of createsetup.sh for details. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43247 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/distrib/msw/createsetup.sh b/distrib/msw/createsetup.sh new file mode 100644 index 0000000000..da2dba757e --- /dev/null +++ b/distrib/msw/createsetup.sh @@ -0,0 +1,326 @@ +#!/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 + diff --git a/distrib/msw/wxwidgets_in.iss b/distrib/msw/wxwidgets_in.iss new file mode 100644 index 0000000000..22d0a81c83 --- /dev/null +++ b/distrib/msw/wxwidgets_in.iss @@ -0,0 +1,67 @@ +; Script generated by the Inno Setup Script Wizard. +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! + +[Setup] + MinVersion=4.0,4.0 + AppName=%APPTITLE% %VERSION% + AppId=%APPTITLE% + CreateUninstallRegKey=1 + UsePreviousAppDir=0 + UsePreviousGroup=0 + AppVersion=%VERSION% + AppVerName=%APPTITLE% %VERSION% + AppCopyright=Copyright © %COPYRIGHTHOLDER% + BackColor=$FF0000 + BackColor2=$000000 + BackColorDirection=toptobottom + WindowShowCaption=1 + WindowStartMaximized=1 + WindowVisible=1 + WindowResizable=1 + DirExistsWarning=auto + UninstallFilesDir={app} + DisableDirPage=0 + DisableStartupPrompt=0 + CreateAppDir=1 + DisableProgramGroupPage=0 +; AlwaysCreateUninstallIcon=1 + Uninstallable=1 +; UninstallIconName=Uninstall %APPTITLE% %VERSION% + UninstallDisplayName=%APPTITLE% %VERSION% + UninstallLogMode=Append + DefaultDirName=c:\%APPTITLE%-%VERSION% + DefaultGroupName=%APPTITLE% %VERSION% + LicenseFile=%LICENSEFILE% + InfoBeforeFile=%READMEFILE% + InfoAfterFile=%READMEAFTERFILE% +; MessagesFile=compiler:default.isl + DiskSpanning=0 +; DiskSize=1457664 +; DiskClusterSize=512 +; ReserveBytes=0 +; UseSetupLdr=1 + SourceDir=%SOURCEDIR% + OutputDir=%OUTPUTDIR% + +[Files] +Source: "%SOURCEDIR%\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +; NOTE: Don't use "Flags: ignoreversion" on any shared system files + +[INI] +Filename: "{app}\wx.url"; Section: "InternetShortcut"; Key: "URL"; String: "http://www.wxwidgets.org" + +[Icons] +Name: "{group}\{cm:ProgramOnTheWeb,wxWidgets %VERSION%}"; Filename: "{app}\wx.url" +Name: {group}\Changes; Filename: {app}\docs\changes.txt; WorkingDir: {app}; IconIndex: 0; Flags: useapppaths +Name: {group}\Readme; Filename: {app}\docs\readme.txt; WorkingDir: {app}; IconIndex: 0; Flags: useapppaths +Name: {group}\Compiling wxWidgets; Filename: {app}\docs\msw\install.txt; WorkingDir: {app}; IconIndex: 0; Flags: useapppaths +Name: {group}\wxWidgets Manual; Filename: {app}\docs\htmlhelp\wx.chm; WorkingDir: {app}; IconIndex: 0; Flags: useapppaths +Name: {group}\Document Index; Filename: {app}\docs\html\index.htm; WorkingDir: {app}; IconIndex: 0; Flags: useapppaths +;Name: {group}\Widgets Sample; Filename: {app}\bin\widgets.exe; WorkingDir: {app}\bin; IconFilename: {app}\bin\widgets.exe; IconIndex: 0 +Name: "{group}\Uninstall wxWidgets %VERSION%"; Filename: "{uninstallexe}" + +[UninstallDelete] +Type: files; Name: "{app}\wx.url" + +[Registry] + Root: HKCU; SubKey: Environment; ValueName: WXWIN; ValueType: string; ValueData: {app}; Flags: createvalueifdoesntexist uninsdeletevalue