diff mbox series

gcc/Makefile.in: Fix install-info target if BUILD_INFO is empty

Message ID 20240205112652.687934-1-christophe.lyon@linaro.org
State New
Headers show
Series gcc/Makefile.in: Fix install-info target if BUILD_INFO is empty | expand

Commit Message

Christophe Lyon Feb. 5, 2024, 11:26 a.m. UTC
BUILD_INFO is currently a byproduct of checking makeinfo
presence/version.  INSTALL_INFO used to be defined similarly, but was
removed in 2000 (!) by commit 17db658241d18cf6db59d31bc2d6eac96e9257df
(svn r38141).

In order to save build time, our CI overrides BUILD_INFO="", which
works when invoking 'make all' but not for 'make install' in case some
info files need an update.

I noticed this when testing a patch posted on the gcc-patches list,
leading to an error at 'make install' time after updating tm.texi (the
build reported 'new text' in tm.texi and stopped).  This is because
'install' depends on 'install-info', which depends on
$(DESTDIR)$(infodir)/gccint.info (among others).

This patch makes the 'install-info' dependency in 'install'
conditioned by BUILD_INFO.

2024-02-05  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	* Makefile.in: Use install-info only if BUILD_INFO is not empty.
---
 gcc/Makefile.in | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Comments

Alexandre Oliva Feb. 6, 2024, 5:37 a.m. UTC | #1
Hello, Christophe,

Thanks for the patch.

On Feb  5, 2024, Christophe Lyon <christophe.lyon@linaro.org> wrote:

> In order to save build time, our CI overrides BUILD_INFO="", which
> works when invoking 'make all' but not for 'make install' in case some
> info files need an update.

Hmm, I don't think this would be desirable.  We ship updated info files
in release tarballs, and it would be desirable to install them even if
makeinfo is not available in the build environment.

> I noticed this when testing a patch posted on the gcc-patches list,
> leading to an error at 'make install' time after updating tm.texi (the
> build reported 'new text' in tm.texi and stopped).  This is because
> 'install' depends on 'install-info', which depends on
> $(DESTDIR)$(infodir)/gccint.info (among others).

Ideally, we'd detect and report info files that are out-of-date WRT
their ultimate sources, especially to catch tm.texi.in changes, but
doing so only at install time is clearly suboptimal.

I mean, if we don't have the tools to build info files, it's fine if we
skip their building, and even refrain from installing info files that
are missing or outdated, but we should install prebuilt ones if they're
available, and we should probably *not* refrain from trying to satisfy
the dependencies for info files at build time, even if it turns out that
we can't build the info files themselves.

This suggests to me that, rather than setting BUILD_INFO to the empty
string, we should set it to e.g. no-info, so that $(MAKEINFO) will not
be run because x$(BUILD_INFO) != xinfo, but so that we still get the
dependencies resolved, e.g. by making no-info depend on info.  Or maybe
make it info-check-deps, and insert that between info and its current
deps.  WDYT?
Christophe Lyon Feb. 10, 2024, 10:06 p.m. UTC | #2
Hi!

On Tue, 6 Feb 2024 at 06:37, Alexandre Oliva <oliva@gnu.org> wrote:
>
> Hello, Christophe,
>
> Thanks for the patch.
>
> On Feb  5, 2024, Christophe Lyon <christophe.lyon@linaro.org> wrote:
>
> > In order to save build time, our CI overrides BUILD_INFO="", which
> > works when invoking 'make all' but not for 'make install' in case some
> > info files need an update.
>
> Hmm, I don't think this would be desirable.  We ship updated info files
> in release tarballs, and it would be desirable to install them even if
> makeinfo is not available in the build environment.
>
> > I noticed this when testing a patch posted on the gcc-patches list,
> > leading to an error at 'make install' time after updating tm.texi (the
> > build reported 'new text' in tm.texi and stopped).  This is because
> > 'install' depends on 'install-info', which depends on
> > $(DESTDIR)$(infodir)/gccint.info (among others).
>
> Ideally, we'd detect and report info files that are out-of-date WRT
> their ultimate sources, especially to catch tm.texi.in changes, but
> doing so only at install time is clearly suboptimal.
>
> I mean, if we don't have the tools to build info files, it's fine if we
> skip their building, and even refrain from installing info files that
> are missing or outdated, but we should install prebuilt ones if they're
> available, and we should probably *not* refrain from trying to satisfy
> the dependencies for info files at build time, even if it turns out that
> we can't build the info files themselves.
>
> This suggests to me that, rather than setting BUILD_INFO to the empty
> string, we should set it to e.g. no-info, so that $(MAKEINFO) will not
> be run because x$(BUILD_INFO) != xinfo, but so that we still get the
> dependencies resolved, e.g. by making no-info depend on info.  Or maybe
> make it info-check-deps, and insert that between info and its current
> deps.  WDYT?

I've just spent quite a bit of time looking at your suggestion, and well...

I hadn't considered the case of makeinfo missing/too old, in our use
case makeinfo is present and recent enough but we want to save a few
minutes of build time during the CI loop.

As I mentioned, we (tried to) do this by doing BUILD_INFO="" when
invoking 'make', and it took me ages to realize it is not working as
expected, because GCC's top-level Makefile does not propagate
BUILD_INFO recursively, and this conflicted with the setting of
BUILD_INFO=no-info (I wanted to try to support several values for
BUILD_INFO: info, no-info and "", where "" would disable more things,
but it seems to be too much hassle)

So, the attached small patch implements your suggestion, and works as
expected: it makeinfo is not available, we now detect problems with
tm.texi.in at build time rather than install time. OK?

Looking deeper, I realized that texi2dvi and texi2pdf belong to the
texinfo package, like makeinfo, so the dvi and pdf rules should
probably also depend on BUILD_INFO? To generate html, we call makeinfo
--html so the html rules should also depend on BUILD_INFO.  However,
unlike install-man, the install-html, install-dvi and install-pdf are
not part of the plain 'install' target, so maybe we can argue that if
someone runs 'make install-pdf' without texinfo, then too bad for him?

Thanks,

Christophe




>
> --
> Alexandre Oliva, happy hacker                    https://FSFLA.org/blogs/lxo/
>    Free Software Activist                           GNU Toolchain Engineer
> Disinformation flourishes because many people care deeply about injustice but
> very few check the facts.  Think Assange & Stallman.  The empires strike back
Alexandre Oliva Feb. 11, 2024, 5:56 a.m. UTC | #3
Hello, Christophe,

On Feb 10, 2024, Christophe Lyon <christophe.lyon@linaro.org> wrote:

> 	gcc/
> 	* Makefile.in: Add no-info dependency.
> 	* configure.ac: Set BUILD_INFO=no-info if makeinfo is not
> 	available.
> 	* configure: Regenerate.

Thank you, this is ok.

Now, this doesn't fix a regression, does it?

I would support putting this in for GCC 14, but I would be overstepping
my authority if I approved even such a small and well-contained
improvement patch in the current stage, so I'm approving it for stage1,
but maybe some global maintainer or release manager will chime in in
support for earlier merging? (hint, hint ;-)
Christophe Lyon Feb. 12, 2024, 10:13 a.m. UTC | #4
On Sun, 11 Feb 2024 at 06:56, Alexandre Oliva <oliva@gnu.org> wrote:
>
> Hello, Christophe,
>
> On Feb 10, 2024, Christophe Lyon <christophe.lyon@linaro.org> wrote:
>
> >       gcc/
> >       * Makefile.in: Add no-info dependency.
> >       * configure.ac: Set BUILD_INFO=no-info if makeinfo is not
> >       available.
> >       * configure: Regenerate.
>
> Thank you, this is ok.
>
> Now, this doesn't fix a regression, does it?

Of course not :-)

>
> I would support putting this in for GCC 14, but I would be overstepping
> my authority if I approved even such a small and well-contained
> improvement patch in the current stage, so I'm approving it for stage1,
> but maybe some global maintainer or release manager will chime in in
> support for earlier merging? (hint, hint ;-)

Thanks!

>
> --
> Alexandre Oliva, happy hacker                    https://FSFLA.org/blogs/lxo/
>    Free Software Activist                           GNU Toolchain Engineer
> Disinformation flourishes because many people care deeply about injustice but
> very few check the facts.  Think Assange & Stallman.  The empires strike back
Jakub Jelinek Feb. 12, 2024, 10:27 a.m. UTC | #5
On Mon, Feb 12, 2024 at 11:13:49AM +0100, Christophe Lyon wrote:
> On Sun, 11 Feb 2024 at 06:56, Alexandre Oliva <oliva@gnu.org> wrote:
> >
> > Hello, Christophe,
> >
> > On Feb 10, 2024, Christophe Lyon <christophe.lyon@linaro.org> wrote:
> >
> > >       gcc/
> > >       * Makefile.in: Add no-info dependency.
> > >       * configure.ac: Set BUILD_INFO=no-info if makeinfo is not
> > >       available.
> > >       * configure: Regenerate.
> >
> > Thank you, this is ok.
> >
> > Now, this doesn't fix a regression, does it?
> 
> Of course not :-)
> 
> >
> > I would support putting this in for GCC 14, but I would be overstepping
> > my authority if I approved even such a small and well-contained
> > improvement patch in the current stage, so I'm approving it for stage1,
> > but maybe some global maintainer or release manager will chime in in
> > support for earlier merging? (hint, hint ;-)
> 
> Thanks!

This is ok for GCC 14 as an exception, but if any issues related to that
are found, please be prepared to revert and resubmit for GCC 15.

	Jakub
Christophe Lyon Feb. 12, 2024, 3:48 p.m. UTC | #6
On Mon, 12 Feb 2024 at 11:27, Jakub Jelinek <jakub@redhat.com> wrote:
>
> On Mon, Feb 12, 2024 at 11:13:49AM +0100, Christophe Lyon wrote:
> > On Sun, 11 Feb 2024 at 06:56, Alexandre Oliva <oliva@gnu.org> wrote:
> > >
> > > Hello, Christophe,
> > >
> > > On Feb 10, 2024, Christophe Lyon <christophe.lyon@linaro.org> wrote:
> > >
> > > >       gcc/
> > > >       * Makefile.in: Add no-info dependency.
> > > >       * configure.ac: Set BUILD_INFO=no-info if makeinfo is not
> > > >       available.
> > > >       * configure: Regenerate.
> > >
> > > Thank you, this is ok.
> > >
> > > Now, this doesn't fix a regression, does it?
> >
> > Of course not :-)
> >
> > >
> > > I would support putting this in for GCC 14, but I would be overstepping
> > > my authority if I approved even such a small and well-contained
> > > improvement patch in the current stage, so I'm approving it for stage1,
> > > but maybe some global maintainer or release manager will chime in in
> > > support for earlier merging? (hint, hint ;-)
> >
> > Thanks!
>
> This is ok for GCC 14 as an exception, but if any issues related to that
> are found, please be prepared to revert and resubmit for GCC 15.
>
Sure!

Thanks,

Christophe

>         Jakub
>
diff mbox series

Patch

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 4d38b162307..6cb564cfd35 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -817,7 +817,6 @@  INSTALL_HEADERS=install-headers install-mkheaders
 
 # Control whether Info documentation is built and installed.
 BUILD_INFO = @BUILD_INFO@
-INSTALL_INFO = @INSTALL_INFO@
 
 # Control flags for @contents placement in HTML output
 MAKEINFO_TOC_INLINE_FLAG = @MAKEINFO_TOC_INLINE_FLAG@
@@ -3786,9 +3785,13 @@  maintainer-clean:
 # Install the driver last so that the window when things are
 # broken is small.
 install: install-common $(INSTALL_HEADERS) \
-    install-cpp install-man $(INSTALL_INFO) install-@POSUB@ \
+    install-cpp install-man install-@POSUB@ \
     install-driver install-lto-wrapper install-gcc-ar
 
+ifneq ($(BUILD_INFO),)
+install: install-info
+endif
+
 ifeq ($(enable_plugin),yes)
 install: install-plugin
 endif