← Back to team overview

maria-developers team mailing list archive

WL#75 Deleted (by Serg): Extend build to create a shared libmysqld.so library

 

-----------------------------------------------------------------------
                              WORKLOG TASK
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
TASK...........: Extend build to create a shared libmysqld.so library
CREATION DATE..: Fri, 22 Jan 2010, 09:39
SUPERVISOR.....: Knielsen
IMPLEMENTOR....: 
COPIES TO......: 
CATEGORY.......: Server-RawIdeaBin
TASK ID........: 75 (http://askmonty.org/worklog/?tid=75)
VERSION........: Server-9.x
STATUS.........: Un-Assigned
PRIORITY.......: 60
WORKED HOURS...: 0
ESTIMATE.......: 0 (hours remain)
ORIG. ESTIMATE.: 0

PROGRESS NOTES:



DESCRIPTION:

Currently, the embedded library libmysqld is only built as a static library,
libmysqld.a.

However, there is also a need for a shared embedded library, libmysqld.so.

A good example is Amarok, which is now using MySQL (and by default an embedded
libmysqld) for storing the user's music collection. Amarok is designed to load
a number of modules as .so plugins, and the code using libmysqld is one such
plugin. Any code that is to be loaded as a shared object on Linux must be
built with -fPIC (position independent code). Any library used must thus also
be built with -fPIC and preferably itself be linked statically.

Amarok is a widely used application (end-user desktop). It could be a good
leverage for making libmysqld more popular eg. in distros. However, currently
the distros need to resort to various hacks to make things work with libmysqld
and Amarok. Some links:

Fedora patches .spec to add -fPIC in the build, extract all objects from
libmysqld.a, and re-link them as libmysqld.so.

    http://cvs.fedoraproject.org/viewvc/devel/mysql/mysql.spec?r1=1.108&r2=1.109

Gentoo apparently have a patch for MySQL to build libmysqld.so:

    http://bugs.gentoo.org/attachment.cgi?id=188057

Debian seems to suggest building both libmysqld.a and libmysqld_pic.a, the
latter to be used for shared objects linking with embedded server:

    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=508406#52

It would be nice if the main build system was able to build properly
libmysqld.so, so different distros would not need to resort to different hacks
to get things working.

The normal way to build both .a and .so as far as I know is to use libtool; it
will then build each object twice (with and without -fPIC) if needed. This one
might want to make optional to reduce build times. It would also need to be
done for each storage engine.

An alternative would be to build everything with -fPIC. This should probably
be optional also, as on some architectures (ELF x86 32-bit), there is some
speed penalty for -fPIC. The libmysqld.so would then be made only in this
case. Distro packages could do a separate build with -fPIC to make
libmysqld.so (to not get -fPIC into the main server code).

There is a MySQL bug for this:

    http://bugs.mysql.com/bug.php?id=39288


ESTIMATED WORK TIME

ESTIMATED COMPLETION DATE
-----------------------------------------------------------------------
WorkLog (v4.0.0)