summaryrefslogtreecommitdiff
path: root/support-files
diff options
context:
space:
mode:
authorBalasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com>2014-08-12 14:32:16 +0200
committerBalasubramanian Kandasamy <balasubramanian.kandasamy@oracle.com>2014-08-12 14:32:16 +0200
commitdab1d7d221d68d84a5ca13afbdc5fc0cc6b647ca (patch)
treeac91ff34a4a2a12831ef936f3ee66e6684562ae5 /support-files
parent1a1e9040044c63580ffc9ac5a9cae7c495d92df4 (diff)
downloadmariadb-git-dab1d7d221d68d84a5ca13afbdc5fc0cc6b647ca.tar.gz
Add patch mysql-5.5-libmysqlclient-symbols.patch for el7
Diffstat (limited to 'support-files')
-rw-r--r--support-files/CMakeLists.txt1
-rw-r--r--support-files/mysql-5.5-libmysqlclient-symbols.patch982
-rw-r--r--support-files/mysql.spec.sh4
3 files changed, 986 insertions, 1 deletions
diff --git a/support-files/CMakeLists.txt b/support-files/CMakeLists.txt
index 6aef51a5c16..ff3d40a92b0 100644
--- a/support-files/CMakeLists.txt
+++ b/support-files/CMakeLists.txt
@@ -81,6 +81,7 @@ IF(UNIX)
CONFIGURE_FILE(mysql.spec.sh ${CMAKE_CURRENT_BINARY_DIR}/${SPECFILENAME} @ONLY)
CONFIGURE_FILE(MySQL-shared-compat.spec.sh ${CMAKE_CURRENT_BINARY_DIR}/MySQL-shared-compat.spec @ONLY)
+ CONFIGURE_FILE(mysql-5.5-libmysqlclient-symbols.patch ${CMAKE_CURRENT_BINARY_DIR}/mysql-5.5-libmysqlclient-symbols.patch @ONLY)
SET(bindir ${prefix}/${INSTALL_BINDIR})
SET(sbindir ${prefix}/${INSTALL_SBINDIR})
diff --git a/support-files/mysql-5.5-libmysqlclient-symbols.patch b/support-files/mysql-5.5-libmysqlclient-symbols.patch
new file mode 100644
index 00000000000..ce5455ee29b
--- /dev/null
+++ b/support-files/mysql-5.5-libmysqlclient-symbols.patch
@@ -0,0 +1,982 @@
+diff -rup old/libmysql/CMakeLists.txt new/libmysql/CMakeLists.txt
+--- old/libmysql/CMakeLists.txt 2013-11-05 08:19:26.000000000 +0100
++++ new/libmysql/CMakeLists.txt 2014-01-10 15:41:30.530068723 +0100
+@@ -205,13 +205,14 @@ IF(NOT DISABLE_SHARED)
+ OUTPUT_NAME mysqlclient
+ VERSION "${OS_SHARED_LIB_VERSION}"
+ SOVERSION "${SHARED_LIB_MAJOR_VERSION}")
++ CONFIGURE_FILE(libmysql.ver.in ${CMAKE_CURRENT_BINARY_DIR}/libmysql.ver)
+ IF(LINK_FLAG_NO_UNDEFINED)
+ GET_TARGET_PROPERTY(libmysql_link_flags libmysql LINK_FLAGS)
+ IF(NOT libmysql_link_flag)
+ SET(libmysql_link_flags)
+ ENDIF()
+ SET_TARGET_PROPERTIES(libmysql PROPERTIES LINK_FLAGS
+- "${libmysql_link_flags} ${LINK_FLAG_NO_UNDEFINED}")
++ "${libmysql_link_flags} -Wl,--version-script=libmysql.ver ${LINK_FLAG_NO_UNDEFINED}")
+ ENDIF()
+ # clean direct output needs to be set several targets have the same name
+ #(mysqlclient in this case)
+diff -rup old/libmysql/libmysql.c new/libmysql/libmysql.c
+--- old/libmysql/libmysql.c 2013-11-05 08:19:26.000000000 +0100
++++ new/libmysql/libmysql.c 2014-01-10 15:46:35.708928462 +0100
+@@ -4870,3 +4870,612 @@ my_bool STDCALL mysql_read_query_result(
+ return (*mysql->methods->read_query_result)(mysql);
+ }
+
++#ifndef EMBEDDED_LIBRARY
++
++// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions
++
++#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16")
++
++void STDCALL symver16_myodbc_remove_escape(MYSQL *mysql,char *name)
++{
++ return myodbc_remove_escape(mysql, name);
++}
++SYM_16(myodbc_remove_escape);
++
++
++my_ulonglong STDCALL symver16_mysql_affected_rows(MYSQL *mysql)
++{
++ return mysql_affected_rows(mysql);
++}
++SYM_16(mysql_affected_rows);
++
++
++my_bool STDCALL symver16_mysql_autocommit(MYSQL * mysql, my_bool auto_mode)
++{
++ return mysql_autocommit(mysql, auto_mode);
++}
++SYM_16(mysql_autocommit);
++
++
++my_bool STDCALL symver16_mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db)
++{
++ return mysql_change_user(mysql, user, passwd, db);
++}
++SYM_16(mysql_change_user);
++
++
++const char * STDCALL symver16_mysql_character_set_name(MYSQL *mysql)
++{
++ return mysql_character_set_name(mysql);
++}
++SYM_16(mysql_character_set_name);
++
++
++my_bool STDCALL symver16_mysql_commit(MYSQL * mysql)
++{
++ return mysql_commit(mysql);
++}
++SYM_16(mysql_commit);
++
++
++void STDCALL symver16_mysql_data_seek(MYSQL_RES *result, my_ulonglong row)
++{
++ return mysql_data_seek(result, row);
++}
++SYM_16(mysql_data_seek);
++
++
++void STDCALL symver16_mysql_debug(const char *debug __attribute__((unused)))
++{
++ return mysql_debug(debug);
++}
++SYM_16(mysql_debug);
++
++
++int STDCALL symver16_mysql_dump_debug_info(MYSQL *mysql)
++{
++ return mysql_dump_debug_info(mysql);
++}
++SYM_16(mysql_dump_debug_info);
++
++
++my_bool STDCALL symver16_mysql_embedded(void)
++{
++ return mysql_embedded();
++}
++SYM_16(mysql_embedded);
++
++
++my_bool STDCALL symver16_mysql_eof(MYSQL_RES *res)
++{
++ return mysql_eof(res);
++}
++SYM_16(mysql_eof);
++
++
++ulong STDCALL symver16_mysql_escape_string(char *to,const char *from,ulong length)
++{
++ return mysql_escape_string(to, from, length);
++}
++SYM_16(mysql_escape_string);
++
++
++MYSQL_FIELD * STDCALL symver16_mysql_fetch_field(MYSQL_RES *result)
++{
++ return mysql_fetch_field(result);
++}
++SYM_16(mysql_fetch_field);
++
++
++MYSQL_FIELD * STDCALL symver16_mysql_fetch_field_direct(MYSQL_RES *res,uint fieldnr)
++{
++ return mysql_fetch_field_direct(res, fieldnr);
++}
++SYM_16(mysql_fetch_field_direct);
++
++
++MYSQL_FIELD * STDCALL symver16_mysql_fetch_fields(MYSQL_RES *res)
++{
++ return mysql_fetch_fields(res);
++}
++SYM_16(mysql_fetch_fields);
++
++
++unsigned int STDCALL symver16_mysql_field_count(MYSQL *mysql)
++{
++ return mysql_field_count(mysql);
++}
++SYM_16(mysql_field_count);
++
++
++MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET field_offset)
++{
++ return mysql_field_seek(result, field_offset);
++}
++SYM_16(mysql_field_seek);
++
++
++MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_tell(MYSQL_RES *res)
++{
++ return mysql_field_tell(res);
++}
++SYM_16(mysql_field_tell);
++
++
++void STDCALL symver16_mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo)
++{
++ return mysql_get_character_set_info(mysql, csinfo);
++}
++SYM_16(mysql_get_character_set_info);
++
++
++const char * STDCALL symver16_mysql_get_client_info(void)
++{
++ return mysql_get_client_info();
++}
++SYM_16(mysql_get_client_info);
++
++ulong STDCALL symver16_mysql_get_client_version(void)
++{
++ return mysql_get_client_version();
++}
++SYM_16(mysql_get_client_version);
++
++
++const char * STDCALL symver16_mysql_get_host_info(MYSQL *mysql)
++{
++ return mysql_get_host_info(mysql);
++}
++SYM_16(mysql_get_host_info);
++
++
++MYSQL_PARAMETERS *STDCALL symver16_mysql_get_parameters(void)
++{
++ return mysql_get_parameters();
++}
++SYM_16(mysql_get_parameters);
++
++
++uint STDCALL symver16_mysql_get_proto_info(MYSQL *mysql)
++{
++ return mysql_get_proto_info(mysql);
++}
++SYM_16(mysql_get_proto_info);
++
++
++const char * STDCALL symver16_mysql_get_server_info(MYSQL *mysql)
++{
++ return mysql_get_server_info(mysql);
++}
++SYM_16(mysql_get_server_info);
++
++
++ulong STDCALL symver16_mysql_hex_string(char *to, const char *from, ulong length)
++{
++ return mysql_hex_string(to, from, length);
++}
++SYM_16(mysql_hex_string);
++
++
++const char *STDCALL symver16_mysql_info(MYSQL *mysql)
++{
++ return mysql_info(mysql);
++}
++SYM_16(mysql_info);
++
++
++my_ulonglong STDCALL symver16_mysql_insert_id(MYSQL *mysql)
++{
++ return mysql_insert_id(mysql);
++}
++SYM_16(mysql_insert_id);
++
++
++int STDCALL symver16_mysql_kill(MYSQL *mysql,ulong pid)
++{
++ return mysql_kill(mysql, pid);
++}
++SYM_16(mysql_kill);
++
++
++MYSQL_RES * STDCALL symver16_mysql_list_dbs(MYSQL *mysql, const char *wild)
++{
++ return mysql_list_dbs(mysql, wild);
++}
++SYM_16(mysql_list_dbs);
++
++
++MYSQL_RES * STDCALL symver16_mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)
++{
++ return mysql_list_fields(mysql, table, wild);
++}
++SYM_16(mysql_list_fields);
++
++
++MYSQL_RES * STDCALL symver16_mysql_list_processes(MYSQL *mysql)
++{
++ return mysql_list_processes(mysql);
++}
++SYM_16(mysql_list_processes);
++
++
++MYSQL_RES * STDCALL symver16_mysql_list_tables(MYSQL *mysql, const char *wild)
++{
++ return mysql_list_tables(mysql, wild);
++}
++SYM_16(mysql_list_tables);
++
++
++my_bool STDCALL symver16_mysql_more_results(MYSQL *mysql)
++{
++ return mysql_more_results(mysql);
++}
++SYM_16(mysql_more_results);
++
++
++int STDCALL symver16_mysql_next_result(MYSQL *mysql)
++{
++ return mysql_next_result(mysql);
++}
++SYM_16(mysql_next_result);
++
++
++int STDCALL symver16_mysql_ping(MYSQL *mysql)
++{
++ return mysql_ping(mysql);
++}
++SYM_16(mysql_ping);
++
++
++int STDCALL symver16_mysql_query(MYSQL *mysql, const char *query)
++{
++ return mysql_query(mysql, query);
++}
++SYM_16(mysql_query);
++
++
++my_bool STDCALL symver16_mysql_read_query_result(MYSQL *mysql)
++{
++ return mysql_read_query_result(mysql);
++}
++SYM_16(mysql_read_query_result);
++
++
++ulong STDCALL symver16_mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, ulong length)
++{
++ return mysql_real_escape_string(mysql, to, from, length);
++}
++SYM_16(mysql_real_escape_string);
++
++
++int STDCALL symver16_mysql_refresh(MYSQL *mysql,uint options)
++{
++ return mysql_refresh(mysql, options);
++}
++SYM_16(mysql_refresh);
++
++
++my_bool STDCALL symver16_mysql_rollback(MYSQL * mysql)
++{
++ return mysql_rollback(mysql);
++}
++SYM_16(mysql_rollback);
++
++
++MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row)
++{
++ return mysql_row_seek(result, row);
++}
++SYM_16(mysql_row_seek);
++
++
++MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_tell(MYSQL_RES *res)
++{
++ return mysql_row_tell(res);
++}
++SYM_16(mysql_row_tell);
++
++
++void STDCALL symver16_mysql_server_end()
++{
++ return mysql_server_end();
++}
++SYM_16(mysql_server_end);
++
++
++int STDCALL symver16_mysql_server_init(int argc __attribute__((unused)), char **argv __attribute__((unused)), char **groups __attribute__((unused)))
++{
++ return mysql_server_init(argc, argv, groups);
++}
++SYM_16(mysql_server_init);
++
++
++void symver16_mysql_set_local_infile_default(MYSQL *mysql)
++{
++ return mysql_set_local_infile_default(mysql);
++}
++SYM_16(mysql_set_local_infile_default);
++
++
++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)
++{
++ return mysql_set_local_infile_handler(mysql, local_infile_init, local_infile_read, local_infile_end, local_infile_error, userdata);
++}
++SYM_16(mysql_set_local_infile_handler);
++
++
++int STDCALL symver16_mysql_set_server_option(MYSQL *mysql, enum enum_mysql_set_option option)
++{
++ return mysql_set_server_option(mysql, option);
++}
++SYM_16(mysql_set_server_option);
++
++
++int STDCALL symver16_mysql_shutdown(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level)
++{
++ return mysql_shutdown(mysql, shutdown_level);
++}
++SYM_16(mysql_shutdown);
++
++
++const char *STDCALL symver16_mysql_sqlstate(MYSQL *mysql)
++{
++ return mysql_sqlstate(mysql);
++}
++SYM_16(mysql_sqlstate);
++
++
++const char * STDCALL symver16_mysql_stat(MYSQL *mysql)
++{
++ return mysql_stat(mysql);
++}
++SYM_16(mysql_stat);
++
++
++my_ulonglong STDCALL symver16_mysql_stmt_affected_rows(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_affected_rows(stmt);
++}
++SYM_16(mysql_stmt_affected_rows);
++
++
++my_bool STDCALL symver16_mysql_stmt_attr_get(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, void *value)
++{
++ return mysql_stmt_attr_get(stmt, attr_type, value);
++}
++SYM_16(mysql_stmt_attr_get);
++
++
++my_bool STDCALL symver16_mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, const void *value)
++{
++ return mysql_stmt_attr_set(stmt, attr_type, value);
++}
++SYM_16(mysql_stmt_attr_set);
++
++
++my_bool STDCALL symver16_mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *my_bind)
++{
++ return mysql_stmt_bind_param(stmt, my_bind);
++}
++SYM_16(mysql_stmt_bind_param);
++
++
++my_bool STDCALL symver16_mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *my_bind)
++{
++ return mysql_stmt_bind_result(stmt, my_bind);
++}
++SYM_16(mysql_stmt_bind_result);
++
++
++my_bool STDCALL symver16_mysql_stmt_close(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_close(stmt);
++}
++SYM_16(mysql_stmt_close);
++
++
++void STDCALL symver16_mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong row)
++{
++ return mysql_stmt_data_seek(stmt, row);
++}
++SYM_16(mysql_stmt_data_seek);
++
++
++uint STDCALL symver16_mysql_stmt_errno(MYSQL_STMT * stmt)
++{
++ return mysql_stmt_errno(stmt);
++}
++SYM_16(mysql_stmt_errno);
++
++
++const char *STDCALL symver16_mysql_stmt_error(MYSQL_STMT * stmt)
++{
++ return mysql_stmt_error(stmt);
++}
++SYM_16(mysql_stmt_error);
++
++
++int STDCALL symver16_mysql_stmt_execute(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_execute(stmt);
++}
++SYM_16(mysql_stmt_execute);
++
++
++int STDCALL symver16_mysql_stmt_fetch(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_fetch(stmt);
++}
++SYM_16(mysql_stmt_fetch);
++
++
++int STDCALL symver16_mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *my_bind, uint column, ulong offset)
++{
++ return mysql_stmt_fetch_column(stmt, my_bind, column, offset);
++}
++SYM_16(mysql_stmt_fetch_column);
++
++
++unsigned int STDCALL symver16_mysql_stmt_field_count(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_field_count(stmt);
++}
++SYM_16(mysql_stmt_field_count);
++
++
++my_bool STDCALL symver16_mysql_stmt_free_result(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_free_result(stmt);
++}
++SYM_16(mysql_stmt_free_result);
++
++
++MYSQL_STMT * STDCALL symver16_mysql_stmt_init(MYSQL *mysql)
++{
++ return mysql_stmt_init(mysql);
++}
++SYM_16(mysql_stmt_init);
++
++
++my_ulonglong STDCALL symver16_mysql_stmt_insert_id(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_insert_id(stmt);
++}
++SYM_16(mysql_stmt_insert_id);
++
++
++my_ulonglong STDCALL symver16_mysql_stmt_num_rows(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_num_rows(stmt);
++}
++SYM_16(mysql_stmt_num_rows);
++
++
++ulong STDCALL symver16_mysql_stmt_param_count(MYSQL_STMT * stmt)
++{
++ return mysql_stmt_param_count(stmt);
++}
++SYM_16(mysql_stmt_param_count);
++
++
++MYSQL_RES * STDCALL symver16_mysql_stmt_param_metadata(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_param_metadata(stmt);
++}
++SYM_16(mysql_stmt_param_metadata);
++
++
++int STDCALL symver16_mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length)
++{
++ return mysql_stmt_prepare(stmt, query, length);
++}
++SYM_16(mysql_stmt_prepare);
++
++
++my_bool STDCALL symver16_mysql_stmt_reset(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_reset(stmt);
++}
++SYM_16(mysql_stmt_reset);
++
++
++MYSQL_RES * STDCALL symver16_mysql_stmt_result_metadata(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_result_metadata(stmt);
++}
++SYM_16(mysql_stmt_result_metadata);
++
++
++MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_seek(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET row)
++{
++ return mysql_stmt_row_seek(stmt, row);
++}
++SYM_16(mysql_stmt_row_seek);
++
++
++MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_tell(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_row_tell(stmt);
++}
++SYM_16(mysql_stmt_row_tell);
++
++
++my_bool STDCALL symver16_mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, const char *data, ulong length)
++{
++ return mysql_stmt_send_long_data(stmt, param_number, data, length);
++}
++SYM_16(mysql_stmt_send_long_data);
++
++
++const char *STDCALL symver16_mysql_stmt_sqlstate(MYSQL_STMT * stmt)
++{
++ return mysql_stmt_sqlstate(stmt);
++}
++SYM_16(mysql_stmt_sqlstate);
++
++
++int STDCALL symver16_mysql_stmt_store_result(MYSQL_STMT *stmt)
++{
++ return mysql_stmt_store_result(stmt);
++}
++SYM_16(mysql_stmt_store_result);
++
++
++void STDCALL symver16_mysql_thread_end()
++{
++ return mysql_thread_end();
++}
++SYM_16(mysql_thread_end);
++
++
++ulong STDCALL symver16_mysql_thread_id(MYSQL *mysql)
++{
++ return mysql_thread_id(mysql);
++}
++SYM_16(mysql_thread_id);
++
++
++my_bool STDCALL symver16_mysql_thread_init()
++{
++ return mysql_thread_init();
++}
++SYM_16(mysql_thread_init);
++
++
++uint STDCALL symver16_mysql_thread_safe(void)
++{
++ return mysql_thread_safe();
++}
++SYM_16(mysql_thread_safe);
++
++
++MYSQL_RES * STDCALL symver16_mysql_use_result(MYSQL *mysql)
++{
++ return mysql_use_result(mysql);
++}
++SYM_16(mysql_use_result);
++
++
++uint STDCALL symver16_mysql_warning_count(MYSQL *mysql)
++{
++ return mysql_warning_count(mysql);
++}
++SYM_16(mysql_warning_count);
++
++/*****/
++
++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)
++{
++ return mysql_real_connect(mysql, host, user, passwd, db, port, unix_socket, client_flag);
++}
++SYM_16(mysql_real_connect);
++
++/*****/
++
++my_bool symver16_my_init(void)
++{
++ return my_init();
++}
++SYM_16(my_init);
++
++#endif
+diff -rup old/libmysql/libmysql.ver.in new/libmysql/libmysql.ver.in
+--- old/libmysql/libmysql.ver.in 2013-11-05 08:19:26.000000000 +0100
++++ new/libmysql/libmysql.ver.in 2014-01-10 15:41:30.545182782 +0100
+@@ -1 +1,136 @@
+-libmysqlclient_@SHARED_LIB_MAJOR_VERSION@ { global: *; };
++libmysqlclient_16
++{
++ local:
++ symver16_*;
++};
++
++libmysqlclient_18
++{
++ global:
++ my_init;
++ myodbc_remove_escape;
++ mysql_affected_rows;
++ mysql_autocommit;
++ mysql_change_user;
++ mysql_character_set_name;
++ mysql_close;
++ mysql_commit;
++ mysql_data_seek;
++ mysql_debug;
++ mysql_dump_debug_info;
++ mysql_embedded;
++ mysql_eof;
++ mysql_errno;
++ mysql_error;
++ mysql_escape_string;
++ mysql_fetch_field;
++ mysql_fetch_field_direct;
++ mysql_fetch_fields;
++ mysql_fetch_lengths;
++ mysql_fetch_row;
++ mysql_field_count;
++ mysql_field_seek;
++ mysql_field_tell;
++ mysql_free_result;
++ mysql_get_character_set_info;
++ mysql_get_client_info;
++ mysql_get_client_version;
++ mysql_get_host_info;
++ mysql_get_parameters;
++ mysql_get_proto_info;
++ mysql_get_server_info;
++ mysql_get_server_version;
++ mysql_get_ssl_cipher;
++ mysql_hex_string;
++ mysql_info;
++ mysql_init;
++ mysql_insert_id;
++ mysql_kill;
++ mysql_list_dbs;
++ mysql_list_fields;
++ mysql_list_processes;
++ mysql_list_tables;
++ mysql_more_results;
++ mysql_next_result;
++ mysql_num_fields;
++ mysql_num_rows;
++ mysql_options;
++ mysql_ping;
++ mysql_query;
++ mysql_read_query_result;
++ mysql_real_connect;
++ mysql_real_escape_string;
++ mysql_real_query;
++ mysql_refresh;
++ mysql_rollback;
++ mysql_row_seek;
++ mysql_row_tell;
++ mysql_select_db;
++ mysql_send_query;
++ mysql_server_end;
++ mysql_server_init;
++ mysql_set_character_set;
++ mysql_set_local_infile_default;
++ mysql_set_local_infile_handler;
++ mysql_set_server_option;
++ mysql_shutdown;
++ mysql_sqlstate;
++ mysql_ssl_set;
++ mysql_stat;
++ mysql_stmt_affected_rows;
++ mysql_stmt_attr_get;
++ mysql_stmt_attr_set;
++ mysql_stmt_bind_param;
++ mysql_stmt_bind_result;
++ mysql_stmt_close;
++ mysql_stmt_data_seek;
++ mysql_stmt_errno;
++ mysql_stmt_error;
++ mysql_stmt_execute;
++ mysql_stmt_fetch;
++ mysql_stmt_fetch_column;
++ mysql_stmt_field_count;
++ mysql_stmt_free_result;
++ mysql_stmt_init;
++ mysql_stmt_insert_id;
++ mysql_stmt_num_rows;
++ mysql_stmt_param_count;
++ mysql_stmt_param_metadata;
++ mysql_stmt_prepare;
++ mysql_stmt_reset;
++ mysql_stmt_result_metadata;
++ mysql_stmt_row_seek;
++ mysql_stmt_row_tell;
++ mysql_stmt_send_long_data;
++ mysql_stmt_sqlstate;
++ mysql_stmt_store_result;
++ mysql_store_result;
++ mysql_thread_end;
++ mysql_thread_id;
++ mysql_thread_init;
++ mysql_thread_safe;
++ mysql_use_result;
++ mysql_warning_count;
++
++ free_defaults;
++ handle_options;
++ load_defaults;
++ my_print_help;
++
++ #my_make_scrambled_password;
++ THR_KEY_mysys;
++
++ mysql_client_find_plugin;
++ mysql_client_register_plugin;
++ mysql_load_plugin;
++ mysql_load_plugin_v;
++ mysql_plugin_options;
++ mysql_stmt_next_result;
++
++ #mysql_default_charset_info;
++ mysql_get_charset;
++ mysql_get_charset_by_csname;
++ mysql_net_realloc;
++ #mysql_client_errors;
++ *;
++} libmysqlclient_16;
+diff -rup old/mysys/charset.c new/mysys/charset.c
+--- old/mysys/charset.c 2013-11-05 08:19:26.000000000 +0100
++++ new/mysys/charset.c 2014-01-10 15:41:30.552919678 +0100
+@@ -941,3 +941,20 @@ size_t escape_quotes_for_mysql(CHARSET_I
+ *to= 0;
+ return overflow ? (ulong)~0 : (ulong) (to - to_start);
+ }
++
++#ifndef EMBEDDED_LIBRARY
++
++// Hack to provide Fedora symbols
++
++CHARSET_INFO *mysql_get_charset(uint cs_number, myf flags)
++{
++ return get_charset(cs_number, flags);
++}
++
++
++CHARSET_INFO * mysql_get_charset_by_csname(const char *cs_name, uint cs_flags, myf flags)
++{
++ return get_charset_by_csname(cs_name, cs_flags, flags);
++}
++
++#endif
+diff -rup old/sql/net_serv.cc new/sql/net_serv.cc
+--- old/sql/net_serv.cc 2013-11-05 08:19:26.000000000 +0100
++++ new/sql/net_serv.cc 2014-01-10 15:41:30.563377346 +0100
+@@ -1190,3 +1190,17 @@ void my_net_set_write_timeout(NET *net,
+ #endif
+ DBUG_VOID_RETURN;
+ }
++
++#ifndef EMBEDDED_LIBRARY
++C_MODE_START
++
++// Hack to provide Fedora symbols
++
++my_bool mysql_net_realloc(NET *net, size_t length)
++{
++ return net_realloc(net, length);
++}
++
++C_MODE_END
++#endif
++
+diff -rup old/sql/password.c new/sql/password.c
+--- old/sql/password.c 2013-11-05 08:19:26.000000000 +0100
++++ new/sql/password.c 2014-01-10 15:41:30.567134663 +0100
+@@ -563,3 +563,17 @@ void make_password_from_salt(char *to, c
+ *to++= PVERSION41_CHAR;
+ octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE);
+ }
++
++#ifndef EMBEDDED_LIBRARY
++
++// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions
++
++#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16")
++
++void symver16_my_make_scrambled_password(char *to, const char *password, size_t pass_len)
++{
++ my_make_scrambled_password(to, password, pass_len);
++}
++SYM_16(my_make_scrambled_password);
++
++#endif
+diff -rup old/sql-common/client.c new/sql-common/client.c
+--- old/sql-common/client.c 2013-11-05 08:19:26.000000000 +0100
++++ new/sql-common/client.c 2014-01-10 15:41:30.574151024 +0100
+@@ -4399,3 +4399,136 @@ static int clear_password_auth_client(MY
+
+ return res ? CR_ERROR : CR_OK;
+ }
++
++#ifndef EMBEDDED_LIBRARY
++
++// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions
++
++#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16")
++
++void STDCALL symver16_mysql_close(MYSQL *mysql)
++{
++ return mysql_close(mysql);
++}
++SYM_16(mysql_close);
++
++
++uint STDCALL symver16_mysql_errno(MYSQL *mysql)
++{
++ return mysql_errno(mysql);
++}
++SYM_16(mysql_errno);
++
++
++const char * STDCALL symver16_mysql_error(MYSQL *mysql)
++{
++ return mysql_error(mysql);
++}
++SYM_16(mysql_error);
++
++
++ulong * STDCALL symver16_mysql_fetch_lengths(MYSQL_RES *res)
++{
++ return mysql_fetch_lengths(res);
++}
++SYM_16(mysql_fetch_lengths);
++
++
++MYSQL_ROW STDCALL symver16_mysql_fetch_row(MYSQL_RES *res)
++{
++ return mysql_fetch_row(res);
++}
++SYM_16(mysql_fetch_row);
++
++
++void STDCALL symver16_mysql_free_result(MYSQL_RES *result)
++{
++ return mysql_free_result(result);
++}
++SYM_16(mysql_free_result);
++
++
++ulong STDCALL symver16_mysql_get_server_version(MYSQL *mysql)
++{
++ return mysql_get_server_version(mysql);
++}
++SYM_16(mysql_get_server_version);
++
++
++const char * STDCALL symver16_mysql_get_ssl_cipher(MYSQL *mysql __attribute__((unused)))
++{
++ return mysql_get_ssl_cipher(mysql);
++}
++SYM_16(mysql_get_ssl_cipher);
++
++
++MYSQL * STDCALL symver16_mysql_init(MYSQL *mysql)
++{
++ return mysql_init(mysql);
++}
++SYM_16(mysql_init);
++
++
++unsigned int STDCALL symver16_mysql_num_fields(MYSQL_RES *res)
++{
++ return mysql_num_fields(res);
++}
++SYM_16(mysql_num_fields);
++
++
++my_ulonglong STDCALL symver16_mysql_num_rows(MYSQL_RES *res)
++{
++ return mysql_num_rows(res);
++}
++SYM_16(mysql_num_rows);
++
++
++int STDCALL symver16_mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg)
++{
++ return mysql_options(mysql, option, arg);
++}
++SYM_16(mysql_options);
++
++
++int STDCALL symver16_mysql_real_query(MYSQL *mysql, const char *query, ulong length)
++{
++ return mysql_real_query(mysql, query, length);
++}
++SYM_16(mysql_real_query);
++
++
++int STDCALL symver16_mysql_select_db(MYSQL *mysql, const char *db)
++{
++ return mysql_select_db(mysql, db);
++}
++SYM_16(mysql_select_db);
++
++
++int STDCALL symver16_mysql_send_query(MYSQL* mysql, const char* query, ulong length)
++{
++ return mysql_send_query(mysql, query, length);
++}
++SYM_16(mysql_send_query);
++
++
++int STDCALL symver16_mysql_set_character_set(MYSQL *mysql, const char *cs_name)
++{
++ return mysql_set_character_set(mysql, cs_name);
++}
++SYM_16(mysql_set_character_set);
++
++
++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)))
++{
++ return mysql_ssl_set(mysql, key, cert, ca, capath, cipher);
++}
++SYM_16(mysql_ssl_set);
++
++
++MYSQL_RES * STDCALL symver16_mysql_store_result(MYSQL *mysql)
++{
++ return mysql_store_result(mysql);
++}
++SYM_16(mysql_store_result);
++
++#endif
diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh
index db75d1a8191..77fcbd84c8b 100644
--- a/support-files/mysql.spec.sh
+++ b/support-files/mysql.spec.sh
@@ -251,6 +251,7 @@ URL: http://www.mysql.com/
Packager: MySQL Release Engineering <mysql-build@oss.oracle.com>
Vendor: %{mysql_vendor}
BuildRequires: %{distro_buildreq}
+%{?el7:Patch0: mysql-5.5-libmysqlclient-symbols.patch}
# Regression tests may take a long time, override the default to skip them
%{!?runselftest:%global runselftest 1}
@@ -443,7 +444,7 @@ For a description of MySQL see the base MySQL RPM or http://www.mysql.com/
##############################################################################
%prep
%setup -T -a 0 -c -n %{src_dir}
-
+%{?el7:%patch0 -p1}
##############################################################################
%build
@@ -1094,6 +1095,7 @@ echo "=====" >> $STATUS_HISTORY
%doc %attr(644, root, man) %{_mandir}/man1/resolveip.1*
%ghost %config(noreplace,missingok) %{_sysconfdir}/my.cnf
+%dir %{_sysconfdir}/my.cnf.d
%attr(755, root, root) %{_bindir}/innochecksum
%attr(755, root, root) %{_bindir}/my_print_defaults