On Thu, Dec 02, 2021 at 05:06:43PM +0100, mwilck@xxxxxxxx wrote: > From: Martin Wilck <mwilck@xxxxxxxx> > I assume that am supposed to ignore this patch, and look at "multipath-tools: generate abi with dummy version script" instead, right? -Ben > 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