From 4cdbbf1d06fc7226ff770a028f09b3b43ec8bda4 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 10 Jun 2023 15:52:44 +0200 Subject: [PATCH v2] abidiff tests Discussion: https://www.postgresql.org/message-id/CAH2-Wzk7tvgLXzOZ8a22aF-gmO5gHojWTYRvAk5ZgOvTrcEQeg@mail.gmail.com --- .cirrus.yml | 19 +- meson.build | 19 + meson_options.txt | 6 + src/backend/meson.build | 16 + src/backend/postgres.abidiff-suppr.ini | 3 + src/backend/postgres.x86_64-linux.abi.xml | 2 + .../libecpg_compat.x86_64-linux.abi.xml | 325 ++ src/interfaces/ecpg/compatlib/meson.build | 14 + .../ecpg/ecpglib/libecpg.x86_64-linux.abi.xml | 482 +++ src/interfaces/ecpg/ecpglib/meson.build | 14 + .../libpgtypes.x86_64-linux.abi.xml | 392 +++ src/interfaces/ecpg/pgtypeslib/meson.build | 14 + .../libpq/libpq.x86_64-linux.abi.xml | 2634 +++++++++++++++++ src/interfaces/libpq/meson.build | 14 + 14 files changed, 3951 insertions(+), 3 deletions(-) create mode 100644 src/backend/postgres.abidiff-suppr.ini create mode 100644 src/backend/postgres.x86_64-linux.abi.xml create mode 100644 src/interfaces/ecpg/compatlib/libecpg_compat.x86_64-linux.abi.xml create mode 100644 src/interfaces/ecpg/ecpglib/libecpg.x86_64-linux.abi.xml create mode 100644 src/interfaces/ecpg/pgtypeslib/libpgtypes.x86_64-linux.abi.xml create mode 100644 src/interfaces/libpq/libpq.x86_64-linux.abi.xml diff --git a/.cirrus.yml b/.cirrus.yml index 113f454524..e22e0bc05d 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -172,7 +172,7 @@ task: chown root:postgres /tmp/cores sysctl kern.corefile='/tmp/cores/%N.%P.core' setup_additional_packages_script: | - #pkg install -y ... + pkg install -y libabigail # NB: Intentionally build without -Dllvm. The freebsd image size is already # large enough to make VM startup slow, and even without llvm freebsd @@ -181,6 +181,7 @@ task: su postgres <<-EOF meson setup \ --buildtype=debug \ + -Dabidw=enabled \ -Dcassert=true -Duuid=bsd -Dtcl_version=tcl86 -Ddtrace=auto \ -DPG_TEST_EXTRA="$PG_TEST_EXTRA" \ -Dextra_lib_dirs=/usr/local/lib -Dextra_include_dirs=/usr/local/include/ \ @@ -210,6 +211,11 @@ task: build/tmp_install/usr/local/pgsql/bin/pg_ctl -D build/runningcheck stop EOF + always: + abidw_artifacts: + path: "build/**/*.abi.xml" + type: application/xml + on_failure: # if the server continues running, it often causes cirrus-ci to fail # during upload, as it doesn't expect artifacts to change size @@ -322,8 +328,8 @@ task: EOF setup_additional_packages_script: | - #apt-get update - #DEBIAN_FRONTEND=noninteractive apt-get -y install ... + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get -y install abigail-tools matrix: - name: Linux - Debian Bullseye - Autoconf @@ -364,6 +370,7 @@ task: su postgres <<-EOF meson setup \ --buildtype=debug \ + -Dabidiff=enabled -Dabidw=enabled \ -Dcassert=true \ ${LINUX_MESON_FEATURES} \ -DPG_TEST_EXTRA="$PG_TEST_EXTRA" \ @@ -377,6 +384,7 @@ task: export CC='ccache gcc -m32' meson setup \ --buildtype=debug \ + -Dabidw=enabled \ -Dcassert=true \ ${LINUX_MESON_FEATURES} \ -Dllvm=disabled \ @@ -409,6 +417,11 @@ task: PYTHONCOERCECLOCALE=0 LANG=C meson test $MTEST_ARGS -C build-32 --num-processes ${TEST_JOBS} EOF + always: + abidw_artifacts: + path: "build/**/*.abi.xml" + type: application/xml + on_failure: <<: *on_failure_meson diff --git a/meson.build b/meson.build index 16b2e86646..2803f87002 100644 --- a/meson.build +++ b/meson.build @@ -2567,6 +2567,25 @@ endif +############################################################### +# abidw/abidiff +############################################################### + + +abidiff = find_program('abidiff', required: get_option('abidiff')) + +abidw = find_program('abidw', required: get_option('abidw'), disabler: true) +abidw_flags = [ + '--drop-undefined-syms', + '--no-comp-dir-path', + '--no-elf-needed', + '--no-show-locs', + '--type-id-style', 'hash', +] +abidw_cmd = [abidw, abidw_flags, '--out-file', '@OUTPUT@', '@INPUT@'] + + + ############################################################### # Build ############################################################### diff --git a/meson_options.txt b/meson_options.txt index 5b44a8829d..ba65a2cc98 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -73,6 +73,12 @@ option('rpath', type : 'boolean', value: true, # External dependencies +option('abidiff', type : 'feature', value: 'disabled', + description: 'enable abidiff tests') + +option('abidw', type : 'feature', value: 'disabled', + description: 'build ELF ABI serializations') + option('bonjour', type : 'feature', value: 'auto', description: 'build with Bonjour support') diff --git a/src/backend/meson.build b/src/backend/meson.build index ccfc382fcf..9c29c7ec26 100644 --- a/src/backend/meson.build +++ b/src/backend/meson.build @@ -147,6 +147,22 @@ postgres = executable('postgres', backend_targets += postgres +custom_target('postgres.abi.xml', + input: postgres, + output: 'postgres.@0@-@1@.abi.xml'.format(host_cpu, host_system), + command: abidw_cmd, + build_by_default: true) + +if get_option('abidiff').enabled() + test('postgres.abidiff', + abidiff, + args: ['--no-added-syms', + '--suppr', files('postgres.abidiff-suppr.ini'), + files('postgres.@0@-@1@.abi.xml'.format(host_cpu, host_system)), + postgres], + suite: 'abidiff') +endif + pg_mod_c_args = cflags_mod pg_mod_cpp_args = cxxflags_mod pg_mod_link_args = ldflags_sl + ldflags_mod diff --git a/src/backend/postgres.abidiff-suppr.ini b/src/backend/postgres.abidiff-suppr.ini new file mode 100644 index 0000000000..8e5eaa26f5 --- /dev/null +++ b/src/backend/postgres.abidiff-suppr.ini @@ -0,0 +1,3 @@ +[suppress_file] +label = remove upon release +file_name_regexp = ^postgres$ diff --git a/src/backend/postgres.x86_64-linux.abi.xml b/src/backend/postgres.x86_64-linux.abi.xml new file mode 100644 index 0000000000..93c117e9ef --- /dev/null +++ b/src/backend/postgres.x86_64-linux.abi.xml @@ -0,0 +1,2 @@ + + diff --git a/src/interfaces/ecpg/compatlib/libecpg_compat.x86_64-linux.abi.xml b/src/interfaces/ecpg/compatlib/libecpg_compat.x86_64-linux.abi.xml new file mode 100644 index 0000000000..5850b7d90c --- /dev/null +++ b/src/interfaces/ecpg/compatlib/libecpg_compat.x86_64-linux.abi.xml @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/interfaces/ecpg/compatlib/meson.build b/src/interfaces/ecpg/compatlib/meson.build index 16d73db88b..eb5f2a292b 100644 --- a/src/interfaces/ecpg/compatlib/meson.build +++ b/src/interfaces/ecpg/compatlib/meson.build @@ -41,6 +41,20 @@ ecpg_compat_so = shared_library('libecpg_compat', ) ecpg_targets += ecpg_compat_so +custom_target('libecpg_compat.abi.xml', + input: ecpg_compat_so, + output: 'libecpg_compat.@0@-@1@.abi.xml'.format(host_cpu, host_system), + command: abidw_cmd, + build_by_default: true) + +if get_option('abidiff').enabled() + test('libecpg_compat.abidiff', + abidiff, + args: [files('libecpg_compat.@0@-@1@.abi.xml'.format(host_cpu, host_system)), + ecpg_compat_so], + suite: 'abidiff') +endif + pkgconfig.generate( name: 'libecpg_compat', description: 'PostgreSQL libecpg_compat library', diff --git a/src/interfaces/ecpg/ecpglib/libecpg.x86_64-linux.abi.xml b/src/interfaces/ecpg/ecpglib/libecpg.x86_64-linux.abi.xml new file mode 100644 index 0000000000..38dbc32f1c --- /dev/null +++ b/src/interfaces/ecpg/ecpglib/libecpg.x86_64-linux.abi.xml @@ -0,0 +1,482 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/interfaces/ecpg/ecpglib/meson.build b/src/interfaces/ecpg/ecpglib/meson.build index da8d304f54..894a9f3c42 100644 --- a/src/interfaces/ecpg/ecpglib/meson.build +++ b/src/interfaces/ecpg/ecpglib/meson.build @@ -52,6 +52,20 @@ ecpglib_so = shared_library('libecpg', ) ecpg_targets += ecpglib_so +custom_target('libecpg.abi.xml', + input: ecpglib_so, + output: 'libecpg.@0@-@1@.abi.xml'.format(host_cpu, host_system), + command: abidw_cmd, + build_by_default: true) + +if get_option('abidiff').enabled() + test('libecpg.abidiff', + abidiff, + args: [files('libecpg.@0@-@1@.abi.xml'.format(host_cpu, host_system)), + ecpglib_so], + suite: 'abidiff') +endif + pkgconfig.generate( name: 'libecpg', description: 'PostgreSQL libecpg library', diff --git a/src/interfaces/ecpg/pgtypeslib/libpgtypes.x86_64-linux.abi.xml b/src/interfaces/ecpg/pgtypeslib/libpgtypes.x86_64-linux.abi.xml new file mode 100644 index 0000000000..934ad2d62e --- /dev/null +++ b/src/interfaces/ecpg/pgtypeslib/libpgtypes.x86_64-linux.abi.xml @@ -0,0 +1,392 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/interfaces/ecpg/pgtypeslib/meson.build b/src/interfaces/ecpg/pgtypeslib/meson.build index f177dd35a9..967b55c729 100644 --- a/src/interfaces/ecpg/pgtypeslib/meson.build +++ b/src/interfaces/ecpg/pgtypeslib/meson.build @@ -46,6 +46,20 @@ ecpg_pgtypes_so = shared_library('libpgtypes', ) ecpg_targets += ecpg_pgtypes_so +custom_target('libpgtypes.abi.xml', + input: ecpg_pgtypes_so, + output: 'libpgtypes.@0@-@1@.abi.xml'.format(host_cpu, host_system), + command: abidw_cmd, + build_by_default: true) + +if get_option('abidiff').enabled() + test('libpgtypes.abidiff', + abidiff, + args: [files('libpgtypes.@0@-@1@.abi.xml'.format(host_cpu, host_system)), + ecpg_pgtypes_so], + suite: 'abidiff') +endif + pkgconfig.generate( name: 'libpgtypes', description: 'PostgreSQL libpgtypes library', diff --git a/src/interfaces/libpq/libpq.x86_64-linux.abi.xml b/src/interfaces/libpq/libpq.x86_64-linux.abi.xml new file mode 100644 index 0000000000..fff89465c7 --- /dev/null +++ b/src/interfaces/libpq/libpq.x86_64-linux.abi.xml @@ -0,0 +1,2634 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/interfaces/libpq/meson.build b/src/interfaces/libpq/meson.build index 80e6a15adf..42b258503a 100644 --- a/src/interfaces/libpq/meson.build +++ b/src/interfaces/libpq/meson.build @@ -84,6 +84,20 @@ libpq = declare_dependency( include_directories: [include_directories('.')] ) +custom_target('libpq.abi.xml', + input: libpq_so, + output: 'libpq.@0@-@1@.abi.xml'.format(host_cpu, host_system), + command: abidw_cmd, + build_by_default: true) + +if get_option('abidiff').enabled() + test('libpq.abidiff', + abidiff, + args: [files('libpq.@0@-@1@.abi.xml'.format(host_cpu, host_system)), + libpq_so], + suite: 'abidiff') +endif + pkgconfig.generate( name: 'libpq', description: 'PostgreSQL libpq library', base-commit: 9aee26a491ba9b7ceff40e6192183ab7200b6bfb -- 2.41.0