summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2018-03-18 15:46:36 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2018-03-19 21:36:36 +0000
commit8c82a54997f03827eacb9632bd83235355594852 (patch)
treef0d98786cab18849850d3db01ccd9f33575d5973
parentcaca159169381ee24022b84bf03376579007cb0f (diff)
downloadgnutls-tmp-abi-check-improve.tar.gz
The abi-check target was updated to check against the last tagtmp-abi-check-improve
As abi-dumper and abi-compliance-checker tools are not reliable when run across different systems, we now compare the previous tag ABI with the current compiled library. That is in contrast with the previous behavior of storing the output files of abi-dumper, which can become obsolete on a CI update. That also moves the ABI check only on the CI, and not in the 'make dist' rule as it takes significant time to run. This relates to an issue reported against libidn2's use of abi-compliance-checker but it affects gnutls as they share similar code: https://gitlab.com/libidn/libidn2/issues/42 Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
-rw-r--r--.gitlab-ci.yml7
-rw-r--r--CONTRIBUTING.md4
-rw-r--r--Makefile.am64
3 files changed, 50 insertions, 25 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7b74452b43..cbfd269121 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -7,7 +7,7 @@ stages:
# name to allow expiration of old caches.
cache:
- key: "$CI_JOB_NAME-ver2"
+ key: "$CI_JOB_NAME-ver3"
paths:
- cache/
@@ -60,7 +60,7 @@ abi-coverage.Fedora:
script:
- git submodule update --init --no-fetch
- make autoreconf
- - CFLAGS="-std=c99 -O2 -g" dash ./configure --disable-gcc-warnings --cache-file cache/config.cache --prefix=/usr --libdir=/usr/lib64 --disable-cxx --enable-code-coverage --disable-non-suiteb-curves --disable-maintainer-mode --disable-doc
+ - CFLAGS="-std=c99 -g -Og" dash ./configure --disable-gcc-warnings --cache-file cache/config.cache --prefix=/usr --libdir=/usr/lib64 --enable-code-coverage --disable-non-suiteb-curves --disable-maintainer-mode --disable-doc
&& make -j$(nproc)
- make abi-check
- make pic-check
@@ -74,6 +74,9 @@ abi-coverage.Fedora:
expire_in: 1 week
when: on_failure
paths:
+ - ./*.xml
+ - ./gnutls-prev-abi.tmp/
+ - compat_reports/
- tests/*.log
- tests/*/*.log
- tests/suite/*/*.log
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 3ddae0821e..cc63fe07d0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -113,6 +113,10 @@ As such, some questions to answer before adding a new API:
13.0 is made available? Would it harm the addition of a new protocol?
+The make rule 'abi-check' verifies that the ABI remained compatible since
+the last tagged release. It relies on the git tree and abi-compliance-checker.
+
+
# Constructed types:
The constructed types in gnutls always have the ```gnutls_``` prefix.
diff --git a/Makefile.am b/Makefile.am
index 200e356d4a..5b2c979a32 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -55,8 +55,6 @@ ACLOCAL_AMFLAGS = -I m4 -I gl/m4 -I src/libopts/m4 -I src/gl/m4 -I lib/unistring
EXTRA_DIST = cfg.mk maint.mk CONTRIBUTING.md README.md LICENSE AUTHORS NEWS \
ChangeLog THANKS INSTALL.md
-TMPFILE="abi-temp.xml"
-
pic-check:
@echo "Checking for position dependent code"
readelf -d $(builddir)/lib/.libs/libgnutls.so|grep TEXTREL; if test $$? = 0;then \
@@ -66,29 +64,49 @@ pic-check:
abi-dump:
@abi-dumper lib/.libs/libgnutls.so -lver $(VERSION) -o "./devel/ABI-$(VERSION)-$$(uname -m).dump" -public-headers lib/includes/gnutls/
- @echo "*******************************************************************************"
- @echo "You need to modify Makefile.am abi-check rule if you need to check this release"
- @echo "*******************************************************************************"
-abi-check:
- @rm -f $(TMPFILE)
+ABI_TMPCLONEDIR="gnutls-prev-abi.tmp"
+ABI_TMPFILE_CUR="abi-temp-cur.xml"
+ABI_TMPFILE_PRE="abi-temp-prev.xml"
+ABIREF := $(shell git for-each-ref --sort=taggerdate --format '%(refname)' refs/tags|tail -1)
+ABIVER := $(shell git for-each-ref --sort=taggerdate --format '%(refname)' refs/tags|tail -1|cut -d '/' -f 3|sed -e 's/gnutls_//' -e 's/_/./g')
+prev-tag-abi.stamp:
+ @rm -rf $(ABI_TMPCLONEDIR)
+ @git clone -l . $(ABI_TMPCLONEDIR)
+ @echo "Creating ABI for $(ABIVER)"
+ cd $(ABI_TMPCLONEDIR) && \
+ git checkout $(ABIREF) && \
+ make autoreconf && CFLAGS="-g -Og" ./configure --disable-doc && \
+ $(MAKE) -j$$(nproc) -C gl && $(MAKE) -j$$(nproc) -C lib && $(MAKE) -j$$(nproc) -C libdane
+ touch $@
+
+abi-check: prev-tag-abi.stamp
+ @rm -f $(ABI_TMPFILE_CUR) $(ABI_TMPFILE_PRE)
@echo "Checking libgnutls ABI"
- @echo "<version>$(VERSION)</version>" >$(TMPFILE)
- @echo "<headers>$(srcdir)/lib/includes/gnutls" >>$(TMPFILE)
- @echo "$(builddir)/lib/includes/gnutls</headers>" >>$(TMPFILE)
- @echo "<libs>$(builddir)/lib/.libs</libs>" >>$(TMPFILE)
- for i in 3.4.0 3.4.17 3.5.8 3.6.0;do \
- test ! -f "$(srcdir)/devel/ABI-$$i-$$(uname -m).dump" || \
- abi-compliance-checker -abi -lib gnutls -old "$(srcdir)/devel/ABI-$$i-$$(uname -m).dump" -new $(TMPFILE) -skip-symbols $(srcdir)/devel/abi-unchecked-symbols; \
- done
+ @echo "<version>$(VERSION)</version>" >$(ABI_TMPFILE_CUR)
+ @echo "<headers>$(srcdir)/lib/includes/gnutls" >>$(ABI_TMPFILE_CUR)
+ @echo "$(builddir)/lib/includes/gnutls</headers>" >>$(ABI_TMPFILE_CUR)
+ @echo "<libs>$(builddir)/lib/.libs</libs>" >>$(ABI_TMPFILE_CUR)
+ @echo "<version>$(ABIVER)</version>" >$(ABI_TMPFILE_PRE)
+ @echo "<headers>$(builddir)/$(ABI_TMPCLONEDIR)/lib/includes/gnutls" >>$(ABI_TMPFILE_PRE)
+ @echo "$(builddir)/$(ABI_TMPCLONEDIR)/lib/includes/gnutls</headers>" >>$(ABI_TMPFILE_PRE)
+ @echo "<libs>$(builddir)/$(ABI_TMPCLONEDIR)/lib/.libs</libs>" >>$(ABI_TMPFILE_PRE)
+ PATH="/sbin$(PATH_SEPARATOR)$$PATH" \
+ abi-compliance-checker -abi -lib gnutls -old $(ABI_TMPFILE_PRE) -new $(ABI_TMPFILE_CUR) -skip-symbols $(srcdir)/devel/abi-unchecked-symbols
@echo "Checking libgnutls-dane ABI"
- @echo "<version>$(VERSION)</version>" >$(TMPFILE)
- @echo "<headers>$(srcdir)/libdane/includes/gnutls" >>$(TMPFILE)
- @echo "$(srcdir)/lib/includes/gnutls" >>$(TMPFILE)
- @echo "$(builddir)/lib/includes/gnutls</headers>" >>$(TMPFILE)
- @echo "<libs>$(builddir)/libdane/.libs</libs>" >>$(TMPFILE)
- test ! -f "$(srcdir)/devel/ABI-dane-$$(uname -m).dump" || abi-compliance-checker -abi -lib gnutls-dane -old "$(srcdir)/devel/ABI-dane-$$(uname -m).dump" -new $(TMPFILE)
- @rm -f $(TMPFILE)
+ @echo "<version>$(VERSION)</version>" >$(ABI_TMPFILE_CUR)
+ @echo "<headers>$(srcdir)/libdane/includes/gnutls" >>$(ABI_TMPFILE_CUR)
+ @echo "$(srcdir)/lib/includes/gnutls" >>$(ABI_TMPFILE_CUR)
+ @echo "$(builddir)/lib/includes/gnutls</headers>" >>$(ABI_TMPFILE_CUR)
+ @echo "<libs>$(builddir)/libdane/.libs</libs>" >>$(ABI_TMPFILE_CUR)
+ @echo "<version>3.5.0</version>" >$(ABI_TMPFILE_PRE)
+ @echo "<headers>$(builddir)/$(ABI_TMPCLONEDIR)/libdane/includes/gnutls" >>$(ABI_TMPFILE_PRE)
+ @echo "$(builddir)/$(ABI_TMPCLONEDIR)/lib/includes/gnutls" >>$(ABI_TMPFILE_PRE)
+ @echo "$(builddir)/$(ABI_TMPCLONEDIR)/lib/includes/gnutls</headers>" >>$(ABI_TMPFILE_PRE)
+ @echo "<libs>$(builddir)/$(ABI_TMPCLONEDIR)/libdane/.libs</libs>" >>$(ABI_TMPFILE_PRE)
+ PATH="/sbin$(PATH_SEPARATOR)$$PATH" \
+ abi-compliance-checker -abi -lib gnutls-dane -old $(ABI_TMPFILE_PRE) -new $(ABI_TMPFILE_CUR)
+ @rm -f $(ABI_TMPFILE_CUR) $(ABI_TMPFILE_PRE)
symbol-check:
@objdump -T $(builddir)/lib/.libs/libgnutls.so | grep -v ' \*UND\*' | awk '{print $$7 "@" $$6;}' | grep -v GNUTLS_FIPS140 | grep -v GNUTLS_PRIVATE | grep -v '^@' | sort -u >symbols.last.tmp
@@ -141,7 +159,7 @@ files-update: libopts-check
@echo "updated auto-generated files; please use git diff to verify the correctness of the changes"
@echo "******************************************************************************************"
-dist-hook: libopts-check symbol-check abi-check
+dist-hook: libopts-check symbol-check
make -C doc/ compare-makefile
make -C doc/ compare-exported
make -C doc/manpages compare-makefile