44 Commits

Author SHA1 Message Date
cc7f5503dc Migrate to a CMake-based build system.
This completely removes the old system of mkfiles.pl + Recipe + .R
files that I used to manage the various per-platform makefiles and
other build scripts in this code base. In its place is a
CMakeLists.txt setup, which is still able to compile for Linux,
Windows, MacOS, NestedVM and Emscripten.

The main reason for doing this is because mkfiles.pl was a horrible
pile of unmaintainable cruft. It was hard to keep up to date (e.g.
didn't reliably support the latest Visual Studio project files); it
was so specific to me that nobody else could maintain it (or was even
interested in trying, and who can blame them?), and it wasn't even
easy to _use_ if you weren't me. And it didn't even produce very good
makefiles.

In fact I've been wanting to hurl mkfiles.pl in the bin for years, but
was blocked by CMake not quite being able to support my clang-cl based
system for cross-compiling for Windows on Linux. But CMake 3.20 was
released this month and fixes the last bug in that area (it had to do
with preprocessing of .rc files), so now I'm unblocked!

CMake is not perfect, but it's better at mkfiles.pl's job than
mkfiles.pl was, and it has the great advantage that lots of other
people already know about it.

Other advantages of the CMake system:

 - Easier to build with. At least for the big three platforms, it's
   possible to write down a list of build commands that's actually the
   same everywhere ("cmake ." followed by "cmake --build ."). There's
   endless scope for making your end-user cmake commands more fancy
   than that, for various advantages, but very few people _have_ to.

 - Less effort required to add a new puzzle. You just add a puzzle()
   statement to the top-level CMakeLists.txt, instead of needing to
   remember eight separate fiddly things to put in the .R file. (Look
   at the reduction in CHECKLST.txt!)

 - The 'unfinished' subdirectory is now _built_ unconditionally, even
   if the things in it don't go into the 'make install' target. So
   they won't bit-rot in future.

 - Unix build: unified the old icons makefile with the main build, so
   that each puzzle builds without an icon, runs to build its icon,
   then relinks with it.

 - Windows build: far easier to switch back and forth between debug
   and release than with the old makefiles.

 - MacOS build: CMake has its own .dmg generator, which is surely
   better thought out than my ten-line bodge.

 - net reduction in the number of lines of code in the code base. In
   fact, that's still true _even_ if you don't count the deletion of
   mkfiles.pl itself - that script didn't even have the virtue of
   allowing everything else to be done exceptionally concisely.
2021-03-29 19:02:23 +01:00
d9e03f50da Don't initialise GTK in --screenshot mode.
I had this idea today and immediately wondered why I'd never had it
before!

To generate the puzzle screenshots used on the website and as program
icons, we run the GTK front end with the --screenshot option, which
sets up GTK, insists on connecting to an X server (or other display),
draws the state of a puzzle on a Cairo surface, writes that surface
out to a .png file, and exits.

But there's no reason we actually need the GTK setup during that
process, especially because the surface we do the drawing on is our
_own_ surface, not even one provided to us by GTK. We could just set
up a Cairo surface by itself, draw on it, and save it to a file.
Calling gtk_init is not only pointless, but actively inconvenient,
because it means the build script depends on having an X server
available for the sole purpose of making gtk_init not complain.

So now I've simplified things, by adding a 'headless' flag in
new_window and the frontend structure, which suppresses all uses of
actual GTK, leaving only the Cairo surface setup and enough supporting
stuff (like colours) to generate the puzzle image. One awkward build
dependency removed.

This means that --screenshot no longer works in GTK 2, which I don't
care about, because it only needs to run on _one_ platform.
2018-11-23 23:44:17 +00:00
5a697b3df9 Parallelise the build script.
Using the new feature I added to bob where it defines the variable
'nproc' to give you a sensible value to use with make -j.
2018-06-01 07:24:15 +01:00
31384ca9c0 Buildscr: make long parts of the build conditionalisable.
If I want to rebuild just the Javascript puzzles (for example) in
circumstances where I don't expect to need a great many
edit-compile-link cycles, it's easier to get bob to do it for me than
to remember how to set up the development tools on my path. But it
takes ages to run the whole build script if I also have to wait for
the Windows, Mac and Java puzzles to be built, not to mention the
initial Unix build that runs for no purpose other than generating the
icon images.

So now I can run the build with various time-consuming parts
conditioned out, for development purposes. Of course, the default is
still to build absolutely everything.
2018-04-28 12:06:41 +01:00
4f8a4f7d7f Mark the 32-bit Windows build as runnable on XP.
By the same method I do it in PuTTY: manually set the Windows
subsystem version id to an earlier one than the default.
2017-11-29 22:27:09 +00:00
3cf09c2615 Reinstate 32-bit Windows builds of Puzzles.
I've built a set of 32-bit binaries, a 32-bit zip file and a 32-bit
MSI, all delivered into a 'w32' output directory.
2017-11-26 21:11:35 +00:00
a58c1b216b Make the code base clean under -Wwrite-strings.
I've also added that warning option and -Werror to the build script,
so that I'll find out if I break this property in future.
2017-10-01 16:35:40 +01:00
61e7111784 Build test HTML wrapper pages for the Javascript puzzles.
This should make it less annoying for me to do local testing of the JS
output of a build, before I push a change. There's a new
build.out/jstest directory containing .html files suitable for loading
in a local browser, which refer to the JS files via an appropriate
relative path to the existing build.out/js directory.
2017-09-20 18:03:44 +01:00
9d89550a75 Switch the Windows builds over to clang-cl.
This also switches them to being 64-bit, which I think is
probably acceptable in this modern age, especially for such
a non-essential piece of software. If anyone complains I can
always reinstate a parallel 32-bit build.

To support the switch to 64-bit, this commit also changes the default
install directory in the MSI to 'Program Files' rather than 'Program
Files (x86)'.
2017-08-24 20:07:20 +01:00
85a091ed62 Discontinue the Inno Setup Puzzles installer.
I'm getting rid of these installers in general, and also I'm about to
switch the Windows builds over to my new-look non-Windows non-Wine
system, which can't run the Inno Setup builder anyway.
2017-08-24 19:40:50 +01:00
7bdfda8409 Switch to using Halibut's new direct .CHM generation.
This allows me to remove HTML Help Workshop completely from my build
dependencies, and good riddance!
2017-05-13 20:20:23 +01:00
cce13ed712 Switch chiark URLs to https. 2017-05-07 16:25:56 +01:00
9d15092e7f Update build script for Inno Setup 5.5.9.
Between 5.5.6 and 5.5.9 the default output file name changed. To
defend against that potentially happening again, I'm now explicitly
specifying the output file name in the .iss source file (or rather, in
winiss.pl, which constructs it).
2016-04-09 11:44:03 +01:00
5986a46400 Add a .htaccess redirection for the new .msi file.
Ahem. Left this out of yesterday's commit.
2016-03-11 19:25:11 +00:00
fc6cc8fb2b Use WiX to generate an MSI-based Puzzles installer.
I've reused most of the install script I wrote for PuTTY recently,
minus the selectable-features dialog, and plus some preliminary Mason
templating to automatically build the right set of puzzle binaries
into the installer.

Stable GUIDs are autogenerated by the same technique I use in PuTTY's
Visual Studio project file generation: hash a fixed pile of randomly
generated bits (that is, randomly generated _once_ and used forever)
with each filename or other identifier and use those as your random
number source.
2016-03-10 18:37:24 +00:00
de91c4eac7 Update Buildscr to use the new 'with' mechanism. 2016-03-01 18:42:49 +00:00
0fa7baed10 Code-sign the Windows puzzle binaries and installer.
Where facilities exist, that is. Like the approach I took with PuTTY
yesterday, Buildscr will now run a code-signing script over the binary
if you specify one in the bob config, and otherwise should fall back
to just leaving that step out.
2015-12-12 09:17:33 +00:00
2acd8baae8 Convert Buildscr to use the new "do/win" mechanism. 2015-11-17 18:47:29 +00:00
603409d092 Couple of fixes to the new web-page mechanism.
I missed some spaces in the autogenerated <span>s, and I generated the
web page components including unfinished puzzles by mistake.
2015-01-13 20:30:40 +00:00
7cf7e37d65 Script to autogenerate pieces of the web page.
This should simplify the process of adding a new puzzle, by automating
the part where I have to manually edit index.html separately from the
main build step.
2015-01-13 20:04:18 +00:00
70b26db85a Add OS X metadata to make Puzzles.app searchable in Spotlight.
Thanks to Stephen Norman for most of the work, particularly working
out what all the metadata had to be in the first place. This patch is
mostly his work, and all I've done is fiddle with the plumbing that
gets the right version number into the right places.
2015-01-09 19:05:25 +00:00
64ceaf03b3 Remove the MD5-based manifest file system.
A long time ago, it seemed like a good idea to arrange that binaries
of my puzzles would automatically cease to identify themselves as a
particular upstream version number if any changes were made to the
source code, so that if someone made a local tweak and distributed the
result then I wouldn't get blamed for the results. Since then I've
decided the whole idea is more trouble than it's worth, so I'm
retiring it completely.

[originally from svn r10264]
2014-09-24 10:33:22 +00:00
2ebbdbf2a5 Remove dependencies on Subversion.
I'm going through all my projects and reworking them to avoid
depending on the monotonic integer-valued source control revision
identifier provided by Subversion, so I can migrate everything to git
without my builds and versioning breaking.

Puzzles's version number is now of the form YYYYMMDD.vvvvvv, where
vvvvvv is some string of source control information (currently still
the SVN-style "rNNNNN", but free to change in future). The date
provides monotonicity between my official automated builds, and the
second component is the one I'll be most interested in when people
send bug reports.

[originally from svn r10263]
2014-09-24 10:33:21 +00:00
fd392c8e74 Reinstate the Mac OS build step.
Now I've got a working Mac, I can build it again.

[originally from svn r10167]
2014-03-30 15:19:30 +00:00
b375232d7d Support building via autoconf and automake. mkfiles.pl now outputs a
Makefile.am, and there's a new mkauto.sh which builds a corresponding
configure script.

The old makefile has been renamed from 'Makefile' to 'Makefile.gtk',
indicating that the intended new _default_ approach is to use the
autoconf world. Makefile.gtk is provided as an emergency fallback in
case anything fails with the new stuff that used to work with it.

The new configure script does not support the same $(BINPREFIX) system
as the old Makefile did. However, as I understand it, it should be
possible to configure using --program-prefix="sgt-" (for example) and
then the binaries should all be renamed appropriately at install time.

The Makefile.am is quite painful. The Puzzles codebase relies heavily
on compiling individual object files multiple times with different the
cpp flags per build deliverable (program or library) and not per
source file. Solution: anything built with non-default compile options
has to go in its own little library. But that doesn't work either in
the general case, because as soon as you have more than one such
library linked into an application, Unix ld semantics bite you if the
objects in the libraries both refer to each other. So I ended up
building all those little libraries but not _using_ them - instead the
link commands for the programs needing those objects refer to the
objects directly, under the silly names that automake gives them.
(That's less fragile than it sounds, because it does _document_ the
names of the intermediate object files. But still, yuck.)

[originally from svn r9886]
2013-06-30 08:58:45 +00:00
7ae22afaf3 Adjust the build script to turn the NestedVM build into a delegation,
so that not every machine on which I want to run the full Puzzles
build will have to have a local NestedVM installation.

[originally from svn r9882]
2013-06-27 21:17:04 +00:00
5dda5cf1d0 Rename wingames.lst to gamedesc.txt, and add a couple of extra fields
to it giving each game's "internal" name (as seen in the source file,
.R etc) and also a brief description of the game. The idea of the
latter is that it should be usable as a comment field in .desktop
files and similar.

[originally from svn r9858]
2013-06-08 16:29:15 +00:00
49fba922ea New front end! To complement the webification of my puzzles via Java
applets, here's an alternative webification in Javascript, using
Emscripten in asm.js mode (so that as browsers incorporate asm.js
optimisation, the game generation should run really fast).

[originally from svn r9781]
2013-03-30 20:16:21 +00:00
e2c84a5fd2 Introduce a mechanism in this source tree for building the container
web pages for the Java applets. Previously, those have all been
maintained by hand in my website's svn area, which is a bit silly. Now
we have a file per puzzle in the 'html' subdirectory which contains
the puzzle's name, one or two attributes, and the instructions snippet
to go below the puzzle applet; and then there's a Perl script that
builds all the real web pages out of that by adding in the parts
common across all files: the header, footer, and middle fragment with
the <applet> tag and resizing bits and pieces.

One piece _not_ checked in here is the footer text specific to my
hosting at chiark, which I think does still belong in the www area. So
Buildscr doesn't actually build the web pages; it just delivers the
bits and pieces by which my nightly snapshot script will be able to
run the program that _does_ build them, passing that footer as an
extra argument.

[originally from svn r9780]
2013-03-30 20:04:10 +00:00
88accd3ea5 Comment the Mac build out of Buildscr, since I no longer have a
working Mac and hence can't build it any more.

[originally from svn r9442]
2012-04-03 12:49:22 +00:00
f9eca22196 Introduce a mechanism in Buildscr for optionally building some of the
(more finished) puzzles in 'unfinished', as Java applets only. (The
rationale being: puzzles in 'unfinished' can be played locally by
people who go to the extra effort of downloading and building the
source, but to play them in Java is particularly inconvenient unless I
build the Java version myself. I just won't link it from the front
page.)

[originally from svn r9073]
2011-01-06 18:37:05 +00:00
e794621861 Add execute permission to the .exe files inside the zip file.
[originally from svn r8634]
2009-08-28 17:43:44 +00:00
8104b2c35d Add a build version designation to the NestedVM build, after Jacob
pointed out that Help > About in the Java applets on my website
currently reports "Unidentified build".

[originally from svn r8105]
2008-07-05 13:31:59 +00:00
c115e9f5c8 Build the Java versions of the puzzles automatically as part of the
build process. Also update the new-puzzle checklist to make sure I
set up and test the Java applet for any new game I add.

[originally from svn r8096]
2008-06-27 17:28:32 +00:00
d2369aab62 Hmm. Telling xvfb to default to a TrueColor visual did help, in that
it got rid of the bogus backgrounds on all the text; but on the
other hand it mysteriously caused all the images to become black and
white! Serves me right for testing with Bridges which was B&W to
start with. Instead, we'll just tell xvfb to use a 24-bit display
and let it sort out the visuals for itself; that seems to work better.

[originally from svn r7932]
2008-03-20 09:18:26 +00:00
202e023f59 I _think_, after some fairly random experimentation, that this ought
to fix the weird blacked-out text in the xvfb-built screenshots.

[originally from svn r7931]
2008-03-20 00:19:27 +00:00
6da8849110 I still haven't managed to get the WinCE port building via bob, but
I should at least check in what I've got.

[originally from svn r7542]
2007-05-06 09:54:34 +00:00
8b1b6bc9a3 Oops. Having built the installer, we need a redirect for it in
.htaccess.

[originally from svn r7324]
2007-02-25 10:10:51 +00:00
b05cb1eaf3 Build an installer for Puzzles.
[originally from svn r7319]
2007-02-24 19:33:38 +00:00
da4606ddd5 Now we have the new `module' command, use it.
[originally from svn r7224]
2007-02-05 12:41:21 +00:00
ac72b6e148 Reinstate the icons in the Windows binaries.
[originally from svn r7217]
2007-02-04 14:35:23 +00:00
19a298baf4 Forgot to tag the Mac and Windows binaries with the revision number.
[originally from svn r7215]
2007-02-04 14:03:52 +00:00
8df3cdf7d6 Looking for puzzles*.tar.gz in the right directory is liable to make
the .htaccess build work better :-)

[originally from svn r7214]
2007-02-04 13:44:38 +00:00
dd1cee7537 Build script for Puzzles using bob. I've also added a piece of extra
infrastructure to the mkfiles.pl framework for the convenience of
the build script: it generates `wingames.lst', a list of the Windows
binaries which are ship-worthy games as opposed to nullgame or
command-line auxiliary programs.

[originally from svn r7206]
2007-02-04 11:44:10 +00:00