mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
29dcd86135
Add -lmygcc to mysql_config output for libs, libs_r, and embedded_libs. Required when linking against our static libs, if yassl is used, and gcc used to build library is significantly different from that which is using the library. scripts/mysql_config.sh: Add -lmygcc to --libs, --libs_r, and --embedded-libs output, if libmygcc.a is found in the pkglibdir. This works around a problem when linking against the static client libs which were built with a different GCC than the current compiler. In this case, without -lmygcc, several builtin functions (e.g., __pure_virtual, __builtin_delete) are left undefined. Currently it is yassl which pulls in these symbols. This isn't a problem when linking against shared libraries, or when using the same compiler version. Currently it shows up with libs built on build.mysql.com with gcc 2.95.3, when using them on more recent systems. Also strip the -mcpu, -mtune, and -march cflags. The calling package can determine what optimization parameters to choose.
198 lines
5.8 KiB
Bash
198 lines
5.8 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2000-2006 MySQL AB
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; version 2 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
# This script reports various configuration settings that may be needed
|
|
# when using the MySQL client library.
|
|
|
|
which ()
|
|
{
|
|
IFS="${IFS= }"; save_ifs="$IFS"; IFS=':'
|
|
for file
|
|
do
|
|
for dir in $PATH
|
|
do
|
|
if test -f $dir/$file
|
|
then
|
|
echo "$dir/$file"
|
|
continue 2
|
|
fi
|
|
done
|
|
echo "which: no $file in ($PATH)"
|
|
exit 1
|
|
done
|
|
IFS="$save_ifs"
|
|
}
|
|
|
|
#
|
|
# If we can find the given directory relatively to where mysql_config is
|
|
# we should use this instead of the incompiled one.
|
|
# This is to ensure that this script also works with the binary MySQL
|
|
# version
|
|
|
|
fix_path ()
|
|
{
|
|
var=$1
|
|
shift
|
|
for filename
|
|
do
|
|
path=$basedir/$filename
|
|
if [ -d "$path" ] ;
|
|
then
|
|
eval "$var"=$path
|
|
return
|
|
fi
|
|
done
|
|
}
|
|
|
|
get_full_path ()
|
|
{
|
|
file=$1
|
|
|
|
# if the file is a symlink, try to resolve it
|
|
if [ -h $file ];
|
|
then
|
|
file=`ls -l $file | awk '{ print $NF }'`
|
|
fi
|
|
|
|
case $file in
|
|
/*) echo "$file";;
|
|
*/*) tmp=`pwd`/$file; echo $tmp | sed -e 's;/\./;/;' ;;
|
|
*) which $file ;;
|
|
esac
|
|
}
|
|
|
|
me=`get_full_path $0`
|
|
|
|
basedir=`echo $me | sed -e 's;/bin/mysql_config;;'`
|
|
|
|
ldata='@localstatedir@'
|
|
execdir='@libexecdir@'
|
|
bindir='@bindir@'
|
|
|
|
# If installed, search for the compiled in directory first (might be "lib64")
|
|
pkglibdir='@pkglibdir@'
|
|
pkglibdir_rel=`echo $pkglibdir | sed -e "s;^$basedir/;;"`
|
|
fix_path pkglibdir $pkglibdir_rel lib/mysql lib
|
|
|
|
pkgincludedir='@pkgincludedir@'
|
|
fix_path pkgincludedir include/mysql include
|
|
|
|
version='@VERSION@'
|
|
socket='@MYSQL_UNIX_ADDR@'
|
|
ldflags='@LDFLAGS@'
|
|
|
|
if [ @MYSQL_TCP_PORT_DEFAULT@ -eq 0 ]; then
|
|
port=0
|
|
else
|
|
port=@MYSQL_TCP_PORT@
|
|
fi
|
|
|
|
# Create options
|
|
# We intentionally add a space to the beginning and end of lib strings, simplifies replace later
|
|
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 @ZLIB_DEPS@ @LIBS@ @WRAPLIBS@ @innodb_system_libs@ @openssl_libs@ "
|
|
|
|
if [ -r "$pkglibdir/libmygcc.a" ]; then
|
|
# When linking against the static library with a different version of GCC
|
|
# from what was used to compile the library, some symbols may not be defined
|
|
# automatically. We package the libmygcc.a from the build host, to provide
|
|
# definitions for those. Bugs 4921, 19561, 19817, 21158, etc.
|
|
libs="$libs -lmygcc "
|
|
libs_r="$libs_r -lmygcc "
|
|
embedded_libs="$embedded_libs -lmygcc "
|
|
fi
|
|
|
|
cflags="-I$pkgincludedir @CFLAGS@ " #note: end space!
|
|
include="-I$pkgincludedir"
|
|
|
|
# Remove some options that a client doesn't have to care about
|
|
# FIXME until we have a --cxxflags, we need to remove -Xa
|
|
# and -xstrconst to make --cflags usable for Sun Forte C++
|
|
for remove in DDBUG_OFF DSAFEMALLOC USAFEMALLOC DSAFE_MUTEX \
|
|
DPEDANTIC_SAFEMALLOC DUNIV_MUST_NOT_INLINE DFORCE_INIT_OF_VARS \
|
|
DEXTRA_DEBUG DHAVE_purify O 'O[0-9]' 'xO[0-9]' 'W[-A-Za-z]*' \
|
|
'mtune=[-A-Za-z0-9]*' 'mcpu=[-A-Za-z0-9]*' 'march=[-A-Za-z0-9]*' \
|
|
Xa xstrconst "xc99=none" \
|
|
unroll2 ip mp restrict
|
|
do
|
|
# The first option we might strip will always have a space before it because
|
|
# we set -I$pkgincludedir as the first option
|
|
cflags=`echo "$cflags"|sed -e "s/ -$remove */ /g"`
|
|
done
|
|
cflags=`echo "$cflags"|sed -e 's/ *\$//'`
|
|
|
|
# Same for --libs(_r)
|
|
for remove in lmtmalloc static-libcxa i-static static-intel
|
|
do
|
|
# We know the strings starts with a space
|
|
libs=`echo "$libs"|sed -e "s/ -$remove */ /g"`
|
|
libs_r=`echo "$libs_r"|sed -e "s/ -$remove */ /g"`
|
|
embedded_libs=`echo "$embedded_libs"|sed -e "s/ -$remove */ /g"`
|
|
done
|
|
|
|
# Strip trailing and ending space if any, and '+' (FIXME why?)
|
|
libs=`echo "$libs" | sed -e 's; \+; ;g' | sed -e 's;^ *;;' | sed -e 's; *\$;;'`
|
|
libs_r=`echo "$libs_r" | sed -e 's; \+; ;g' | sed -e 's;^ *;;' | sed -e 's; *\$;;'`
|
|
embedded_libs=`echo "$embedded_libs" | sed -e 's; \+; ;g' | sed -e 's;^ *;;' | sed -e 's; *\$;;'`
|
|
|
|
usage () {
|
|
cat <<EOF
|
|
Usage: $0 [OPTIONS]
|
|
Options:
|
|
--cflags [$cflags]
|
|
--include [$include]
|
|
--libs [$libs]
|
|
--libs_r [$libs_r]
|
|
--socket [$socket]
|
|
--port [$port]
|
|
--version [$version]
|
|
--libmysqld-libs [$embedded_libs]
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
if test $# -le 0; then usage; fi
|
|
|
|
while test $# -gt 0; do
|
|
case $1 in
|
|
--cflags) echo "$cflags" ;;
|
|
--include) echo "$include" ;;
|
|
--libs) echo "$libs" ;;
|
|
--libs_r) echo "$libs_r" ;;
|
|
--socket) echo "$socket" ;;
|
|
--port) echo "$port" ;;
|
|
--version) echo "$version" ;;
|
|
--embedded-libs | --embedded | --libmysqld-libs) echo "$embedded_libs" ;;
|
|
*) usage ;;
|
|
esac
|
|
|
|
shift
|
|
done
|
|
|
|
#echo "ldata: '"$ldata"'"
|
|
#echo "execdir: '"$execdir"'"
|
|
#echo "bindir: '"$bindir"'"
|
|
#echo "pkglibdir: '"$pkglibdir"'"
|
|
#echo "pkgincludedir: '"$pkgincludedir"'"
|
|
#echo "version: '"$version"'"
|
|
#echo "socket: '"$socket"'"
|
|
#echo "port: '"$port"'"
|
|
#echo "ldflags: '"$ldflags"'"
|
|
#echo "client_libs: '"$client_libs"'"
|
|
|
|
exit 0
|