<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/79ca1c2212b232e9966b2c339e7c9b098b7de7cf">https://github.com/macports/macports-legacy-support/commit/79ca1c2212b232e9966b2c339e7c9b098b7de7cf</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 79ca1c2212b232e9966b2c339e7c9b098b7de7cf
</span>Author: Fred Wright <fw@fwright.net>
AuthorDate: Thu Oct 17 16:49:34 2024 -0700

<span style='display:block; white-space:pre;color:#404040;'>    Makefile: Exclude empty objects from static library.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Some (or even many) object files are logically empty in a given build.
</span><span style='display:block; white-space:pre;color:#404040;'>    These are now excluded from linking the static library, which not only
</span><span style='display:block; white-space:pre;color:#404040;'>    makes the result a bit smaller (while equivalent), but also avoids the
</span><span style='display:block; white-space:pre;color:#404040;'>    "no symbols" warnings when building it.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Due to the kludgy way fdopendir.o is constructed, this method doesn't
</span><span style='display:block; white-space:pre;color:#404040;'>    filter it out when it's logically empty (10.10+).  We ignore that for
</span><span style='display:block; white-space:pre;color:#404040;'>    now, since it simply means that the old behavior remains for that one
</span><span style='display:block; white-space:pre;color:#404040;'>    object, and we may improve its creation in the future.
</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;'>    Empty objects are filtered as intended (except as noted above), and
</span><span style='display:block; white-space:pre;color:#404040;'>    all statically-linked tests (added in a subsequent commit) pass.
</span>---
 .gitignore |  1 +
 Makefile   | 28 ++++++++++++++++++++++++----
 2 files changed, 25 insertions(+), 4 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/.gitignore b/.gitignore
</span><span style='display:block; white-space:pre;color:#808080;'>index f4d9a80..c6aecdd 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/.gitignore
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/.gitignore
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,3 +5,4 @@
</span> lib
 *~
 *.dSYM
<span style='display:block; white-space:pre;background:#e0ffe0;'>+*.tmp
</span><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 7901aa5..a2087b8 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;'>@@ -102,6 +102,22 @@ SLIBOBJS        := $(patsubst %.c,%$(SLIBOBJEXT),$(LIBSRCS))
</span> MULTISLIBOBJS   := $(patsubst %.c,%$(SLIBOBJEXT),$(MULTISRCS))
 ADDOBJS         := $(patsubst %.c,%$(SLIBOBJEXT),$(ADDSRCS))
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Defs for filtering out empty object files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Some object files are logically empty, due to their content being
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# conditionaled out for the current target.  We provide a mechanism
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# for filtering out logically empty object files from the list used
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# for linking the static library.  This is done by creating a reference
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# empty object file, and excluding any object files with identical contents.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This not only reduces the size of the static library a bit, but also
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# avoids the "no symbols" warnings when creating it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This treatment is only applicable to the static library.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+EMPTY            = empty_source_content
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+EMPTYSOBJ        = $(SRCDIR)/$(EMPTY)$(SLIBOBJEXT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+SOBJLIST         = $(SRCDIR)/slibobjs.tmp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Automatic tests that don't use the library, and are OK with -fno-builtin
 XTESTDIR          = xtest
 XTESTNAMEPREFIX   = $(XTESTDIR)/test_
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -289,8 +305,9 @@ slibobjs: $(SLIBOBJS) $(MULTISLIBOBJS)
</span> 
 allobjs: dlibobjs slibobjs syslibobjs
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-$(TESTOBJS_C): %.o: %.c $(ALLHEADERS)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   $(CC) -c -std=c99 -I$(SRCINCDIR) $(ALLCFLAGS) $< -o $@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(SOBJLIST): $(SLIBOBJS) $(MULTISLIBOBJS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) -c $(ALLCFLAGS) $(SLIBCFLAGS) -xc /dev/null -o $(EMPTYSOBJ)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for f in $^; do cmp -s $(EMPTYSOBJ) $$f || echo $$f; done > $@
</span> 
 $(BUILDDLIBPATH): $(DLIBOBJS) $(MULTIDLIBOBJS)
        $(MKINSTALLDIRS) $(BUILDDLIBDIR)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -300,10 +317,13 @@ $(BUILDSYSLIBPATH): $(DLIBOBJS) $(MULTIDLIBOBJS) $(ADDOBJS)
</span>   $(MKINSTALLDIRS) $(BUILDDLIBDIR)
        $(CC) $(BUILDSYSLIBFLAGS) $(ALLLDFLAGS) $(SYSREEXPORTFLAG) $^ -o $@
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-$(BUILDSLIBPATH): $(SLIBOBJS) $(MULTISLIBOBJS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(BUILDSLIBPATH): $(SOBJLIST)
</span>   $(MKINSTALLDIRS) $(BUILDSLIBDIR)
        $(RM) $@
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        $(AR) $(BUILDSLIBFLAGS) $@ $^
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(AR) $(BUILDSLIBFLAGS) $@ $$(cat $^)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(TESTOBJS_C): %.o: %.c $(ALLHEADERS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   $(CC) -c -std=c99 -I$(SRCINCDIR) $(ALLCFLAGS) $< -o $@
</span> 
 $(TESTPRGS_C): %: %.o $(BUILDDLIBPATH)
        $(CC) $(TESTLDFLAGS) $< $(TESTLIBS) -o $@
</pre><pre style='margin:0'>

</pre>