1diff -rup old/libmysql/CMakeLists.txt new/libmysql/CMakeLists.txt 2--- old/libmysql/CMakeLists.txt 2013-11-05 08:19:26.000000000 +0100 3+++ new/libmysql/CMakeLists.txt 2014-01-10 15:41:30.530068723 +0100 4@@ -205,13 +205,14 @@ IF(NOT DISABLE_SHARED) 5 OUTPUT_NAME mysqlclient 6 VERSION "${OS_SHARED_LIB_VERSION}" 7 SOVERSION "${SHARED_LIB_MAJOR_VERSION}") 8+ CONFIGURE_FILE(libmysql.ver.in ${CMAKE_CURRENT_BINARY_DIR}/libmysql.ver) 9 IF(LINK_FLAG_NO_UNDEFINED) 10 GET_TARGET_PROPERTY(libmysql_link_flags libmysql LINK_FLAGS) 11 IF(NOT libmysql_link_flag) 12 SET(libmysql_link_flags) 13 ENDIF() 14 SET_TARGET_PROPERTIES(libmysql PROPERTIES LINK_FLAGS 15- "${libmysql_link_flags} ${LINK_FLAG_NO_UNDEFINED}") 16+ "${libmysql_link_flags} -Wl,--version-script=libmysql.ver ${LINK_FLAG_NO_UNDEFINED}") 17 ENDIF() 18 # clean direct output needs to be set several targets have the same name 19 #(mysqlclient in this case) 20diff -rup old/libmysql/libmysql.c new/libmysql/libmysql.c 21--- old/libmysql/libmysql.c 2013-11-05 08:19:26.000000000 +0100 22+++ new/libmysql/libmysql.c 2014-01-10 15:46:35.708928462 +0100 23@@ -4870,3 +4870,612 @@ my_bool STDCALL mysql_read_query_result( 24 return (*mysql->methods->read_query_result)(mysql); 25 } 26 27+#ifndef EMBEDDED_LIBRARY 28+ 29+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions 30+ 31+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") 32+ 33+void STDCALL symver16_myodbc_remove_escape(MYSQL *mysql,char *name) 34+{ 35+ return myodbc_remove_escape(mysql, name); 36+} 37+SYM_16(myodbc_remove_escape); 38+ 39+ 40+my_ulonglong STDCALL symver16_mysql_affected_rows(MYSQL *mysql) 41+{ 42+ return mysql_affected_rows(mysql); 43+} 44+SYM_16(mysql_affected_rows); 45+ 46+ 47+my_bool STDCALL symver16_mysql_autocommit(MYSQL * mysql, my_bool auto_mode) 48+{ 49+ return mysql_autocommit(mysql, auto_mode); 50+} 51+SYM_16(mysql_autocommit); 52+ 53+ 54+my_bool STDCALL symver16_mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db) 55+{ 56+ return mysql_change_user(mysql, user, passwd, db); 57+} 58+SYM_16(mysql_change_user); 59+ 60+ 61+const char * STDCALL symver16_mysql_character_set_name(MYSQL *mysql) 62+{ 63+ return mysql_character_set_name(mysql); 64+} 65+SYM_16(mysql_character_set_name); 66+ 67+ 68+my_bool STDCALL symver16_mysql_commit(MYSQL * mysql) 69+{ 70+ return mysql_commit(mysql); 71+} 72+SYM_16(mysql_commit); 73+ 74+ 75+void STDCALL symver16_mysql_data_seek(MYSQL_RES *result, my_ulonglong row) 76+{ 77+ return mysql_data_seek(result, row); 78+} 79+SYM_16(mysql_data_seek); 80+ 81+ 82+void STDCALL symver16_mysql_debug(const char *debug __attribute__((unused))) 83+{ 84+ return mysql_debug(debug); 85+} 86+SYM_16(mysql_debug); 87+ 88+ 89+int STDCALL symver16_mysql_dump_debug_info(MYSQL *mysql) 90+{ 91+ return mysql_dump_debug_info(mysql); 92+} 93+SYM_16(mysql_dump_debug_info); 94+ 95+ 96+my_bool STDCALL symver16_mysql_embedded(void) 97+{ 98+ return mysql_embedded(); 99+} 100+SYM_16(mysql_embedded); 101+ 102+ 103+my_bool STDCALL symver16_mysql_eof(MYSQL_RES *res) 104+{ 105+ return mysql_eof(res); 106+} 107+SYM_16(mysql_eof); 108+ 109+ 110+ulong STDCALL symver16_mysql_escape_string(char *to,const char *from,ulong length) 111+{ 112+ return mysql_escape_string(to, from, length); 113+} 114+SYM_16(mysql_escape_string); 115+ 116+ 117+MYSQL_FIELD * STDCALL symver16_mysql_fetch_field(MYSQL_RES *result) 118+{ 119+ return mysql_fetch_field(result); 120+} 121+SYM_16(mysql_fetch_field); 122+ 123+ 124+MYSQL_FIELD * STDCALL symver16_mysql_fetch_field_direct(MYSQL_RES *res,uint fieldnr) 125+{ 126+ return mysql_fetch_field_direct(res, fieldnr); 127+} 128+SYM_16(mysql_fetch_field_direct); 129+ 130+ 131+MYSQL_FIELD * STDCALL symver16_mysql_fetch_fields(MYSQL_RES *res) 132+{ 133+ return mysql_fetch_fields(res); 134+} 135+SYM_16(mysql_fetch_fields); 136+ 137+ 138+unsigned int STDCALL symver16_mysql_field_count(MYSQL *mysql) 139+{ 140+ return mysql_field_count(mysql); 141+} 142+SYM_16(mysql_field_count); 143+ 144+ 145+MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET field_offset) 146+{ 147+ return mysql_field_seek(result, field_offset); 148+} 149+SYM_16(mysql_field_seek); 150+ 151+ 152+MYSQL_FIELD_OFFSET STDCALL symver16_mysql_field_tell(MYSQL_RES *res) 153+{ 154+ return mysql_field_tell(res); 155+} 156+SYM_16(mysql_field_tell); 157+ 158+ 159+void STDCALL symver16_mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo) 160+{ 161+ return mysql_get_character_set_info(mysql, csinfo); 162+} 163+SYM_16(mysql_get_character_set_info); 164+ 165+ 166+const char * STDCALL symver16_mysql_get_client_info(void) 167+{ 168+ return mysql_get_client_info(); 169+} 170+SYM_16(mysql_get_client_info); 171+ 172+ulong STDCALL symver16_mysql_get_client_version(void) 173+{ 174+ return mysql_get_client_version(); 175+} 176+SYM_16(mysql_get_client_version); 177+ 178+ 179+const char * STDCALL symver16_mysql_get_host_info(MYSQL *mysql) 180+{ 181+ return mysql_get_host_info(mysql); 182+} 183+SYM_16(mysql_get_host_info); 184+ 185+ 186+MYSQL_PARAMETERS *STDCALL symver16_mysql_get_parameters(void) 187+{ 188+ return mysql_get_parameters(); 189+} 190+SYM_16(mysql_get_parameters); 191+ 192+ 193+uint STDCALL symver16_mysql_get_proto_info(MYSQL *mysql) 194+{ 195+ return mysql_get_proto_info(mysql); 196+} 197+SYM_16(mysql_get_proto_info); 198+ 199+ 200+const char * STDCALL symver16_mysql_get_server_info(MYSQL *mysql) 201+{ 202+ return mysql_get_server_info(mysql); 203+} 204+SYM_16(mysql_get_server_info); 205+ 206+ 207+ulong STDCALL symver16_mysql_hex_string(char *to, const char *from, ulong length) 208+{ 209+ return mysql_hex_string(to, from, length); 210+} 211+SYM_16(mysql_hex_string); 212+ 213+ 214+const char *STDCALL symver16_mysql_info(MYSQL *mysql) 215+{ 216+ return mysql_info(mysql); 217+} 218+SYM_16(mysql_info); 219+ 220+ 221+my_ulonglong STDCALL symver16_mysql_insert_id(MYSQL *mysql) 222+{ 223+ return mysql_insert_id(mysql); 224+} 225+SYM_16(mysql_insert_id); 226+ 227+ 228+int STDCALL symver16_mysql_kill(MYSQL *mysql,ulong pid) 229+{ 230+ return mysql_kill(mysql, pid); 231+} 232+SYM_16(mysql_kill); 233+ 234+ 235+MYSQL_RES * STDCALL symver16_mysql_list_dbs(MYSQL *mysql, const char *wild) 236+{ 237+ return mysql_list_dbs(mysql, wild); 238+} 239+SYM_16(mysql_list_dbs); 240+ 241+ 242+MYSQL_RES * STDCALL symver16_mysql_list_fields(MYSQL *mysql, const char *table, const char *wild) 243+{ 244+ return mysql_list_fields(mysql, table, wild); 245+} 246+SYM_16(mysql_list_fields); 247+ 248+ 249+MYSQL_RES * STDCALL symver16_mysql_list_processes(MYSQL *mysql) 250+{ 251+ return mysql_list_processes(mysql); 252+} 253+SYM_16(mysql_list_processes); 254+ 255+ 256+MYSQL_RES * STDCALL symver16_mysql_list_tables(MYSQL *mysql, const char *wild) 257+{ 258+ return mysql_list_tables(mysql, wild); 259+} 260+SYM_16(mysql_list_tables); 261+ 262+ 263+my_bool STDCALL symver16_mysql_more_results(MYSQL *mysql) 264+{ 265+ return mysql_more_results(mysql); 266+} 267+SYM_16(mysql_more_results); 268+ 269+ 270+int STDCALL symver16_mysql_next_result(MYSQL *mysql) 271+{ 272+ return mysql_next_result(mysql); 273+} 274+SYM_16(mysql_next_result); 275+ 276+ 277+int STDCALL symver16_mysql_ping(MYSQL *mysql) 278+{ 279+ return mysql_ping(mysql); 280+} 281+SYM_16(mysql_ping); 282+ 283+ 284+int STDCALL symver16_mysql_query(MYSQL *mysql, const char *query) 285+{ 286+ return mysql_query(mysql, query); 287+} 288+SYM_16(mysql_query); 289+ 290+ 291+my_bool STDCALL symver16_mysql_read_query_result(MYSQL *mysql) 292+{ 293+ return mysql_read_query_result(mysql); 294+} 295+SYM_16(mysql_read_query_result); 296+ 297+ 298+ulong STDCALL symver16_mysql_real_escape_string(MYSQL *mysql, char *to,const char *from, ulong length) 299+{ 300+ return mysql_real_escape_string(mysql, to, from, length); 301+} 302+SYM_16(mysql_real_escape_string); 303+ 304+ 305+int STDCALL symver16_mysql_refresh(MYSQL *mysql,uint options) 306+{ 307+ return mysql_refresh(mysql, options); 308+} 309+SYM_16(mysql_refresh); 310+ 311+ 312+my_bool STDCALL symver16_mysql_rollback(MYSQL * mysql) 313+{ 314+ return mysql_rollback(mysql); 315+} 316+SYM_16(mysql_rollback); 317+ 318+ 319+MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET row) 320+{ 321+ return mysql_row_seek(result, row); 322+} 323+SYM_16(mysql_row_seek); 324+ 325+ 326+MYSQL_ROW_OFFSET STDCALL symver16_mysql_row_tell(MYSQL_RES *res) 327+{ 328+ return mysql_row_tell(res); 329+} 330+SYM_16(mysql_row_tell); 331+ 332+ 333+void STDCALL symver16_mysql_server_end() 334+{ 335+ return mysql_server_end(); 336+} 337+SYM_16(mysql_server_end); 338+ 339+ 340+int STDCALL symver16_mysql_server_init(int argc __attribute__((unused)), char **argv __attribute__((unused)), char **groups __attribute__((unused))) 341+{ 342+ return mysql_server_init(argc, argv, groups); 343+} 344+SYM_16(mysql_server_init); 345+ 346+ 347+void symver16_mysql_set_local_infile_default(MYSQL *mysql) 348+{ 349+ return mysql_set_local_infile_default(mysql); 350+} 351+SYM_16(mysql_set_local_infile_default); 352+ 353+ 354+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) 355+{ 356+ return mysql_set_local_infile_handler(mysql, local_infile_init, local_infile_read, local_infile_end, local_infile_error, userdata); 357+} 358+SYM_16(mysql_set_local_infile_handler); 359+ 360+ 361+int STDCALL symver16_mysql_set_server_option(MYSQL *mysql, enum enum_mysql_set_option option) 362+{ 363+ return mysql_set_server_option(mysql, option); 364+} 365+SYM_16(mysql_set_server_option); 366+ 367+ 368+int STDCALL symver16_mysql_shutdown(MYSQL *mysql, enum mysql_enum_shutdown_level shutdown_level) 369+{ 370+ return mysql_shutdown(mysql, shutdown_level); 371+} 372+SYM_16(mysql_shutdown); 373+ 374+ 375+const char *STDCALL symver16_mysql_sqlstate(MYSQL *mysql) 376+{ 377+ return mysql_sqlstate(mysql); 378+} 379+SYM_16(mysql_sqlstate); 380+ 381+ 382+const char * STDCALL symver16_mysql_stat(MYSQL *mysql) 383+{ 384+ return mysql_stat(mysql); 385+} 386+SYM_16(mysql_stat); 387+ 388+ 389+my_ulonglong STDCALL symver16_mysql_stmt_affected_rows(MYSQL_STMT *stmt) 390+{ 391+ return mysql_stmt_affected_rows(stmt); 392+} 393+SYM_16(mysql_stmt_affected_rows); 394+ 395+ 396+my_bool STDCALL symver16_mysql_stmt_attr_get(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, void *value) 397+{ 398+ return mysql_stmt_attr_get(stmt, attr_type, value); 399+} 400+SYM_16(mysql_stmt_attr_get); 401+ 402+ 403+my_bool STDCALL symver16_mysql_stmt_attr_set(MYSQL_STMT *stmt, enum enum_stmt_attr_type attr_type, const void *value) 404+{ 405+ return mysql_stmt_attr_set(stmt, attr_type, value); 406+} 407+SYM_16(mysql_stmt_attr_set); 408+ 409+ 410+my_bool STDCALL symver16_mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) 411+{ 412+ return mysql_stmt_bind_param(stmt, my_bind); 413+} 414+SYM_16(mysql_stmt_bind_param); 415+ 416+ 417+my_bool STDCALL symver16_mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *my_bind) 418+{ 419+ return mysql_stmt_bind_result(stmt, my_bind); 420+} 421+SYM_16(mysql_stmt_bind_result); 422+ 423+ 424+my_bool STDCALL symver16_mysql_stmt_close(MYSQL_STMT *stmt) 425+{ 426+ return mysql_stmt_close(stmt); 427+} 428+SYM_16(mysql_stmt_close); 429+ 430+ 431+void STDCALL symver16_mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong row) 432+{ 433+ return mysql_stmt_data_seek(stmt, row); 434+} 435+SYM_16(mysql_stmt_data_seek); 436+ 437+ 438+uint STDCALL symver16_mysql_stmt_errno(MYSQL_STMT * stmt) 439+{ 440+ return mysql_stmt_errno(stmt); 441+} 442+SYM_16(mysql_stmt_errno); 443+ 444+ 445+const char *STDCALL symver16_mysql_stmt_error(MYSQL_STMT * stmt) 446+{ 447+ return mysql_stmt_error(stmt); 448+} 449+SYM_16(mysql_stmt_error); 450+ 451+ 452+int STDCALL symver16_mysql_stmt_execute(MYSQL_STMT *stmt) 453+{ 454+ return mysql_stmt_execute(stmt); 455+} 456+SYM_16(mysql_stmt_execute); 457+ 458+ 459+int STDCALL symver16_mysql_stmt_fetch(MYSQL_STMT *stmt) 460+{ 461+ return mysql_stmt_fetch(stmt); 462+} 463+SYM_16(mysql_stmt_fetch); 464+ 465+ 466+int STDCALL symver16_mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *my_bind, uint column, ulong offset) 467+{ 468+ return mysql_stmt_fetch_column(stmt, my_bind, column, offset); 469+} 470+SYM_16(mysql_stmt_fetch_column); 471+ 472+ 473+unsigned int STDCALL symver16_mysql_stmt_field_count(MYSQL_STMT *stmt) 474+{ 475+ return mysql_stmt_field_count(stmt); 476+} 477+SYM_16(mysql_stmt_field_count); 478+ 479+ 480+my_bool STDCALL symver16_mysql_stmt_free_result(MYSQL_STMT *stmt) 481+{ 482+ return mysql_stmt_free_result(stmt); 483+} 484+SYM_16(mysql_stmt_free_result); 485+ 486+ 487+MYSQL_STMT * STDCALL symver16_mysql_stmt_init(MYSQL *mysql) 488+{ 489+ return mysql_stmt_init(mysql); 490+} 491+SYM_16(mysql_stmt_init); 492+ 493+ 494+my_ulonglong STDCALL symver16_mysql_stmt_insert_id(MYSQL_STMT *stmt) 495+{ 496+ return mysql_stmt_insert_id(stmt); 497+} 498+SYM_16(mysql_stmt_insert_id); 499+ 500+ 501+my_ulonglong STDCALL symver16_mysql_stmt_num_rows(MYSQL_STMT *stmt) 502+{ 503+ return mysql_stmt_num_rows(stmt); 504+} 505+SYM_16(mysql_stmt_num_rows); 506+ 507+ 508+ulong STDCALL symver16_mysql_stmt_param_count(MYSQL_STMT * stmt) 509+{ 510+ return mysql_stmt_param_count(stmt); 511+} 512+SYM_16(mysql_stmt_param_count); 513+ 514+ 515+MYSQL_RES * STDCALL symver16_mysql_stmt_param_metadata(MYSQL_STMT *stmt) 516+{ 517+ return mysql_stmt_param_metadata(stmt); 518+} 519+SYM_16(mysql_stmt_param_metadata); 520+ 521+ 522+int STDCALL symver16_mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, ulong length) 523+{ 524+ return mysql_stmt_prepare(stmt, query, length); 525+} 526+SYM_16(mysql_stmt_prepare); 527+ 528+ 529+my_bool STDCALL symver16_mysql_stmt_reset(MYSQL_STMT *stmt) 530+{ 531+ return mysql_stmt_reset(stmt); 532+} 533+SYM_16(mysql_stmt_reset); 534+ 535+ 536+MYSQL_RES * STDCALL symver16_mysql_stmt_result_metadata(MYSQL_STMT *stmt) 537+{ 538+ return mysql_stmt_result_metadata(stmt); 539+} 540+SYM_16(mysql_stmt_result_metadata); 541+ 542+ 543+MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_seek(MYSQL_STMT *stmt, MYSQL_ROW_OFFSET row) 544+{ 545+ return mysql_stmt_row_seek(stmt, row); 546+} 547+SYM_16(mysql_stmt_row_seek); 548+ 549+ 550+MYSQL_ROW_OFFSET STDCALL symver16_mysql_stmt_row_tell(MYSQL_STMT *stmt) 551+{ 552+ return mysql_stmt_row_tell(stmt); 553+} 554+SYM_16(mysql_stmt_row_tell); 555+ 556+ 557+my_bool STDCALL symver16_mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number, const char *data, ulong length) 558+{ 559+ return mysql_stmt_send_long_data(stmt, param_number, data, length); 560+} 561+SYM_16(mysql_stmt_send_long_data); 562+ 563+ 564+const char *STDCALL symver16_mysql_stmt_sqlstate(MYSQL_STMT * stmt) 565+{ 566+ return mysql_stmt_sqlstate(stmt); 567+} 568+SYM_16(mysql_stmt_sqlstate); 569+ 570+ 571+int STDCALL symver16_mysql_stmt_store_result(MYSQL_STMT *stmt) 572+{ 573+ return mysql_stmt_store_result(stmt); 574+} 575+SYM_16(mysql_stmt_store_result); 576+ 577+ 578+void STDCALL symver16_mysql_thread_end() 579+{ 580+ return mysql_thread_end(); 581+} 582+SYM_16(mysql_thread_end); 583+ 584+ 585+ulong STDCALL symver16_mysql_thread_id(MYSQL *mysql) 586+{ 587+ return mysql_thread_id(mysql); 588+} 589+SYM_16(mysql_thread_id); 590+ 591+ 592+my_bool STDCALL symver16_mysql_thread_init() 593+{ 594+ return mysql_thread_init(); 595+} 596+SYM_16(mysql_thread_init); 597+ 598+ 599+uint STDCALL symver16_mysql_thread_safe(void) 600+{ 601+ return mysql_thread_safe(); 602+} 603+SYM_16(mysql_thread_safe); 604+ 605+ 606+MYSQL_RES * STDCALL symver16_mysql_use_result(MYSQL *mysql) 607+{ 608+ return mysql_use_result(mysql); 609+} 610+SYM_16(mysql_use_result); 611+ 612+ 613+uint STDCALL symver16_mysql_warning_count(MYSQL *mysql) 614+{ 615+ return mysql_warning_count(mysql); 616+} 617+SYM_16(mysql_warning_count); 618+ 619+/*****/ 620+ 621+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) 622+{ 623+ return mysql_real_connect(mysql, host, user, passwd, db, port, unix_socket, client_flag); 624+} 625+SYM_16(mysql_real_connect); 626+ 627+/*****/ 628+ 629+my_bool symver16_my_init(void) 630+{ 631+ return my_init(); 632+} 633+SYM_16(my_init); 634+ 635+#endif 636diff -rup old/libmysql/libmysql.ver.in new/libmysql/libmysql.ver.in 637--- old/libmysql/libmysql.ver.in 2013-11-05 08:19:26.000000000 +0100 638+++ new/libmysql/libmysql.ver.in 2014-01-10 15:41:30.545182782 +0100 639@@ -1 +1,136 @@ 640-libmysqlclient_@SHARED_LIB_MAJOR_VERSION@ { global: *; }; 641+libmysqlclient_16 642+{ 643+ local: 644+ symver16_*; 645+}; 646+ 647+libmysqlclient_18 648+{ 649+ global: 650+ my_init; 651+ myodbc_remove_escape; 652+ mysql_affected_rows; 653+ mysql_autocommit; 654+ mysql_change_user; 655+ mysql_character_set_name; 656+ mysql_close; 657+ mysql_commit; 658+ mysql_data_seek; 659+ mysql_debug; 660+ mysql_dump_debug_info; 661+ mysql_embedded; 662+ mysql_eof; 663+ mysql_errno; 664+ mysql_error; 665+ mysql_escape_string; 666+ mysql_fetch_field; 667+ mysql_fetch_field_direct; 668+ mysql_fetch_fields; 669+ mysql_fetch_lengths; 670+ mysql_fetch_row; 671+ mysql_field_count; 672+ mysql_field_seek; 673+ mysql_field_tell; 674+ mysql_free_result; 675+ mysql_get_character_set_info; 676+ mysql_get_client_info; 677+ mysql_get_client_version; 678+ mysql_get_host_info; 679+ mysql_get_parameters; 680+ mysql_get_proto_info; 681+ mysql_get_server_info; 682+ mysql_get_server_version; 683+ mysql_get_ssl_cipher; 684+ mysql_hex_string; 685+ mysql_info; 686+ mysql_init; 687+ mysql_insert_id; 688+ mysql_kill; 689+ mysql_list_dbs; 690+ mysql_list_fields; 691+ mysql_list_processes; 692+ mysql_list_tables; 693+ mysql_more_results; 694+ mysql_next_result; 695+ mysql_num_fields; 696+ mysql_num_rows; 697+ mysql_options; 698+ mysql_ping; 699+ mysql_query; 700+ mysql_read_query_result; 701+ mysql_real_connect; 702+ mysql_real_escape_string; 703+ mysql_real_query; 704+ mysql_refresh; 705+ mysql_rollback; 706+ mysql_row_seek; 707+ mysql_row_tell; 708+ mysql_select_db; 709+ mysql_send_query; 710+ mysql_server_end; 711+ mysql_server_init; 712+ mysql_set_character_set; 713+ mysql_set_local_infile_default; 714+ mysql_set_local_infile_handler; 715+ mysql_set_server_option; 716+ mysql_shutdown; 717+ mysql_sqlstate; 718+ mysql_ssl_set; 719+ mysql_stat; 720+ mysql_stmt_affected_rows; 721+ mysql_stmt_attr_get; 722+ mysql_stmt_attr_set; 723+ mysql_stmt_bind_param; 724+ mysql_stmt_bind_result; 725+ mysql_stmt_close; 726+ mysql_stmt_data_seek; 727+ mysql_stmt_errno; 728+ mysql_stmt_error; 729+ mysql_stmt_execute; 730+ mysql_stmt_fetch; 731+ mysql_stmt_fetch_column; 732+ mysql_stmt_field_count; 733+ mysql_stmt_free_result; 734+ mysql_stmt_init; 735+ mysql_stmt_insert_id; 736+ mysql_stmt_num_rows; 737+ mysql_stmt_param_count; 738+ mysql_stmt_param_metadata; 739+ mysql_stmt_prepare; 740+ mysql_stmt_reset; 741+ mysql_stmt_result_metadata; 742+ mysql_stmt_row_seek; 743+ mysql_stmt_row_tell; 744+ mysql_stmt_send_long_data; 745+ mysql_stmt_sqlstate; 746+ mysql_stmt_store_result; 747+ mysql_store_result; 748+ mysql_thread_end; 749+ mysql_thread_id; 750+ mysql_thread_init; 751+ mysql_thread_safe; 752+ mysql_use_result; 753+ mysql_warning_count; 754+ 755+ free_defaults; 756+ handle_options; 757+ load_defaults; 758+ my_print_help; 759+ 760+ #my_make_scrambled_password; 761+ THR_KEY_mysys; 762+ 763+ mysql_client_find_plugin; 764+ mysql_client_register_plugin; 765+ mysql_load_plugin; 766+ mysql_load_plugin_v; 767+ mysql_plugin_options; 768+ mysql_stmt_next_result; 769+ 770+ #mysql_default_charset_info; 771+ mysql_get_charset; 772+ mysql_get_charset_by_csname; 773+ mysql_net_realloc; 774+ #mysql_client_errors; 775+ *; 776+} libmysqlclient_16; 777diff -rup old/mysys/charset.c new/mysys/charset.c 778--- old/mysys/charset.c 2013-11-05 08:19:26.000000000 +0100 779+++ new/mysys/charset.c 2014-01-10 15:41:30.552919678 +0100 780@@ -941,3 +941,20 @@ size_t escape_quotes_for_mysql(CHARSET_I 781 *to= 0; 782 return overflow ? (ulong)~0 : (ulong) (to - to_start); 783 } 784+ 785+#ifndef EMBEDDED_LIBRARY 786+ 787+// Hack to provide Fedora symbols 788+ 789+CHARSET_INFO *mysql_get_charset(uint cs_number, myf flags) 790+{ 791+ return get_charset(cs_number, flags); 792+} 793+ 794+ 795+CHARSET_INFO * mysql_get_charset_by_csname(const char *cs_name, uint cs_flags, myf flags) 796+{ 797+ return get_charset_by_csname(cs_name, cs_flags, flags); 798+} 799+ 800+#endif 801diff -rup old/sql/net_serv.cc new/sql/net_serv.cc 802--- old/sql/net_serv.cc 2013-11-05 08:19:26.000000000 +0100 803+++ new/sql/net_serv.cc 2014-01-10 15:41:30.563377346 +0100 804@@ -1190,3 +1190,17 @@ void my_net_set_write_timeout(NET *net, 805 #endif 806 DBUG_VOID_RETURN; 807 } 808+ 809+#ifndef EMBEDDED_LIBRARY 810+C_MODE_START 811+ 812+// Hack to provide Fedora symbols 813+ 814+my_bool mysql_net_realloc(NET *net, size_t length) 815+{ 816+ return net_realloc(net, length); 817+} 818+ 819+C_MODE_END 820+#endif 821+ 822diff -rup old/sql/password.c new/sql/password.c 823--- old/sql/password.c 2013-11-05 08:19:26.000000000 +0100 824+++ new/sql/password.c 2014-01-10 15:41:30.567134663 +0100 825@@ -563,3 +563,17 @@ void make_password_from_salt(char *to, c 826 *to++= PVERSION41_CHAR; 827 octet2hex(to, (const char*) hash_stage2, SHA1_HASH_SIZE); 828 } 829+ 830+#ifndef EMBEDDED_LIBRARY 831+ 832+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions 833+ 834+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") 835+ 836+void symver16_my_make_scrambled_password(char *to, const char *password, size_t pass_len) 837+{ 838+ my_make_scrambled_password(to, password, pass_len); 839+} 840+SYM_16(my_make_scrambled_password); 841+ 842+#endif 843diff -rup old/sql-common/client.c new/sql-common/client.c 844--- old/sql-common/client.c 2013-11-05 08:19:26.000000000 +0100 845+++ new/sql-common/client.c 2014-01-10 15:41:30.574151024 +0100 846@@ -4399,3 +4399,136 @@ static int clear_password_auth_client(MY 847 848 return res ? CR_ERROR : CR_OK; 849 } 850+ 851+#ifndef EMBEDDED_LIBRARY 852+ 853+// Hack to provide both libmysqlclient_16 and libmysqlclient_18 symbol versions 854+ 855+#define SYM_16(_exportedsym) __asm__(".symver symver16_" #_exportedsym "," #_exportedsym "@libmysqlclient_16") 856+ 857+void STDCALL symver16_mysql_close(MYSQL *mysql) 858+{ 859+ return mysql_close(mysql); 860+} 861+SYM_16(mysql_close); 862+ 863+ 864+uint STDCALL symver16_mysql_errno(MYSQL *mysql) 865+{ 866+ return mysql_errno(mysql); 867+} 868+SYM_16(mysql_errno); 869+ 870+ 871+const char * STDCALL symver16_mysql_error(MYSQL *mysql) 872+{ 873+ return mysql_error(mysql); 874+} 875+SYM_16(mysql_error); 876+ 877+ 878+ulong * STDCALL symver16_mysql_fetch_lengths(MYSQL_RES *res) 879+{ 880+ return mysql_fetch_lengths(res); 881+} 882+SYM_16(mysql_fetch_lengths); 883+ 884+ 885+MYSQL_ROW STDCALL symver16_mysql_fetch_row(MYSQL_RES *res) 886+{ 887+ return mysql_fetch_row(res); 888+} 889+SYM_16(mysql_fetch_row); 890+ 891+ 892+void STDCALL symver16_mysql_free_result(MYSQL_RES *result) 893+{ 894+ return mysql_free_result(result); 895+} 896+SYM_16(mysql_free_result); 897+ 898+ 899+ulong STDCALL symver16_mysql_get_server_version(MYSQL *mysql) 900+{ 901+ return mysql_get_server_version(mysql); 902+} 903+SYM_16(mysql_get_server_version); 904+ 905+ 906+const char * STDCALL symver16_mysql_get_ssl_cipher(MYSQL *mysql __attribute__((unused))) 907+{ 908+ return mysql_get_ssl_cipher(mysql); 909+} 910+SYM_16(mysql_get_ssl_cipher); 911+ 912+ 913+MYSQL * STDCALL symver16_mysql_init(MYSQL *mysql) 914+{ 915+ return mysql_init(mysql); 916+} 917+SYM_16(mysql_init); 918+ 919+ 920+unsigned int STDCALL symver16_mysql_num_fields(MYSQL_RES *res) 921+{ 922+ return mysql_num_fields(res); 923+} 924+SYM_16(mysql_num_fields); 925+ 926+ 927+my_ulonglong STDCALL symver16_mysql_num_rows(MYSQL_RES *res) 928+{ 929+ return mysql_num_rows(res); 930+} 931+SYM_16(mysql_num_rows); 932+ 933+ 934+int STDCALL symver16_mysql_options(MYSQL *mysql,enum mysql_option option, const void *arg) 935+{ 936+ return mysql_options(mysql, option, arg); 937+} 938+SYM_16(mysql_options); 939+ 940+ 941+int STDCALL symver16_mysql_real_query(MYSQL *mysql, const char *query, ulong length) 942+{ 943+ return mysql_real_query(mysql, query, length); 944+} 945+SYM_16(mysql_real_query); 946+ 947+ 948+int STDCALL symver16_mysql_select_db(MYSQL *mysql, const char *db) 949+{ 950+ return mysql_select_db(mysql, db); 951+} 952+SYM_16(mysql_select_db); 953+ 954+ 955+int STDCALL symver16_mysql_send_query(MYSQL* mysql, const char* query, ulong length) 956+{ 957+ return mysql_send_query(mysql, query, length); 958+} 959+SYM_16(mysql_send_query); 960+ 961+ 962+int STDCALL symver16_mysql_set_character_set(MYSQL *mysql, const char *cs_name) 963+{ 964+ return mysql_set_character_set(mysql, cs_name); 965+} 966+SYM_16(mysql_set_character_set); 967+ 968+ 969+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))) 970+{ 971+ return mysql_ssl_set(mysql, key, cert, ca, capath, cipher); 972+} 973+SYM_16(mysql_ssl_set); 974+ 975+ 976+MYSQL_RES * STDCALL symver16_mysql_store_result(MYSQL *mysql) 977+{ 978+ return mysql_store_result(mysql); 979+} 980+SYM_16(mysql_store_result); 981+ 982+#endif 983