chiark / gitweb /
build: Fix a build race involving target/bundled-sources
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 14 Apr 2021 21:47:37 +0000 (22:47 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 14 Apr 2021 21:51:08 +0000 (22:51 +0100)
Symptoms:
  cp: cannot create regular file '/home/user/otter/target/bundled-sources/README.md': No such file or directory

Reported-by: Aldabra Stoddart <aldabra@gmail.com>
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Makefile

index c4340bb53e2b27b4cd26d7bc8da284e264e3d35e..5c293117cdd7c32d2add2bdd66df5bf8a5a749e9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -249,19 +249,23 @@ bundled-sources:: $(addprefix bundled-sources/, $(BUNDLED_SOURCES_DIRS))
 
 TARGET_BUNDLED=$(TARGET_DIR)/bundled-sources
 
+$(TARGET_BUNDLED):
+       $(NAILING_CARGO_JUST_RUN) mkdir -p $@
+
 $(addprefix bundled-sources/, $(BUNDLED_SOURCES_DIRS)): \
-bundled-sources/%: stamp/cargo.bundle-sources
+bundled-sources/%: stamp/cargo.bundle-sources $(TARGET_BUNDLED)
        set -e; d=$(abspath $(TARGET_BUNDLED)); \
-       $(NAILING_CARGO_JUST_RUN) mkdir -p $$d; \
        $(if $(filter-out otter,$*), cd ../$*;) \
        $(BUNDLE_SOURCES_CMD) --output $$d/$*
 
 bundled-sources:: $(addprefix $(TARGET_BUNDLED)/, $(BUNDLED_SOURCES_FILES))
 
-$(addprefix $(TARGET_BUNDLED)/, $(BUNDLED_SOURCES_LIT)): $(TARGET_BUNDLED)/%: %
+$(addprefix $(TARGET_BUNDLED)/, $(BUNDLED_SOURCES_LIT)): \
+$(TARGET_BUNDLED)/%: % $(TARGET_BUNDLED)
        $(NAILING_CARGO_JUST_RUN) cp $(abspath $(src))/$< $(abspath $@)
 
-$(TARGET_BUNDLED)/index.html: bundled-sources-make-index $(MAKEFILE_DEP)
+$(TARGET_BUNDLED)/index.html: bundled-sources-make-index \
+               $(MAKEFILE_DEP) $(TARGET_BUNDLED)
        $(NAILING_CARGO_JUST_RUN) sh -ec '                      \
                cd $(abspath $(src)); mkdir -p $(dir $@);       \
                ./$< >$@.tmp $(BUNDLED_SOURCES_LINKS);          \