Switch makefiles to use libtool to build libmysqld.so, as well as all its
dependencies.
The previous MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS() declaration is removed,
as it does not work well with a libtool build. Instead, plugins that need it
can specify an alternate object in MYSQL_PLUGIN_STATIC() that will be used for
embedded library. The plugin must then take care itself of compiling the
special object for embedded, rebuilding the source files previously listed in
MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS() with @plugin_embedded_defs@ in
CFLAGS/CXXFLAGS. The extra target @XXX_embedded_static_target@ is available
for the special object, this will be empty when --without-embedded-server.
All in-tree plugins are changed to build their static targets with libtool.
Additional plugins that want to work with libmysqld.so will need to be
similarly modified to build with libtool (or otherwise provide an -fPIC
object). Dynamically loaded plugins are not affected.
The old libraries like libmysys.a, libmyisam.a and similar libraries, which
were installed by `make install` though this is of little use, are still built
and installed to not break package scripts etc. that expect them. These
libraries are kept static to avoid introducing new .so dependencies.
The patch also fixes a handfull of duplicate symbol linker errors, where we
included some object twice during linking; these for one reason or another did
not produce errors before but caused problems on some platforms with this
patch (eg. Mac OS X linker is more strict for shared objects).
This patch only does what is necessary to build libmysqld.so. There are some
more cleanups that are possible now that we are using libtool more fully,
which could done in subsequent patches (though we may not bother as we are
switching from autotools to CMake anyway):
- In libmysql_r/, we should be able to just link libmysys.la etc, instead of
symlinking and re-compiling sources into the directory.
- In libmysql/, we can similarly avoid symlinking and recompiling sources if
we instead build a libmysys_nothread.la library with appropriate CFLAGS and
link that.
- In sql/, we can build a separate target libmysql_int.la with appropriate
CFLAGS for embedded and use that in libmysqld/ instead of symlinking
sources.
- libmysys.a, libmyisam.a and similar libraries could be installed as .so
also to save on code size; or alternatively could be not installed at all.
client/Makefile.am:
Updated for using libtool
config/ac-macros/plugins.m4:
Replace MUSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS with mechanism for plugins
to specify alternate object for embedded.
configure.in:
Fix linking duplicate objects related to THREAD_LOBJECTS.
dbug/Makefile.am:
Updated for using libtool
extra/Makefile.am:
Fix relative paths.
libmysqld/Makefile.am:
Build libmysqld.la using libtool
libmysqld/examples/Makefile.am:
Updated to use libtool
mysys/Makefile.am:
Updated to use libtool.
Fix linking duplicate objects related to THREAD_LOBJECTS.
mysys/my_uuid.c:
Fix conflicting global mutex name by making it static.
regex/Makefile.am:
Updated to use libtool
sql/Makefile.am:
Updated to use libtool
sql/item_func.cc:
Fix conflicting mutex name.
sql/mysql_priv.h:
Fix conflicting mutex name
sql/mysqld.cc:
Fix conflicting mutex name.
Add missing call of my_uuid_end().
storage/archive/Makefile.am:
Updated to use libtool
storage/archive/plug.in:
Updated to use libtool
storage/blackhole/Makefile.am:
Updated to use libtool
storage/blackhole/plug.in:
Updated to use libtool
storage/csv/Makefile.am:
Updated to use libtool
storage/csv/plug.in:
Updated to use libtool
storage/example/Makefile.am:
Updated to use libtool
storage/federated/Makefile.am:
Updated to use libtool
storage/federated/plug.in:
Updated to use libtool
storage/federatedx/Makefile.am:
Updated to use libtool
storage/federatedx/plug.in:
Updated to use libtool
storage/heap/Makefile.am:
Updated to use libtool
storage/heap/plug.in:
Updated to use libtool
storage/innobase/Makefile.am:
Updated to use libtool
storage/innobase/plug.in.disabled:
Updated to use libtool
storage/innodb_plugin/Makefile.am:
Updated to use libtool
storage/maria/CMakeLists.txt:
Fix linking duplicate object in maria_dump_log, causes failure on Mac OS X
storage/maria/Makefile.am:
Updated to use libtool
Fix linking duplicate object in maria_dump_log, causes link failure on Mac OS X
storage/maria/ma_loghandler.c:
Move maria_dump_log code to separate file to fix duplicate object link failures.
storage/maria/ma_loghandler.h:
Move maria_dump_log code to separate file to fix duplicate object link failures.
storage/maria/maria_dump_log.c:
Move maria_dump_log code to separate file to fix duplicate object link failures.
storage/maria/plug.in:
Updated to use libtool
storage/myisam/Makefile.am:
Updated to use libtool
storage/myisam/plug.in:
Updated to use libtool
storage/myisammrg/Makefile.am:
Updated to use libtool
storage/myisammrg/plug.in:
Updated to use libtool
storage/pbxt/plug.in:
Updated to use libtool
storage/pbxt/src/Makefile.am:
Updated to use libtool
storage/xtradb/Makefile.am:
Updated to use libtool
storage/xtradb/plug.in:
Updated to use libtool
strings/Makefile.am:
Updated to use libtool
unittest/unit.pl:
Don't attempt to run libtool internal files as unit tests.
vio/Makefile.am:
Updated to use libtool
better MYSQL_PLUGIN_WITHOUT that works correctly in all of the following:
--with-plugin-XXX
--without-plugin-XXX
--with-plugins=XXX
--with-plugins=META
--with-plugins=XXX --without-plugin-XXX
--with-plugins=META --without-plugin-XXX
Interface for maria extensions.
Alternative plugin interface with additional info (maturity and string version).
CMakeLists.txt:
Maria plugin interface used.
config/ac-macros/plugins.m4:
Maria plugin interface used.
configure.in:
Maria plugin interface used.
include/mysql/plugin.h:
Maria plugin interface added.
include/mysql/plugin_auth.h.pp:
Maria plugin interface added.
plugin/auth/auth_socket.c:
Maria plugin interface added.
plugin/auth/dialog.c:
Maria plugin interface added.
plugin/daemon_example/daemon_example.cc:
Maria plugin interface added.
plugin/fulltext/plugin_example.c:
Maria plugin interface added.
sql/ha_ndbcluster.cc:
Maria plugin interface added.
sql/ha_partition.cc:
Maria plugin interface added.
sql/log.cc:
Maria plugin interface added.
sql/sql_acl.cc:
Maria plugin interface added.
sql/sql_builtin.cc.in:
Maria plugin interface used.
sql/sql_plugin.cc:
Maria plugin interface added.
sql/sql_plugin.h:
Maria plugin interface used.
sql/sql_show.cc:
Maria plugin interface added.
storage/archive/ha_archive.cc:
Maria plugin interface added.
storage/blackhole/ha_blackhole.cc:
Maria plugin interface added.
storage/csv/ha_tina.cc:
Maria plugin interface added.
storage/example/ha_example.cc:
Maria plugin interface added.
storage/federated/ha_federated.cc:
Maria plugin interface added.
storage/federatedx/ha_federatedx.cc:
Maria plugin interface added.
storage/heap/ha_heap.cc:
Maria plugin interface added.
storage/ibmdb2i/ha_ibmdb2i.cc:
Maria plugin interface added.
storage/innobase/handler/ha_innodb.cc:
Maria plugin interface added.
storage/innodb_plugin/handler/i_s.cc:
Maria plugin interface added.
storage/maria/ha_maria.cc:
Maria plugin interface added.
storage/myisam/ha_myisam.cc:
Maria plugin interface added.
storage/myisammrg/ha_myisammrg.cc:
Maria plugin interface added.
storage/pbxt/src/ha_pbxt.cc:
Maria plugin interface added.
storage/xtradb/handler/ha_innodb.cc:
Maria plugin interface added.
storage/xtradb/handler/i_s.cc:
Maria plugin interface added.
storage/xtradb/handler/i_s.h:
Maria plugin interface added.
Also some small fixes to make the PBXT testsuite work in --embedded.
config/ac-macros/plugins.m4:
MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS macro extended to support multiple files.
mysql-test/std_data/pbxt_load_unique_error1.inc:
Move file to be accessible also for testing embedded server.
mysql-test/suite/pbxt/r/pbxt_bugs.result:
Fix LOAD DATA LOCAL INFILE path so it works also for testing embedded server.
mysql-test/suite/pbxt/t/pbxt_bugs.test:
Fix LOAD DATA LOCAL INFILE path so it works also for testing embedded server.
mysql-test/suite/pbxt/t/pbxt_locking.test:
Disable for embedded, as it needs SHOW PROCESSLIST functionality not available there.
mysql-test/suite/pbxt/t/pbxt_transactions.test:
Disable test for embedded, as it needs ability to connect from outside (mysqldump).
mysql-test/suite/pbxt/t/ps_1general.test:
Fix replace_result for new mysql-test-run.pl.
sql/sql_plugin.cc:
Remove hack that disables PBXT in embedded.
storage/pbxt/plug.in:
Fix crash in PBXT in embedded server.
storage/pbxt/src/Makefile.am:
Remove not needed CFLAGS/CXXFLAGS (they cause autotools to generate different object names, which in turn cause the MYSQL_PLUGIN_DEPENDS_ON_MYSQL_INTERNALS replacement of object files inside library files not to work).
storage/pbxt/src/ha_pbxt.cc:
Ugly hack to allow more threads in embedded server (need a better fix I think).
storage/pbxt/src/table_xt.cc:
Use stderr for logging not stdout (prevent spamming --embedded test suite output with stray messages).
storage/pbxt/src/thread_xt.cc:
Use stderr for logging not stdout (prevent spamming --embedded test suite output with stray messages).
storage/pbxt/src/trace_xt.cc:
Use stderr for logging not stdout (prevent spamming --embedded test suite output with stray messages).
There are some recursive targets that automake generates which reference
DIST_SUBDIRS. It's critical, then, for such subdirs to exist even if they
won't be built as part of SUBDIRS.
During a VPATH build, it is the configure script which creates the subdirs
(when it processes the AC_CONFIG_FILES() for each subdir's Makefile). If
autoconf doesn't create a subdir's Makefile, then the recursive make will fail
when it is unable to cd into that subdir.
This isn't a problem in non-VPATH builds, because the subdirs are all present
in the source tarball. So the problem only shows up during 'make distcheck',
which does a VPATH build.
The fix is to look, when configure is being created by autoconf, for any
plugin subdirectories. These are the dynamic subdirectories which need to be
handled specially. It's enough to tell autoconf to generate a Makefile for
any Makefile.am found in the plugin directory - all plugin subdirectories
using automake (i.e., listed in the plugin's DIST_SUBDIRS) will have a
Makefile.am.
This is done by calling 'find'. This means that 'find' must be in the PATH on
the host that is running autoconf. 'find' is NOT needed when calling
configure, so it is not an additional dependency for the user.
Finally, ha_ndbcluster.m4 had called AC_CONFIG_FILES() on all those subdir
Makefiles, but only when the plugin was actually being built. So it didn't
work in the case that NDB was not being built. All of those Makefiles have to
be removed from this static list, since the plugin machinery is now adding
them automatically. autoconf fails if a file is duplicated in
AC_CONFIG_FILES().
Modify plugins.m4 configuration framework so that plugins which are
not built still get added to the source distribution during make dist.
This came up now because we can only build ibmdb2i on i5/OS, and we
can't bootstrap our source dist on that platform. The solution is to
specify DIST_SUBDIRS containing all plugins, separate from SUBDIRS
which contains the plugins which are actually built.
This ibmdb2i code is from the ibmdb2i-ga3-src.zip file, with a patch
to plug.in to disable the plugin if the PASE environment isn't available.
enable maria in the default plugin configuration
config/ac-macros/plugins.m4:
typo in comment fixed.
change default plugin configuration to be "default" not "none".
don't print default plugin configuration in the help text (as it's "default" anyway)
configure.in:
use "default" plugin configuration by default, not "none"
storage/maria/plug.in:
enable maria in the default plugin configuration
"Dynamic plugins fail to load on FreeBSD"
ELF executables need to be linked using the -export-dynamic option to
ld(1) for symbols defined in the executable to become visible to dlsym().
Also, do not build plugins on an all-static build.
configure.in:
Bug#30296
Use "-export-dynamic" when building executable for use with plugins.
Add required option using MYSQLD_EXTRA_LDFLAGS variable so we do not
affect any other binary.
config/ac-macros/plugins.m4:
Do not build plugins when building all-static
sql/sql_yacc.yy:
build fix - surplus semicolon
5.1-related fixes
libmysqld/Makefile.am fixed to recompile and link ha_*.cc files that
keep dependance on THD structure.
Minor fixes to make tests working.
config/ac-macros/plugins.m4:
condition_dependent_plugin_objects added
libmysqld/Makefile.am:
rules for ha_*.o files added
condition_dependent_plugin_objects sent to linker
libmysqld/lib_sql.cc:
ddl_log initialization added
mysql-test/r/flush_block_commit_notembedded.result:
result fixed
mysql-test/t/crash_commit_before.test:
doesn't work in embedded server
mysql-test/t/csv.test:
replace_result added
mysql-test/t/ps.test:
doesn't work in embedded server
should be fixed by separating ps_notembedded.test
mysql-test/t/ps_1general.test:
replace_result fixed
mysql-test/t/ps_not_windows.test:
doesn't work in embedded server
mysql-test/t/trigger.test:
replace_result fixed
sql/sql_insert.cc:
#ifdef HAVE_ROW_BASED_REPLICATION added
storage/myisam/ha_myisam.cc:
MY_UNPACK_FILENAME flag added
Problem is that some files moved to storage/*/ still are dependent
on sql/ code (usually use members of THD structure)
that can get different being compiled with another #define-s
Code added to recompile these for the embedded server
config/ac-macros/plugins.m4:
macros added to check if the storage has sql/ - dependent code
libmysqld/Makefile.am:
symlink files from storage/*/ needed to be recompiled
with EMBEDDED_LIBRARY
storage/federated/plug.in:
ha_federated.cc uses THD structure
storage/heap/plug.in:
ha_heap.cc uses THD structure
storage/innobase/plug.in:
ha_innodb.cc uses THD structure
storage/myisam/plug.in:
ha_myisam.cc uses THD structure
storage/myisammrg/plug.in:
ha_myisammrg.cc uses THD structure
for push in 5.1 (I will inform Trudy).
Storage engines and plugins can now have unit tests to test their components; such
test must be an executable C/C++ program which name ends with '-t' and which is
obeys the mytap protocol, it must be stored in the storage engine's or plugin's
source directory (storage/<engine> or plugin/<plugin>) or any subdirectories of
this.
The top-level Makefile target "test-unit" will run all unit tests: it will scan
the engines' and plugins' directories, recursively, and execute all executable
files which name ends with '-t'."
Makefile.am:
"unittest" directory must be built before "storage" and "plugin"
because the unit tests in these directories may need libmytap.a
which is in unittest/mytap.
config/ac-macros/plugins.m4:
When enabling engine "X", we add "../storage/X" to the unit tests
directories which unittest/unit.pl should traverse looking for
tests to execute. Same for plugins.
unittest/Makefile.am:
Those variables contain all enabled engines and plugins.
don't add CFLAGS/CXXFLAGS to ./configure command line in config.status
but _do_ add them before calling plugins' configure scripts
config/ac-macros/plugins.m4:
don't call plugins' configure scripts manually, use AC_CONFIG_SUBDIRS
storage/archive/plug.in:
MYSQL_PLUGIN_DIRECTORY for plug.in files is set automagically
storage/example/plug.in:
MYSQL_PLUGIN_DIRECTORY for plug.in files is set automagically
config/ac-macros/plugins.m4:
remove unneccessary `ifelse'
add comment, add missing dnl
configure.in:
change description for heap engine
include/mysql/plugin.h:
change macro name
sql/ha_berkeley.cc:
store strings statically for use in handlerton and plugin structures
sql/ha_federated.cc:
store strings statically for use in handlerton and plugin structures
sql/ha_heap.cc:
store strings statically for use in handlerton and plugin structures
sql/ha_innodb.cc:
store strings statically for use in handlerton and plugin structures
sql/ha_myisam.cc:
store strings statically for use in handlerton and plugin structures
sql/ha_myisammrg.cc:
store strings statically for use in handlerton and plugin structures
sql/ha_ndbcluster.cc:
store strings statically for use in handlerton and plugin structures
sql/ha_partition.cc:
store strings statically for use in handlerton and plugin structures
storage/archive/ha_archive.cc:
store strings statically for use in handlerton and plugin structures
storage/blackhole/ha_blackhole.cc:
store strings statically for use in handlerton and plugin structures
storage/csv/ha_tina.cc:
store strings statically for use in handlerton and plugin structures
storage/example/ha_example.cc:
store strings statically for use in handlerton and plugin structures
end plugin/module naming schizophrenia
fixup shell code and m4 macro comments
cmakelists.txt included in EXTRA_DIST
BUILD/SETUP.sh:
change module -> plugin
config/ac-macros/plugins.m4:
change module -> plugin
rename some macros
fixup comments
alter shell code to use similar 'test "X$var" = Xfoo"' which autoconf generates
configure.in:
change module -> plugin
move plugin mandatory declarations near rest of plugin declaration
storage/archive/Makefile.am:
cmakelists.txt needed in EXTRA_DIST
storage/blackhole/Makefile.am:
cmakelists.txt needed in EXTRA_DIST
storage/csv/Makefile.am:
cmakelists.txt needed in EXTRA_DIST
storage/example/Makefile.am:
cmakelists.txt needed in EXTRA_DIST
Makefile.am:
plugin/ must be built before sql/
config/ac-macros/plugins.m4:
simplifications, style fixes
BitKeeper/etc/ignore:
Added compile libmysqld/sql_builtin.cc sql/sql_builtin.cc to the ignore list
plugin/Makefile.am:
restore comment
plugin/fulltext/Makefile.am:
revert
sql/sql_show.cc:
revert
Fixes after first review
config/ac-macros/ha_ndbcluster.m4:
WL#3201
Undo change
config/ac-macros/plugins.m4:
WL#3201
Remove unneccesary use of AC_DEFUN
fix shell script to be more portable
configure.in:
WL#3201
Remove use of word "engine" when desribing partition module
Undo ndb config files change
sql/ha_partition.cc:
WL#3201
Remove use of word "engine" when desribing partition module
sql/handler.cc:
WL#3201
Add comment describing installed_htons array
" Configure support for server plugins "
storage/blackhole/ha_blackhole.h:
Rename: sql/ha_blackhole.h -> storage/blackhole/ha_blackhole.h
BitKeeper/deleted/.del-storage.m4~24bf2fffdaa328ad:
Delete: config/ac-macros/storage.m4
BitKeeper/deleted/.del-ha_archive.m4~a07fac7110b39294:
Delete: config/ac-macros/ha_archive.m4
BitKeeper/deleted/.del-ha_blackhole.m4~8ed06eb91f6420ed:
Delete: config/ac-macros/ha_blackhole.m4
BitKeeper/deleted/.del-ha_example.m4~1dfb268163297708:
Delete: config/ac-macros/ha_example.m4
BitKeeper/deleted/.del-ha_federated.m4~7acddd58286acfd6:
Delete: config/ac-macros/ha_federated.m4
BitKeeper/deleted/.del-ha_innodb.m4~6f141fb5b80c1f39:
Delete: config/ac-macros/ha_innodb.m4
BitKeeper/deleted/.del-ha_partition.m4~bc57067550be5f89:
Delete: config/ac-macros/ha_partition.m4
BitKeeper/deleted/.del-ha_tina.m4~f658506ebbc113ca:
Delete: config/ac-macros/ha_tina.m4
BitKeeper/deleted/.del-handlerton.cc.in~377156e7b06067cc:
Delete: sql/handlerton.cc.in
BitKeeper/deleted/.del-handlerton-win.cc~322a7e59507976df:
Delete: sql/handlerton-win.cc
BUILD/SETUP.sh:
WL#3201
Changes in configure arguments
Makefile.am:
WL#3201
changes in build subst names
config/ac-macros/ha_berkeley.m4:
WL#3201
remove unused variable
Makefile is always made
config/ac-macros/ha_ndbcluster.m4:
WL#3201
remove unused variables
Split big macro
configure.in:
WL#3201
out with storage.m4, in with plugins.m4
change how plugins are declared
include makefiles, remove handlerton.cc, add sql_builtin.cc
include/mysql/plugin.h:
WL#3201
support static and dynamic build - MYSQL_DYNAMIC_PLUGIN
libmysqld/Makefile.am:
WL#3201
Storage engine files still left in sql subdir are not conditionally
compiled. Should move them out soon,
plugin/Makefile.am:
WL#3201
update makefile
plugin/fulltext/Makefile.am:
WL#3201
update makefile
plugin/fulltext/plugin_example.c:
WL#3201
change to mysql_declare_plugin macro
sql/Makefile.am:
WL#3201
Storage engine files still left in sql subdir are not conditionally
compiled. Should move them out soon,
sql/ha_berkeley.cc:
WL#3201
make into a plugin
conditionally compile content
sql/ha_federated.cc:
WL#3201
make into a plugin
conditionally compile content
sql/ha_heap.cc:
WL#3201
make into a plugin
sql/ha_innodb.cc:
WL#3201
make into a plugin
conditionally compile content
sql/ha_myisam.cc:
WL#3201
make into a plugin
sql/ha_myisammrg.cc:
WL#3201
make into a plugin
sql/ha_ndbcluster.cc:
WL#3201
make into a plugin
conditionally compile content
sql/ha_ndbcluster_binlog.cc:
WL#3201
make into a plugin
conditionally compile content
sql/ha_partition.cc:
WL#3201
make into a plugin
conditionally compile content
sql/handler.cc:
WL#3201
Simplify how storage engines are found by db_type
(hopefully we can get rid of it soon)
Code cleanup
sql/handler.h:
WL#3201
new DB_TYPE_FIRST_DYNAMIC
new func ha_finalize_handlerton()
remove ha_register_builtin_plugins()
sql/log.cc:
WL#3201
make into a plugin
sql/mysqld.cc:
WL#3201
remove ha_register_builtin_plugins()
alter init order so that storage engines are initialized before first use
sql/partition_info.cc:
WL#3201
conditionally compile content
sql/sql_delete.cc:
WL#3201
conditionally include ha_innodb.h
sql/sql_plugin.cc:
WL#3201
All compiled in plugins are in mysqld_builtins[]
add funcs for plugin finalization
install builtin plugins on initialization
sql/sql_show.cc:
WL#3201
Fix to use plugin_foreach()
sql/sql_yacc.yy:
WL#3201
SHOW FULL PLUGIN
storage/archive/Makefile.am:
WL#3201
setup as plugin makefile
storage/archive/ha_archive.cc:
WL#3201
Convert into a plugin
storage/archive/ha_archive.h:
WL#3201
azlib.h now in local dir
storage/blackhole/ha_blackhole.cc:
WL#3201
convert into a plugin
storage/csv/Makefile.am:
WL#3201
setup as plugin makefile
storage/csv/ha_tina.cc:
WL#3201
remove conditional compilation on MYSQL_PLUGIN
mysql_declare_plugin macro change
storage/example/Makefile.am:
WL#3201
fix as new-style plugin makefile
storage/example/ha_example.cc:
WL#3201
remove conditional compilation on MYSQL_PLUGIN
mysql_declare_plugin macro change
storage/innobase/Makefile.am:
WL#3201
Lets make life easier and reduce innodb into a single library file
config/ac-macros/plugins.m4:
New BitKeeper file ``config/ac-macros/plugins.m4''
sql/sql_builtin.cc.in:
New BitKeeper file ``sql/sql_builtin.cc.in''
storage/blackhole/Makefile.am:
New BitKeeper file ``storage/blackhole/Makefile.am''