Bug #20842 client libraries installed in wrong location
Submitted: 4 Jul 2006 4:49 Modified: 4 Jul 2006 10:01
Reporter: Mark Johnson (Basic Quality Contributor) Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Compiling Severity:S4 (Feature request)
Version:5.0.22 OS:Linux (Linux 2.6.15/Slackware 10.2)
Assigned to: CPU Architecture:Any

[4 Jul 2006 4:49] Mark Johnson
Description:
When building just the client libraries, the libraries are not installed in the location indicated by ./configure --help.

$ uname -a
Linux ds9 2.6.15 #1 SMP PREEMPT Fri Mar 3 06:57:32 MST 2006 i686 unknown unknown GNU/Linux

$ gcc --version
gcc (GCC) 3.3.6
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ make --version
GNU Make 3.80
Copyright (C) 2002  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

How to repeat:
1. ./configure --help | less
  Observe the lines:
Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]
......
  --libdir=DIR           object code libraries [EPREFIX/lib]

2. ./configure --prefix=/usr --without-server
3. make
4. DESTDIR=`pwd`/tmp make install
5. Observe that the libraries are installed in `pwd`/tmp/usr/lib/mysql
  According to --libdir, above, they should be in `pwd`/usr/lib

Suggested fix:
I see two possibilities:
1. install the libraries where --libdir's help says they should go.
2. Change the help string for --libdir to indicate the actual default value of
   [EPREFIX/lib/mysql]

My preference is for #1. It would not require me to change the configuration of ldconfig, my LD_LIBRARY_PATH, etc.
[4 Jul 2006 7:43] Mark Johnson
Trying to find a workaround, I did:
$./configure --prefix=/usr \
   --libdir=/usr/lib \
   --without-server
$make
$DESTDIR=`pwd`/tmp make install

The libraries are still found in `pwd`/tmp/usr/lib/mysql.
This is not the directory specified by --libdir.
[4 Jul 2006 8:10] Valeriy Kravchuk
Sorry, but you explicitely asked to use $DESTDIR=`pwd`/tmp for "make install". Why do think this should be ignored and DEFAULT (compile time) setting should be used?
[4 Jul 2006 8:55] Mark Johnson
I do not claim that DESTDIR should be ignored.

"--libdir=/usr/lib" combined with DESTDIR means I should find the libraries
in $DESTDIR/usr/lib.  However, they are actually being installed to
$DESTDIR/usr/lib/mysql.  That is the problem. 

The mysql directory should not be there with this value of --libdir.  Nor should it be there with the default value of --libdir.
[4 Jul 2006 9:13] Valeriy Kravchuk
Sorry for misuderstanding you. Putting libraries in mysql subdirectory of libdir is not a bug, but intended behaviour. Please, read the Makefile:

pkgdatadir = $(datadir)/mysql
pkglibdir = $(libdir)/mysql
pkgincludedir = $(includedir)/mysql

I think, it is reasonable. You can use ln -s to make links to the libraries in whatever directory you want.
[4 Jul 2006 9:40] Mark Johnson
I should not have to read the Makefile to see that this is the intended behaviour.

Therefore, I request two things:
1. that "./configure --help" be updated to show that this is the intended behaviour.
2. that when I explicitly specify --libdir, it should override this default location, and put the libraries where requested.
[4 Jul 2006 10:01] Valeriy Kravchuk
I agree that either ./configure --help should explicitely state that mysql subdirectory is created for libraries in --libdir, or there should be some way to set explicit location for the libraries. So, this is a reasonable feature request, for me.