<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-legacy-support.

</pre>
<p><a href="https://github.com/macports/macports-legacy-support/commit/c8612c6024feb06e1806b5549ccde5384db4163d">https://github.com/macports/macports-legacy-support/commit/c8612c6024feb06e1806b5549ccde5384db4163d</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit c8612c6024feb06e1806b5549ccde5384db4163d
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Sat Oct 19 17:09:51 2024 -0700

<span style='display:block; white-space:pre;color:#404040;'>    Makefile: Fix parallel builds.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Creating directories with "install -d" suffers from a race condition,
</span><span style='display:block; white-space:pre;color:#404040;'>    because, although it first-order avoids creating directories that
</span><span style='display:block; white-space:pre;color:#404040;'>    already exist, if multiple instances attempt to create a given
</span><span style='display:block; white-space:pre;color:#404040;'>    directory at the same time, the error due to a collision is not
</span><span style='display:block; white-space:pre;color:#404040;'>    correctly handled.  To get around this, we make separate recipes for
</span><span style='display:block; white-space:pre;color:#404040;'>    directory creation, with dependencies on them in the rules that
</span><span style='display:block; white-space:pre;color:#404040;'>    populate them.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Unfortunately, this makes the automatic variables useless for some of
</span><span style='display:block; white-space:pre;color:#404040;'>    the populating commands, since they include the directories.  In such
</span><span style='display:block; white-space:pre;color:#404040;'>    cases, we need to use explicit variables for the input files.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Maintaining the unused ability to put static and dynamic libraries in
</span><span style='display:block; white-space:pre;color:#404040;'>    separate directories (while not actually being separate) would have
</span><span style='display:block; white-space:pre;color:#404040;'>    complicated things, so that capability has been dropped.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This special treatment of directories is not applied to the
</span><span style='display:block; white-space:pre;color:#404040;'>    installation of headers, since that's a complicated multi-directory
</span><span style='display:block; white-space:pre;color:#404040;'>    target only used in a single recipe, and hence not vulnerable to
</span><span style='display:block; white-space:pre;color:#404040;'>    parallelism.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    TESTED:
</span><span style='display:block; white-space:pre;color:#404040;'>    All builds now succeed with parallelism, including those that
</span><span style='display:block; white-space:pre;color:#404040;'>    previously exhibited a failure.
</span>---
 Makefile | 54 ++++++++++++++++++++++++++++--------------------------
 1 file changed, 28 insertions(+), 26 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/Makefile b/Makefile
</span><span style='display:block; white-space:pre;color:#808080;'>index 70875b5..188269d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/Makefile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/Makefile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,11 +30,10 @@ SYSLIBFILE       = lib$(SYSLIBNAME)$(SOEXT)
</span> DLIBPATH         = $(LIBDIR)/$(DLIBFILE)
 SLIBPATH         = $(LIBDIR)/$(SLIBFILE)
 SYSLIBPATH       = $(LIBDIR)/$(SYSLIBFILE)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-BUILDDLIBDIR     = lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BUILDSLIBDIR     = lib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BUILDDLIBPATH    = $(BUILDDLIBDIR)/$(DLIBFILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BUILDSLIBPATH    = $(BUILDSLIBDIR)/$(SLIBFILE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-BUILDSYSLIBPATH  = $(BUILDDLIBDIR)/$(SYSLIBFILE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+BUILDLIBDIR      = lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+BUILDDLIBPATH    = $(BUILDLIBDIR)/$(DLIBFILE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+BUILDSLIBPATH    = $(BUILDLIBDIR)/$(SLIBFILE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+BUILDSYSLIBPATH  = $(BUILDLIBDIR)/$(SYSLIBFILE)
</span> SOCURVERSION    ?= 1.0
 SOCOMPATVERSION ?= 1.0
 BUILDDLIBFLAGS   = -dynamiclib -headerpad_max_install_names \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -98,9 +97,12 @@ DLIBOBJEXT       = .dl.o
</span> SLIBOBJEXT       = .o
 DLIBOBJS        := $(patsubst %.c,%$(DLIBOBJEXT),$(LIBSRCS))
 MULTIDLIBOBJS   := $(patsubst %.c,%$(DLIBOBJEXT),$(MULTISRCS))
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ALLDLIBOBJS     := $(DLIBOBJS) $(MULTIDLIBOBJS)
</span> SLIBOBJS        := $(patsubst %.c,%$(SLIBOBJEXT),$(LIBSRCS))
 MULTISLIBOBJS   := $(patsubst %.c,%$(SLIBOBJEXT),$(MULTISRCS))
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ALLSLIBOBJS     := $(SLIBOBJS) $(MULTISLIBOBJS)
</span> ADDOBJS         := $(patsubst %.c,%$(SLIBOBJEXT),$(ADDSRCS))
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ALLSYSLIBOBJS   := $(ALLDLIBOBJS) $(ADDOBJS)
</span> 
 # Defs for filtering out empty object files
 #
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -136,7 +138,7 @@ DARWINRUNS      := $(patsubst \
</span> TESTDIR          = test
 TESTNAMEPREFIX   = $(TESTDIR)/test_
 TESTRUNPREFIX    = run_
<span style='display:block; white-space:pre;background:#ffe0e0;'>-TESTLDFLAGS      = -L$(BUILDDLIBDIR) $(ALLLDFLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+TESTLDFLAGS      = -L$(BUILDLIBDIR) $(ALLLDFLAGS)
</span> TESTLIBS         = -l$(LIBNAME)
 TESTSRCS_C      := $(wildcard $(TESTNAMEPREFIX)*.c)
 TESTOBJS_C      := $(patsubst %.c,%.o,$(TESTSRCS_C))
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -300,30 +302,33 @@ $(SLIBOBJS): %$(SLIBOBJEXT): %.c $(ALLHEADERS)
</span> $(ADDOBJS): %$(SLIBOBJEXT): %.c $(ALLHEADERS)
        $(CC) -c -I$(SRCINCDIR) $(ALLCFLAGS) $(SLIBCFLAGS) $< -o $@
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-dlibobjs: $(DLIBOBJS) $(MULTIDLIBOBJS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dlibobjs: $(ALLDLIBOBJS)
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-syslibobjs: $(DLIBOBJS) $(MULTIDLIBOBJS) $(ADDOBJS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+syslibobjs: $(ALLSYSLIBOBJS)
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-slibobjs: $(SLIBOBJS) $(MULTISLIBOBJS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+slibobjs: $(ALLSLIBOBJS)
</span> 
 allobjs: dlibobjs slibobjs syslibobjs
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-$(SOBJLIST): $(SLIBOBJS) $(MULTISLIBOBJS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Create a list of nonempty static object files.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(SOBJLIST): $(ALLSLIBOBJS)
</span>   $(CC) -c $(ALLCFLAGS) $(SLIBCFLAGS) -xc /dev/null -o $(EMPTYSOBJ)
        for f in $^; do cmp -s $(EMPTYSOBJ) $$f || echo $$f; done > $@
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-$(BUILDDLIBPATH): $(DLIBOBJS) $(MULTIDLIBOBJS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(MKINSTALLDIRS) $(BUILDDLIBDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(CC) $(BUILDDLIBFLAGS) $(ALLLDFLAGS) $^ -o $@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Make the directories separate targets to avoid collisions in parallel builds.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(BUILDLIBDIR) $(DESTDIR)$(LIBDIR):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(MKINSTALLDIRS) $@
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-$(BUILDSYSLIBPATH): $(DLIBOBJS) $(MULTIDLIBOBJS) $(ADDOBJS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(MKINSTALLDIRS) $(BUILDDLIBDIR)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(CC) $(BUILDSYSLIBFLAGS) $(ALLLDFLAGS) $(SYSREEXPORTFLAG) $^ -o $@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(BUILDDLIBPATH): $(ALLDLIBOBJS) $(BUILDLIBDIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) $(BUILDDLIBFLAGS) $(ALLLDFLAGS) $(ALLDLIBOBJS) -o $@
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-$(BUILDSLIBPATH): $(SOBJLIST)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(MKINSTALLDIRS) $(BUILDSLIBDIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(BUILDSYSLIBPATH): $(ALLSYSLIBOBJS) $(BUILDLIBDIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) $(BUILDSYSLIBFLAGS) $(ALLLDFLAGS) $(SYSREEXPORTFLAG) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         $(ALLSYSLIBOBJS) -o $@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(BUILDSLIBPATH): $(SOBJLIST) $(BUILDLIBDIR)
</span>   $(RM) $@
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        $(AR) $(BUILDSLIBFLAGS) $@ $$(cat $^)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(AR) $(BUILDSLIBFLAGS) $@ $$(cat $<)
</span> 
 $(TESTOBJS_C): %.o: %.c $(ALLHEADERS)
        $(CC) -c -std=c99 -I$(SRCINCDIR) $(ALLCFLAGS) $< -o $@
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -440,18 +445,15 @@ install-headers:
</span> 
 install-lib: install-dlib install-slib install-syslib
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-install-dlib: $(BUILDDLIBPATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(MKINSTALLDIRS) $(DESTDIR)$(LIBDIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-dlib: $(BUILDDLIBPATH) $(DESTDIR)$(LIBDIR)
</span>   $(INSTALL_PROGRAM) $(BUILDDLIBPATH) $(DESTDIR)$(LIBDIR)
        $(POSTINSTALL) -id $(DLIBPATH) $(DESTDIR)$(DLIBPATH)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-install-syslib: $(BUILDSYSLIBPATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(MKINSTALLDIRS) $(DESTDIR)$(LIBDIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-syslib: $(BUILDSYSLIBPATH) $(DESTDIR)$(LIBDIR)
</span>   $(INSTALL_PROGRAM) $(BUILDSYSLIBPATH) $(DESTDIR)$(LIBDIR)
        $(POSTINSTALL) -id $(SYSLIBPATH) $(DESTDIR)$(SYSLIBPATH)
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-install-slib: $(BUILDSLIBPATH)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(MKINSTALLDIRS) $(DESTDIR)$(LIBDIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-slib: $(BUILDSLIBPATH) $(DESTDIR)$(LIBDIR)
</span>   $(INSTALL_DATA) $(BUILDSLIBPATH) $(DESTDIR)$(LIBDIR)
 
 install-tiger: $(TIGERBINS)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -475,7 +477,7 @@ test_clean: xtest_clean $(MANRUNPREFIX)clean
</span> clean: $(MANRUNPREFIX)clean test_clean
        $(RM) $(foreach D,$(SRCDIR),$D/*.o $D/*.o.* $D/*.d)
        $(RM) $(BUILDDLIBPATH) $(BUILDSLIBPATH) $(BUILDSYSLIBPATH) $(TESTPRGS) test/test_cmath_* test/test_faccessat_setuid
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        @$(RMDIR) $(BUILDDLIBDIR) $(BUILDSLIBDIR)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   @$(RMDIR) $(BUILDLIBDIR)
</span> 
 .PHONY: all dlib syslib slib clean check test test_cmath xtest test_static
 .PHONY: $(TESTRUNS) $(XTESTRUNS) $(MANTESTRUNS)
</pre><pre style='margin:0'>

</pre>