Patch ./configure, or use autogen.sh instead?
Joshua Root
jmr at macports.org
Tue Feb 15 09:08:50 UTC 2022
On 2022-2-15 19:28 , Jim DeLaHunt wrote:
> I am working on a port[1], where I want to patch a couple of autoconf
> macros[2] and configure.ac . The unpatched macros give
> -Wimplicit-function-declaration errors, but they are easy to fix via
> patches. However, I discovered that the ./configure script incorporates
> the unpatched behaviour of the macros, so `port configure` still causes
> the -Wimplicit-function-declaration errors.
>
> The codebase supplies a script, ./autogen.sh . It runs autoconf,
> libtool, etc. etc. and regenerates the ./configure script, incorporating
> the fixes from the patched macros. It accepts the same options as
> ./configure, and passes them on when it calls ./configure .
>
> I see two ways to solve this:
> a) tell the Portfile to use ./autogen.sh as the configure command. Let
> every user rebuild the ./configure script
> b) patch the ./configure script with the same fixes as the autoconf macros.
>
> Doing a) means the port will have build dependencies on autoconf,
> automake, etc. etc., and will take longer to run. But will it fail?
>
> Doing b) means I have to patch something which I think perhaps I should
> not be patching. I don't see guidance about this, but it feels like a
> bad approach.
Both approaches can work fine. It's a choice between extra dependencies
and the possibility that old input files might not be compatible with
current autotools versions, and maintaining a patch that might get quite
large and needs to be updated whenever the upstream file changes.
We have a shortcut for option a) by the way: 'use_autoreconf yes'. That
adds the needed deps for you and usually works fine on its own (plus
'autoreconf.args -fi' if you want to regenerate absolutely everything
from scratch), but if special options are needed, you can also set
'autoreconf.cmd ./autogen.sh'.
I would tend to just patch configure if the change is relatively small,
and switch to patching configure.ac and running autoreconf if it gets
too unwieldy.
When sending changes upstream, you will of course want to do them in
configure.ac, and let upstream handle updating the generated files in
whatever way they prefer.
- Josh
More information about the macports-dev
mailing list