Deb: Track libmariadb3 ABI explicitly to detect future symbol changes

When this file exists, Debian builds will automatically compare the built
ABI and symbols to the ones defined in the list. If there is a mismatch,
developers need to update the libmariadb3.symbols file, otherwise the build
fails.

This ensures there are no accidental symbol changes. This also helps track
what symbols changed and in what versions.

Also add a README embedded in the sources to facilitate correct use of this
new file.

This change is made for branch 10.2, as it was the first server version to
introduce an embedded libmariadb3 client library, and from this version
the file with the same libmariadb3 specific content will be merged to
10.3, 10.4 and 10.5.

Related: MDEV-21732
This commit is contained in:
Otto Kekäläinen 2020-02-20 13:05:15 +02:00
parent 347f6d01e3
commit 4775a40627
2 changed files with 378 additions and 0 deletions

336
debian/libmariadb3.symbols vendored Normal file
View file

@ -0,0 +1,336 @@
libmariadb.so.3 libmariadb3 #MINVER#
* Build-Depends-Package: libmariadb-dev
libmariadb_3@libmariadb_3 3.0.0
libmariadbclient_18@libmariadbclient_18 3.0.0
libmysqlclient_18@libmysqlclient_18 3.0.0
ma_pvio_register_callback@libmariadb_3 3.0.0
mariadb_cancel@libmariadb_3 3.0.0
mariadb_connection@libmariadb_3 3.0.0
mariadb_convert_string@libmariadb_3 3.0.0
mariadb_deinitialize_ssl@libmariadb_3 3.0.0
mariadb_free_rpl_event@libmariadb_3 3.1.0
mariadb_get_charset_by_name@libmariadb_3 3.0.0
mariadb_get_charset_by_nr@libmariadb_3 3.0.0
mariadb_get_info@libmariadb_3 3.0.0
mariadb_get_infov@libmariadb_3 3.0.0
mariadb_reconnect@libmariadb_3 3.0.0
mariadb_rpl_close@libmariadb_3 3.1.0
mariadb_rpl_fetch@libmariadb_3 3.1.0
mariadb_rpl_get_optionsv@libmariadb_3 3.1.0
mariadb_rpl_open@libmariadb_3 3.1.0
mariadb_rpl_optionsv@libmariadb_3 3.1.0
mariadb_stmt_execute_direct@libmariadb_3 3.0.0
mariadb_stmt_fetch_fields@libmariadb_3 3.1.0
mysql_affected_rows@libmariadbclient_18 3.0.0
mysql_affected_rows@libmysqlclient_18 3.0.0
mysql_autocommit_cont@libmariadb_3 3.0.0
mysql_autocommit@libmariadbclient_18 3.0.0
mysql_autocommit@libmysqlclient_18 3.0.0
mysql_autocommit_start@libmariadb_3 3.0.0
mysql_change_user_cont@libmariadb_3 3.0.0
mysql_change_user@libmariadbclient_18 3.0.0
mysql_change_user@libmysqlclient_18 3.0.0
mysql_change_user_start@libmariadb_3 3.0.0
mysql_character_set_name@libmariadbclient_18 3.0.0
mysql_character_set_name@libmysqlclient_18 3.0.0
mysql_client_find_plugin@libmariadbclient_18 3.0.0
mysql_client_find_plugin@libmysqlclient_18 3.0.0
mysql_client_register_plugin@libmariadbclient_18 3.0.0
mysql_client_register_plugin@libmysqlclient_18 3.0.0
mysql_close_cont@libmariadb_3 3.0.0
mysql_close@libmariadbclient_18 3.0.0
mysql_close@libmysqlclient_18 3.0.0
mysql_close_start@libmariadb_3 3.0.0
mysql_commit_cont@libmariadb_3 3.0.0
mysql_commit@libmariadbclient_18 3.0.0
mysql_commit@libmysqlclient_18 3.0.0
mysql_commit_start@libmariadb_3 3.0.0
mysql_data_seek@libmariadbclient_18 3.0.0
mysql_data_seek@libmysqlclient_18 3.0.0
mysql_debug@libmariadbclient_18 3.0.0
mysql_debug@libmysqlclient_18 3.0.0
mysql_dump_debug_info_cont@libmariadb_3 3.0.0
mysql_dump_debug_info@libmariadbclient_18 3.0.0
mysql_dump_debug_info@libmysqlclient_18 3.0.0
mysql_dump_debug_info_start@libmariadb_3 3.0.0
mysql_embedded@libmariadbclient_18 3.0.0
mysql_embedded@libmysqlclient_18 3.0.0
mysql_eof@libmariadbclient_18 3.0.0
mysql_eof@libmysqlclient_18 3.0.0
mysql_errno@libmariadbclient_18 3.0.0
mysql_errno@libmysqlclient_18 3.0.0
mysql_error@libmariadbclient_18 3.0.0
mysql_error@libmysqlclient_18 3.0.0
mysql_escape_string@libmariadbclient_18 3.0.0
mysql_escape_string@libmysqlclient_18 3.0.0
mysql_fetch_field_direct@libmariadbclient_18 3.0.0
mysql_fetch_field_direct@libmysqlclient_18 3.0.0
mysql_fetch_field@libmariadbclient_18 3.0.0
mysql_fetch_field@libmysqlclient_18 3.0.0
mysql_fetch_fields@libmariadbclient_18 3.0.0
mysql_fetch_fields@libmysqlclient_18 3.0.0
mysql_fetch_lengths@libmariadbclient_18 3.0.0
mysql_fetch_lengths@libmysqlclient_18 3.0.0
mysql_fetch_row_cont@libmariadb_3 3.0.0
mysql_fetch_row@libmariadbclient_18 3.0.0
mysql_fetch_row@libmysqlclient_18 3.0.0
mysql_fetch_row_start@libmariadb_3 3.0.0
mysql_field_count@libmariadbclient_18 3.0.0
mysql_field_count@libmysqlclient_18 3.0.0
mysql_field_seek@libmariadbclient_18 3.0.0
mysql_field_seek@libmysqlclient_18 3.0.0
mysql_field_tell@libmariadbclient_18 3.0.0
mysql_field_tell@libmysqlclient_18 3.0.0
mysql_free_result_cont@libmariadb_3 3.0.0
mysql_free_result@libmariadbclient_18 3.0.0
mysql_free_result@libmysqlclient_18 3.0.0
mysql_free_result_start@libmariadb_3 3.0.0
mysql_get_character_set_info@libmariadbclient_18 3.0.0
mysql_get_character_set_info@libmysqlclient_18 3.0.0
mysql_get_charset_by_name@libmariadbclient_18 3.0.0
mysql_get_charset_by_name@libmysqlclient_18 3.0.0
mysql_get_charset_by_nr@libmariadbclient_18 3.0.0
mysql_get_charset_by_nr@libmysqlclient_18 3.0.0
mysql_get_client_info@libmariadbclient_18 3.0.0
mysql_get_client_info@libmysqlclient_18 3.0.0
mysql_get_client_version@libmariadbclient_18 3.0.0
mysql_get_client_version@libmysqlclient_18 3.0.0
mysql_get_host_info@libmariadbclient_18 3.0.0
mysql_get_host_info@libmysqlclient_18 3.0.0
mysql_get_option@libmariadbclient_18 3.0.0
mysql_get_option@libmysqlclient_18 3.0.0
mysql_get_optionv@libmariadbclient_18 3.0.0
mysql_get_optionv@libmysqlclient_18 3.0.0
mysql_get_parameters@libmariadbclient_18 3.0.0
mysql_get_parameters@libmysqlclient_18 3.0.0
mysql_get_proto_info@libmariadbclient_18 3.0.0
mysql_get_proto_info@libmysqlclient_18 3.0.0
mysql_get_server_info@libmariadbclient_18 3.0.0
mysql_get_server_info@libmysqlclient_18 3.0.0
mysql_get_server_name@libmariadbclient_18 3.0.0
mysql_get_server_name@libmysqlclient_18 3.0.0
mysql_get_server_version@libmariadbclient_18 3.0.0
mysql_get_server_version@libmysqlclient_18 3.0.0
mysql_get_socket@libmariadbclient_18 3.0.0
mysql_get_socket@libmysqlclient_18 3.0.0
mysql_get_ssl_cipher@libmariadbclient_18 3.0.0
mysql_get_ssl_cipher@libmysqlclient_18 3.0.0
mysql_get_timeout_value@libmariadb_3 3.0.19
mysql_get_timeout_value_ms@libmariadb_3 3.0.19
mysql_hex_string@libmariadbclient_18 3.0.0
mysql_hex_string@libmysqlclient_18 3.0.0
mysql_info@libmariadbclient_18 3.0.0
mysql_info@libmysqlclient_18 3.0.0
mysql_init@libmariadbclient_18 3.0.0
mysql_init@libmysqlclient_18 3.0.0
mysql_insert_id@libmariadbclient_18 3.0.0
mysql_insert_id@libmysqlclient_18 3.0.0
mysql_kill_cont@libmariadb_3 3.0.0
mysql_kill@libmariadbclient_18 3.0.0
mysql_kill@libmysqlclient_18 3.0.0
mysql_kill_start@libmariadb_3 3.0.0
mysql_list_dbs@libmariadbclient_18 3.0.0
mysql_list_dbs@libmysqlclient_18 3.0.0
mysql_list_fields_cont@libmariadb_3 3.0.0
mysql_list_fields@libmariadbclient_18 3.0.0
mysql_list_fields@libmysqlclient_18 3.0.0
mysql_list_fields_start@libmariadb_3 3.0.0
mysql_list_processes@libmariadbclient_18 3.0.0
mysql_list_processes@libmysqlclient_18 3.0.0
mysql_list_tables@libmariadbclient_18 3.0.0
mysql_list_tables@libmysqlclient_18 3.0.0
mysql_load_plugin@libmariadbclient_18 3.0.0
mysql_load_plugin@libmysqlclient_18 3.0.0
mysql_load_plugin_v@libmariadbclient_18 3.0.0
mysql_load_plugin_v@libmysqlclient_18 3.0.0
mysql_more_results@libmariadbclient_18 3.0.0
mysql_more_results@libmysqlclient_18 3.0.0
mysql_net_field_length@libmariadbclient_18 3.0.0
mysql_net_field_length@libmysqlclient_18 3.0.0
mysql_net_read_packet@libmariadbclient_18 3.0.0
mysql_net_read_packet@libmysqlclient_18 3.0.0
mysql_next_result_cont@libmariadb_3 3.0.0
mysql_next_result@libmariadbclient_18 3.0.0
mysql_next_result@libmysqlclient_18 3.0.0
mysql_next_result_start@libmariadb_3 3.0.0
mysql_num_fields@libmariadbclient_18 3.0.0
mysql_num_fields@libmysqlclient_18 3.0.0
mysql_num_rows@libmariadbclient_18 3.0.0
mysql_num_rows@libmysqlclient_18 3.0.0
mysql_options4@libmariadbclient_18 3.0.0
mysql_options4@libmysqlclient_18 3.0.0
mysql_options@libmariadbclient_18 3.0.0
mysql_options@libmysqlclient_18 3.0.0
mysql_optionsv@libmariadb_3 3.0.0
mysql_ping_cont@libmariadb_3 3.0.0
mysql_ping@libmariadbclient_18 3.0.0
mysql_ping@libmysqlclient_18 3.0.0
mysql_ping_start@libmariadb_3 3.0.0
mysql_ps_fetch_functions@libmariadb_3 3.0.0
mysql_query_cont@libmariadb_3 3.0.0
mysql_query@libmariadbclient_18 3.0.0
mysql_query@libmysqlclient_18 3.0.0
mysql_query_start@libmariadb_3 3.0.0
mysql_read_query_result_cont@libmariadb_3 3.0.0
mysql_read_query_result@libmariadbclient_18 3.0.0
mysql_read_query_result@libmysqlclient_18 3.0.0
mysql_read_query_result_start@libmariadb_3 3.0.0
mysql_real_connect_cont@libmariadb_3 3.0.0
mysql_real_connect@libmariadbclient_18 3.0.0
mysql_real_connect@libmysqlclient_18 3.0.0
mysql_real_connect_start@libmariadb_3 3.0.0
mysql_real_escape_string@libmariadbclient_18 3.0.0
mysql_real_escape_string@libmysqlclient_18 3.0.0
mysql_real_query_cont@libmariadb_3 3.0.0
mysql_real_query@libmariadbclient_18 3.0.0
mysql_real_query@libmysqlclient_18 3.0.0
mysql_real_query_start@libmariadb_3 3.0.0
mysql_refresh_cont@libmariadb_3 3.0.0
mysql_refresh@libmariadbclient_18 3.0.0
mysql_refresh@libmysqlclient_18 3.0.0
mysql_refresh_start@libmariadb_3 3.0.0
mysql_reset_connection_cont@libmariadb_3 3.0.0
mysql_reset_connection@libmariadbclient_18 3.0.0
mysql_reset_connection@libmysqlclient_18 3.0.0
mysql_reset_connection_start@libmariadb_3 3.0.0
mysql_rollback_cont@libmariadb_3 3.0.0
mysql_rollback@libmariadbclient_18 3.0.0
mysql_rollback@libmysqlclient_18 3.0.0
mysql_rollback_start@libmariadb_3 3.0.0
mysql_row_seek@libmariadbclient_18 3.0.0
mysql_row_seek@libmysqlclient_18 3.0.0
mysql_row_tell@libmariadbclient_18 3.0.0
mysql_row_tell@libmysqlclient_18 3.0.0
mysql_select_db_cont@libmariadb_3 3.0.0
mysql_select_db@libmariadbclient_18 3.0.0
mysql_select_db@libmysqlclient_18 3.0.0
mysql_select_db_start@libmariadb_3 3.0.0
mysql_send_query_cont@libmariadb_3 3.0.0
mysql_send_query@libmariadbclient_18 3.0.0
mysql_send_query@libmysqlclient_18 3.0.0
mysql_send_query_start@libmariadb_3 3.0.0
mysql_server_end@libmariadbclient_18 3.0.0
mysql_server_end@libmysqlclient_18 3.0.0
mysql_server_init@libmariadbclient_18 3.0.0
mysql_server_init@libmysqlclient_18 3.0.0
mysql_session_track_get_first@libmariadbclient_18 3.0.0
mysql_session_track_get_first@libmysqlclient_18 3.0.0
mysql_session_track_get_next@libmariadbclient_18 3.0.0
mysql_session_track_get_next@libmysqlclient_18 3.0.0
mysql_set_character_set_cont@libmariadb_3 3.0.0
mysql_set_character_set@libmariadbclient_18 3.0.0
mysql_set_character_set@libmysqlclient_18 3.0.0
mysql_set_character_set_start@libmariadb_3 3.0.0
mysql_set_local_infile_default@libmariadbclient_18 3.0.0
mysql_set_local_infile_default@libmysqlclient_18 3.0.0
mysql_set_local_infile_handler@libmariadbclient_18 3.0.0
mysql_set_local_infile_handler@libmysqlclient_18 3.0.0
mysql_set_server_option_cont@libmariadb_3 3.0.0
mysql_set_server_option@libmariadbclient_18 3.0.0
mysql_set_server_option@libmysqlclient_18 3.0.0
mysql_set_server_option_start@libmariadb_3 3.0.0
mysql_shutdown_cont@libmariadb_3 3.0.0
mysql_shutdown@libmariadbclient_18 3.0.0
mysql_shutdown@libmysqlclient_18 3.0.0
mysql_shutdown_start@libmariadb_3 3.0.0
mysql_sqlstate@libmariadbclient_18 3.0.0
mysql_sqlstate@libmysqlclient_18 3.0.0
mysql_ssl_set@libmariadbclient_18 3.0.0
mysql_ssl_set@libmysqlclient_18 3.0.0
mysql_stat_cont@libmariadb_3 3.0.0
mysql_stat@libmariadbclient_18 3.0.0
mysql_stat@libmysqlclient_18 3.0.0
mysql_stat_start@libmariadb_3 3.0.0
mysql_stmt_affected_rows@libmariadbclient_18 3.0.0
mysql_stmt_affected_rows@libmysqlclient_18 3.0.0
mysql_stmt_attr_get@libmariadbclient_18 3.0.0
mysql_stmt_attr_get@libmysqlclient_18 3.0.0
mysql_stmt_attr_set@libmariadbclient_18 3.0.0
mysql_stmt_attr_set@libmysqlclient_18 3.0.0
mysql_stmt_bind_param@libmariadbclient_18 3.0.0
mysql_stmt_bind_param@libmysqlclient_18 3.0.0
mysql_stmt_bind_result@libmariadbclient_18 3.0.0
mysql_stmt_bind_result@libmysqlclient_18 3.0.0
mysql_stmt_close_cont@libmariadb_3 3.0.0
mysql_stmt_close@libmariadbclient_18 3.0.0
mysql_stmt_close@libmysqlclient_18 3.0.0
mysql_stmt_close_start@libmariadb_3 3.0.0
mysql_stmt_data_seek@libmariadbclient_18 3.0.0
mysql_stmt_data_seek@libmysqlclient_18 3.0.0
mysql_stmt_errno@libmariadbclient_18 3.0.0
mysql_stmt_errno@libmysqlclient_18 3.0.0
mysql_stmt_error@libmariadbclient_18 3.0.0
mysql_stmt_error@libmysqlclient_18 3.0.0
mysql_stmt_execute_cont@libmariadb_3 3.0.0
mysql_stmt_execute@libmariadbclient_18 3.0.0
mysql_stmt_execute@libmysqlclient_18 3.0.0
mysql_stmt_execute_start@libmariadb_3 3.0.0
mysql_stmt_fetch_column@libmariadbclient_18 3.0.0
mysql_stmt_fetch_column@libmysqlclient_18 3.0.0
mysql_stmt_fetch_cont@libmariadb_3 3.0.0
mysql_stmt_fetch@libmariadbclient_18 3.0.0
mysql_stmt_fetch@libmysqlclient_18 3.0.0
mysql_stmt_fetch_start@libmariadb_3 3.0.0
mysql_stmt_field_count@libmariadbclient_18 3.0.0
mysql_stmt_field_count@libmysqlclient_18 3.0.0
mysql_stmt_free_result_cont@libmariadb_3 3.0.0
mysql_stmt_free_result@libmariadbclient_18 3.0.0
mysql_stmt_free_result@libmysqlclient_18 3.0.0
mysql_stmt_free_result_start@libmariadb_3 3.0.0
mysql_stmt_init@libmariadbclient_18 3.0.0
mysql_stmt_init@libmysqlclient_18 3.0.0
mysql_stmt_insert_id@libmariadbclient_18 3.0.0
mysql_stmt_insert_id@libmysqlclient_18 3.0.0
mysql_stmt_more_results@libmariadbclient_18 3.0.0
mysql_stmt_more_results@libmysqlclient_18 3.0.0
mysql_stmt_next_result_cont@libmariadb_3 3.0.0
mysql_stmt_next_result@libmariadbclient_18 3.0.0
mysql_stmt_next_result@libmysqlclient_18 3.0.0
mysql_stmt_next_result_start@libmariadb_3 3.0.0
mysql_stmt_num_rows@libmariadbclient_18 3.0.0
mysql_stmt_num_rows@libmysqlclient_18 3.0.0
mysql_stmt_param_count@libmariadbclient_18 3.0.0
mysql_stmt_param_count@libmysqlclient_18 3.0.0
mysql_stmt_param_metadata@libmariadbclient_18 3.0.0
mysql_stmt_param_metadata@libmysqlclient_18 3.0.0
mysql_stmt_prepare_cont@libmariadb_3 3.0.0
mysql_stmt_prepare@libmariadbclient_18 3.0.0
mysql_stmt_prepare@libmysqlclient_18 3.0.0
mysql_stmt_prepare_start@libmariadb_3 3.0.0
mysql_stmt_reset_cont@libmariadb_3 3.0.0
mysql_stmt_reset@libmariadbclient_18 3.0.0
mysql_stmt_reset@libmysqlclient_18 3.0.0
mysql_stmt_reset_start@libmariadb_3 3.0.0
mysql_stmt_result_metadata@libmariadbclient_18 3.0.0
mysql_stmt_result_metadata@libmysqlclient_18 3.0.0
mysql_stmt_row_seek@libmariadbclient_18 3.0.0
mysql_stmt_row_seek@libmysqlclient_18 3.0.0
mysql_stmt_row_tell@libmariadbclient_18 3.0.0
mysql_stmt_row_tell@libmysqlclient_18 3.0.0
mysql_stmt_send_long_data_cont@libmariadb_3 3.0.0
mysql_stmt_send_long_data@libmariadbclient_18 3.0.0
mysql_stmt_send_long_data@libmysqlclient_18 3.0.0
mysql_stmt_send_long_data_start@libmariadb_3 3.0.0
mysql_stmt_sqlstate@libmariadbclient_18 3.0.0
mysql_stmt_sqlstate@libmysqlclient_18 3.0.0
mysql_stmt_store_result_cont@libmariadb_3 3.0.0
mysql_stmt_store_result@libmariadbclient_18 3.0.0
mysql_stmt_store_result@libmysqlclient_18 3.0.0
mysql_stmt_store_result_start@libmariadb_3 3.0.0
mysql_stmt_warning_count@libmariadb_3 3.0.0
mysql_store_result_cont@libmariadb_3 3.0.0
mysql_store_result@libmariadbclient_18 3.0.0
mysql_store_result@libmysqlclient_18 3.0.0
mysql_store_result_start@libmariadb_3 3.0.0
mysql_thread_end@libmariadbclient_18 3.0.0
mysql_thread_end@libmysqlclient_18 3.0.0
mysql_thread_id@libmariadbclient_18 3.0.0
mysql_thread_id@libmysqlclient_18 3.0.0
mysql_thread_init@libmariadbclient_18 3.0.0
mysql_thread_init@libmysqlclient_18 3.0.0
mysql_thread_safe@libmariadbclient_18 3.0.0
mysql_thread_safe@libmysqlclient_18 3.0.0
mysql_use_result@libmariadbclient_18 3.0.0
mysql_use_result@libmysqlclient_18 3.0.0
mysql_warning_count@libmariadbclient_18 3.0.0
mysql_warning_count@libmysqlclient_18 3.0.0

42
debian/libmariadb3.symbols.README vendored Normal file
View file

@ -0,0 +1,42 @@
The libmariadb3.symbols files is used to track the libmariadb3 ABI.
If a symbol is removed or changed, the Debian build will fail unless the same change has also explicitly been made in the libmariadb3.symbols file.
If a symbol is added, the Debian build will issue a warning like:
dh_makeshlibs -O--parallel
rm -f debian/libmariadb3/DEBIAN/shlibs
echo "libmariadb 3 libmariadb3" >> debian/libmariadb3/DEBIAN/shlibs
chmod 0644 -- debian/libmariadb3/DEBIAN/shlibs
chown 0:0 -- debian/libmariadb3/DEBIAN/shlibs
dpkg-gensymbols -plibmariadb3 -Idebian/libmariadb3.symbols -Pdebian/libmariadb3 -edebian/libmariadb3/usr/lib/x86_64-linux-gnu/libmariadb.so.3
dpkg-gensymbols: warning: some new symbols appeared in the symbols file: see diff output below
dpkg-gensymbols: warning: debian/libmariadb3/DEBIAN/symbols doesn't match completely debian/libmariadb3.symbols
--- debian/libmariadb3.symbols (libmariadb3_10.2.32+maria~sid_amd64)
+++ dpkg-gensymbolsUfTky5 2020-02-20 11:27:03.815551573 +0000
@@ -12,6 +12,7 @@
mariadb_get_charset_by_name@libmariadb_3 3.0.0
mariadb_get_charset_by_nr@libmariadb_3 3.0.0
mariadb_get_info@libmariadb_3 3.0.0
+ mariadb_get_infov@libmariadb_3 10.2.32+maria~sid
mariadb_reconnect@libmariadb_3 3.0.0
mariadb_rpl_close@libmariadb_3 3.1.0
mariadb_rpl_fetch@libmariadb_3 3.1.0
When this happens, please add the symbol to the libmariadb3.symbols file.
Unlike the automatic diff above, don't use the server version for the symbols.
Instead use the client library version, which can be viewed with:
$ grep 'SET(CPACK_PACKAGE_VERSION_' libmariadb/CMakeLists.txt
SET(CPACK_PACKAGE_VERSION_MAJOR 3)
SET(CPACK_PACKAGE_VERSION_MINOR 1)
SET(CPACK_PACKAGE_VERSION_PATCH 7)
In this example, the line to add would be:
mariadb_get_infov@libmariadb_3 3.1.7
Remember to not break the ABI in a stable release!