From 29d0fa12f7770b67c4df00ab1b4de13e0bfdf8bb Mon Sep 17 00:00:00 2001 From: Joerg Bruehe Date: Tue, 8 Sep 2009 15:35:01 +0200 Subject: [PATCH 1/4] This is the 5.4 version of the fix for bug#47007 Unresolved reference to 'innodb_system_libs' in "mysql_config" In 5.4.2, we use InnoDB 1.0.4 which does file IO via separate threads, opposed to the use of asynchronous IO previously. So there is no InnoDB call to "aio_read()" which was searched in "librt", causing a "-lrt" value of "innodb_system_libs", that whole variable is gone. This fix was applied in the build of 5.4.2-beta. scripts/Makefile.am: There is no "innodb_system_libs" variable any more, so it cannot be replaced by its value. scripts/mysql_config.pl.in: InnoDB does not need any platform-specific libraries any more, "innodb_system_libs" may go. scripts/mysql_config.sh: InnoDB does not need any platform-specific libraries any more, "innodb_system_libs" may go. --- scripts/Makefile.am | 1 - scripts/mysql_config.pl.in | 2 +- scripts/mysql_config.sh | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/Makefile.am b/scripts/Makefile.am index e493c68827c..cd758370388 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -169,7 +169,6 @@ SUFFIXES = .sh -e 's!@''ZLIB_LIBS''@!@ZLIB_LIBS@!' \ -e 's!@''LIBS''@!@LIBS@!' \ -e 's!@''WRAPLIBS''@!@WRAPLIBS@!' \ - -e 's!@''innodb_system_libs''@!@innodb_system_libs@!' \ -e 's!@''openssl_libs''@!@openssl_libs@!' \ -e 's!@''VERSION''@!@VERSION@!' \ -e 's!@''MYSQL_BASE_VERSION''@!@MYSQL_BASE_VERSION@!' \ diff --git a/scripts/mysql_config.pl.in b/scripts/mysql_config.pl.in index 21896711fa8..415c0d3040e 100644 --- a/scripts/mysql_config.pl.in +++ b/scripts/mysql_config.pl.in @@ -202,7 +202,7 @@ $flags->{libs} = $flags->{libs_r} = [@ldflags,@lib_r_opts,'@ZLIB_DEPS@','@LIBS@','@openssl_libs@']; $flags->{embedded_libs} = - [@ldflags,@lib_e_opts,'@LIBDL@','@ZLIB_DEPS@','@LIBS@','@WRAPLIBS@','@innodb_system_libs@','@openssl_libs@']; + [@ldflags,@lib_e_opts,'@LIBDL@','@ZLIB_DEPS@','@LIBS@','@WRAPLIBS@','@openssl_libs@']; $flags->{include} = ["-I$pkgincludedir"]; $flags->{cflags} = [@{$flags->{include}},split(" ",'@CFLAGS@')]; diff --git a/scripts/mysql_config.sh b/scripts/mysql_config.sh index efc82544bc0..4118856af19 100644 --- a/scripts/mysql_config.sh +++ b/scripts/mysql_config.sh @@ -107,7 +107,7 @@ fi libs=" $ldflags -L$pkglibdir -lmysqlclient @ZLIB_DEPS@ @NON_THREADED_LIBS@" libs="$libs @openssl_libs@ @STATIC_NSS_FLAGS@ " libs_r=" $ldflags -L$pkglibdir -lmysqlclient_r @ZLIB_DEPS@ @LIBS@ @openssl_libs@ " -embedded_libs=" $ldflags -L$pkglibdir -lmysqld @LIBDL@ @ZLIB_DEPS@ @LIBS@ @WRAPLIBS@ @innodb_system_libs@ @openssl_libs@ " +embedded_libs=" $ldflags -L$pkglibdir -lmysqld @LIBDL@ @ZLIB_DEPS@ @LIBS@ @WRAPLIBS@ @openssl_libs@ " if [ -r "$pkglibdir/libmygcc.a" ]; then # When linking against the static library with a different version of GCC From deab1e9ce3dc073927f57ed62bc0fdcd2c663cc3 Mon Sep 17 00:00:00 2001 From: Joerg Bruehe Date: Tue, 8 Sep 2009 15:38:40 +0200 Subject: [PATCH 2/4] Some fixes to make 5.4.2-beta compile on the less common platforms like AIX, HP-UX, and Solaris 8. All these are upmerges from 5.1 which came too late to be included when 5.4.2-beta was cloned, so they were applied during the build phase. --- storage/innobase/handler/i_s.cc | 18 ++++++++++-------- storage/innobase/include/btr0cur.h | 2 +- storage/innobase/include/trx0types.h | 2 +- storage/innobase/include/univ.i | 3 ++- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc index c0d488d1c49..524fe696de2 100644 --- a/storage/innobase/handler/i_s.cc +++ b/storage/innobase/handler/i_s.cc @@ -69,14 +69,16 @@ do { \ #define STRUCT_FLD(name, value) value #endif -static const ST_FIELD_INFO END_OF_ST_FIELD_INFO = - {STRUCT_FLD(field_name, NULL), - STRUCT_FLD(field_length, 0), - STRUCT_FLD(field_type, MYSQL_TYPE_NULL), - STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, 0), - STRUCT_FLD(old_name, ""), - STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}; +/* Don't use a static const variable here, as some C++ compilers (notably +HPUX aCC: HP ANSI C++ B3910B A.03.65) can't handle it. */ +#define END_OF_ST_FIELD_INFO \ + {STRUCT_FLD(field_name, NULL), \ + STRUCT_FLD(field_length, 0), \ + STRUCT_FLD(field_type, MYSQL_TYPE_NULL), \ + STRUCT_FLD(value, 0), \ + STRUCT_FLD(field_flags, 0), \ + STRUCT_FLD(old_name, ""), \ + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)} /* Use the following types mapping: diff --git a/storage/innobase/include/btr0cur.h b/storage/innobase/include/btr0cur.h index b2d43ae3254..8e66dd50783 100644 --- a/storage/innobase/include/btr0cur.h +++ b/storage/innobase/include/btr0cur.h @@ -618,7 +618,7 @@ enum btr_cur_method { hash_node, and might be necessary to update */ BTR_CUR_BINARY, /*!< success using the binary search */ - BTR_CUR_INSERT_TO_IBUF, /*!< performed the intended insert to + BTR_CUR_INSERT_TO_IBUF /*!< performed the intended insert to the insert buffer */ }; diff --git a/storage/innobase/include/trx0types.h b/storage/innobase/include/trx0types.h index 08cc9622d02..e312efd0b50 100644 --- a/storage/innobase/include/trx0types.h +++ b/storage/innobase/include/trx0types.h @@ -70,7 +70,7 @@ typedef struct trx_named_savept_struct trx_named_savept_t; enum trx_rb_ctx { RB_NONE = 0, /*!< no rollback */ RB_NORMAL, /*!< normal rollback */ - RB_RECOVERY, /*!< rolling back an incomplete transaction, + RB_RECOVERY /*!< rolling back an incomplete transaction, in crash recovery */ }; diff --git a/storage/innobase/include/univ.i b/storage/innobase/include/univ.i index 6bce6dd765e..023a6c9cd89 100644 --- a/storage/innobase/include/univ.i +++ b/storage/innobase/include/univ.i @@ -408,7 +408,8 @@ it is read. */ /* Minimize cache-miss latency by moving data at addr into a cache before it is read or written. */ # define UNIV_PREFETCH_RW(addr) __builtin_prefetch(addr, 1, 3) -#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) +/* Sun Studio includes sun_prefetch.h as of version 5.9 */ +#elif (defined(__SUNPRO_C) && __SUNPRO_C >= 0x590) || (defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x590) # include #if __SUNPRO_C >= 0x550 # undef UNIV_INTERN From eb26de2356fd53a7a799bf0d512dfe96766222cb Mon Sep 17 00:00:00 2001 From: Joerg Bruehe Date: Tue, 8 Sep 2009 15:48:55 +0200 Subject: [PATCH 3/4] The former "Instance Manager" (program "mysqlmanager") is not being built in 5.4.2-beta, so it cannot be included in a RPM: Remove both the program and the man page from the spec file. This patch was applied during the build of 5.4.2-beta. --- support-files/mysql.spec.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index 778b04b30fe..6a0679bcfb3 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -453,11 +453,9 @@ rm -fr $RBR%{_datadir}/sql-bench # will appreciate that, as all services usually offer this. ln -s %{_sysconfdir}/init.d/mysql $RPM_BUILD_ROOT%{_sbindir}/rcmysql -# Touch the place where the my.cnf config file and mysqlmanager.passwd -# (MySQL Instance Manager password file) might be located +# Touch the place where the my.cnf config file might be located # Just to make sure it's in the file list and marked as a config file touch $RBR%{_sysconfdir}/my.cnf -touch $RBR%{_sysconfdir}/mysqlmanager.passwd %pre server # Check if we can safely upgrade. An upgrade is only safe if it's from one @@ -655,7 +653,6 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/mysql_upgrade.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlhotcopy.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqlman.1* -%doc %attr(644, root, man) %{_mandir}/man8/mysqlmanager.8* %doc %attr(644, root, man) %{_mandir}/man1/mysql.server.1* %doc %attr(644, root, man) %{_mandir}/man1/mysqltest.1* %doc %attr(644, root, man) %{_mandir}/man1/mysql_tzinfo_to_sql.1* @@ -665,7 +662,6 @@ fi %doc %attr(644, root, man) %{_mandir}/man1/replace.1* %ghost %config(noreplace,missingok) %{_sysconfdir}/my.cnf -%ghost %config(noreplace,missingok) %{_sysconfdir}/mysqlmanager.passwd %attr(755, root, root) %{_bindir}/innochecksum %attr(755, root, root) %{_bindir}/my_print_defaults @@ -695,7 +691,6 @@ fi %attr(755, root, root) %{_sbindir}/mysqld %attr(755, root, root) %{_sbindir}/mysqld-debug -%attr(755, root, root) %{_sbindir}/mysqlmanager %attr(755, root, root) %{_sbindir}/rcmysql %attr(644, root, root) %config(noreplace,missingok) %{_sysconfdir}/logrotate.d/mysql @@ -847,6 +842,11 @@ fi # itself - note that they must be ordered by date (important when # merging BK trees) %changelog +* Thu Aug 27 2009 Joerg Bruehe + +- This version does not contain the "Instance manager", "mysqlmanager": + Remove it from the spec file so that packaging succeeds. + * Fri Nov 07 2008 Joerg Bruehe - Correct yesterday's fix, so that it also works for the last flag, From 36703050e8e5ef12dde3440864bc84cc0099944d Mon Sep 17 00:00:00 2001 From: Joerg Bruehe Date: Tue, 8 Sep 2009 16:10:06 +0200 Subject: [PATCH 4/4] Make sure that variables which are (or may be) used in an ".opt" file are defined to some value (even if it is empty). Without this, a test suite run aborted on Windows for "embedded". This fix was applied dusing the build of 5.4.2-beta. mysql-test/mysql-test-run.pl: From the code (function "envsubst()"), it is obvious that any variable which is used in an ".opt" file needs to be defined. If the value is wrong, starting the server may fail - but if the variable is undefined, the whole test suite will abort. So variables which are used in an ".opt" file should always be defined to some value, even if it is blank. This fix may be overkill, I did not check in detail whether all these variables are really used in an ".opt" file - but some are. --- mysql-test/mysql-test-run.pl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 7591e091992..cdc7dbb01cd 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1781,6 +1781,14 @@ sub environment_setup { $ENV{'HA_EXAMPLE_SO'}="'".$plugin_filename."'"; $ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=;EXAMPLE=".$plugin_filename.";"; } + else + { + # Some ".opt" files use some of these variables, so they must be defined + $ENV{'EXAMPLE_PLUGIN'}= ""; + $ENV{'EXAMPLE_PLUGIN_OPT'}= ""; + $ENV{'HA_EXAMPLE_SO'}= ""; + $ENV{'EXAMPLE_PLUGIN_LOAD'}= ""; + } # ---------------------------------------------------- # Add the path where mysqld will find mypluglib.so