chiark / gitweb /
Fix a build-breaking bug I introduced to the OS X makefile in r8931.
[sgt-puzzles.git] / Recipe
1 # -*- makefile -*-
2
3 # This file describes which puzzle binaries are made up from which
4 # object and resource files. It is processed into the various
5 # Makefiles by means of a Perl script. Makefile changes should
6 # really be made by editing this file and/or the Perl script, not
7 # by editing the actual Makefiles.
8
9 !name puzzles
10
11 !makefile gtk Makefile
12 !makefile vc Makefile.vc
13 !makefile wce Makefile.wce
14 !makefile cygwin Makefile.cyg
15 !makefile osx Makefile.osx
16 !makefile nestedvm Makefile.nestedvm
17
18 !srcdir icons/
19
20 WINDOWS_COMMON = printing
21          + user32.lib gdi32.lib comctl32.lib comdlg32.lib winspool.lib
22 WINDOWS  = windows WINDOWS_COMMON
23 COMMON   = midend drawing misc malloc random version
24 GTK      = gtk printing ps
25 # Objects needed for auxiliary command-line programs.
26 STANDALONE = nullfe random misc malloc
27
28 ALL      = list
29
30 # First half of list.c.
31 !begin >list.c
32 /*
33  * list.c: List of pointers to puzzle structures, for monolithic
34  * platforms.
35  *
36  * This file is automatically generated by mkfiles.pl. Do not edit
37  * it directly, or the changes will be lost next time mkfiles.pl runs.
38  * Instead, edit Recipe and/or its *.R subfiles.
39  */
40 #include "puzzles.h"
41 #define GAMELIST(A) \
42 !end
43
44 # Now each .R file adds part of the macro definition of GAMELIST to list.c.
45 !include *.R
46
47 # Then we finish up list.c as follows:
48 !begin >list.c
49
50 #define DECL(x) extern const game x;
51 #define REF(x) &x,
52 GAMELIST(DECL)
53 const game *gamelist[] = { GAMELIST(REF) };
54 const int gamecount = lenof(gamelist);
55 !end
56
57 # Unix standalone application for special-purpose obfuscation.
58 obfusc : [U] obfusc STANDALONE
59
60 puzzles  : [G] windows[COMBINED] WINDOWS_COMMON COMMON ALL noicon.res
61
62 # Mac OS X unified application containing all the puzzles.
63 Puzzles  : [MX] osx osx.icns osx-info.plist COMMON ALL
64 # For OS X, we must create the online help and include it in the
65 # application bundle.) Also we add -DCOMBINED to the compiler flags
66 # so as to inform the code that we're building a single binary for
67 # all the puzzles. Then I've also got some code in here to build a
68 # distributable .dmg disk image.
69 !begin osx
70 Puzzles_extra = Puzzles.app/Contents/Resources/Help/index.html
71 Puzzles.app/Contents/Resources/Help/index.html: \
72         Puzzles.app/Contents/Resources/Help osx-help.but puzzles.but
73         cd Puzzles.app/Contents/Resources/Help; \
74                 halibut --html ../../../../osx-help.but ../../../../puzzles.but
75 Puzzles.app/Contents/Resources/Help: Puzzles.app/Contents/Resources
76         mkdir -p Puzzles.app/Contents/Resources/Help
77
78 release: Puzzles.dmg
79 Puzzles.dmg: Puzzles
80         rm -f raw.dmg
81         hdiutil create -megabytes 5 -layout NONE raw.dmg
82         hdid -nomount raw.dmg > devicename
83         newfs_hfs -v "Simon Tatham's Puzzle Collection" `cat devicename`
84         hdiutil eject `cat devicename`
85         hdid raw.dmg | cut -f1 -d' ' > devicename
86         cp -R Puzzles.app /Volumes/"Simon Tatham's Puzzle Collection"
87         hdiutil eject `cat devicename`
88         rm -f Puzzles.dmg
89         hdiutil convert -format UDCO raw.dmg -o Puzzles.dmg
90         rm -f raw.dmg devicename
91 !end
92
93 # Version management.
94 !begin vc
95 version.obj: *.c *.h
96         cl $(VER) $(CFLAGS) /c version.c
97 !end
98 !specialobj vc version
99 !begin wce
100 version.obj: *.c *.h
101         $(CC) $(VER) $(CFLAGS) /c version.c
102 !end
103 !specialobj wce version
104 !begin cygwin
105 version.o: FORCE;
106 FORCE:
107         $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) $(VER) -c version.c
108 !end
109 !specialobj cygwin version
110 # For Unix, we also need the gross MD5 hack that causes automatic
111 # version number selection in release source archives.
112 !begin gtk
113 version.o: version.c version2.def
114         $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version2.def` -c version.c
115 version2.def: FORCE
116         if test -z "$(VER)" && test -f manifest && md5sum -c manifest; then \
117                 cat version.def > version2.def.new; \
118         elif test -z "$(VER)" && test -d .svn && svnversion . >/dev/null 2>&1; then \
119                 echo "-DREVISION=`svnversion .`" >version2.def.new; \
120         else \
121                 echo "$(VER)" >version2.def.new; \
122         fi && \
123         if diff -q version2.def.new version2.def; then \
124                 rm version2.def.new; \
125         else \
126                 mv version2.def.new version2.def; \
127         fi
128 .PHONY: FORCE
129 !end
130 !specialobj gtk version
131 !begin nestedvm
132 version.o: version.c version2.def
133         $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version2.def` -c version.c
134 version2.def: FORCE
135         if test -z "$(VER)" && test -f manifest && md5sum -c manifest; then \
136                 cat version.def > version2.def.new; \
137         elif test -z "$(VER)" && test -d .svn && svnversion . >/dev/null 2>&1; then \
138                 echo "-DREVISION=`svnversion .`" >version2.def.new; \
139         else \
140                 echo "$(VER)" >version2.def.new; \
141         fi && \
142         if diff -q version2.def.new version2.def; then \
143                 rm version2.def.new; \
144         else \
145                 mv version2.def.new version2.def; \
146         fi
147 .PHONY: FORCE
148 !end
149 !specialobj nestedvm version
150 # For OS X, this is made more fiddly by the fact that we don't have
151 # md5sum readily available. We do, however, have `md5 -r' which
152 # generates _nearly_ the same output, but it has no check function.
153 !begin osx
154 version.ppc.o: version.c version2.def
155         $(CC) -arch ppc $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version2.def` -c version.c -o $@
156 version.i386.o: version.c version2.def
157         $(CC) -arch i386 $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version2.def` -c version.c -o $@
158 version2.def: FORCE
159         if test -z "$(VER)" && test -f manifest && (md5 -r `awk '{print $$2}' manifest` | diff -w manifest -); then \
160                 cat version.def > version2.def.new; \
161         elif test -z "$(VER)" && test -d .svn && svnversion . >/dev/null 2>&1; then \
162                 echo "-DREVISION=`svnversion .`" >version2.def.new; \
163         else \
164                 echo "$(VER)" >version2.def.new; \
165         fi && \
166         if diff -q version2.def.new version2.def; then \
167                 rm version2.def.new; \
168         else \
169                 mv version2.def.new version2.def; \
170         fi
171 .PHONY: FORCE
172 !specialobj osx version
173
174 # make install for Unix.
175 !begin gtk
176 install:
177         for i in $(GAMES); do \
178                 $(INSTALL_PROGRAM) -m 755 $$i $(DESTDIR)$(gamesdir)/$$i \
179                 || exit 1; \
180         done
181 !end
182 !begin nestedvm
183 .PRECIOUS: %.class
184 %.class: %.mips
185         java -cp $(NESTEDVM)/build:$(NESTEDVM)/upstream/build/classgen/build \
186                 org.ibex.nestedvm.Compiler -outformat class -d . \
187                 PuzzleEngine $<
188                 mv PuzzleEngine.class $@
189
190 org:
191         mkdir -p org/ibex/nestedvm/util
192         cp $(NESTEDVM)/build/org/ibex/nestedvm/{Registers,UsermodeConstants,Runtime*}.class org/ibex/nestedvm
193         cp $(NESTEDVM)/build/org/ibex/nestedvm/util/{Platform*,Seekable*}.class org/ibex/nestedvm/util
194         echo "Main-Class: PuzzleApplet" >applet.manifest
195
196 PuzzleApplet.class: PuzzleApplet.java org
197         javac -source 1.3 -target 1.3 PuzzleApplet.java
198
199 %.jar: %.class PuzzleApplet.class org
200         mv $< PuzzleEngine.class
201         jar cfm $@ applet.manifest PuzzleEngine.class PuzzleApplet*.class org
202         echo '<applet archive="'$@'" code="PuzzleApplet" width="700" height="500"></applet>' >$*.html
203         mv PuzzleEngine.class $<
204 !end