ganapathi / rpms / mariadb

Forked from rpms/mariadb 4 years ago
Clone

Blame SOURCES/mariadb-versioning-compat.patch

0012fd
The issue is Fedora has changed ABI of MySQL client library downstream since
0012fd
MySQL-5.5 (in order to prevent upstream's ABI mistakes), which started to make
0012fd
problems for people building on one distro and running their software on other
0012fd
distro. Detailed info and whole story RHBZ#1045013 [1].
0012fd
0012fd
With collaboration of MariaDB upstream, Oracle developer and Fedora we came up
0012fd
with a solution, that we'll use both libmysqlclient_16 and libmysqlclient_18
0012fd
versions for symbols, which were already in MySQL 5.1, while libmysqlclient_18
0012fd
will be default one.
0012fd
0012fd
MariaDB/MySQL upstreams seem to be willing to use the same approach for RPM
0012fd
packages they provide.
0012fd
0012fd
[1] https://bugzilla.redhat.com/show_bug.cgi?id=1045013
0012fd
[2] https://mariadb.atlassian.net/browse/MDEV-5529
0012fd
0012fd
diff -up mariadb-5.5.34/CMakeLists.txt.versioning-compat mariadb-5.5.34/CMakeLists.txt
0012fd
--- mariadb-5.5.34/CMakeLists.txt.versioning-compat	2013-11-20 13:28:54.000000000 +0100
0012fd
+++ mariadb-5.5.34/CMakeLists.txt	2014-01-14 18:47:04.335100345 +0100
0012fd
@@ -57,6 +57,13 @@ IF(UNIX AND NOT APPLE)
0012fd
   SET(WITH_PIC ${WITH_PIC_DEFAULT} CACHE BOOL "Compile with PIC.")
0012fd
 ENDIF()
0012fd
 
0012fd
+SET(COMPAT_SYMBOL_VERSIONS_DEFAULT 0)
0012fd
+IF(RPM MATCHES "(rhel|centos)7")
0012fd
+  SET(COMPAT_SYMBOL_VERSIONS_DEFAULT 1)
0012fd
+ENDIF()
0012fd
+SET(COMPAT_SYMBOL_VERSIONS ${COMPAT_SYMBOL_VERSIONS_DEFAULT} CACHE BOOL
0012fd
+    "Versions of libmysqlclient symbols in compat mode")
0012fd
+
0012fd
 # Optionally set project name, e.g.
0012fd
 # foo.xcodeproj (mac) or foo.sln (windows)
0012fd
 SET(MYSQL_PROJECT_NAME_DOCSTRING "MySQL project name")
0012fd
diff -up mariadb-5.5.34/config.h.cmake.versioning-compat mariadb-5.5.34/config.h.cmake
0012fd
--- mariadb-5.5.34/config.h.cmake.versioning-compat	2013-11-20 13:28:54.000000000 +0100
0012fd
+++ mariadb-5.5.34/config.h.cmake	2014-01-14 18:47:04.336100346 +0100
0012fd
@@ -641,4 +641,6 @@
0012fd
 #cmakedefine SIZEOF_TIME_T @SIZEOF_TIME_T@
0012fd
 #cmakedefine TIME_T_UNSIGNED @TIME_T_UNSIGNED@
0012fd
 
0012fd
+#cmakedefine COMPAT_SYMBOL_VERSIONS @COMPAT_SYMBOL_VERSIONS@
0012fd
+
0012fd
 #endif
0012fd
diff -up mariadb-5.5.34/libmysqld/libmysqld.def.versioning-compat mariadb-5.5.34/libmysqld/libmysqld.def
0012fd
--- mariadb-5.5.34/libmysqld/libmysqld.def.versioning-compat	2013-11-20 13:29:03.000000000 +0100
0012fd
+++ mariadb-5.5.34/libmysqld/libmysqld.def	2014-01-14 18:47:04.336100346 +0100
0012fd
@@ -104,3 +104,7 @@ EXPORTS
0012fd
 	mysql_stmt_attr_set
0012fd
 	mysql_stmt_field_count
0012fd
 	mysql_get_server_name
0012fd
+	handle_options
0012fd
+	free_defaults
0012fd
+	load_defaults
0012fd
+	my_print_help
0012fd
diff -up mariadb-5.5.34/libmysql/libmysql.c.versioning-compat mariadb-5.5.34/libmysql/libmysql.c
0012fd
--- mariadb-5.5.34/libmysql/libmysql.c.versioning-compat	2013-11-20 13:28:58.000000000 +0100
0012fd
+++ mariadb-5.5.34/libmysql/libmysql.c	2014-01-14 19:56:51.323538105 +0100
0012fd
@@ -24,6 +24,7 @@
0012fd
 #include <mysys_err.h>
0012fd
 #include <m_string.h>
0012fd
 #include <m_ctype.h>
0012fd
+#include <my_getopt.h>
0012fd
 #include "mysql.h"
0012fd
 #include "mysql_version.h"
0012fd
 #include "mysqld_error.h"
0012fd
@@ -4892,3 +4893,642 @@ my_bool STDCALL mysql_read_query_result(
0012fd
   return (*mysql->methods->read_query_result)(mysql);
0012fd
 }
0012fd
 
0012fd
+#ifndef EMBEDDED_LIBRARY
0012fd
+#ifdef COMPAT_SYMBOL_VERSIONS
0012fd
+
0012fd
+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions
0012fd
+
0012fd
+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16")
0012fd
+
0012fd
+void STDCALL symver16_myodbc_remove_escape(MYSQL *mysql,char *name)
0012fd
+{
0012fd
+  return myodbc_remove_escape(mysql, name);
0012fd
+}
0012fd
+SYM_16(myodbc_remove_escape);
0012fd
+
0012fd
+
0012fd
+my_ulonglong STDCALL symver16_mysql_affected_rows(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_affected_rows(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_affected_rows);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_autocommit(MYSQL * mysql, my_bool auto_mode)
0012fd
+{
0012fd
+  return mysql_autocommit(mysql, auto_mode);
0012fd
+}
0012fd
+SYM_16(mysql_autocommit);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db)
0012fd
+{
0012fd
+  return mysql_change_user(mysql, user, passwd, db);
0012fd
+}
0012fd
+SYM_16(mysql_change_user);
0012fd
+
0012fd
+
0012fd
+const char * STDCALL symver16_mysql_character_set_name(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_character_set_name(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_character_set_name);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_commit(MYSQL * mysql)
0012fd
+{
0012fd
+  return mysql_commit(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_commit);
0012fd
+
0012fd
+
0012fd
+void STDCALL symver16_mysql_data_seek(MYSQL_RES *result, my_ulonglong row)
0012fd
+{
0012fd
+  return mysql_data_seek(result, row);
0012fd
+}
0012fd
+SYM_16(mysql_data_seek);
0012fd
+
0012fd
+
0012fd
+void STDCALL symver16_mysql_debug(const char *debug __attribute__((unused)))
0012fd
+{
0012fd
+  return mysql_debug(debug);
0012fd
+}
0012fd
+SYM_16(mysql_debug);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_dump_debug_info(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_dump_debug_info(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_dump_debug_info);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_embedded(void)
0012fd
+{
0012fd
+  return mysql_embedded();
0012fd
+}
0012fd
+SYM_16(mysql_embedded);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_eof(MYSQL_RES *res)
0012fd
+{
0012fd
+  return mysql_eof(res);
0012fd
+}
0012fd
+SYM_16(mysql_eof);
0012fd
+
0012fd
+
0012fd
+ulong STDCALL symver16_mysql_escape_string(char *to,const char *from,ulong length)
0012fd
+{
0012fd
+  return mysql_escape_string(to, from, length);
0012fd
+}
0012fd
+SYM_16(mysql_escape_string);
0012fd
+
0012fd
+
0012fd
+MYSQL_FIELD * STDCALL symver16_mysql_fetch_field(MYSQL_RES *result)
0012fd
+{
0012fd
+  return mysql_fetch_field(result);
0012fd
+}
0012fd
+SYM_16(mysql_fetch_field);
0012fd
+
0012fd
+
0012fd
+MYSQL_FIELD * STDCALL symver16_mysql_fetch_field_direct(MYSQL_RES *res,uint fieldnr)
0012fd
+{
0012fd
+  return mysql_fetch_field_direct(res, fieldnr);
0012fd
+}
0012fd
+SYM_16(mysql_fetch_field_direct);
0012fd
+
0012fd
+
0012fd
+MYSQL_FIELD * STDCALL symver16_mysql_fetch_fields(MYSQL_RES *res)
0012fd
+{
0012fd
+  return mysql_fetch_fields(res);
0012fd
+}
0012fd
+SYM_16(mysql_fetch_fields);
0012fd
+
0012fd
+
0012fd
+unsigned int STDCALL symver16_mysql_field_count(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_field_count(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_field_count);
0012fd
+
0012fd
+
0012fd
+MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET field_offset)
0012fd
+{
0012fd
+  return mysql_field_seek(result, field_offset);
0012fd
+}
0012fd
+SYM_16(mysql_field_seek);
0012fd
+
0012fd
+
0012fd
+MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_tell(MYSQL_RES *res)
0012fd
+{
0012fd
+  return mysql_field_tell(res);
0012fd
+}
0012fd
+SYM_16(mysql_field_tell);
0012fd
+
0012fd
+
0012fd
+void STDCALL symver16_mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo)
0012fd
+{
0012fd
+  return mysql_get_character_set_info(mysql, csinfo);
0012fd
+}
0012fd
+SYM_16(mysql_get_character_set_info);
0012fd
+
0012fd
+
0012fd
+const char * STDCALL symver16_mysql_get_client_info(void)
0012fd
+{
0012fd
+  return mysql_get_client_info();
0012fd
+}
0012fd
+SYM_16(mysql_get_client_info);
0012fd
+
0012fd
+ulong STDCALL symver16_mysql_get_client_version(void)
0012fd
+{
0012fd
+  return mysql_get_client_version();
0012fd
+}
0012fd
+SYM_16(mysql_get_client_version);
0012fd
+
0012fd
+
0012fd
+const char * STDCALL symver16_mysql_get_host_info(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_get_host_info(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_get_host_info);
0012fd
+
0012fd
+
0012fd
+MYSQL_PARAMETERS *STDCALL symver16_mysql_get_parameters(void)
0012fd
+{
0012fd
+  return mysql_get_parameters();
0012fd
+}
0012fd
+SYM_16(mysql_get_parameters);
0012fd
+
0012fd
+
0012fd
+uint STDCALL symver16_mysql_get_proto_info(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_get_proto_info(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_get_proto_info);
0012fd
+
0012fd
+
0012fd
+const char * STDCALL symver16_mysql_get_server_info(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_get_server_info(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_get_server_info);
0012fd
+
0012fd
+
0012fd
+ulong STDCALL symver16_mysql_hex_string(char *to, const char *from, ulong length)
0012fd
+{
0012fd
+  return mysql_hex_string(to, from, length);
0012fd
+}
0012fd
+SYM_16(mysql_hex_string);
0012fd
+
0012fd
+
0012fd
+const char *STDCALL symver16_mysql_info(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_info(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_info);
0012fd
+
0012fd
+
0012fd
+my_ulonglong STDCALL symver16_mysql_insert_id(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_insert_id(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_insert_id);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_kill(MYSQL *mysql,ulong pid)
0012fd
+{
0012fd
+  return mysql_kill(mysql, pid);
0012fd
+}
0012fd
+SYM_16(mysql_kill);
0012fd
+
0012fd
+
0012fd
+MYSQL_RES * STDCALL symver16_mysql_list_dbs(MYSQL *mysql, const char *wild)
0012fd
+{
0012fd
+  return mysql_list_dbs(mysql, wild);
0012fd
+}
0012fd
+SYM_16(mysql_list_dbs);
0012fd
+
0012fd
+
0012fd
+MYSQL_RES * STDCALL symver16_mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)
0012fd
+{
0012fd
+  return mysql_list_fields(mysql, table, wild);
0012fd
+}
0012fd
+SYM_16(mysql_list_fields);
0012fd
+
0012fd
+
0012fd
+MYSQL_RES * STDCALL symver16_mysql_list_processes(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_list_processes(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_list_processes);
0012fd
+
0012fd
+
0012fd
+MYSQL_RES * STDCALL symver16_mysql_list_tables(MYSQL *mysql, const char *wild)
0012fd
+{
0012fd
+  return mysql_list_tables(mysql, wild);
0012fd
+}
0012fd
+SYM_16(mysql_list_tables);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_more_results(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_more_results(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_more_results);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_next_result(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_next_result(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_next_result);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_ping(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_ping(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_ping);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_query(MYSQL *mysql, const char *query)
0012fd
+{
0012fd
+  return mysql_query(mysql, query);
0012fd
+}
0012fd
+SYM_16(mysql_query);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_read_query_result(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_read_query_result(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_read_query_result);
0012fd
+
0012fd
+
0012fd
+ulong STDCALL symver16_mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, ulong length)
0012fd
+{
0012fd
+  return mysql_real_escape_string(mysql, to, from, length);
0012fd
+}
0012fd
+SYM_16(mysql_real_escape_string);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_refresh(MYSQL *mysql,uint options)
0012fd
+{
0012fd
+  return mysql_refresh(mysql, options);
0012fd
+}
0012fd
+SYM_16(mysql_refresh);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_rollback(MYSQL * mysql)
0012fd
+{
0012fd
+  return mysql_rollback(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_rollback);
0012fd
+
0012fd
+
0012fd
+MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row)
0012fd
+{
0012fd
+  return mysql_row_seek(result, row);
0012fd
+}
0012fd
+SYM_16(mysql_row_seek);
0012fd
+
0012fd
+
0012fd
+MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_tell(MYSQL_RES *res)
0012fd
+{
0012fd
+  return mysql_row_tell(res);
0012fd
+}
0012fd
+SYM_16(mysql_row_tell);
0012fd
+
0012fd
+
0012fd
+void STDCALL symver16_mysql_server_end()
0012fd
+{
0012fd
+  return mysql_server_end();
0012fd
+}
0012fd
+SYM_16(mysql_server_end);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_server_init(int argc __attribute__((unused)), char **argv __attribute__((unused)), char **groups __attribute__((unused)))
0012fd
+{
0012fd
+  return mysql_server_init(argc, argv, groups);
0012fd
+}
0012fd
+SYM_16(mysql_server_init);
0012fd
+
0012fd
+
0012fd
+void symver16_mysql_set_local_infile_default(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_set_local_infile_default(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_set_local_infile_default);
0012fd
+
0012fd
+
0012fd
+void symver16_mysql_set_local_infile_handler(MYSQL *mysql, int (*local_infile_init)(void **, const char *, void *), int (*local_infile_read)(void *, char *, uint), void (*local_infile_end)(void *), int (*local_infile_error)(void *, char *, uint), void *userdata)
0012fd
+{
0012fd
+  return mysql_set_local_infile_handler(mysql, local_infile_init, local_infile_read, local_infile_end, local_infile_error, userdata);
0012fd
+}
0012fd
+SYM_16(mysql_set_local_infile_handler);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_set_server_option(MYSQL *mysql, enum enum_mysql_set_option option)
0012fd
+{
0012fd
+  return mysql_set_server_option(mysql, option);
0012fd
+}
0012fd
+SYM_16(mysql_set_server_option);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_shutdown(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level)
0012fd
+{
0012fd
+  return mysql_shutdown(mysql, shutdown_level);
0012fd
+}
0012fd
+SYM_16(mysql_shutdown);
0012fd
+
0012fd
+
0012fd
+const char *STDCALL symver16_mysql_sqlstate(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_sqlstate(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_sqlstate);
0012fd
+
0012fd
+
0012fd
+const char * STDCALL symver16_mysql_stat(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_stat(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_stat);
0012fd
+
0012fd
+
0012fd
+my_ulonglong STDCALL symver16_mysql_stmt_affected_rows(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_affected_rows(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_affected_rows);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_stmt_attr_get(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, void *value)
0012fd
+{
0012fd
+  return mysql_stmt_attr_get(stmt, attr_type, value);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_attr_get);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, const void *value)
0012fd
+{
0012fd
+  return mysql_stmt_attr_set(stmt, attr_type, value);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_attr_set);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *my_bind)
0012fd
+{
0012fd
+  return mysql_stmt_bind_param(stmt, my_bind);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_bind_param);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *my_bind)
0012fd
+{
0012fd
+  return mysql_stmt_bind_result(stmt, my_bind);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_bind_result);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_stmt_close(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_close(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_close);
0012fd
+
0012fd
+
0012fd
+void STDCALL symver16_mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong row)
0012fd
+{
0012fd
+  return mysql_stmt_data_seek(stmt, row);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_data_seek);
0012fd
+
0012fd
+
0012fd
+uint STDCALL symver16_mysql_stmt_errno(MYSQL_STMT * stmt)
0012fd
+{
0012fd
+  return mysql_stmt_errno(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_errno);
0012fd
+
0012fd
+
0012fd
+const char *STDCALL symver16_mysql_stmt_error(MYSQL_STMT * stmt)
0012fd
+{
0012fd
+  return mysql_stmt_error(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_error);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_stmt_execute(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_execute(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_execute);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_stmt_fetch(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_fetch(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_fetch);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *my_bind, uint column, ulong offset)  
0012fd
+{
0012fd
+  return mysql_stmt_fetch_column(stmt, my_bind, column, offset);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_fetch_column);
0012fd
+
0012fd
+
0012fd
+unsigned int STDCALL symver16_mysql_stmt_field_count(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_field_count(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_field_count);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_stmt_free_result(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_free_result(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_free_result);
0012fd
+
0012fd
+
0012fd
+MYSQL_STMT * STDCALL symver16_mysql_stmt_init(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_stmt_init(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_init);
0012fd
+
0012fd
+
0012fd
+my_ulonglong STDCALL symver16_mysql_stmt_insert_id(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_insert_id(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_insert_id);
0012fd
+
0012fd
+
0012fd
+my_ulonglong STDCALL symver16_mysql_stmt_num_rows(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_num_rows(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_num_rows);
0012fd
+
0012fd
+
0012fd
+ulong STDCALL symver16_mysql_stmt_param_count(MYSQL_STMT * stmt)
0012fd
+{
0012fd
+  return mysql_stmt_param_count(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_param_count);
0012fd
+
0012fd
+
0012fd
+MYSQL_RES * STDCALL symver16_mysql_stmt_param_metadata(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_param_metadata(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_param_metadata);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length)
0012fd
+{
0012fd
+  return mysql_stmt_prepare(stmt, query, length);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_prepare);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_stmt_reset(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_reset(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_reset);
0012fd
+
0012fd
+
0012fd
+MYSQL_RES * STDCALL symver16_mysql_stmt_result_metadata(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_result_metadata(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_result_metadata);
0012fd
+
0012fd
+
0012fd
+MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_seek(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET row)
0012fd
+{
0012fd
+  return mysql_stmt_row_seek(stmt, row);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_row_seek);
0012fd
+
0012fd
+
0012fd
+MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_tell(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_row_tell(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_row_tell);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, const char *data, ulong length)
0012fd
+{
0012fd
+  return mysql_stmt_send_long_data(stmt, param_number, data, length);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_send_long_data);
0012fd
+
0012fd
+
0012fd
+const char *STDCALL symver16_mysql_stmt_sqlstate(MYSQL_STMT * stmt)
0012fd
+{
0012fd
+  return mysql_stmt_sqlstate(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_sqlstate);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_stmt_store_result(MYSQL_STMT *stmt)
0012fd
+{
0012fd
+  return mysql_stmt_store_result(stmt);
0012fd
+}
0012fd
+SYM_16(mysql_stmt_store_result);
0012fd
+
0012fd
+
0012fd
+void STDCALL symver16_mysql_thread_end()
0012fd
+{
0012fd
+  return mysql_thread_end();
0012fd
+}
0012fd
+SYM_16(mysql_thread_end);
0012fd
+
0012fd
+
0012fd
+ulong STDCALL symver16_mysql_thread_id(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_thread_id(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_thread_id);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_thread_init()
0012fd
+{
0012fd
+  return mysql_thread_init();
0012fd
+}
0012fd
+SYM_16(mysql_thread_init);
0012fd
+
0012fd
+
0012fd
+uint STDCALL symver16_mysql_thread_safe(void)
0012fd
+{
0012fd
+  return mysql_thread_safe();
0012fd
+}
0012fd
+SYM_16(mysql_thread_safe);
0012fd
+
0012fd
+
0012fd
+MYSQL_RES * STDCALL symver16_mysql_use_result(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_use_result(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_use_result);
0012fd
+
0012fd
+
0012fd
+uint STDCALL symver16_mysql_warning_count(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_warning_count(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_warning_count);
0012fd
+
0012fd
+/*****/
0012fd
+
0012fd
+MYSQL * STDCALL symver16_mysql_real_connect(MYSQL *mysql,const char *host, const char *user, const char *passwd, const char *db, uint port, const char *unix_socket,ulong client_flag)
0012fd
+{
0012fd
+  return mysql_real_connect(mysql, host, user, passwd, db, port, unix_socket, client_flag);
0012fd
+}
0012fd
+SYM_16(mysql_real_connect);
0012fd
+
0012fd
+/*****/
0012fd
+
0012fd
+my_bool symver16_my_init(void)
0012fd
+{
0012fd
+  return my_init();
0012fd
+}
0012fd
+SYM_16(my_init);
0012fd
+
0012fd
+
0012fd
+void symver16_free_defaults(char **argv)
0012fd
+{
0012fd
+  free_defaults(argv);
0012fd
+}
0012fd
+SYM_16(free_defaults);
0012fd
+
0012fd
+int symver16_load_defaults(const char *conf_file, const char **groups,
0012fd
+                           int *argc, char ***argv)
0012fd
+{
0012fd
+  return load_defaults(conf_file, groups, argc, argv);
0012fd
+}
0012fd
+SYM_16(load_defaults);
0012fd
+
0012fd
+int symver16_handle_options(int *argc, char ***argv,
0012fd
+                   const struct my_option *longopts,
0012fd
+                   my_get_one_option get_one_option)
0012fd
+{
0012fd
+  return handle_options(argc, argv, longopts, get_one_option);
0012fd
+}
0012fd
+SYM_16(handle_options);
0012fd
+
0012fd
+void symver16_my_print_help(const struct my_option *options)
0012fd
+{
0012fd
+  my_print_help(options);
0012fd
+}
0012fd
+SYM_16(my_print_help);
0012fd
+
0012fd
+#endif
0012fd
+#endif
0012fd
diff -up mariadb-5.5.34/libmysql/libmysql_rpm_version.in.versioning-compat mariadb-5.5.34/libmysql/libmysql_rpm_version.in
0012fd
--- mariadb-5.5.34/libmysql/libmysql_rpm_version.in.versioning-compat	2013-11-20 13:28:52.000000000 +0100
0012fd
+++ mariadb-5.5.34/libmysql/libmysql_rpm_version.in	2014-01-14 18:47:04.337100347 +0100
0012fd
@@ -1,9 +1,20 @@
0012fd
 # This version script is heavily inspired  by Fedora's and Mageia's version scripts for
0012fd
 # MySQL client shared library. It is used in MariaDB for building RPMs.
0012fd
+#
0012fd
+# There used to be issues that every distro handled versions of exported
0012fd
+# symbols differently. Providing both versions for older symbols (from 5.1),
0012fd
+# while libmysqlclient_18 is the default one, seems like compatible solution,
0012fd
+# that can be adopted by all distros.
0012fd
+
0012fd
+libmysqlclient_16
0012fd
+{
0012fd
+  local:
0012fd
+	symver16_*;
0012fd
+};
0012fd
 
0012fd
-libmysqlclient_16 {
0012fd
+libmysqlclient_18 {
0012fd
   global:
0012fd
-@CLIENT_API_5_1_LIST@
0012fd
+	@CLIENT_API_5_1_LIST@
0012fd
 
0012fd
 # some stuff from Mageia, I have no idea why it is there
0012fd
 # But too afraid to throw anything away
0012fd
@@ -27,12 +38,7 @@ libmysqlclient_16 {
0012fd
 	scramble;
0012fd
 # DBD::mysql requires this
0012fd
 	is_prefix;
0012fd
-  local:
0012fd
-	*;
0012fd
-};
0012fd
 
0012fd
-libmysqlclient_18 {
0012fd
-  global:
0012fd
 	@CLIENT_API_5_5_LIST@
0012fd
 #
0012fd
 # Ideally the following symbols wouldn't be exported, but various applications
0012fd
@@ -59,4 +65,7 @@ libmysqlclient_18 {
0012fd
 # PHP's mysqli.so requires this (via the ER() macro)
0012fd
 	mysql_client_errors;
0012fd
 	client_errors;
0012fd
-};
0012fd
+  local:
0012fd
+	*;
0012fd
+} libmysqlclient_16;
0012fd
+
0012fd
diff -up mariadb-5.5.34/mysys/default.c.versioning-compat mariadb-5.5.34/mysys/default.c
0012fd
diff -up mariadb-5.5.34/mysys/my_getopt.c.versioning-compat mariadb-5.5.34/mysys/my_getopt.c
0012fd
diff -up mariadb-5.5.34/sql-common/client.c.versioning-compat mariadb-5.5.34/sql-common/client.c
0012fd
--- mariadb-5.5.34/sql-common/client.c.versioning-compat	2013-11-20 13:28:57.000000000 +0100
0012fd
+++ mariadb-5.5.34/sql-common/client.c	2014-01-14 18:47:04.339100350 +0100
0012fd
@@ -4485,3 +4485,139 @@ mysql_get_socket(const MYSQL *mysql)
0012fd
     return mysql->net.vio->sd;
0012fd
   return INVALID_SOCKET;
0012fd
 }
0012fd
+
0012fd
+
0012fd
+#ifndef EMBEDDED_LIBRARY
0012fd
+#ifdef COMPAT_SYMBOL_VERSIONS
0012fd
+
0012fd
+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions
0012fd
+
0012fd
+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16")
0012fd
+
0012fd
+void STDCALL symver16_mysql_close(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_close(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_close);
0012fd
+
0012fd
+
0012fd
+uint STDCALL symver16_mysql_errno(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_errno(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_errno);
0012fd
+
0012fd
+
0012fd
+const char * STDCALL symver16_mysql_error(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_error(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_error);
0012fd
+
0012fd
+
0012fd
+ulong * STDCALL symver16_mysql_fetch_lengths(MYSQL_RES *res)
0012fd
+{
0012fd
+  return mysql_fetch_lengths(res);
0012fd
+}
0012fd
+SYM_16(mysql_fetch_lengths);
0012fd
+
0012fd
+
0012fd
+MYSQL_ROW STDCALL symver16_mysql_fetch_row(MYSQL_RES *res)
0012fd
+{
0012fd
+  return mysql_fetch_row(res);
0012fd
+}
0012fd
+SYM_16(mysql_fetch_row);
0012fd
+
0012fd
+
0012fd
+void STDCALL symver16_mysql_free_result(MYSQL_RES *result)
0012fd
+{
0012fd
+  return mysql_free_result(result);
0012fd
+}
0012fd
+SYM_16(mysql_free_result);
0012fd
+
0012fd
+
0012fd
+ulong STDCALL symver16_mysql_get_server_version(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_get_server_version(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_get_server_version);
0012fd
+
0012fd
+
0012fd
+const char * STDCALL symver16_mysql_get_ssl_cipher(MYSQL *mysql __attribute__((unused)))
0012fd
+{
0012fd
+  return mysql_get_ssl_cipher(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_get_ssl_cipher);
0012fd
+
0012fd
+
0012fd
+MYSQL * STDCALL symver16_mysql_init(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_init(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_init);
0012fd
+
0012fd
+
0012fd
+unsigned int STDCALL symver16_mysql_num_fields(MYSQL_RES *res)
0012fd
+{
0012fd
+  return mysql_num_fields(res);
0012fd
+}
0012fd
+SYM_16(mysql_num_fields);
0012fd
+
0012fd
+
0012fd
+my_ulonglong STDCALL symver16_mysql_num_rows(MYSQL_RES *res)
0012fd
+{
0012fd
+  return mysql_num_rows(res);
0012fd
+}
0012fd
+SYM_16(mysql_num_rows);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg)
0012fd
+{
0012fd
+  return mysql_options(mysql, option, arg);
0012fd
+}
0012fd
+SYM_16(mysql_options);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_real_query(MYSQL *mysql, const char *query, ulong length)
0012fd
+{
0012fd
+  return mysql_real_query(mysql, query, length);
0012fd
+}
0012fd
+SYM_16(mysql_real_query);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_select_db(MYSQL *mysql, const char *db)
0012fd
+{
0012fd
+  return mysql_select_db(mysql, db);
0012fd
+}
0012fd
+SYM_16(mysql_select_db);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_send_query(MYSQL* mysql, const char* query, ulong length)
0012fd
+{
0012fd
+  return mysql_send_query(mysql, query, length);
0012fd
+}
0012fd
+SYM_16(mysql_send_query);
0012fd
+
0012fd
+
0012fd
+int STDCALL symver16_mysql_set_character_set(MYSQL *mysql, const char *cs_name)
0012fd
+{
0012fd
+  return mysql_set_character_set(mysql, cs_name);
0012fd
+}
0012fd
+SYM_16(mysql_set_character_set);
0012fd
+
0012fd
+
0012fd
+my_bool STDCALL symver16_mysql_ssl_set(MYSQL *mysql __attribute__((unused)), const char *key __attribute__((unused)), const char *cert __attribute__((unused)), const char *ca __attribute__((unused)), const char *capath __attribute__((unused)), const char *cipher __attribute__((unused)))
0012fd
+{
0012fd
+  return mysql_ssl_set(mysql, key, cert, ca, capath, cipher);
0012fd
+}
0012fd
+SYM_16(mysql_ssl_set);
0012fd
+
0012fd
+
0012fd
+MYSQL_RES * STDCALL symver16_mysql_store_result(MYSQL *mysql)
0012fd
+{
0012fd
+  return mysql_store_result(mysql);
0012fd
+}
0012fd
+SYM_16(mysql_store_result);
0012fd
+
0012fd
+#endif
0012fd
+#endif
0012fd
diff -up mariadb-5.5.34/sql/password.c.versioning-compat mariadb-5.5.34/sql/password.c
0012fd
--- mariadb-5.5.34/sql/password.c.versioning-compat	2013-11-20 13:28:54.000000000 +0100
0012fd
+++ mariadb-5.5.34/sql/password.c	2014-01-14 18:47:04.340100351 +0100
0012fd
@@ -536,3 +536,20 @@ void make_password_from_salt(char *to, c
0012fd
   *to++= PVERSION41_CHAR;
0012fd
   octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE);
0012fd
 }
0012fd
+
0012fd
+
0012fd
+#ifndef EMBEDDED_LIBRARY
0012fd
+#ifdef COMPAT_SYMBOL_VERSIONS
0012fd
+
0012fd
+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions
0012fd
+
0012fd
+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16")
0012fd
+
0012fd
+void symver16_my_make_scrambled_password(char *to, const char *password, size_t pass_len)
0012fd
+{
0012fd
+  my_make_scrambled_password(to, password, pass_len);
0012fd
+}
0012fd
+SYM_16(my_make_scrambled_password);
0012fd
+
0012fd
+#endif
0012fd
+#endif