I still haven't managed to get the WinCE port building via bob, but
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 6 May 2007 09:54:34 +0000 (09:54 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 6 May 2007 09:54:34 +0000 (09:54 +0000)
I should at least check in what I've got.

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@7542 cda61777-01e9-0310-a592-d414129be87e

Buildscr
wceinf.pl [new file with mode: 0644]

index 951795b..b4995ed 100644 (file)
--- a/Buildscr
+++ b/Buildscr
@@ -43,6 +43,41 @@ delegate windows
   return puzzles/Output/setup.exe
 enddelegate
 
+# Build the Pocket PC binaries and CAB.
+#
+# NOTE: This part of the build script requires the Windows delegate
+# server to have the cabwiz program on its PATH. This will
+# typically be at
+#
+#   C:\Program Files\Windows CE Tools\WCE420\POCKET PC 2003\Tools
+#
+# but it might not be if you've installed it somewhere else, or
+# have a different version.
+#
+# NOTE ALSO: This part of the build is commented out, for the
+# moment, because cabwiz does unhelpful things when run from within
+# a bob delegate process (or, more generally, when run from any
+# terminal-based remote login to a Windows machine, including
+# Cygwin opensshd and Windows Telnet). The symptom is that cabwiz
+# just beeps and sits there. Until I figure out how to build the
+# .cab from an automated process (and I'm willing to consider silly
+# approaches such as a third-party CAB generator), I don't think I
+# can sensibly enable this build.
+
+#in puzzles do perl wceinf.pl wingames.lst > puzzles.inf
+#delegate windows
+#  in puzzles do cmd /c 'wcearmv4 & nmake -f Makefile.wce clean'
+#  in puzzles do cmd /c 'wcearmv4 & nmake -f Makefile.wce VER=-DREVISION=$(revision)'
+#  # Nasty piece of sh here which saves the return code from cabwiz,
+#  # outputs its errors and/or warnings, and then propagates the
+#  # return code back to bob. If only cabwiz could output to
+#  # standard error LIKE EVERY OTHER COMMAND-LINE UTILITY IN THE
+#  # WORLD, I wouldn't have to do this.
+#  in puzzles do cat puzzles.inf
+#  in puzzles do cmd /c 'wcearmv4 & bash -c cabwiz puzzles.inf /err cabwiz.err /cpu ARMV4'; a=$$?; cat cabwiz.err; exit $$a
+#  return puzzles/puzzles.armv4.cab
+#enddelegate
+
 # Build the help file and the HTML docs.
 in puzzles do make -f Makefile.doc clean # remove CHM-target HTML
 in puzzles do make -f Makefile.doc # and rebuild help file...
@@ -84,6 +119,9 @@ deliver puzzles/puzzles.hlp $@
 deliver puzzles/puzzles.cnt $@
 deliver puzzles/puzzles.zip $@
 deliver puzzles/Output/setup.exe puzzles-r$(revision)-installer.exe
+
+# deliver puzzles/puzzles.armv4.cab $@ # (not built at the moment)
+
 # This one isn't in the puzzles subdir, because makedist.sh left it
 # one level up.
 deliver puzzles*.tar.gz $@
diff --git a/wceinf.pl b/wceinf.pl
new file mode 100644 (file)
index 0000000..8bfc117
--- /dev/null
+++ b/wceinf.pl
@@ -0,0 +1,65 @@
+#!/usr/bin/perl
+
+# Perl script to generate a .INF file for building a Pocket PC .CAB
+# archive of Puzzles. This has to be scripted so that it can read
+# wingames.lst and automatically adjust to the current available
+# set of puzzles.
+
+# Usage:
+#
+#   $ ./wceinf.pl wingames.lst > puzzles.inf
+
+$lst = shift @ARGV;
+open LST, "<", $lst;
+while (<LST>) {
+    chomp;
+    split /:/;
+    push @exes, $_[0];
+    $names{$_[0]} = $_[1];
+}
+close LST;
+
+print '[Version]'."\n";
+print 'Signature   = "$Windows NT$"    ; required as-is'."\n";
+print 'Provider    = "Simon Tatham"    ; full app name will be "<Provider> <AppName>"'."\n";
+print 'CESignature = "$Windows CE$"    ; required as-is'."\n";
+print ''."\n";
+print '[CEStrings]'."\n";
+print 'AppName     = "Puzzle Collection"    ; full app name will be "<Provider> <AppName>"'."\n";
+print 'InstallDir  = %CE8%\%AppName%        ; "\Program Files\Games\Puzzle Collection" (default install directory)'."\n";
+print ''."\n";
+print '[CEDevice.x86]'."\n";
+print 'ProcessorType = 686'."\n";
+print ''."\n";
+print '[CEDevice.ARM]'."\n";
+print 'ProcessorType = 2577'."\n";
+print ''."\n";
+print '[SourceDisksNames.x86]             ; CPU-dependent files'."\n";
+print '2 = ,"x86 Files",,.'."\n";
+print ''."\n";
+print '[SourceDisksNames.ARMV4]           ; CPU-dependent files'."\n";
+print '2 = ,"ARM Files",,.'."\n";
+print ''."\n";
+print '[SourceDisksFiles]'."\n";
+for $exe (@exes) {
+    print $exe.' = 2'."\n";
+}
+print ''."\n";
+print '[DefaultInstall]'."\n";
+print 'CopyFiles   = PuzzleFiles'."\n";
+print 'CEShortcuts = Links'."\n";
+print ''."\n";
+print '[DestinationDirs]'."\n";
+print 'PuzzleFiles = 0, %InstallDir%'."\n";
+print 'Links       = 0, %CE14%\Puzzles'."\n";
+print ''."\n";
+print ';File copy list.'."\n";
+print '[PuzzleFiles]'."\n";
+for $exe (@exes) {
+    print $exe."\n";
+}
+print ''."\n";
+print '[Links]'."\n";
+for $exe (@exes) {
+    print '"'.$names{$exe}.'",0,'.$exe."\n";
+}