| 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 cygwin Makefile.cyg |
| 14 | !makefile osx Makefile.osx |
| 15 | |
| 16 | WINDOWS = windows printing |
| 17 | + user32.lib gdi32.lib comctl32.lib comdlg32.lib winspool.lib |
| 18 | COMMON = midend drawing misc malloc random version |
| 19 | NET = net tree234 dsf |
| 20 | NETSLIDE = netslide tree234 |
| 21 | MINES = mines tree234 |
| 22 | FLIP = flip tree234 |
| 23 | PEGS = pegs tree234 |
| 24 | UNTANGLE = untangle tree234 |
| 25 | SLANT = slant dsf |
| 26 | MAP = map dsf |
| 27 | LOOPY = loopy tree234 dsf |
| 28 | LIGHTUP = lightup combi |
| 29 | TENTS = tents maxflow |
| 30 | BRIDGES = bridges dsf |
| 31 | |
| 32 | ALL = list NET NETSLIDE cube fifteen sixteen rect pattern solo twiddle |
| 33 | + MINES samegame FLIP guess PEGS dominosa UNTANGLE blackbox SLANT |
| 34 | + LIGHTUP MAP LOOPY inertia TENTS BRIDGES |
| 35 | |
| 36 | GTK = gtk printing ps |
| 37 | |
| 38 | net : [X] GTK COMMON NET |
| 39 | netslide : [X] GTK COMMON NETSLIDE |
| 40 | cube : [X] GTK COMMON cube |
| 41 | fifteen : [X] GTK COMMON fifteen |
| 42 | sixteen : [X] GTK COMMON sixteen |
| 43 | rect : [X] GTK COMMON rect |
| 44 | pattern : [X] GTK COMMON pattern |
| 45 | solo : [X] GTK COMMON solo |
| 46 | twiddle : [X] GTK COMMON twiddle |
| 47 | mines : [X] GTK COMMON MINES |
| 48 | samegame : [X] GTK COMMON samegame |
| 49 | flip : [X] GTK COMMON FLIP |
| 50 | guess : [X] GTK COMMON guess |
| 51 | pegs : [X] GTK COMMON PEGS |
| 52 | dominosa : [X] GTK COMMON dominosa |
| 53 | untangle : [X] GTK COMMON UNTANGLE |
| 54 | blackbox : [X] GTK COMMON blackbox |
| 55 | slant : [X] GTK COMMON SLANT |
| 56 | lightup : [X] GTK COMMON LIGHTUP |
| 57 | map : [X] GTK COMMON MAP |
| 58 | loopy : [X] GTK COMMON LOOPY |
| 59 | inertia : [X] GTK COMMON inertia |
| 60 | tents : [X] GTK COMMON TENTS |
| 61 | bridges : [X] GTK COMMON BRIDGES |
| 62 | |
| 63 | # Auxiliary command-line programs. |
| 64 | STANDALONE = nullfe random misc malloc |
| 65 | |
| 66 | solosolver : [U] solo[STANDALONE_SOLVER] STANDALONE |
| 67 | patternsolver : [U] pattern[STANDALONE_SOLVER] STANDALONE |
| 68 | mineobfusc : [U] mines[STANDALONE_OBFUSCATOR] tree234 STANDALONE |
| 69 | slantsolver : [U] slant[STANDALONE_SOLVER] dsf STANDALONE |
| 70 | mapsolver : [U] map[STANDALONE_SOLVER] dsf STANDALONE m.lib |
| 71 | lightupsolver : [U] lightup[STANDALONE_SOLVER] combi STANDALONE |
| 72 | tentssolver : [U] tents[STANDALONE_SOLVER] maxflow STANDALONE |
| 73 | |
| 74 | solosolver : [C] solo[STANDALONE_SOLVER] STANDALONE |
| 75 | patternsolver : [C] pattern[STANDALONE_SOLVER] STANDALONE |
| 76 | mineobfusc : [C] mines[STANDALONE_OBFUSCATOR] tree234 STANDALONE |
| 77 | slantsolver : [C] slant[STANDALONE_SOLVER] dsf STANDALONE |
| 78 | mapsolver : [C] map[STANDALONE_SOLVER] dsf STANDALONE |
| 79 | lightupsolver : [C] lightup[STANDALONE_SOLVER] combi STANDALONE |
| 80 | tentssolver : [C] tents[STANDALONE_SOLVER] maxflow STANDALONE |
| 81 | |
| 82 | # The Windows Net shouldn't be called `net.exe' since Windows |
| 83 | # already has a reasonably important utility program by that name! |
| 84 | netgame : [G] WINDOWS COMMON NET |
| 85 | netslide : [G] WINDOWS COMMON NETSLIDE |
| 86 | cube : [G] WINDOWS COMMON cube |
| 87 | fifteen : [G] WINDOWS COMMON fifteen |
| 88 | sixteen : [G] WINDOWS COMMON sixteen |
| 89 | rect : [G] WINDOWS COMMON rect |
| 90 | pattern : [G] WINDOWS COMMON pattern |
| 91 | solo : [G] WINDOWS COMMON solo |
| 92 | twiddle : [G] WINDOWS COMMON twiddle |
| 93 | mines : [G] WINDOWS COMMON MINES |
| 94 | samegame : [G] WINDOWS COMMON samegame |
| 95 | flip : [G] WINDOWS COMMON FLIP |
| 96 | guess : [G] WINDOWS COMMON guess |
| 97 | pegs : [G] WINDOWS COMMON PEGS |
| 98 | dominosa : [G] WINDOWS COMMON dominosa |
| 99 | untangle : [G] WINDOWS COMMON UNTANGLE |
| 100 | blackbox : [G] WINDOWS COMMON blackbox |
| 101 | slant : [G] WINDOWS COMMON SLANT |
| 102 | lightup : [G] WINDOWS COMMON LIGHTUP |
| 103 | map : [G] WINDOWS COMMON MAP |
| 104 | loopy : [G] WINDOWS COMMON LOOPY |
| 105 | inertia : [G] WINDOWS COMMON inertia |
| 106 | tents : [G] WINDOWS COMMON TENTS |
| 107 | bridges : [G] WINDOWS COMMON BRIDGES |
| 108 | |
| 109 | # Mac OS X unified application containing all the puzzles. |
| 110 | Puzzles : [MX] osx osx.icns osx-info.plist COMMON ALL |
| 111 | # For OS X, we must create the online help and include it in the |
| 112 | # application bundle.) Also we add -DCOMBINED to the compiler flags |
| 113 | # so as to inform the code that we're building a single binary for |
| 114 | # all the puzzles. Then I've also got some code in here to build a |
| 115 | # distributable .dmg disk image. |
| 116 | !begin osx |
| 117 | CFLAGS += -DCOMBINED |
| 118 | Puzzles_extra = Puzzles.app/Contents/Resources/Help/index.html |
| 119 | Puzzles.app/Contents/Resources/Help/index.html: \ |
| 120 | Puzzles.app/Contents/Resources/Help osx-help.but puzzles.but |
| 121 | cd Puzzles.app/Contents/Resources/Help; \ |
| 122 | halibut --html ../../../../osx-help.but ../../../../puzzles.but |
| 123 | Puzzles.app/Contents/Resources/Help: Puzzles.app/Contents/Resources |
| 124 | mkdir -p Puzzles.app/Contents/Resources/Help |
| 125 | |
| 126 | release: Puzzles.dmg |
| 127 | Puzzles.dmg: Puzzles |
| 128 | rm -f raw.dmg |
| 129 | hdiutil create -megabytes 5 -layout NONE raw.dmg |
| 130 | hdid -nomount raw.dmg > devicename |
| 131 | newfs_hfs -v "Simon Tatham's Puzzle Collection" `cat devicename` |
| 132 | hdiutil eject `cat devicename` |
| 133 | hdid raw.dmg | cut -f1 -d' ' > devicename |
| 134 | cp -R Puzzles.app /Volumes/"Simon Tatham's Puzzle Collection" |
| 135 | hdiutil eject `cat devicename` |
| 136 | rm -f Puzzles.dmg |
| 137 | hdiutil convert -format UDCO raw.dmg -o Puzzles.dmg |
| 138 | rm -f raw.dmg devicename |
| 139 | !end |
| 140 | |
| 141 | # The `nullgame' source file is a largely blank one, which contains |
| 142 | # all the correct function definitions to compile and link, but |
| 143 | # which defines the null game in which nothing is ever drawn and |
| 144 | # there are no valid moves. Its main purpose is to act as a |
| 145 | # template for writing new game definition source files. I include |
| 146 | # it in the Makefile because it will be worse than useless if it |
| 147 | # ever fails to compile, so it's important that it should actually |
| 148 | # be built on a regular basis. |
| 149 | nullgame : [X] GTK COMMON nullgame |
| 150 | nullgame : [G] WINDOWS COMMON nullgame |
| 151 | |
| 152 | # Version management. |
| 153 | !begin vc |
| 154 | version.obj: *.c *.h |
| 155 | cl $(VER) $(CFLAGS) /c version.c |
| 156 | !end |
| 157 | !specialobj vc version |
| 158 | !begin cygwin |
| 159 | version.o: FORCE; |
| 160 | FORCE: |
| 161 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) $(VER) -c version.c |
| 162 | !end |
| 163 | !specialobj cygwin version |
| 164 | # For Unix, we also need the gross MD5 hack that causes automatic |
| 165 | # version number selection in release source archives. |
| 166 | !begin gtk |
| 167 | version.o: FORCE; |
| 168 | FORCE: |
| 169 | if test -z "$(VER)" && test -f manifest && md5sum -c manifest; then \ |
| 170 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version.def` -c version.c; \ |
| 171 | elif test -z "$(VER)" && test -d .svn && svnversion . >&/dev/null; then \ |
| 172 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) "-DREVISION=`svnversion .`" -c version.c; \ |
| 173 | else \ |
| 174 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) $(VER) -c version.c; \ |
| 175 | fi |
| 176 | !end |
| 177 | !specialobj gtk version |
| 178 | # For OS X, this is made more fiddly by the fact that we don't have |
| 179 | # md5sum readily available. We do, however, have `md5 -r' which |
| 180 | # generates _nearly_ the same output, but it has no check function. |
| 181 | !begin osx |
| 182 | version.o: FORCE; |
| 183 | FORCE: |
| 184 | if test -z "$(VER)" && test -f manifest && (md5 -r `awk '{print $$2}' manifest` | diff -w manifest -); then \ |
| 185 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) `cat version.def` -c version.c; \ |
| 186 | elif test -z "$(VER)" && test -d .svn && svnversion . >&/dev/null; then \ |
| 187 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) "-DREVISION=`svnversion .`" -c version.c; \ |
| 188 | else \ |
| 189 | $(CC) $(COMPAT) $(XFLAGS) $(CFLAGS) $(VER) -c version.c; \ |
| 190 | fi |
| 191 | !end |
| 192 | !specialobj osx version |
| 193 | |
| 194 | # make install for Unix. |
| 195 | !begin gtk |
| 196 | install: |
| 197 | for i in cube net netslide fifteen sixteen twiddle \ |
| 198 | pattern rect solo mines samegame flip guess \ |
| 199 | pegs dominosa untangle blackbox slant lightup \ |
| 200 | map loopy inertia tents bridges; do \ |
| 201 | $(INSTALL_PROGRAM) -m 755 $$i $(DESTDIR)$(gamesdir)/$$i \ |
| 202 | || exit 1; \ |
| 203 | done |
| 204 | !end |