@@ -397,13 +397,6 @@ jobs:
397397 run : |
398398 cargo build --release --target ${{matrix.target}} --features=semver-prefix
399399 objdump -tT target/${{matrix.target}}/release/deps/libz_rs.so | grep -q -E "LIBZ_RS_SYS_v0.[0-9]+.x_uncompress" || (echo "symbol not found!" && exit 1)
400- - name : " cdylib: versioned symbols"
401- working-directory : libz-rs-sys-cdylib
402- run : |
403- cargo build --release --target ${{matrix.target}} --features=gz
404- cc -shared -Wl,--gc-sections -Wl,--whole-archive target/${{matrix.target}}/release/libz_rs.a -Wl,--no-whole-archive -Wl,--version-script=include/zlib.map -Wl,--undefined-version -Wl,-soname,libz_rs.so.1 -lc -o target/${{matrix.target}}/release/libz_rs.versioned.so
405- objdump -T target/${{matrix.target}}/release/libz_rs.versioned.so | grep "ZLIB"
406- objdump -T target/${{matrix.target}}/release/libz_rs.versioned.so | grep -q -E "ZLIB_1.2.2.3 deflateTune" || (echo "symbol not found!" && exit 1)
407400 - run : sudo apt-get update && sudo apt-get install -y --no-install-recommends valgrind
408401 - name : " cdylib: example.c"
409402 env :
@@ -424,6 +417,71 @@ jobs:
424417 ./example
425418 valgrind --track-origins=yes --error-exitcode=1 ./example
426419
420+
421+ symbol-versioning :
422+ name : Symbol versioning
423+ strategy :
424+ matrix :
425+ include :
426+ - target : x86_64-unknown-linux-gnu
427+ features :
428+ - ' '
429+ runs-on : ubuntu-latest
430+ steps :
431+ - name : Checkout sources
432+ uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
433+ with :
434+ persist-credentials : false
435+ - name : Install rust toolchain
436+ uses : dtolnay/rust-toolchain@be73d7920c329f220ce78e0234b8f96b7ae60248
437+ with :
438+ toolchain : nightly # for c-variadic functions
439+ targets : ${{matrix.target}}
440+
441+ - name : Install apt packages
442+ uses : awalsh128/cache-apt-pkgs-action@v1
443+ with :
444+ packages : build-essential cmake pkg-config abigail-tools binutils
445+ version : 2
446+
447+ - name : Build zlib-ng (in zlib compat mode)
448+ working-directory : /tmp
449+ run : |
450+ git clone --depth 1 https://github.com/zlib-ng/zlib-ng.git
451+ cmake -B zlib-ng-build -S zlib-ng \
452+ -DCMAKE_BUILD_TYPE=Release \
453+ -DZLIB_COMPAT=ON
454+ cmake --build zlib-ng-build --config Release
455+ ls /tmp/zlib-ng-build
456+
457+ - name : Build libz_rs.versioned.so
458+ working-directory : libz-rs-sys-cdylib
459+ run : |
460+ cargo +nightly build --release --target ${{matrix.target}} --features=gz,gzprintf
461+
462+ cc -shared \
463+ -Wl,--gc-sections \
464+ -Wl,--whole-archive target/${{matrix.target}}/release/libz_rs.a \
465+ -Wl,--no-whole-archive \
466+ -Wl,--version-script=include/zlib.map \
467+ -Wl,--undefined-version \
468+ -Wl,-soname,libz_rs.so.1 \
469+ -lc \
470+ -o target/${{matrix.target}}/release/libz_rs.versioned.so
471+
472+ ls target/${{matrix.target}}/release
473+
474+ - name : Check versioned symbols
475+ working-directory : libz-rs-sys-cdylib
476+ run : |
477+ objdump -T target/${{matrix.target}}/release/libz_rs.versioned.so | grep "ZLIB"
478+ objdump -T target/${{matrix.target}}/release/libz_rs.versioned.so | grep -q -E "ZLIB_1\.2\.2\.3.*deflateTune" || (echo "symbol not found!" && exit 1)
479+
480+ - name : ABI comparison vs zlib-ng
481+ working-directory : libz-rs-sys-cdylib
482+ run : |
483+ abidiff --no-unreferenced-symbols --ignore-soname /tmp/zlib-ng-build/libz.so.1 target/${{matrix.target}}/release/libz_rs.versioned.so
484+
427485 cargo-c-dynamic-library :
428486 name : cargo-c dynamic library
429487 strategy :
0 commit comments