Message ID | 20191212085748.13802-1-michael@walle.cc |
---|---|
State | Superseded |
Headers | show |
Series | [RFC] autotools: do not overwrite first include path | expand |
Hi, On 12/12/19 9:57 AM, Michael Walle wrote: > The first include path is special in aclocal. For example it is the path > for the --install option. Also, the first include is treated in a > special way if it doesn't exists. This might be the case if there is the > following construct: > > configure.ac: AC_CONFIG_MACRO_DIR([m4]) > Makefile.am: ACLOCAL_AMFLAGS="-I m4" > > If the package doesn't have local macros, the m4/ directory might not > exist. aclocal will then just issue a warning instead of aborting the > execution with a fatal error. See discussion here: > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=565663 > > Don't use the "-I" option in aclocal. Instead use ACLOCAL_PATH to pass > the system-wide include dirs. > > As a side effect this should fix the use of $(ACLOCAL) alone. Up until > now, $(ACLOCAL) didn't include the ACLOCAL_HOST_DIR system include path. > > autoreconf will pass the "-I" options to every tool it runs. So move the > argument to each individual tool except aclocal. > > Signed-off-by: Michael Walle <michael@walle.cc> > Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com> I made a test by removing the $(pkg)_POST_PATCH_HOOKS for the following packages: - atest - davici - libscsi - ltrace - minicom - open-lldp - openpgm - pdbg The result is that all this packages still build without this hook. -- Heiko
Hi All, Am Do., 12. Dez. 2019 um 11:08 Uhr schrieb Heiko Thiery <heiko.thiery@gmail.com>: > > Hi, > > On 12/12/19 9:57 AM, Michael Walle wrote: > > The first include path is special in aclocal. For example it is the path > > for the --install option. Also, the first include is treated in a > > special way if it doesn't exists. This might be the case if there is the > > following construct: > > > > configure.ac: AC_CONFIG_MACRO_DIR([m4]) > > Makefile.am: ACLOCAL_AMFLAGS="-I m4" > > > > If the package doesn't have local macros, the m4/ directory might not > > exist. aclocal will then just issue a warning instead of aborting the > > execution with a fatal error. See discussion here: > > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=565663 > > > > Don't use the "-I" option in aclocal. Instead use ACLOCAL_PATH to pass > > the system-wide include dirs. > > > > As a side effect this should fix the use of $(ACLOCAL) alone. Up until > > now, $(ACLOCAL) didn't include the ACLOCAL_HOST_DIR system include path. > > > > autoreconf will pass the "-I" options to every tool it runs. So move the > > argument to each individual tool except aclocal. > > > > Signed-off-by: Michael Walle <michael@walle.cc> > > Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com> > > I made a test by removing the $(pkg)_POST_PATCH_HOOKS for the following > packages: > > - atest > - davici > - libscsi > - ltrace > - minicom > - open-lldp > - openpgm > - pdbg > > The result is that all this packages still build without this hook. > > -- > Heiko Has anyone the time to take a look on it and give a comment? BR Heiko
On 12/12/2019 09:57, Michael Walle wrote: > The first include path is special in aclocal. For example it is the path > for the --install option. Also, the first include is treated in a > special way if it doesn't exists. This might be the case if there is the > following construct: > > configure.ac: AC_CONFIG_MACRO_DIR([m4]) > Makefile.am: ACLOCAL_AMFLAGS="-I m4" > > If the package doesn't have local macros, the m4/ directory might not > exist. aclocal will then just issue a warning instead of aborting the > execution with a fatal error. See discussion here: > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=565663 > > Don't use the "-I" option in aclocal. Instead use ACLOCAL_PATH to pass > the system-wide include dirs. > > As a side effect this should fix the use of $(ACLOCAL) alone. Up until > now, $(ACLOCAL) didn't include the ACLOCAL_HOST_DIR system include path. > > autoreconf will pass the "-I" options to every tool it runs. So move the > argument to each individual tool except aclocal. > > Signed-off-by: Michael Walle <michael@walle.cc> > Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com> > --- > package/autoconf/autoconf.mk | 6 +++--- > package/automake/automake.mk | 2 +- > 2 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/package/autoconf/autoconf.mk b/package/autoconf/autoconf.mk > index e5f474c72d..336ac59b42 100644 > --- a/package/autoconf/autoconf.mk > +++ b/package/autoconf/autoconf.mk > @@ -21,6 +21,6 @@ HOST_AUTOCONF_DEPENDENCIES = host-m4 host-libtool > $(eval $(host-autotools-package)) > > # variables used by other packages > -AUTOCONF = $(HOST_DIR)/bin/autoconf > -AUTOHEADER = $(HOST_DIR)/bin/autoheader > -AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf -f -i -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" > +AUTOCONF = $(HOST_DIR)/bin/autoconf -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" > +AUTOHEADER = $(HOST_DIR)/bin/autoheader -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" > +AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf -f -i This will expand to: ... ACLOCAL="ACLOCAL_PATH="$(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR)" $(HOST_DIR)/bin/aclocal" AUTOCONF=... (I've only done one level of expansion, but is shows my point.) So the quotation marks are screwed up a little. It does work because the space is still quoted, and the quotes around the ACLOCAL_PATH value are actually redundant (because spaces in directories are not supported). But it looks a little weird. That said, I wonder: why don't we simply export ACLOCAL_PATH? I think with that, we don't need the -I options in autoheader and autoconf any more, right? Regards, Arnout > diff --git a/package/automake/automake.mk b/package/automake/automake.mk > index 270337712e..b34a8eb717 100644 > --- a/package/automake/automake.mk > +++ b/package/automake/automake.mk > @@ -32,4 +32,4 @@ $(eval $(host-autotools-package)) > # variables used by other packages > AUTOMAKE = $(HOST_DIR)/bin/automake > ACLOCAL_DIR = $(STAGING_DIR)/usr/share/aclocal > -ACLOCAL = $(HOST_DIR)/bin/aclocal -I $(ACLOCAL_DIR) > +ACLOCAL = ACLOCAL_PATH="$(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR)" $(HOST_DIR)/bin/aclocal >
Hi Arnout, Am 2020-01-14 00:37, schrieb Arnout Vandecappelle: > On 12/12/2019 09:57, Michael Walle wrote: >> The first include path is special in aclocal. For example it is the >> path >> for the --install option. Also, the first include is treated in a >> special way if it doesn't exists. This might be the case if there is >> the >> following construct: >> >> configure.ac: AC_CONFIG_MACRO_DIR([m4]) >> Makefile.am: ACLOCAL_AMFLAGS="-I m4" >> >> If the package doesn't have local macros, the m4/ directory might not >> exist. aclocal will then just issue a warning instead of aborting the >> execution with a fatal error. See discussion here: >> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=565663 >> >> Don't use the "-I" option in aclocal. Instead use ACLOCAL_PATH to pass >> the system-wide include dirs. >> >> As a side effect this should fix the use of $(ACLOCAL) alone. Up until >> now, $(ACLOCAL) didn't include the ACLOCAL_HOST_DIR system include >> path. >> >> autoreconf will pass the "-I" options to every tool it runs. So move >> the >> argument to each individual tool except aclocal. >> >> Signed-off-by: Michael Walle <michael@walle.cc> >> Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com> >> --- >> package/autoconf/autoconf.mk | 6 +++--- >> package/automake/automake.mk | 2 +- >> 2 files changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/package/autoconf/autoconf.mk >> b/package/autoconf/autoconf.mk >> index e5f474c72d..336ac59b42 100644 >> --- a/package/autoconf/autoconf.mk >> +++ b/package/autoconf/autoconf.mk >> @@ -21,6 +21,6 @@ HOST_AUTOCONF_DEPENDENCIES = host-m4 host-libtool >> $(eval $(host-autotools-package)) >> >> # variables used by other packages >> -AUTOCONF = $(HOST_DIR)/bin/autoconf >> -AUTOHEADER = $(HOST_DIR)/bin/autoheader >> -AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" >> AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" >> AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf >> -f -i -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" >> +AUTOCONF = $(HOST_DIR)/bin/autoconf -I "$(ACLOCAL_DIR)" -I >> "$(ACLOCAL_HOST_DIR)" >> +AUTOHEADER = $(HOST_DIR)/bin/autoheader -I "$(ACLOCAL_DIR)" -I >> "$(ACLOCAL_HOST_DIR)" >> +AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" >> AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" >> AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf >> -f -i > > This will expand to: > > ... ACLOCAL="ACLOCAL_PATH="$(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR)" > $(HOST_DIR)/bin/aclocal" AUTOCONF=... > > (I've only done one level of expansion, but is shows my point.) So the > quotation > marks are screwed up a little. nice catch. > It does work because the space is still quoted, and the quotes around > the > ACLOCAL_PATH value are actually redundant (because spaces in > directories are not > supported). But it looks a little weird. > > > That said, I wonder: why don't we simply export ACLOCAL_PATH? I think > with > that, we don't need the -I options in autoheader and autoconf any more, > right? You mean something like that: ACLOCAL = $(HOST_DIR)/bin/aclocal -I $(ACLOCAL_DIR) ACLOCAL_PATH = $(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR) AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL_PATH="$(ACLOCAL_PATH)" ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf -f -i That won't work if $(ACLOCAL) is used alone. But from what I see that isn't used for now. So we could give that a try. Or rather something like that: ACLOCAL = $(HOST_DIR)/bin/aclocal -I $(ACLOCAL_DIR) ACLOCAL_PATH = $(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR) export ACLOCAL_PATH AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf -f -i But that would clutter the variable ACLOCAL_PATH and no other package exports variables. -michael
Am 2020-01-14 11:52, schrieb Michael Walle: > Hi Arnout, > > Am 2020-01-14 00:37, schrieb Arnout Vandecappelle: >> On 12/12/2019 09:57, Michael Walle wrote: >>> The first include path is special in aclocal. For example it is the >>> path >>> for the --install option. Also, the first include is treated in a >>> special way if it doesn't exists. This might be the case if there is >>> the >>> following construct: >>> >>> configure.ac: AC_CONFIG_MACRO_DIR([m4]) >>> Makefile.am: ACLOCAL_AMFLAGS="-I m4" >>> >>> If the package doesn't have local macros, the m4/ directory might not >>> exist. aclocal will then just issue a warning instead of aborting the >>> execution with a fatal error. See discussion here: >>> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=565663 >>> >>> Don't use the "-I" option in aclocal. Instead use ACLOCAL_PATH to >>> pass >>> the system-wide include dirs. >>> >>> As a side effect this should fix the use of $(ACLOCAL) alone. Up >>> until >>> now, $(ACLOCAL) didn't include the ACLOCAL_HOST_DIR system include >>> path. >>> >>> autoreconf will pass the "-I" options to every tool it runs. So move >>> the >>> argument to each individual tool except aclocal. >>> >>> Signed-off-by: Michael Walle <michael@walle.cc> >>> Signed-off-by: Heiko Thiery <heiko.thiery@gmail.com> >>> --- >>> package/autoconf/autoconf.mk | 6 +++--- >>> package/automake/automake.mk | 2 +- >>> 2 files changed, 4 insertions(+), 4 deletions(-) >>> >>> diff --git a/package/autoconf/autoconf.mk >>> b/package/autoconf/autoconf.mk >>> index e5f474c72d..336ac59b42 100644 >>> --- a/package/autoconf/autoconf.mk >>> +++ b/package/autoconf/autoconf.mk >>> @@ -21,6 +21,6 @@ HOST_AUTOCONF_DEPENDENCIES = host-m4 host-libtool >>> $(eval $(host-autotools-package)) >>> >>> # variables used by other packages >>> -AUTOCONF = $(HOST_DIR)/bin/autoconf >>> -AUTOHEADER = $(HOST_DIR)/bin/autoheader >>> -AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" >>> AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" >>> AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf >>> -f -i -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" >>> +AUTOCONF = $(HOST_DIR)/bin/autoconf -I "$(ACLOCAL_DIR)" -I >>> "$(ACLOCAL_HOST_DIR)" >>> +AUTOHEADER = $(HOST_DIR)/bin/autoheader -I "$(ACLOCAL_DIR)" -I >>> "$(ACLOCAL_HOST_DIR)" >>> +AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" >>> AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" >>> AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf >>> -f -i >> >> This will expand to: >> >> ... ACLOCAL="ACLOCAL_PATH="$(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR)" >> $(HOST_DIR)/bin/aclocal" AUTOCONF=... >> >> (I've only done one level of expansion, but is shows my point.) So the >> quotation >> marks are screwed up a little. > > nice catch. > >> It does work because the space is still quoted, and the quotes around >> the >> ACLOCAL_PATH value are actually redundant (because spaces in >> directories are not >> supported). But it looks a little weird. >> >> >> That said, I wonder: why don't we simply export ACLOCAL_PATH? I think >> with >> that, we don't need the -I options in autoheader and autoconf any >> more, right? > > You mean something like that: > > ACLOCAL = $(HOST_DIR)/bin/aclocal -I $(ACLOCAL_DIR) whoops without the "-I $(ACLOCAL_DIR)" of course. > ACLOCAL_PATH = $(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR) > > AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL_PATH="$(ACLOCAL_PATH)" > ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" > AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf > -f -i > > That won't work if $(ACLOCAL) is used alone. But from what I see that > isn't > used for now. So we could give that a try. > > Or rather something like that: > ACLOCAL = $(HOST_DIR)/bin/aclocal -I $(ACLOCAL_DIR) likewise. > ACLOCAL_PATH = $(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR) > export ACLOCAL_PATH > > AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" > AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" > AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf > -f -i > > But that would clutter the variable ACLOCAL_PATH and no other package > exports variables. -michael
On 14/01/2020 11:52, Michael Walle wrote: > Hi Arnout, > > Am 2020-01-14 00:37, schrieb Arnout Vandecappelle: [snip] >> That said, I wonder: why don't we simply export ACLOCAL_PATH? I think with >> that, we don't need the -I options in autoheader and autoconf any more, right? > > You mean something like that: > > ACLOCAL = $(HOST_DIR)/bin/aclocal -I $(ACLOCAL_DIR) > ACLOCAL_PATH = $(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR) > > AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL_PATH="$(ACLOCAL_PATH)" > ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" > AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf -f -i > > That won't work if $(ACLOCAL) is used alone. But from what I see that isn't > used for now. So we could give that a try. > > Or rather something like that: > ACLOCAL = $(HOST_DIR)/bin/aclocal -I $(ACLOCAL_DIR) > ACLOCAL_PATH = $(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR) > export ACLOCAL_PATH > > AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" > AUTOHEADER="$(AUTOHEADER)" AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true > $(HOST_DIR)/bin/autoreconf -f -i This second one is what I meant. But of course, this only works if autoconf and automake don't need the explicit -I options. > But that would clutter the variable ACLOCAL_PATH That can actually be considered a good thing. If the user has set ACLOCAL_PATH, we really do want to override it (we don't want to rely on anything from the host). > and no other package exports variables. Packages per se, indeed no, but this stuff can actually be considered part of the infrastructure. They could just as well be defined in package/Makefile.in or package/pkg-autotools.mk. A bunch of files are already exporting variables - particularly package/pkg-download.mk. Regards, Arnout > > -michael
diff --git a/package/autoconf/autoconf.mk b/package/autoconf/autoconf.mk index e5f474c72d..336ac59b42 100644 --- a/package/autoconf/autoconf.mk +++ b/package/autoconf/autoconf.mk @@ -21,6 +21,6 @@ HOST_AUTOCONF_DEPENDENCIES = host-m4 host-libtool $(eval $(host-autotools-package)) # variables used by other packages -AUTOCONF = $(HOST_DIR)/bin/autoconf -AUTOHEADER = $(HOST_DIR)/bin/autoheader -AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf -f -i -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" +AUTOCONF = $(HOST_DIR)/bin/autoconf -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" +AUTOHEADER = $(HOST_DIR)/bin/autoheader -I "$(ACLOCAL_DIR)" -I "$(ACLOCAL_HOST_DIR)" +AUTORECONF = $(HOST_CONFIGURE_OPTS) ACLOCAL="$(ACLOCAL)" AUTOCONF="$(AUTOCONF)" AUTOHEADER="$(AUTOHEADER)" AUTOMAKE="$(AUTOMAKE)" AUTOPOINT=/bin/true $(HOST_DIR)/bin/autoreconf -f -i diff --git a/package/automake/automake.mk b/package/automake/automake.mk index 270337712e..b34a8eb717 100644 --- a/package/automake/automake.mk +++ b/package/automake/automake.mk @@ -32,4 +32,4 @@ $(eval $(host-autotools-package)) # variables used by other packages AUTOMAKE = $(HOST_DIR)/bin/automake ACLOCAL_DIR = $(STAGING_DIR)/usr/share/aclocal -ACLOCAL = $(HOST_DIR)/bin/aclocal -I $(ACLOCAL_DIR) +ACLOCAL = ACLOCAL_PATH="$(ACLOCAL_DIR):$(ACLOCAL_HOST_DIR)" $(HOST_DIR)/bin/aclocal