Regstrapped on x86_64-pc-linux-gnu. I've also checked the generated
dependency files are correct by hand and "instrumented" the build to
fail if two dependency files are the same, by doing the following:
DPOSTCOMPILE = ! test -f $(DEPFILE).Po && mv ...
... and confirmed no further conflicts of this sort happen.
OK for trunk?
---------- >8 ----------
Currently, the dependency files for root-file.o and common-file.o were
both d/.deps/file.Po, which would cause parallel builds to fail
sometimes with:
make[3]: Leaving directory
'/var/tmp/portage/sys-devel/gcc-14.1.1_p20240511/work/build/gcc'
make[3]: Entering directory
'/var/tmp/portage/sys-devel/gcc-14.1.1_p20240511/work/build/gcc'
mv: cannot stat 'd/.deps/file.TPo': No such file or directory
make[3]: ***
[/var/tmp/portage/sys-devel/gcc-14.1.1_p20240511/work/gcc-14-20240511/gcc/d/Make-lang.in:421:
d/root-file.o] Error 1 shuffle=131581365
Also, this means that dependencies of one of root-file or common-file
are missing when developing. After this patch, those two files get
assigned dependency files d/.deps/d-root-file.o.Po and
d/.deps/d-common-file.o.Po respectively.
There are other files with similar conflicts (mangle-package.o,
visitor-package.o for instance).
gcc/d/ChangeLog:
* Make-lang.in: Assign dependency-tracking files better
filenames.
---
gcc/d/Make-lang.in | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/gcc/d/Make-lang.in b/gcc/d/Make-lang.in
index f28761e4b370..25e2b0bbfe94 100644
--- a/gcc/d/Make-lang.in
+++ b/gcc/d/Make-lang.in
@@ -65,8 +65,9 @@ ALL_DFLAGS = $(DFLAGS-$@) $(GDCFLAGS) -fversion=IN_GCC
$(CHECKING_DFLAGS) \
$(WARN_DFLAGS)
DCOMPILE.base = $(GDC) -c $(ALL_DFLAGS) -o $@
-DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
-DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
+DEPFILE = $(subst /,-,$@)
+DCOMPILE = $(DCOMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(DEPFILE).TPo
+DPOSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(DEPFILE).TPo $(@D)/$(DEPDIR)/$(DEPFILE).Po
DLINKER = $(GDC) $(NO_PIE_FLAG) -lstdc++
# Like LINKER, but use a mutex for serializing front end links.
--
2.48.0