[build] Properly track GCC language configure fragments
Hi! I'm aware that incremental builds aren't really supported, but during day-to-day development, they're still useful -- as long as they work. ;-) A recent change (adding '\$(srcdir)/cp/logic.cc' to 'gtfiles' in 'gcc/cp/config-lang.in') broke things: [...]/source-gcc/gcc/cp/logic.cc:907:25: fatal error: gt-cp-logic.h: No such file or directory compilation terminated. Makefile:1117: recipe for target 'cp/logic.o' failed make[2]: *** [cp/logic.o] Error 1 make[2]: *** Waiting for unfinished jobs make[2]: Leaving directory '[...]/build-gcc-offload-nvptx-none/gcc' Makefile:4336: recipe for target 'all-gcc' failed make[1]: *** [all-gcc] Error 2 make[1]: Leaving directory '[...]/build-gcc-offload-nvptx-none' Makefile:936: recipe for target 'all' failed make: *** [all] Error 2 That's because the build machinery didn't notice the 'gcc/cp/config-lang.in' change, and thus files didn't get regenerated; 'gtfiles' are encoded in 'gcc/Makefile', and that's how/where the missing 'gt-cp-logic.h' would be generated. Please find attached a patch with rationale. OK to commit? If approving this patch, please respond with "Reviewed-by: NAME " so that your effort will be recorded in the commit log, see <https://gcc.gnu.org/wiki/Reviewed-by>. Grüße Thomas From dae93e7c2ed195fb3d1d6c4ccf0ddb5ef54bf8ee Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Fri, 25 Oct 2019 12:37:05 +0200 Subject: [PATCH] [build] Properly track GCC language configure fragments The 'gcc/configure' script sources all 'gcc/*/config-lang.in' files, but fails to emit such dependency information into the build machinery. That means, currently, when something gets changed in a 'gcc/*/config-lang.in' file, this is not noticed, and doesn't propagate through the build machinery. Handling of configure fragments is modelled in the same way as it already exists for Makefile fragments. gcc/ * Makefile.in (LANG_CONFIGUREFRAGS): Define. (config.status): Use/depend on it. * configure.ac (all_lang_configurefrags): Track, 'AC_SUBST'. * configure: Regenerate. --- gcc/Makefile.in | 3 ++- gcc/configure| 10 +++--- gcc/configure.ac | 5 - 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/gcc/Makefile.in b/gcc/Makefile.in index c82858fa93e..bec5d8cf431 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1122,6 +1122,7 @@ endif # Support for additional languages (other than C). # C can be supported this way too (leave for later). +LANG_CONFIGUREFRAGS = @all_lang_configurefrags@ LANG_MAKEFRAGS = @all_lang_makefrags@ # Used by gcc/jit/Make-lang.in @@ -1902,7 +1903,7 @@ cstamp-h: config.in config.status # Really, really stupid make features, such as SUN's KEEP_STATE, may force # a target to build even if it is up-to-date. So we must verify that # config.status does not exist before failing. -config.status: $(srcdir)/configure $(srcdir)/config.gcc +config.status: $(srcdir)/configure $(srcdir)/config.gcc $(LANG_CONFIGUREFRAGS) @if [ ! -f config.status ] ; then \ echo You must configure gcc. Look at http://gcc.gnu.org/install/ for details.; \ false; \ diff --git a/gcc/configure b/gcc/configure index 9de9ef85f24..84b3578fb2b 100755 --- a/gcc/configure +++ b/gcc/configure @@ -701,6 +701,7 @@ build_exeext all_selected_languages all_languages all_lang_makefrags +all_lang_configurefrags all_gtfiles all_compilers srcdir @@ -18851,7 +18852,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18854 "configure" +#line 18855 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -18957,7 +18958,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18960 "configure" +#line 18961 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -29824,7 +29825,8 @@ lang_tree_files= all_languages= all_compilers= all_outputs='Makefile' -# List of language makefile fragments. +# List of language configure and makefile fragments. +all_lang_configurefrags= all_lang_makefrags= # Additional files for gengtype all_gtfiles="$target_gtfiles" @@ -29910,6 +29912,7 @@ do esac $ok || continue + all_lang_configurefrags="$all_lang_configurefrags \$(srcdir)/$gcc_subdir/config-lang.in" all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$gcc_subdir/Make-lang.in" if test -f $srcdir/$gcc_subdir/lang.opt; then lang_opt_files="$lang_opt_files $srcdir/$gcc_subdir/lang.opt" @@ -30061,6 +30064,7 @@ fi + diff --git a/gcc/configure.ac b/gcc/configu
Re: [build] Properly track GCC language configure fragments
This patch is OK. -- Joseph S. Myers jos...@codesourcery.com
Re: [build] Properly track GCC language configure fragments
Hi! On 2019-10-25T20:48:58+, Joseph Myers wrote: > This patch is OK. Thanks. See attached; as posted, committed to trunk in r278035, gcc-9-branch in r278036, gcc-8-branch in r278037, gcc-7-branch omitted as that one's frozen for the final release, and this fix isn't important enough. Grüße Thomas From 5ba7804033a285907cfda88c9de5acc103c9881a Mon Sep 17 00:00:00 2001 From: tschwinge Date: Mon, 11 Nov 2019 08:05:27 + Subject: [PATCH] [build] Properly track GCC language configure fragments The 'gcc/configure' script sources all 'gcc/*/config-lang.in' files, but fails to emit such dependency information into the build machinery. That means, currently, when something gets changed in a 'gcc/*/config-lang.in' file, this is not noticed, and doesn't propagate through the build machinery. Handling of configure fragments is modelled in the same way as it already exists for Makefile fragments. gcc/ * Makefile.in (LANG_CONFIGUREFRAGS): Define. (config.status): Use/depend on it. * configure.ac (all_lang_configurefrags): Track, 'AC_SUBST'. * configure: Regenerate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@278035 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog| 7 +++ gcc/Makefile.in | 3 ++- gcc/configure| 10 +++--- gcc/configure.ac | 5 - 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 96efa4224bd7..a1e928bf804d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-11-11 Thomas Schwinge + + * Makefile.in (LANG_CONFIGUREFRAGS): Define. + (config.status): Use/depend on it. + * configure.ac (all_lang_configurefrags): Track, 'AC_SUBST'. + * configure: Regenerate. + 2019-11-11 Jiufu Guo PR tree-optimization/88760 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 95f054c4d4f3..ac21401af391 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1122,6 +1122,7 @@ endif # Support for additional languages (other than C). # C can be supported this way too (leave for later). +LANG_CONFIGUREFRAGS = @all_lang_configurefrags@ LANG_MAKEFRAGS = @all_lang_makefrags@ # Used by gcc/jit/Make-lang.in @@ -1910,7 +1911,7 @@ cstamp-h: config.in config.status # Really, really stupid make features, such as SUN's KEEP_STATE, may force # a target to build even if it is up-to-date. So we must verify that # config.status does not exist before failing. -config.status: $(srcdir)/configure $(srcdir)/config.gcc +config.status: $(srcdir)/configure $(srcdir)/config.gcc $(LANG_CONFIGUREFRAGS) @if [ ! -f config.status ] ; then \ echo You must configure gcc. Look at http://gcc.gnu.org/install/ for details.; \ false; \ diff --git a/gcc/configure b/gcc/configure index a2df82e021f5..be58e1a4d5f5 100755 --- a/gcc/configure +++ b/gcc/configure @@ -701,6 +701,7 @@ build_exeext all_selected_languages all_languages all_lang_makefrags +all_lang_configurefrags all_gtfiles all_compilers srcdir @@ -18937,7 +18938,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 18940 "configure" +#line 18941 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -19043,7 +19044,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 19046 "configure" +#line 19047 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -29928,7 +29929,8 @@ lang_tree_files= all_languages= all_compilers= all_outputs='Makefile' -# List of language makefile fragments. +# List of language configure and makefile fragments. +all_lang_configurefrags= all_lang_makefrags= # Additional files for gengtype all_gtfiles="$target_gtfiles" @@ -30014,6 +30016,7 @@ do esac $ok || continue + all_lang_configurefrags="$all_lang_configurefrags \$(srcdir)/$gcc_subdir/config-lang.in" all_lang_makefrags="$all_lang_makefrags \$(srcdir)/$gcc_subdir/Make-lang.in" if test -f $srcdir/$gcc_subdir/lang.opt; then lang_opt_files="$lang_opt_files $srcdir/$gcc_subdir/lang.opt" @@ -30165,6 +30168,7 @@ fi + diff --git a/gcc/configure.ac b/gcc/configure.ac index 5f32fd4d5e4d..6bce1e3b6d9f 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -6333,7 +6333,8 @@ lang_tree_files= all_languages= all_compilers= all_outputs='Makefile' -# List of language makefile fragments. +# List of language configure and makefile fragments. +all_lang_configurefrags= all_lang_makefrags= # Additional files for gengtype all_gtfiles="$target_gtfiles" @@ -6421,6 +6422,7 @@ changequote([,])dnl esac $ok || continue + all_lang_configurefrags="$all_lang_configurefrags \$(srcdir)/$gcc_subdir/config-lang.in" all_lang_makefrags="$all_lang_makefrag