<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>