From: Martin Wilck <mwilck@xxxxxxxx> The purpose of the "abi" makefile target is to detect ABI changes. If using the version script the way we do (bumping major or minor versions), abigail detects a completely different ABI with every bump. This makes it very difficult to figure out actual changes in the code. This patch fixes that by using "versionless version scripts" for ABI generation. These version scripts just list all exported symbols, using just a single dummy version string. This is better than using no version script at all, because only exported symbols will be compared, whereas without a version script we'd be comparing non-exported symbols, too. Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> --- Makefile.inc | 1 + libdmmp/Makefile | 2 +- libmpathcmd/Makefile | 13 +++++++++++-- libmpathpersist/Makefile | 15 ++++++++++++--- libmpathvalid/Makefile | 16 +++++++++++++--- libmultipath/Makefile | 13 +++++++++++-- 6 files changed, 49 insertions(+), 11 deletions(-) diff --git a/Makefile.inc b/Makefile.inc index 17071ef..b340f2a 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -79,6 +79,7 @@ GZIP = gzip -9 -c RM = rm -f LN = ln -sf INSTALL_PROGRAM = install +NV_VERSION_SCRIPT = $(VERSION_SCRIPT:%.version=%-nv.version) # $(call TEST_CC_OPTION,option,fallback) # Test if the C compiler supports the option. diff --git a/libdmmp/Makefile b/libdmmp/Makefile index c91f0c3..de61668 100644 --- a/libdmmp/Makefile +++ b/libdmmp/Makefile @@ -58,7 +58,7 @@ uninstall: $(RM) $(DESTDIR)$(pkgconfdir)/$(PKGFILE) clean: dep_clean - $(RM) core *.a *.o *.gz *.so *.so.* *.abi + $(RM) core *.a *.o *.gz *.so *.so.* *.abi $(NV_VERSION_SCRIPT) $(RM) docs/man/*.gz $(MAKE) -C test clean diff --git a/libmpathcmd/Makefile b/libmpathcmd/Makefile index 5a7a6e9..72cab1e 100644 --- a/libmpathcmd/Makefile +++ b/libmpathcmd/Makefile @@ -15,7 +15,16 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT) $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -abi: $(LIBS:%.so.0=%.abi) +$(NV_VERSION_SCRIPT): $(VERSION_SCRIPT) + @printf 'NOVERSION {\nglobal:\n' >$@ + @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ + @printf 'local:\n\t*;\n};\n' >>$@ + +$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ + -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) + +abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) $(DEVLIB): $(LIBS) $(LN) $(LIBS) $@ @@ -33,7 +42,7 @@ uninstall: $(RM) $(DESTDIR)$(includedir)/mpath_cmd.h clean: dep_clean - $(RM) core *.a *.o *.so *.so.* *.gz *.abi + $(RM) core *.a *.o *.so *.so.* *.gz *.abi $(NV_VERSION_SCRIPT) include $(wildcard $(OBJS:.o=.d)) diff --git a/libmpathpersist/Makefile b/libmpathpersist/Makefile index d76918f..1e6399d 100644 --- a/libmpathpersist/Makefile +++ b/libmpathpersist/Makefile @@ -3,7 +3,7 @@ include ../Makefile.inc SONAME = 0 DEVLIB = libmpathpersist.so LIBS = $(DEVLIB).$(SONAME) -VERSION_SCRIPT := libmpathpersist.version +VERSION_SCRIPT:= libmpathpersist.version CFLAGS += $(LIB_CFLAGS) -I$(multipathdir) -I$(mpathpersistdir) -I$(mpathcmddir) LDFLAGS += -L$(multipathdir) -L$(mpathcmddir) @@ -18,7 +18,16 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT) $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) -abi: $(LIBS:%.so.0=%.abi) +$(NV_VERSION_SCRIPT): $(VERSION_SCRIPT) + @printf 'NOVERSION {\nglobal:\n' >$@ + @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ + @printf 'local:\n\t*;\n};\n' >>$@ + +$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ + -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) + +abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) $(DEVLIB): $(LIBS) $(LN) $(LIBS) $@ @@ -46,7 +55,7 @@ uninstall: $(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) clean: dep_clean - $(RM) core *.a *.o *.so *.so.* *.gz *.abi + $(RM) core *.a *.o *.so *.so.* *.gz *.abi $(NV_VERSION_SCRIPT) include $(wildcard $(OBJS:.o=.d)) diff --git a/libmpathvalid/Makefile b/libmpathvalid/Makefile index b579535..dce2610 100644 --- a/libmpathvalid/Makefile +++ b/libmpathvalid/Makefile @@ -15,10 +15,20 @@ OBJS = mpath_valid.o all: $(LIBS) $(LIBS): $(OBJS) $(VERSION_SCRIPT) - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ -o $@ $(OBJS) $(LIBDEPS) -Wl,--version-script=libmpathvalid.version + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ -o $@ $(OBJS) $(LIBDEPS) \ + -Wl,--version-script=$(VERSION_SCRIPT) $(LN) $(LIBS) $(DEVLIB) -abi: $(LIBS:%.so.0=%.abi) +$(NV_VERSION_SCRIPT): $(VERSION_SCRIPT) + @printf 'NOVERSION {\nglobal:\n' >$@ + @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ + @printf 'local:\n\t*;\n};\n' >>$@ + +$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ + -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) + +abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) install: $(LIBS) $(INSTALL_PROGRAM) -m 755 -d $(DESTDIR)$(syslibdir) @@ -33,7 +43,7 @@ uninstall: $(RM) $(DESTDIR)$(includedir)/mpath_valid.h clean: dep_clean - $(RM) core *.a *.o *.so *.so.* *.gz *.abi + $(RM) core *.a *.o *.so *.so.* *.gz *.abi $(NV_VERSION_SCRIPT) include $(wildcard $(OBJS:.o=.d)) diff --git a/libmultipath/Makefile b/libmultipath/Makefile index e8fd749..d4af1a5 100644 --- a/libmultipath/Makefile +++ b/libmultipath/Makefile @@ -81,7 +81,16 @@ $(LIBS): $(OBJS) $(VERSION_SCRIPT) $(DEVLIB): $(LIBS) $(LN) $(LIBS) $@ -abi: $(LIBS:%.so.0=%.abi) +$(NV_VERSION_SCRIPT): $(VERSION_SCRIPT) + @printf 'NOVERSION {\nglobal:\n' >$@ + @grep -P '^[ \t]+[a-zA-Z_][a-zA-Z0-9_]*;' $< >>$@ + @printf 'local:\n\t*;\n};\n' >>$@ + +$(LIBS:%.so.$(SONAME)=%-nv.so): $(OBJS) $(NV_VERSION_SCRIPT) + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \ + -Wl,--version-script=$(NV_VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS) + +abi: $(LIBS:%.so.$(SONAME)=%-nv.abi) ../tests/$(LIBS): $(OBJS) $(VERSION_SCRIPT) $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=`basename $@` \ @@ -101,7 +110,7 @@ uninstall: $(RM) $(DESTDIR)$(syslibdir)/$(DEVLIB) clean: dep_clean - $(RM) core *.a *.o *.so *.so.* *.gz *.abi nvme-ioctl.c nvme-ioctl.h + $(RM) core *.a *.o *.so *.so.* *.gz *.abi nvme-ioctl.c nvme-ioctl.h $(NV_VERSION_SCRIPT) include $(wildcard $(OBJS:.o=.d)) -- 2.34.0 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel