From b35c3e14ff8383b0cbf52176ad6e8e3920c54c86 Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Mon, 4 Dec 2017 12:36:10 +0000
Subject: [PATCH] build: Build utils.[ch] and ld-*.[ch] into convenience
 libraries

Signed-off-by: Simon McVittie <smcv@collabora.com>
---
 Makefile.am | 58 ++++++++++++++++++-----------------------------------
 1 file changed, 20 insertions(+), 38 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index b5d143b1d..7674d6067 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -64,62 +64,44 @@ endif
 nobase_include_HEADERS += capsule/capsule-shim.h \
                           capsule/_int_dlopen.h
 
+noinst_LTLIBRARIES = utils/libutils.la \
+                     utils/libld.la
+
+utils_libutils_la_SOURCES  = utils/utils.c utils/utils.h
+utils_libld_la_SOURCES     = utils/ld-cache.c utils/ld-cache.h
+utils_libld_la_SOURCES    += utils/ld-libs.c utils/ld-libs.h
+utils_libld_la_LIBADD      = utils/libutils.la -ldl $(LIBELF_LIBS)
+
 # Mostly just a demo program, but keep this hanging around as it's a useful PoC
 bin_PROGRAMS           += capsule-elf-dump
 
-capsule_elf_dump_SOURCES        = utils/elf-dump.c utils/dump.c utils/utils.c
-capsule_elf_dump_LDADD          = -ldl
-capsule_elf_dump_SOURCES       += utils/utils.h
+capsule_elf_dump_SOURCES        = utils/elf-dump.c utils/dump.c
+capsule_elf_dump_LDADD          = utils/libutils.la -ldl
+# This looks redundant, but it forces Automake to build separate
+# instantiations of dump.o for elf-dump and libcapsule
 capsule_elf_dump_CFLAGS         = $(AM_CFLAGS)
 
 # now the rules for building our installables:
-capsule_symbols_SOURCES = utils/print-libstubs.c \
-                          utils/utils.c          \
-                          utils/ld-cache.c       \
-                          utils/ld-libs.c
-capsule_symbols_SOURCES += \
-                          utils/utils.h          \
-                          utils/ld-cache.h       \
-                          utils/ld-libs.h
-capsule_symbols_LDADD   = -ldl $(LIBELF_LIBS)
-# this looks like a no-op but it gives capsule_symbols its own target
-# so that libtool doesn't get bent out of shape about using an object
-# (ld-cache.o, ld-libs.o) as both part of a library and a standalone
-# executable:
-capsule_symbols_CFLAGS  = $(AM_CFLAGS)
-
-capsule_version_SOURCES = utils/print-version.c  \
-                          utils/utils.c          \
-                          utils/ld-cache.c       \
-                          utils/ld-libs.c
-capsule_version_SOURCES += \
-                          utils/utils.h          \
-                          utils/ld-cache.h       \
-                          utils/ld-libs.h
-capsule_version_LDADD   = -ldl $(LIBELF_LIBS)
-capsule_version_CFLAGS  = $(AM_CFLAGS)
+capsule_symbols_SOURCES = utils/print-libstubs.c
+capsule_symbols_LDADD   = utils/libld.la
 
+capsule_version_SOURCES = utils/print-version.c
+capsule_version_LDADD   = utils/libld.la
 
 libcapsule_la_SOURCES   = capsule/capsule-dlmopen.c  \
                           capsule/capsule-relocate.c \
                           capsule/capsule-init.c     \
                           capsule/capsule-private.h  \
                           capsule/capsule-wrappers.c \
-                          utils/utils.c              \
                           utils/dump.c               \
                           utils/process-pt-dynamic.c \
-                          utils/mmap-info.c          \
-                          utils/ld-cache.c           \
-                          utils/ld-libs.c
+                          utils/mmap-info.c
 libcapsule_la_LDFLAGS   = -version-number 0:1 -Wl,-z,nodelete
-libcapsule_la_LIBADD    = $(LIBELF_LIBS)
-libcapsule_la_SOURCES  += utils/utils.h              \
-                          utils/debug.h              \
+libcapsule_la_LIBADD    = utils/libld.la
+libcapsule_la_SOURCES  += utils/debug.h              \
                           utils/dump.h               \
                           utils/process-pt-dynamic.h \
-                          utils/mmap-info.h          \
-                          utils/ld-cache.h           \
-                          utils/ld-libs.h
+                          utils/mmap-info.h
 
 dist_pkgdata_DATA       = data/capsule-shim.mk    \
                           data/disabled.mk        \
-- 
GitLab