chiark / gitweb /
declare ff Merge commit '7cae89f' into HEAD
[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.gtk
12 !makefile am Makefile.am
13 !makefile vc Makefile.vc
14 !makefile wce Makefile.wce
15 !makefile cygwin Makefile.cyg
16 !makefile osx Makefile.osx
17 !makefile gnustep Makefile.gnustep
18 !makefile nestedvm Makefile.nestedvm
19 !makefile emcc Makefile.emcc
20
21 !srcdir icons/
22
23 WINDOWS_COMMON = printing
24          + user32.lib gdi32.lib comctl32.lib comdlg32.lib winspool.lib
25 WINDOWS  = windows WINDOWS_COMMON
26 COMMON   = midend drawing misc malloc random version
27 GTK      = gtk printing ps
28 # Objects needed for auxiliary command-line programs.
29 STANDALONE = nullfe random misc malloc
30
31 ALL      = list
32
33 # First half of list.c.
34 !begin >list.c
35 /*
36  * list.c: List of pointers to puzzle structures, for monolithic
37  * platforms.
38  *
39  * This file is automatically generated by mkfiles.pl. Do not edit
40  * it directly, or the changes will be lost next time mkfiles.pl runs.
41  * Instead, edit Recipe and/or its *.R subfiles.
42  */
43 #include "puzzles.h"
44 #define GAMELIST(A) \
45 !end
46
47 # Now each .R file adds part of the macro definition of GAMELIST to list.c.
48 !include *.R
49
50 # Then we finish up list.c as follows:
51 !begin >list.c
52
53 #define DECL(x) extern const game x;
54 #define REF(x) &x,
55 GAMELIST(DECL)
56 const game *gamelist[] = { GAMELIST(REF) };
57 const int gamecount = lenof(gamelist);
58 !end
59
60 # Unix standalone application for special-purpose obfuscation.
61 obfusc : [U] obfusc STANDALONE
62
63 puzzles  : [G] windows[COMBINED] WINDOWS_COMMON COMMON ALL noicon.res
64
65 # Mac OS X unified application containing all the puzzles.
66 Puzzles  : [MX] osx osx.icns osx-info.plist COMMON ALL
67 # For OS X, we must create the online help and include it in the
68 # application bundle.) Also we add -DCOMBINED to the compiler flags
69 # so as to inform the code that we're building a single binary for
70 # all the puzzles. Then I've also got some code in here to build a
71 # distributable .dmg disk image.
72 !begin osx
73 Puzzles_extra = Puzzles.app/Contents/Resources/Help/index.html
74 Puzzles.app/Contents/Resources/Help/index.html: \
75         Puzzles.app/Contents/Resources/Help osx-help.but puzzles.but
76         cd Puzzles.app/Contents/Resources/Help; \
77                 halibut --html ../../../../osx-help.but ../../../../puzzles.but
78 Puzzles.app/Contents/Resources/Help: Puzzles.app/Contents/Resources
79         mkdir -p Puzzles.app/Contents/Resources/Help
80
81 release: Puzzles.dmg
82 Puzzles.dmg: Puzzles
83         rm -f raw.dmg
84         hdiutil create -megabytes 5 -layout NONE raw.dmg
85         hdid -nomount raw.dmg > devicename
86         newfs_hfs -v "Simon Tatham's Puzzle Collection" `cat devicename`
87         hdiutil eject `cat devicename`
88         hdid raw.dmg | cut -f1 -d' ' > devicename
89         cp -R Puzzles.app /Volumes/"Simon Tatham's Puzzle Collection"
90         hdiutil eject `cat devicename`
91         rm -f Puzzles.dmg
92         hdiutil convert -format UDCO raw.dmg -o Puzzles.dmg
93         rm -f raw.dmg devicename
94 !end
95
96 !begin am
97 bin_PROGRAMS = $(GAMES)
98 GTK_CFLAGS += -DSHAREDIR="\"$(datarootdir)\""
99 !end
100 !begin am_begin
101 GAMES =
102 !end
103
104 # make install for Unix.
105 !begin gtk
106 install:
107         for i in $(GAMES); do \
108                 $(INSTALL_PROGRAM) -m 755 $(BINPREFIX)$$i $(DESTDIR)$(gamesdir)/$(BINPREFIX)$$i \
109                 || exit 1; \
110         done
111 !end
112 !begin nestedvm
113 .PRECIOUS: %.class
114 %.class: %.mips
115         java -cp $(NESTEDVM)/build:$(NESTEDVM)/upstream/build/classgen/build \
116                 org.ibex.nestedvm.Compiler -outformat class -d . \
117                 PuzzleEngine $<
118                 mv PuzzleEngine.class $@
119
120 org:
121         mkdir -p org/ibex/nestedvm/util
122         cp $(NESTEDVM)/build/org/ibex/nestedvm/Registers.class org/ibex/nestedvm
123         cp $(NESTEDVM)/build/org/ibex/nestedvm/UsermodeConstants.class org/ibex/nestedvm
124         cp $(NESTEDVM)/build/org/ibex/nestedvm/Runtime*.class org/ibex/nestedvm
125         cp $(NESTEDVM)/build/org/ibex/nestedvm/util/Platform*.class org/ibex/nestedvm/util
126         cp $(NESTEDVM)/build/org/ibex/nestedvm/util/Seekable*.class org/ibex/nestedvm/util
127         echo "Main-Class: PuzzleApplet" >applet.manifest
128
129 PuzzleApplet.class: PuzzleApplet.java org
130         javac -source 1.3 -target 1.3 PuzzleApplet.java
131
132 %.jar: %.class PuzzleApplet.class org
133         mv $< PuzzleEngine.class
134         jar cfm $@ applet.manifest PuzzleEngine.class PuzzleApplet*.class org
135         echo '<applet archive="'$@'" code="PuzzleApplet" width="700" height="500"></applet>' >$*.html
136         mv PuzzleEngine.class $<
137 !end
138
139 # A benchmarking and testing target for the GTK puzzles.
140 !begin gtk
141 test: benchmark.html benchmark.txt
142
143 benchmark.html: benchmark.txt benchmark.pl
144         ./benchmark.pl benchmark.txt > $@
145
146 benchmark.txt: benchmark.sh $(GAMES)
147         ./benchmark.sh > $@
148
149 !end
150 !begin am
151 test: benchmark.html benchmark.txt
152
153 benchmark.html: benchmark.txt benchmark.pl
154         ./benchmark.pl benchmark.txt > $@
155
156 benchmark.txt: benchmark.sh $(GAMES)
157         ./benchmark.sh > $@
158 !end