Meson depends on ninja, so it behooves us to look into portability of ninja if we're considering migrating to meson as the build system. I tried it out quickly on some ancient platforms, and here's what I found.
1. The documentation is kinda sucky, eg it fails to explain how to run ninja's own regression tests. I ended up with this reverse-engineered recipe: git clone git://github.com/ninja-build/ninja.git cd ninja git checkout release ./configure.py --bootstrap ./ninja ninja_test ./ninja_test sudo cp ninja /usr/local/bin # or location of choice We'll probably have to include that in our own documentation. 2. You need Python to build it this way. There is also a process for bootstrapping using cmake, but that doesn't seem like a more attractive dependency for old platforms. Fortunately for my purposes here, it seems to work with fairly old Python --- I built successfully with python 2.6.2, though not with 2.4.1. 3. You also need a C++ compiler, but really old ones will work. I did not see any problems with g++ as old as 4.0.1, other than some compiler warnings about non-virtual destructors. 4. It built and passed self-test on macOS Leopard (10.5.8), which is pretty old ... but not old enough for prairiedog, which is stuck on 10.4.x. There, the build fails miserably for lack of <spawn.h>. It looks like that was added to POSIX in 2001, so one could have wished for it in a 2005-vintage OS; but nope, Apple took another couple of years to get around to that. I'm not even going to bother trying on gaur's pre-turn-of-the-century OS. 5. It built and passed self-test on Solaris 11, but failed self-test on Solaris 10. 6. While configure.py thinks it knows what to do on AIX, it fails on AIX 7.1 and 7.2: Traceback (most recent call last): File "./configure.py", line 544, in <module> if platform.is_aix() and not platform.is_os400_pase(): File "./configure.py", line 103, in is_os400_pase return self._platform == 'os400' or os.uname().sysname.startswith('OS400') AttributeError: 'tuple' object has no attribute 'sysname' Possibly the ninja guys would take a patch for that (or maybe this is a you-need-python-3 case?). I do see /usr/include/spawn.h on that platform, so there's room to hope it'd work. So it's pretty clear that if we go this way, it'll be the end of the line for support for some very old OS versions. I can't, however, argue with the idea that it's reasonable to require POSIX 2001 support now. Based on these results, I doubt that ninja will give us trouble on any platform that isn't old enough to get its drivers license. regards, tom lane