LWN: Comments on "Rejuvenating Autoconf" https://lwn.net/Articles/834682/ This is a special feed containing comments posted to the individual LWN article titled "Rejuvenating Autoconf". en-us Thu, 16 Oct 2025 09:25:39 +0000 Thu, 16 Oct 2025 09:25:39 +0000 https://www.rssboard.org/rss-specification lwn@lwn.net Rejuvenating Autoconf https://lwn.net/Articles/857048/ https://lwn.net/Articles/857048/ IDog1993 <div class="FormattedComment"> Everything ages and every cathedral crumbles into a bazaar eventually. So thanks to those who support tools such as autoconf that help keep bazaar open, even if it is with sticky tape and bits of string. Developers tend to work with the latest and greatest gizmos and so do not appreciate the difficulty of others who are running just to keep up. Almost every piece of hardware and software I have owned since the late 1980&#x27;s has died of terminal bit-rot. Now my cloud hosts are entering end-of-life and similarly dying of bit-rot and I am porting again. So the safest strategy seems to be to be a continual platform nomad and grind one&#x27;s software into a hardened portable core. Which means using autoconf but continually refactoring to eliminate the need for working feature tests.<br> <p> Ask (1) would be for all the conftest source code to be available as separate standalone source files, so they are reusable - backporting a standalone minimal working example of a test for a working or not-working feature into an M4 macro and testing working and not-working configurations across platforms is a chore - these little conftests should be passed around, maybe even as a separate package - a sort of sub-autoconf-archive. They should naturally pop out of regression testing - they would be re-usable in test cases and could be used for probing configurations before starting on coding a packaging. I&#x27;ve been working today on testing for a regression in a third-party library and trying to work out the best way of preventing bug testing cruft and work arounds from clogging up the build system and the source code. With shell scripts I have started providing a unconfigured Posix version and an autoconf configurable version - I test for compliance and then choose to use a compliant or configured script - rather than making all scripts configurable - this is to keep the old cruft in a separate box. I haven&#x27;t noticed bugs becoming less common, so testing for them remains a forever problem. Perhaps viewing new features as bugs too would help.<br> <p> Ask (2) would be for a clearer separation in the documentation of (a) bug tests (or &quot;works&quot; tests), from (b) user choices, from (c) probing system configuration. And more complete examples of how a bug test at configuration leads through to beautiful source code and build configuration with all the cruft hidden in a separate box.<br> <p> Ask (3) would be more supporting tools to test for portability and compliance - the autoconf documentation on portability is very good but at every turn there is the temptation to slip into using the --new-magic option which just needs a tiny, tiny upgrade - go on you know it will be good for you. Tests for new so called features are an excellent way of spotting a, possibly unnecessary, upgrade dependency. And GNU tie-in is also a portability issue just like any other - copy-left is fine, but not at the expense of freedom from GNU too.<br> <p> Ask (4) for autoconf would be the ability for all autoconf files to be out of the project root folder (except perhaps one file with GNU in the name) - with packages now shipping with multiple build systems all hogging the project root folder there are more build system files than sources lying around.<br> <p> </div> Sun, 23 May 2021 22:26:55 +0000 2.70 release and followup analysis https://lwn.net/Articles/843479/ https://lwn.net/Articles/843479/ sumanah <a href="https://lists.gnu.org/archive/html/autoconf/2020-12/msg00002.html">Autoconf 2.70 came out in December 2020</a> and <a href="https://www.owlfolio.org/development/autoconf-swot/">Zack Weinberg has written up an analysis to help guide future investment in and development of the GNU Autotools</a>. Conversation has ensued <a href="https://lists.gnu.org/archive/html/autoconf/2021-01/threads.html#00049">on the Autoconf mailing list</a>. Thu, 21 Jan 2021 20:55:49 +0000 Rejuvenating Autoconf https://lwn.net/Articles/842405/ https://lwn.net/Articles/842405/ immibis <div class="FormattedComment"> a.k.a. XKCD 927<br> </div> Tue, 12 Jan 2021 20:13:46 +0000 Rejuvenating Autoconf https://lwn.net/Articles/841557/ https://lwn.net/Articles/841557/ wtarreau <div class="FormattedComment"> No it&#x27;s not an error to respect end users&#x27; setups, and is actually a sign showing a project that cares about being smooth to use.<br> <p> I used to hate cmake when I discovered it in early projects because it used to be associated with systematic failures. Cmake improved, and projects learned to use it correctly, and over time I started to notice that the usual &quot;mkdir build &amp;&amp; cd build &amp;&amp; cmake .. &amp;&amp; make -j$(nproc)&quot; worked almost every time. One old grief was on cross-compilation but nowadays it seems to work smoothly (though it&#x27;s often hard to remember the variable names to set the target). Initially I used to have to upgrade cmake by hand everytime I needed to build a project, but nowadays I don&#x27;t know what version is installed here but it works. *This* is part of the project&#x27;s success: developers just have to be reasonable with the minimum version they expect, and for users it always works.<br> <p> So kudos to the developers for keeping that great a care for backwards compatibility. This is essential for a project&#x27;s success as it&#x27;s the only way to avoid in-field fragmentation (hint: anyone still has python2 installed to run esptool.py, luatool.py or whatever script not compatible with python3?).<br> <p> </div> Sat, 02 Jan 2021 06:19:59 +0000 Rejuvenating Autoconf https://lwn.net/Articles/839989/ https://lwn.net/Articles/839989/ oldtomas <div class="FormattedComment"> Funny. 3.1 is about the last (and probably only) Windows I had some intimate contact with (writing C).<br> <p> This was the version where the provided editor (yah, it was called Notepad!) couldn&#x27;t load windows.h due to some 16 bit limitation.<br> <p> And yay, Hungarian Notation.<br> <p> I think that&#x27;s why I cringe these days when someone calls his shell script &quot;foo.sh&quot;. Post traumatical thingmajig. Or something.<br> </div> Sun, 13 Dec 2020 11:12:37 +0000 Thank you, Autotools! https://lwn.net/Articles/839818/ https://lwn.net/Articles/839818/ oldtomas <div class="FormattedComment"> And thank you, Sumana Harihareswara.<br> <p> Contrary to many commenters around here who seem in dire need to vent some unspecified frustration, many of my projects are long-term.<br> <p> As an example, one customer has some GUI program (Gtk2, started roughly twenty years ago). It still runs at the customer&#x27;s premises. Every five years or so they come back with some enhancement requests.<br> <p> Its build system, Autotools, led me through stand-alone compile to Debian package build, to Debian cross-build for foreign architectures. It never let me down. It Just Friggin&#x27; Works (TM).<br> <p> Yes, it took some investment to set up, but from then on it was basically hassle free.<br> <p> Sorry, you CMake, SCons, I-Build-It and diverse Harbor-Freight-Build system folks, but I just don&#x27;t believe you that your favourite build system would have served my customer and me so reliably and noiselessly.<br> <p> My next project? Autotools. Hands down. <br> <p> Some of you may call that Frankenstein&#x27;s monster. If that be so, I ♥♥♥ you, Frankie.<br> </div> Fri, 11 Dec 2020 10:00:27 +0000 Rejuvenating Autoconf https://lwn.net/Articles/839424/ https://lwn.net/Articles/839424/ sandsmark <div class="FormattedComment"> <font class="QuotedText">&gt; I&#x27;ve been mulling over creating a project that takes a compile_commands.json as input and generates a meson.build from it. The idea would be to make migrations to meson at least partially automated. It might even be possible to generate multiple different compile_commands.json with build options and generate a meson.build with those same options.</font><br> <p> In my experience, tools like that tend to lead to more work in the end with having to clean up everything. It&#x27;s usually better to at least start those kinds of transformations from the simplest representation (i. e. so you don&#x27;t have to manually pattern match a bunch of compile options etc.), and even then I end up realizing I should have just started from scratch at the endi.<br> <p> Even just generating a list of source files to build would lose any kind of grouping or similar (and miss files that are built conditionally).<br> <p> And FWIW, because KDE has replaced the build system a couple of times there are some scripts that are/were used to create a starting point for porting from e. g. automake to cmake, here&#x27;s one of them (not sure if it is useful for doing the same conversion to meson for non-KDE projects though): <a href="https://invent.kde.org/sdk/kde-dev-scripts/-/blob/master/cmake-utils/scripts/am2cmake">https://invent.kde.org/sdk/kde-dev-scripts/-/blob/master/...</a><br> </div> Wed, 09 Dec 2020 09:31:29 +0000 Rejuvenating Autoconf https://lwn.net/Articles/838014/ https://lwn.net/Articles/838014/ nix <div class="FormattedComment"> Yeah, we&#x27;re not talking modern Windows though. I&#x27;m fairly sure back in the days when I did stuff on Windows 3.1 that the whole import library mess more or less precluded intra-DLL dependencies. (But then 16-bit Windows DLLs were *weird* things.)<br> </div> Sat, 21 Nov 2020 13:08:05 +0000 Rejuvenating Autoconf https://lwn.net/Articles/837987/ https://lwn.net/Articles/837987/ Cyberax <div class="FormattedComment"> <font class="QuotedText">&gt; .la files are for lesser platforms like Windows and AIX which don&#x27;t allow shared libraries to depend on other shared libraries</font><br> Windows shared libraries most definitely can depend on other libraries. Although circular dependencies are not allowed.<br> </div> Fri, 20 Nov 2020 22:42:06 +0000 Rejuvenating Autoconf https://lwn.net/Articles/837982/ https://lwn.net/Articles/837982/ nix <div class="FormattedComment"> .la files are for lesser platforms like Windows and AIX which don&#x27;t allow shared libraries to depend on other shared libraries, and also for static libraries: they make .a files into something that, like shared libraries, you only need to specify -l for once, when you build it.<br> <p> These days the lesser platforms are mostly extinct and hardly anyone builds static libs any more unless absolutely unavoidable, so .la files are of much less use than in days gone by.<br> </div> Fri, 20 Nov 2020 21:55:45 +0000 Rejuvenating Autoconf https://lwn.net/Articles/837980/ https://lwn.net/Articles/837980/ nix <div class="FormattedComment"> That hasn&#x27;t been true for years. You&#x27;ve needed a C++98 compiler to compile all GCCs since, IIRC, 4.8.<br> </div> Fri, 20 Nov 2020 21:51:11 +0000 Rejuvenating Autoconf https://lwn.net/Articles/836006/ https://lwn.net/Articles/836006/ anton Gforth is not a commercial project, either. That's why it supports portability beyond commercial considerations (e.g., 8 architectures were successfully tested on the latest release); by contrast, the most widely ported current commercial Forth implementation supports only IA-32, AMD64 (in development), ARM (32-bit) on mainstream OSs, and some embedded systems. <p>Considering Ubuntu 12.04 (the then-current LTS release) obsolete in December 2012 is a pretty strong sign of disdain for maintaining compatibility with old stuff, actually even with then-current stuff. <p>My "unusual browser configuration" is to heed the web page's requests for fonts and colours. The Meson developers invested a bit of their "minimal" staffing to ask for a tiny font and for light-gray-on-dark-gray colours. After working around that, the content is readable, but not worth reading. Wed, 04 Nov 2020 11:53:31 +0000 Rejuvenating Autoconf https://lwn.net/Articles/836003/ https://lwn.net/Articles/836003/ anton There is nothing language-specific about make or the basic functionality of autoconf. Autoconf comes with macros specific for shell, make, and C and C++ libraries, but you can also address other portability problems in this framework, e.g., whether m4 understands the "-s" flag, or how to skip 16 bytes of code space in assembly language (Gforth does both of this). Wed, 04 Nov 2020 11:23:19 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835968/ https://lwn.net/Articles/835968/ marcH <div class="FormattedComment"> In an ideal world yes it would be great to have a single polyglot build system that handles all programming languages. Of course it would not solve all linguistic problems, see GC discussion thread elsewhere on this page, but at least you would not have learn a new build system for each language.<br> <p> In the real world you tend to only get build systems that &quot;speak&quot; a very small number of languages well... if any well at all. That&#x27;s why most new languages come with some specialized build system. Admittedly sad but it lets them focus on providing more for their particular language. Also lets some of them not get distracted by &quot;translation unit&quot; conceptual limitations from the 70s or the utterly inconsistent mess of C toolchains.<br> <p> Maybe some modular/plugin based architecture could do but good luck getting manpower for something like this - assuming it&#x27;s even possible.<br> <p> <font class="QuotedText">&gt; Anyway, this has nothing to do with autoconf,</font><br> <p> Apologies for being off-topic, I didn&#x27;t realize other build systems had nothing to do with autoconf.<br> </div> Tue, 03 Nov 2020 20:24:37 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835965/ https://lwn.net/Articles/835965/ marcH <div class="FormattedComment"> <font class="QuotedText">&gt; I notice in many places, including your posting and the Meson design rationale a disdain for maintaining compatibility with old stuff.</font><br> <p> I don&#x27;t see any disdain at <a href="https://mesonbuild.com/Design-rationale.html#5-must-not-add-complexity-due-to-obsolete-platforms">https://mesonbuild.com/Design-rationale.html#5-must-not-a...</a> , just a trade-off because meson is not a well-funded, commercial project. Any other reference?<br> <p> I love old stuff when bugs can be fixed cleanly where they are. My disdain is only for ugly workarounds - typically required by commercial and/or closed-source systems - unmaintenable wrapper and too many layers of indirection.<br> <p> <font class="QuotedText">&gt; Interestingly, the first look at the Meson design rationale page gave the right impression; I had to adjust fonts and colours before I found it visually readable. Usually such pages are not worth reading, and that page was no exception.</font><br> <p> There seems to be fair number of projects who found meson documentation readable enough: <a href="https://news.ycombinator.com/item?id=24881897">https://news.ycombinator.com/item?id=24881897</a><br> <p> The meson project is minimally &quot;staffed&quot; (which goes back to my initial comment) and last time I checked it was unsurprisingly not overstaffed with talented documentation experts. However it is very friendly to &quot;drive-by&quot; contributions so I bet they&#x27;ll be delighted to accept fixes for your unusual browser configuration. <br> <p> PS: I&#x27;ve met a surprising number of long-time open source hackers (even some famous ones) who have never used the &quot;info&quot; command. FWIW I do use it all the time.<br> <p> </div> Tue, 03 Nov 2020 20:09:28 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835958/ https://lwn.net/Articles/835958/ anton <blockquote>No thanks for palliative care of a project that has cost gazillions of developers a lot of their time and some of their sanity</blockquote> Autoconf has saved me a lot of time. The alternative would have been to manually edit Makefile, config.h etc. for every platform we build on. <blockquote> the problems solved by autotools have mostly disappeared </blockquote> The problems are still there. If you don't want your project to be portable between platforms, nobody is forcing you to use autoconf. Gforth has portability as one of its goals, and thanks to autoconf previous releases have been portable to a wide range of OSs and CPU architectures, and we certainly want to stay portable (although admittedly we can no longer test on as many platforms as we used to). <p>I notice in many places, including your posting and the Meson design rationale a disdain for maintaining compatibility with old stuff. If everybody followed this principle, the software you use now would soon stop working; ok, so you get the new version (if there is one), but that would of course work differently than you are used to, so you have to change everything that you built that relies on it. <p>Interestingly, the first look at the Meson design rationale page gave the right impression; I had to adjust fonts and colours before I found it visually readable. Usually such pages are not worth reading, and that page was no exception. Tue, 03 Nov 2020 18:21:10 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835957/ https://lwn.net/Articles/835957/ anton <blockquote> With hindsight I think it's become clear that designing a language _without_ designing a companion build system was a mistake. </blockquote> Given that many projects use multiple languages, designing build systems for a language is a mistake. E.g., automake is (or at least was, when we tried) useless for Gforth, because it does (did?) not offer anything for the non-C parts of Gforth, and was not worth the trouble for the C parts. <p>Anyway, this has nothing to do with autoconf, which is very useful for dealing with portability problems. It's great that it is being maintained. Tue, 03 Nov 2020 17:20:43 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835909/ https://lwn.net/Articles/835909/ massimiliano <p> Hi!<br/>You are correct, but with a nitpick :-) </p> <p> <i> In particular Unity doesn't use Android GC because it needed something to support XBox before Android become a thing and XBox implies CLR. </i> </p> <p> That's not strictly true. </p> <p> Unity picked <a href="https://www.mono-project.com/">Mono</a> as runtime for technical reasons way before the Xbox360 even existed. <br/>They had a contract so that they could use the source and embed it everywhere, it was efficient, it supported popular languages (C#), it was easy to make it support more languages (just compile them into .NET CIL), and it was very portable so they could port <i>their</i> runtime (the whole Unity game engine) just about anywhere, which is what they did. </p> <p> This technical choice predated everything else: in the very beginning Unity was Mac-only, even the Windows port happened later. And with hindsight, it has been a good choice, given the success they had. </p> <p> About "GC in GC" nightmares, you forgot another realistic scenario: take a Unity game (Mono GC) with a Golang plugin (Go GC) and run it inside the browser using the WASM target.<br/> Now you do not have three GCs "side by side", you have two side by side (Mono and Golang) running in a memory segment <i>inside</i> another GC (Javascript)! </p> <p> Disclaimer: I have been working for the Mono project for almost six years, and after that for Unity for one year, among other things porting the Mono build toolchain to target the Xbox360, so I know all the above first hand. </p> Tue, 03 Nov 2020 08:04:56 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835851/ https://lwn.net/Articles/835851/ marcH <div class="FormattedComment"> The sunk cost fallacy is by definition subconscious and it&#x27;s a natural tendency we all have. This is very far from attributing a very specific, made-up point to someone specific.<br> <p> <font class="QuotedText">&gt; The sunk cost fallacy is when you choose not to switch to a cheaper option, because of what you&#x27;ve spend on the more expensive option.</font><br> <p> The sunk cost fallacy is subconsciously give value to something that has none anymore and let that influence you. Influence is not always enough to win an (often collective) decision.<br> <p> Sunk costs are much complicated in software than in say finance because _knowledge_ of an existing system is valuable: it makes knowledgeable workers much more productive which is of course very valuable, especially from the perspective of the experts. But what about the value for the project as a whole? The value of newer build systems is of a completely different sort: they require less expert knowledge and many more people can and do help with their maintenance. Interestingly, this decreases the &quot;market&quot; value of the old experts.<br> <p> <font class="QuotedText">&gt; It seems quite clear here that for many people, the cost of switching is very high, because they will have to (in one form or another) - reimplement a lot of autoconf. This makes maintaining autoconf the cheapest option!</font><br> <p> It&#x27;s pretty obvious that the minute after flipping the switch away from autoconf, a project that just migrated has spent a lot and gained nothing yet. I don&#x27;t think anyone questioned that. Every technological choice is a large investment and its value must be studied _over time_. <br> <p> <p> </div> Mon, 02 Nov 2020 17:01:07 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835780/ https://lwn.net/Articles/835780/ Wol <div class="FormattedComment"> Except you are projecting YOUR values onto OTHER PEOPLE. *Bad* *Idea*.<br> <p> The sunk cost fallacy is when you choose not to switch to a cheaper option, because of what you&#x27;ve spend on the more expensive option. It seems quite clear here that for many people, the cost of switching is very high, because they will have to (in one form or another) - reimplement a lot of autoconf. This makes maintaining autoconf the cheapest option!<br> <p> Cheers,<br> Wol<br> </div> Mon, 02 Nov 2020 10:08:34 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835778/ https://lwn.net/Articles/835778/ marcH <div class="FormattedComment"> I&#x27;m afraid you lost me, sorry. In case that&#x27;s relevant: &quot;sunk cost fallacy&quot; is _my_ perception of autoconf maintenance, has been long before this discussion and I didn&#x27;t mean to attribute it to anyone else.<br> </div> Mon, 02 Nov 2020 09:02:10 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835776/ https://lwn.net/Articles/835776/ marcH <div class="FormattedComment"> Yes, all build systems suck. Today&#x27;s build systems suck only one order of magnitude less. The main difference is: mere mortals can now wrap their head around their limitations, bugs and workarounds.<br> </div> Mon, 02 Nov 2020 03:13:22 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835772/ https://lwn.net/Articles/835772/ ringerc <div class="FormattedComment"> I&#x27;d agree with you if anyone, anywhere, had come up with a build system that wasn&#x27;t awful... because the problem is awful.<br> <p> The simple ones are beautiful until you step outside their design boundaries and want to do something they consider inappropriate. Like link to code that wasn&#x27;t in turn built with the same build system or shipped with some kind of build system manifest file. Oh, the library maintainer should just ship a libfoo.whizzmagic !<br> <p> The ones that don&#x27;t try to pretend the world is simple and can be re-made afresh in their own vision tend to become mires of complexity, multiple outdated ways of doing things, stale documentation, and confusion.<br> <p> Then some, like CMake, seem to manage to find the worst of both worlds, and still be pretty useful.<br> </div> Mon, 02 Nov 2020 01:34:05 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835750/ https://lwn.net/Articles/835750/ jschrod <div class="FormattedComment"> Sorry, but your &quot;sunk cost fallacy&quot; post the comment was about is exactly of your lamented &quot;straw man&quot; kind.<br> <p> Pot, meet kettle.<br> </div> Sun, 01 Nov 2020 02:07:10 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835707/ https://lwn.net/Articles/835707/ Cyberax <div class="FormattedComment"> Hey, I remember using CMake 2.4! And being disappointed about being unable to use 2.6 because it had not been packaged in Debian.<br> <p> Out of curiosity, I dug up that project and tried to build it with the most recent CMake. It actually worked with only a 2-line change! I love this stability.<br> </div> Sat, 31 Oct 2020 01:27:56 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835702/ https://lwn.net/Articles/835702/ mathstuf <div class="FormattedComment"> Yep, that we do. Story time :) . I wrote CMP0053 (new variable expansion code). I was all happy to be able to remove 5000+ lines of code for the old parser that used flex/bison for some strange reason. But, the old code had some silly behaviors we didn&#x27;t want to preserve (e.g., didn&#x27;t error on unknown escape sequences…just passed them on verbatim, unconditionally expanded `@var@` (who knew?), and some other silly things). Luckily the new one was fast enough to run both at the same time some we could warn when the new expansion code would differ in behavior from the old one without too much lost time.<br> <p> The benefit from doing this stuff? CMake users can update CMake without fear that some subtle thing will break when they do so (I mean, it can, but we&#x27;ll fix it if at all possible). Because you know what users with working build systems hate doing above almost anything else? Chasing subtle changes in behavior that breaks their build.<br> <p> If you set your CMake minimum required to a sufficiently high version, it is an *error* to ask for the OLD behavior of any policy up to CMP0072 (introduced in 3.11) today (asking for OLD was convenience, never a supported mechanism to &quot;upgrade&quot; your project as the old behavior is, by definition, deprecated). These policies are effectively &quot;hard deprecated&quot; once your project&#x27;s minimum is above 3.11 with modern CMake versions. You still can say you support, say 3.8, and you&#x27;ll get the old behaviors though. CMake 4 is when any actual deletion would occur though, but I have no timeline for such a thing.<br> </div> Sat, 31 Oct 2020 00:25:04 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835694/ https://lwn.net/Articles/835694/ jonesmz <div class="FormattedComment"> Yikes. You have compat code going back to 2.6.0? That seems like a huge amount of human effort for questionable gain.<br> <p> Do you have plans to eventually move that compat level forward and drop the 2.6.0 exclusive code paths?<br> </div> Fri, 30 Oct 2020 22:04:49 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835693/ https://lwn.net/Articles/835693/ jonesmz <div class="FormattedComment"> That seems to speak more to how horrible autotools is, than to how complex the GCC build system is.<br> </div> Fri, 30 Oct 2020 21:52:44 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835687/ https://lwn.net/Articles/835687/ kpfleming <div class="FormattedComment"> (putting on my Bloomberg hat)<br> <p> Our involvement in this project came about via Python, actually. We&#x27;re big users of Python, it&#x27;s one of our three primary development languages (alongside C++ and JavaScript), and we employ and/or support quite a few developers in the Python community.<br> <p> The team who wanted to do the work on Autoconf reached out to us specifically because we are big users of Python and CPython relies on autoconf for its portable configuration and build system, so it made sense that we might be interested in helping to improve it. We were, we agreed to provide some funding alongside others, and the result is what you see here.<br> <p> While we do not have a formal program of funding open source development efforts, we are sponsors of a number of significant open source communities (including the Apache Software Foundation, Python Software Foundation, Outreachy, and more) and we do as much as we can to give back to the projects that produce the software we use.<br> </div> Fri, 30 Oct 2020 21:06:51 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835675/ https://lwn.net/Articles/835675/ azz As someone who uses autoconf and the other autotools dozens of times a day for a wide variety of projects (including some fairly hairy crossbuilding setups), I'd just like to say thanks for doing this work &mdash; I've always been very happy with the autotools, both as a developer and as a packger, and it's nice to see people making them even better. Fri, 30 Oct 2020 17:24:55 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835612/ https://lwn.net/Articles/835612/ kmweber <div class="FormattedComment"> So I&#x27;m curious--does Bloomberg have an ongoing program of funding free software development, or did they have an interest in autoconf (or the GNU build system and toolchain) specifically?<br> </div> Thu, 29 Oct 2020 23:07:33 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835602/ https://lwn.net/Articles/835602/ sumanah <div class="FormattedComment"> <font class="QuotedText">&gt; I&#x27;m happy to see this work being done, and with Zack being involved I know the quality will be good.</font><br> <p> Thank you. And I know what you mean! It&#x27;s such a pleasure to work with Zack Weinberg on this; I am always glad to hear someone else also recognizing the consistent quality of his work.<br> </div> Thu, 29 Oct 2020 20:09:57 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835593/ https://lwn.net/Articles/835593/ mathstuf <div class="FormattedComment"> My favorite libtool tidbit is that I always have to nuke `*.la` files from install prefixes (distros do it to) because they tend to just…not work somehow. I know they break relocation since they bake the install prefix into the contents of files. What they&#x27;re supposed to fix that makes them also somehow not important if they&#x27;re missing is beyond me (I haven&#x27;t investigated much other than knowing deletion is a viable solution).<br> </div> Thu, 29 Oct 2020 16:09:29 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835590/ https://lwn.net/Articles/835590/ ecree <div class="FormattedComment"> <font class="QuotedText">&gt; Libtool could be deprecated, and have its features refactored into the faster and more integrated functionality in Automake.</font><br> <p> Please don&#x27;t. When I needed to create a shared library (libatg), I was able to figure out how to get libtool to do what I needed; whereas automake still gives me the screaming heebie-jeebies. All my projects build from a hand-written Makefile, and I&#x27;d like to retain that innocence.<br> </div> Thu, 29 Oct 2020 15:38:48 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835589/ https://lwn.net/Articles/835589/ nathan <div class="FormattedComment"> I&#x27;m happy to see this work being done, and with Zack being involved I know the quality will be good.<br> <p> I use autoconf because I know how to drive it and it gets the job done. configurery goop is not the most exciting piece of development, so I&#x27;m not inclined to invest the time to learn some other DSL. Getting a nice explicit error that &#x27;$FOO is not available&#x27; is, IMHO, a much nicer user experience than an obscure build error or wrong code.<br> </div> Thu, 29 Oct 2020 14:54:25 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835533/ https://lwn.net/Articles/835533/ mathstuf <div class="FormattedComment"> <font class="QuotedText">&gt; And, which I think is the really bad part, they don&#x27;t even work when cmake fails with an error, for crying out loud.</font><br> <p> Due to the nature of the options being defined in imperative code, there&#x27;s no way for CMake to provide everything in the case of an error. On that front, the discussion around a declarative CMake might be of more use to you[1]. However, you will be able to edit what is available at least, so if you have an option that immediately causes an error, it should be in the cache (or at least in the error message assuming the project is nice enough to have good error messages) for editing.<br> <p> <font class="QuotedText">&gt; isn&#x27;t a way to to run cmake in an existing build directory that ensures that only the -D parameters in the current invocation take effect</font><br> <p> Without CMake knowing what the actual defaults are, this would be hard. It would be possible with the issue I linked to above once CMake does have the concept of `Option&lt;UserSetting&gt;`. I&#x27;ve added this idea to that issue[2], thanks.<br> <p> [1]<a href="https://gitlab.kitware.com/cmake/cmake/-/issues/19891">https://gitlab.kitware.com/cmake/cmake/-/issues/19891</a><br> [2]<a href="https://gitlab.kitware.com/cmake/cmake/-/issues/14756#note_851018">https://gitlab.kitware.com/cmake/cmake/-/issues/14756#not...</a><br> </div> Thu, 29 Oct 2020 00:54:47 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835530/ https://lwn.net/Articles/835530/ andresfreund <div class="FormattedComment"> Oh, another related issue: There - at least not that I have found - isn&#x27;t a way to to run cmake in an existing build directory that ensures that only the -D parameters in the current invocation take effect (with the rest set their defaults). It&#x27;s so easy to end up with options lingering around. Having to clean out the build tree is a pretty expensive solution...<br> </div> Wed, 28 Oct 2020 22:51:58 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835529/ https://lwn.net/Articles/835529/ andresfreund <div class="FormattedComment"> <font class="QuotedText">&gt; I&#x27;m well aware of the discoverability problems of CMake&#x27;s configure. A lot has been offloaded onto the cache editor UIs (ccmake and cmake-gui). One thing I&#x27;d personally like to see support for dumping out the (modified) settings for the current build (<a href="https://gitlab.kitware.com/cmake/cmake/-/issues/14756">https://gitlab.kitware.com/cmake/cmake/-/issues/14756</a>). This pretty much requires proper &quot;use a default value&quot; semantics in the `option` and `set(CACHE)` codepaths. The initial cache value is not a default as there&#x27;s no tracking of whether the user wanted that explicitly or an old cache file is in use, so that is likely the first things that would need to be added.</font><br> <p> Neither cmake-gui nor ccmake come even close to ./configure --help, unfortunately. They do not work without a build tree. And, which I think is the really bad part, they don&#x27;t even work when cmake fails with an error, for crying out loud. Precisely when one might need to see the build options, to make the build succeed.<br> <p> <p> <font class="QuotedText">&gt; CMake is also *extremely* strict about backwards compatibility. We still have codepaths laying around to act like CMake 2.6.0 if need be, so there should never be a reason to not use the latest CMake release for any project (please file bugs if this is not the case).</font><br> <p> Will do that the next time I encounter it (which I hope is never...).<br> </div> Wed, 28 Oct 2020 22:47:05 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835520/ https://lwn.net/Articles/835520/ mathstuf <div class="FormattedComment"> <font class="QuotedText">&gt; unlike &quot;git archive&quot; etc. you can control which files to exclude from being distributed and other things</font><br> <p> The `export-ignore` attribute exists for this. `git archive` does suck at submodules, but just about everything does in practice anyways. `git archive-all` exists for those cases and handles a bad situation well enough (it is pure porcelain and is lacking plumbing for use in alternative automated tasks where it would be useful).<br> <p> <font class="QuotedText">&gt; it also creates tarballs with proper version number included in the tarball filename, can check that the ChangeLog file really has an entry for that version, etc. ...</font><br> <p> Changelog strategies vary wildly from project to project. Some don&#x27;t have them, some autogenerate them from commit logs (ugh), others are overly verbose to the point of uselessness (IMO, GCC is one of these).<br> <p> <font class="QuotedText">&gt; As basically most of this is in the Makefile template anyway it shouldn&#x27;t be much of a problem for CMake to provide the same for the make backend, but somehow this never seems to have happened.</font><br> <p> File an issue (or ping one that already exists). There&#x27;s enough work that we don&#x27;t actively seek out features to implement; it is mostly demand-driven. However, note that the Makefiles generator targets POSIX make, not GNU Make or any other specific flavor. Single-generator features also have a high bar for implementation (generally they need to be at least extremely difficult or specifically targeting that backend). I don&#x27;t think making any &quot;source tarball creation&quot; built-in target would get over either bar, so it&#x27;d need to be available for any generator backend. But I think it is more CPack&#x27;s wheelhouse anyways.<br> </div> Wed, 28 Oct 2020 21:49:23 +0000 Rejuvenating Autoconf https://lwn.net/Articles/835518/ https://lwn.net/Articles/835518/ hholzgra <div class="FormattedComment"> <font class="QuotedText">&gt; Autotools has the mechanisms to support out-of-source builds, but they&#x27;re certainly not used</font><br> all the time.<br> <p> yes, it can do it, but it is not advertised much, unlike CMake where it&#x27;s the recommended method<br> <p> <font class="QuotedText">&gt; I think autotools gained that mechanism for itself because it</font><br> effectively patches the source for distribution in practice<br> <p> unlike &quot;git archive&quot; etc. you can control which files to exclude from being distributed and other things<br> <p> that&#x27;s also one of the things the distcheck target checks for: does the build from the dist tarball fail due to any file missing from the dist tarball?<br> <p> it also creates tarballs with proper version number included in the tarball filename, can check that the ChangeLog file really has an entry for that version, etc. ...<br> <p> As basically most of this is in the Makefile template anyway it shouldn&#x27;t be much of a problem for CMake to provide the same for the make backend, but somehow this never seems to have happened.<br> </div> Wed, 28 Oct 2020 19:25:18 +0000