aboutsummaryrefslogtreecommitdiff
path: root/configure.ac (follow)
Commit message (Collapse)AuthorAge
* Migrate to a CMake-based build system.Simon Tatham2021-03-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* GTK 3 port: arrange configure.ac support for GTK 2/3 detection.Simon Tatham2015-10-03
| | | | | GTK 3 is the default, falling back to GTK 2 if 3 isn't available; you can also say --with-gtk=2 to force GTK 2.
* Use the compile flag -std=c89 in place of -ansi.Simon Tatham2014-11-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is probably slightly nicer anyway, in that it specifies exactly _which_ ANSI standard I'm talking about; but the main reason for making the change is that it means I can now build the Unix puzzles with clang. It's not that clang doesn't _support_ -ansi; it accepts it just fine on any command line that's actually doing some compiling. But on a link-only command line, i.e. with only object files as input and no sources, clang emits the annoying warning "argument unused during compilation: '-ansi", and if you have -Werror as well then that warning becomes an error. You'd think there would be some makefile flags variable I could nonetheless put -ansi in, but apparently not - automake passes CFLAGS to both compiles and to link-only commands. And you'd also think that surely I should be able to work around this by having my configure.ac do a test link and stop trying to use that option if it didn't work - especially since configure.ac already tests a bunch of compile options to make sure they don't object to system header files, after the time I found that a GTK header was incompatible with my usual -Werror. But in fact, if I change that AC_COMPILE_IFELSE to an AC_LINK_IFELSE, autoconf generates a single compile-and-link command line, and hence does not expose the problem using -ansi on link-only command lines. Fortunately, -std=c89 does not generate this same warning from clang. I don't know why not - surely the two options are more or less equivalent - but it makes my build work again for the moment.
* Remove dependencies on Subversion.Simon Tatham2014-09-24
| | | | | | | | | | | | | | | | 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]
* Add a check in the new configure script to enable lots of gcc warningSimon Tatham2013-06-30
| | | | | | | | | | | flags if gcc is in use - but _only_ if they don't lead to problems in a test compile which includes all the system and GTK headers I'm going to want. Ubuntu 13.04 includes a version of Pango which breaks at -Werror -pedantic, so I can't unconditionally enable all the warning flags I might want without breaking the build in ways beyond my control. [originally from svn r9888]
* Support building via autoconf and automake. mkfiles.pl now outputs aSimon Tatham2013-06-30
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]