@@ -398,6 +398,7 @@ endif
dummy := $(call unnest-vars,, \
stub-obj-y \
authz-obj-y \
+ authz-impl-obj-y \
chardev-obj-y \
util-obj-y \
qga-obj-y \
@@ -446,7 +447,7 @@ qemu-options.def: $(SRC_PATH)/qemu-options.hx $(SRC_PATH)/scripts/hxtool
SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS))
SOFTMMU_SUBDIR_RULES=$(filter %-softmmu,$(SUBDIR_RULES))
-$(SOFTMMU_SUBDIR_RULES): $(authz-obj-y)
+$(SOFTMMU_SUBDIR_RULES): $(authz-obj-y) $(authz-impl-obj-y)
$(SOFTMMU_SUBDIR_RULES): $(block-obj-y)
$(SOFTMMU_SUBDIR_RULES): $(chardev-obj-y)
$(SOFTMMU_SUBDIR_RULES): $(crypto-obj-y)
@@ -515,7 +516,7 @@ COMMON_LDADDS = libqemuutil.a
qemu-img.o: qemu-img-cmds.h
qemu-img$(EXESUF): qemu-img.o $(authz-obj-y) $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
-qemu-nbd$(EXESUF): qemu-nbd.o $(authz-obj-y) $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
+qemu-nbd$(EXESUF): qemu-nbd.o $(authz-obj-y) $(authz-impl-obj-y) $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
qemu-io$(EXESUF): qemu-io.o $(authz-obj-y) $(block-obj-y) $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o $(COMMON_LDADDS)
@@ -9,6 +9,7 @@ chardev-obj-y = chardev/
# authz-obj-y is code used by both qemu system emulation and qemu-img
authz-obj-y = authz/
+authz-impl-obj-y = authz/
#######################################################################
# block-obj-y is code used by both qemu system emulation and qemu-img
@@ -176,6 +176,7 @@ all-obj-y := $(obj-y)
include $(SRC_PATH)/Makefile.objs
dummy := $(call unnest-vars,.., \
authz-obj-y \
+ authz-impl-obj-y \
block-obj-y \
block-obj-m \
chardev-obj-y \
@@ -187,7 +188,7 @@ dummy := $(call unnest-vars,.., \
common-obj-m)
all-obj-y += $(common-obj-y)
all-obj-y += $(qom-obj-y)
-all-obj-$(CONFIG_SOFTMMU) += $(authz-obj-y)
+all-obj-$(CONFIG_SOFTMMU) += $(authz-obj-y) $(authz-impl-obj-y)
all-obj-$(CONFIG_SOFTMMU) += $(block-obj-y) $(chardev-obj-y)
all-obj-$(CONFIG_USER_ONLY) += $(crypto-aes-obj-y)
all-obj-$(CONFIG_SOFTMMU) += $(crypto-obj-y)
@@ -1,7 +1,8 @@
authz-obj-y += base.o
-authz-obj-y += simple.o
-authz-obj-y += list.o
-authz-obj-y += listfile.o
-authz-obj-$(CONFIG_AUTH_PAM) += pamacct.o
+
+authz-impl-obj-y += simple.o
+authz-impl-obj-y += list.o
+authz-impl-obj-y += listfile.o
+authz-impl-obj-$(CONFIG_AUTH_PAM) += pamacct.o
pamacct.o-libs = -lpam
@@ -496,10 +496,10 @@ test-qapi-obj-y = tests/test-qapi-types.o \
tests/test-qapi-visit-sub-sub-module.o \
tests/test-qapi-introspect.o \
$(test-qom-obj-y)
-benchmark-crypto-obj-$(CONFIG_BLOCK) = $(authz-obj-y) $(crypto-obj-y) $(test-qom-obj-y)
-test-crypto-obj-$(CONFIG_BLOCK) = $(authz-obj-y) $(crypto-obj-y) $(test-qom-obj-y)
+benchmark-crypto-obj-$(CONFIG_BLOCK) = $(authz-obj-y) $(authz-impl-obj-y) $(crypto-obj-y) $(test-qom-obj-y)
+test-crypto-obj-$(CONFIG_BLOCK) = $(authz-obj-y) $(authz-impl-obj-y) $(crypto-obj-y) $(test-qom-obj-y)
test-io-obj-$(CONFIG_BLOCK) = $(io-obj-y) $(test-crypto-obj-y)
-test-authz-obj-$(CONFIG_BLOCK) = $(test-qom-obj-y) $(authz-obj-y)
+test-authz-obj-$(CONFIG_BLOCK) = $(test-qom-obj-y) $(authz-obj-y) $(authz-impl-obj-y)
test-block-obj-$(CONFIG_BLOCK) = $(block-obj-y) $(test-io-obj-y) tests/iothread.o
tests/check-qnum$(EXESUF): tests/check-qnum.o $(test-util-obj-y)
The core authorization API is a dependancy of the crypto code for the TLS servers. The TLS server code is pulled into anything which links to the crypto objects, which is every QEMU tool. This in turns means that every tool ended up linking to the authz code, which in turn pulls in the PAM library dep. This splits the authz code so that everything links to the base object which defines the API. Only the system emulators and qemu-nbd link to the object classes providing the implementations of the authz object API. This has the effect of removing the PAM library dep from qemu-img, qemu-io and other helper tools. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- In v3: - Now with 100% fewer merge conflicts against master (hopefully...) In v2: - Now with 100% less unit test failures due to missing objs :-) Makefile | 5 +++-- Makefile.objs | 1 + Makefile.target | 3 ++- authz/Makefile.objs | 9 +++++---- tests/Makefile.include | 6 +++--- 5 files changed, 14 insertions(+), 10 deletions(-)