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.
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 gnustep Makefile.gnustep
17
!makefile nestedvm Makefile.nestedvm
18
!makefile emcc Makefile.emcc
22
WINDOWS_COMMON = printing
23
+ user32.lib gdi32.lib comctl32.lib comdlg32.lib winspool.lib
24
WINDOWS = windows WINDOWS_COMMON
25
COMMON = midend drawing misc malloc random version
27
# Objects needed for auxiliary command-line programs.
28
STANDALONE = nullfe random misc malloc
32
# First half of list.c.
35
* list.c: List of pointers to puzzle structures, for monolithic
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.
46
# Now each .R file adds part of the macro definition of GAMELIST to list.c.
49
# Then we finish up list.c as follows:
52
#define DECL(x) extern const game x;
55
const game *gamelist[] = { GAMELIST(REF) };
56
const int gamecount = lenof(gamelist);
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.
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
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`
91
hdiutil convert -format UDCO raw.dmg -o Puzzles.dmg
92
rm -f raw.dmg devicename
98
cl $(VER) $(CFLAGS) /c version.c
100
!specialobj vc version
103
$(CC) $(VER) $(CFLAGS) /c version.c
105
!specialobj wce version
109
$(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) $(VER) -c version.c
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.
115
version.o: version.c version2.def
116
$(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version2.def` -c version.c
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; \
123
echo "$(VER)" >version2.def.new; \
125
if diff -q version2.def.new version2.def; then \
126
rm version2.def.new; \
128
mv version2.def.new version2.def; \
132
!specialobj gtk version
134
version.o: version.c version2.def
135
$(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version2.def` -c version.c
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; \
142
echo "$(VER)" >version2.def.new; \
144
if diff -q version2.def.new version2.def; then \
145
rm version2.def.new; \
147
mv version2.def.new version2.def; \
151
!specialobj nestedvm version
152
# For OS X, this is made more fiddly by the fact that we don't have
153
# md5sum readily available. We do, however, have `md5 -r' which
154
# generates _nearly_ the same output, but it has no check function.
156
version.ppc.o: version.c version2.def
157
$(CC) -arch ppc $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version2.def` -c version.c -o $@
158
version.i386.o: version.c version2.def
159
$(CC) -arch i386 $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version2.def` -c version.c -o $@
161
if test -z "$(VER)" && test -f manifest && (md5 -r `awk '{print $$2}' manifest` | diff -w manifest -); then \
162
cat version.def > version2.def.new; \
163
elif test -z "$(VER)" && test -d .svn && svnversion . >/dev/null 2>&1; then \
164
echo "-DREVISION=`svnversion .`" >version2.def.new; \
166
echo "$(VER)" >version2.def.new; \
168
if diff -q version2.def.new version2.def; then \
169
rm version2.def.new; \
171
mv version2.def.new version2.def; \
175
!specialobj osx version
177
# make install for Unix.
180
for i in $(GAMES); do \
181
$(INSTALL_PROGRAM) -m 755 $(BINPREFIX)$$i $(DESTDIR)$(gamesdir)/$(BINPREFIX)$$i \
188
java -cp $(NESTEDVM)/build:$(NESTEDVM)/upstream/build/classgen/build \
189
org.ibex.nestedvm.Compiler -outformat class -d . \
191
mv PuzzleEngine.class $@
194
mkdir -p org/ibex/nestedvm/util
195
cp $(NESTEDVM)/build/org/ibex/nestedvm/Registers.class org/ibex/nestedvm
196
cp $(NESTEDVM)/build/org/ibex/nestedvm/UsermodeConstants.class org/ibex/nestedvm
197
cp $(NESTEDVM)/build/org/ibex/nestedvm/Runtime*.class org/ibex/nestedvm
198
cp $(NESTEDVM)/build/org/ibex/nestedvm/util/Platform*.class org/ibex/nestedvm/util
199
cp $(NESTEDVM)/build/org/ibex/nestedvm/util/Seekable*.class org/ibex/nestedvm/util
200
echo "Main-Class: PuzzleApplet" >applet.manifest
202
PuzzleApplet.class: PuzzleApplet.java org
203
javac -source 1.3 -target 1.3 PuzzleApplet.java
205
%.jar: %.class PuzzleApplet.class org
206
mv $< PuzzleEngine.class
207
jar cfm $@ applet.manifest PuzzleEngine.class PuzzleApplet*.class org
208
echo '<applet archive="'$@'" code="PuzzleApplet" width="700" height="500"></applet>' >$*.html
209
mv PuzzleEngine.class $<
212
# A benchmarking and testing target for the GTK puzzles.
214
test: benchmark.html benchmark.txt
216
benchmark.html: benchmark.txt benchmark.pl
217
./benchmark.pl benchmark.txt > $@
219
benchmark.txt: $(GAMES)
220
for i in $(GAMES); do \
221
for params in $$(env -i ./$(BINPREFIX)$$i --list-presets | cut -f1 -d' '); do \
222
env -i ./$(BINPREFIX)$$i --test-solve --time-generation --generate 100 $$params \