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