From patchwork Tue Nov 27 18:12:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph Myers X-Patchwork-Id: 30322 Received: (qmail 76448 invoked by alias); 27 Nov 2018 18:12:37 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 76436 invoked by uid 89); 27 Nov 2018 18:12:36 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: relay1.mentorg.com Date: Tue, 27 Nov 2018 18:12:28 +0000 From: Joseph Myers To: Subject: Fix Hurd build with read-only source directory Message-ID: User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 The logic for generating sysdeps/mach/hurd/bits/errno.h involves a stamp file and $(move-if-change). The temporary file (generated unconditionally) is generated in the source directory. This means that even if sysdeps/mach/hurd/bits/errno.h is up to date, and has an up to date timestamp, the build will fail if the source directory is read-only. Even with a writable source directory, multiple concurrent builds for i686-gnu with the same source directory could race to access the temporary file (which always has the same name). This patch uses the build directory for the temporary file instead to avoid those problems. (In the case where the file is out of date and the temporary file does need to be moved to the source directory, if there are multiple concurrent builds for i686-gnu with the same source directory, and the source and build directories are on different filesystems, it's possible there might still be races replacing the file in the source directory, depending on exactly how mv handles such cross-filesystem moves. This is certainly no worse than the present situation, where such a case would have races regardless of whether the file is out of date or whether different filesystems are in use.) Tested with a build-many-glibcs.py build for i686-gnu. 2018-11-27 Joseph Myers * sysdeps/mach/hurd/Makefile ($(common-objpfx)stamp-errnos): Use $(hurd-objpfx)bits/errno.h-tmp, not $(hurd)/bits/errno.h-tmp. Reviewed-by: Samuel Thibault diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile index e15341ca8d..69f12d4efb 100644 --- a/sysdeps/mach/hurd/Makefile +++ b/sysdeps/mach/hurd/Makefile @@ -91,10 +91,11 @@ $(common-objpfx)errnos.d: $(mach-errnos-deps) $(hurd)/bits/errno.h: $(common-objpfx)stamp-errnos ; $(common-objpfx)stamp-errnos: $(hurd)/errnos.awk $(errno.texinfo) \ $(mach-errnos-deps) $(common-objpfx)errnos.d - $(AWK) -f $^ > $(hurd)/bits/errno.h-tmp + mkdir -p $(hurd-objpfx)bits + $(AWK) -f $^ > $(hurd-objpfx)bits/errno.h-tmp # Make it unwritable so noone will edit it by mistake. - -chmod a-w $(hurd)/bits/errno.h-tmp - $(move-if-change) $(hurd)/bits/errno.h-tmp $(hurd)/bits/errno.h + -chmod a-w $(hurd-objpfx)bits/errno.h-tmp + $(move-if-change) $(hurd-objpfx)bits/errno.h-tmp $(hurd)/bits/errno.h touch $@ common-generated += errnos.d stamp-errnos