Skip to content

Commit f701787

Browse files
author
Tor Didriksen
committed
Bug#20637746 ADD SUPPORT FOR PKG-CONFIG
Add mysqlclient.pc.in and INSTALL it if appropriate for the install layout. Also: cleanup library settings in mysql_config (perl and sh variants).
1 parent d01a415 commit f701787

File tree

4 files changed

+82
-70
lines changed

4 files changed

+82
-70
lines changed

scripts/CMakeLists.txt

+53-4
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ SET(REPLACE_OPTIONS
202202
"-fno-inline "
203203
"-fno-strict-aliasing "
204204
"-fstack-protector-strong "
205+
"-g "
205206
"-grecord-gcc-switches "
206207
"-ip "
207208
"-mp "
@@ -307,9 +308,8 @@ SET(pkglibdir ${prefix}/${INSTALL_LIBDIR})
307308
SET(pkgplugindir ${prefix}/${INSTALL_PLUGINDIR})
308309
SET(localstatedir ${MYSQL_DATADIR})
309310

310-
SET(RPATH_OPTION "")
311311
IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
312-
SET(RPATH_OPTION "-R$pkglibdir")
312+
SET(RPATH_OPTION " -R$pkglibdir")
313313
ENDIF()
314314

315315
# some scripts use @TARGET_LINUX@
@@ -340,7 +340,6 @@ MACRO(EXTRACT_LINK_LIBRARIES target var)
340340
LIST(REMOVE_DUPLICATES ${target}_LIB_DEPENDS)
341341
FOREACH(lib ${${target}_LIB_DEPENDS})
342342
# Filter out "general", it is not a library, just CMake hint
343-
# Also, remove duplicates
344343
IF(NOT lib STREQUAL "general" AND NOT ${var} MATCHES "-l${lib} ")
345344
IF (lib MATCHES "^\\-l")
346345
SET(${var} "${${var}} ${lib} ")
@@ -358,10 +357,36 @@ MACRO(EXTRACT_LINK_LIBRARIES target var)
358357
IF(MSVC)
359358
STRING(REPLACE "-l" "" ${var} "${${var}}")
360359
ENDIF()
360+
STRING(REGEX REPLACE "^[ ]+" "" ${var} "${${var}}")
361+
STRING(REGEX REPLACE "[ ]+$" "" ${var} "${${var}}")
361362
ENDMACRO()
362363

363364
EXTRACT_LINK_LIBRARIES(mysqlclient CLIENT_LIBS)
364-
EXTRACT_LINK_LIBRARIES(mysqlserver LIBS)
365+
IF(WITH_EMBEDDED_SERVER)
366+
EXTRACT_LINK_LIBRARIES(mysqlserver EMBEDD_LIBS)
367+
ENDIF()
368+
369+
IF(MSVC)
370+
GET_TARGET_PROPERTY(LIBMYSQL_OS_SHLIB_VERSION mysqlclient VERSION)
371+
GET_TARGET_PROPERTY(LIBMYSQL_OS_OUTPUT_NAME mysqlclient OUTPUT_NAME)
372+
ELSE()
373+
GET_TARGET_PROPERTY(LIBMYSQL_OS_SHLIB_VERSION libmysql VERSION)
374+
GET_TARGET_PROPERTY(LIBMYSQL_OS_OUTPUT_NAME libmysql OUTPUT_NAME)
375+
ENDIF()
376+
# See WITH_EMBEDDED_SHARED_LIBRARY, "mysqld" is generated from mysqlserver
377+
IF(WITH_EMBEDDED_SERVER)
378+
GET_TARGET_PROPERTY(LIBEMBED_OS_OUTPUT_NAME mysqlserver OUTPUT_NAME)
379+
ENDIF()
380+
381+
SET(CONFIG_CLIENT_LIBS "${CLIENT_LIBS}")
382+
IF(QUOTED_CMAKE_C_LINK_FLAGS)
383+
SET(CONFIG_CLIENT_LIBS "${CONFIG_CLIENT_LIBS} ${QUOTED_CMAKE_C_LINK_FLAGS}")
384+
ENDIF()
385+
386+
SET(CONFIG_EMBEDD_LIBS "${EMBEDD_LIBS}")
387+
IF(QUOTED_CMAKE_CXX_LINK_FLAGS)
388+
SET(CONFIG_EMBEDD_LIBS "${CONFIG_EMBEDD_LIBS} ${QUOTED_CMAKE_CXX_LINK_FLAGS}")
389+
ENDIF()
365390

366391
SET(LIBMYSQLD_LIBS_USAGE "
367392
--libmysqld-libs [$embedded_libs]")
@@ -420,6 +445,30 @@ ELSE()
420445
)
421446
ENDIF()
422447

448+
SET(PKGCONFIG_FILE ${LIBMYSQL_OS_OUTPUT_NAME}.pc)
449+
STRING(REGEX REPLACE "/mysql$" "" PKGCONFIG_DIR "${INSTALL_LIBDIR}")
450+
SET(PKGCONFIG_DIR "${PKGCONFIG_DIR}/pkgconfig")
451+
# Update the cache, to make it visible in cmake-gui.
452+
SET(INSTALL_PKGCONFIGDIR ${INSTALL_PKGCONFIGDIR} CACHE PATH
453+
"Where to install ${PKGCONFIG_FILE}, defaults to ${PKGCONFIG_DIR}")
454+
IF(NOT INSTALL_PKGCONFIGDIR)
455+
SET(INSTALL_PKGCONFIGDIR "${PKGCONFIG_DIR}")
456+
ENDIF()
457+
458+
CONFIGURE_FILE(mysqlclient.pc.in
459+
${CMAKE_CURRENT_BINARY_DIR}/${PKGCONFIG_FILE}
460+
ESCAPE_QUOTES @ONLY)
461+
462+
IF(INSTALL_PKGCONFIGDIR)
463+
MESSAGE(STATUS "INSTALL ${PKGCONFIG_FILE} ${INSTALL_PKGCONFIGDIR}")
464+
INSTALL(FILES
465+
${CMAKE_CURRENT_BINARY_DIR}/${PKGCONFIG_FILE}
466+
DESTINATION ${INSTALL_PKGCONFIGDIR}
467+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
468+
COMPONENT Development
469+
)
470+
ENDIF()
471+
423472
FOREACH(file ${BIN_SCRIPTS})
424473
IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh)
425474
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh

scripts/mysql_config.pl.in

+11-47
Original file line numberDiff line numberDiff line change
@@ -166,71 +166,35 @@ if ( '@MYSQL_TCP_PORT_DEFAULT@' == 0 ) {
166166

167167
# ----------------------------------------------------------------------
168168
# Create options
169-
# We intentionally add a space to the beginning and end of lib strings, simplifies replace later
170169
# ----------------------------------------------------------------------
171170

172-
my (@lib_opts,@lib_r_opts,@lib_e_opts);
171+
my(@lib_opts,@lib_e_opts);
173172
if ( $^O eq "MSWin32" )
174173
{
175174
my $linkpath = "$pkglibdir";
176-
# user32 is only needed for debug or embedded
177-
my @winlibs = ("wsock32.lib","advapi32.lib","user32.lib");
178-
@lib_opts = ("$linkpath/mysqlclient.lib",@winlibs);
179-
@lib_r_opts = @lib_opts;
180-
@lib_e_opts = ("$linkpath/mysqlserver.lib",@winlibs);
175+
@lib_opts = ("$linkpath/@LIBMYSQL_OS_OUTPUT_NAME@");
176+
@lib_e_opts = ("$linkpath/@LIBEMBED_OS_OUTPUT_NAME@");
181177
}
182178
else
183179
{
184-
my $linkpath = "-L$pkglibdir @RPATH_OPTION@";
185-
@lib_opts = ($linkpath,"-lmysqlclient");
186-
@lib_r_opts = ($linkpath,"-lmysqlclient_r");
187-
@lib_e_opts = ($linkpath,"-lmysqld");
180+
my $linkpath = "-L$pkglibdir@RPATH_OPTION@";
181+
@lib_opts = ($linkpath,"-l@LIBMYSQL_OS_OUTPUT_NAME@");
182+
@lib_e_opts = ($linkpath,"-l@LIBEMBED_OS_OUTPUT_NAME@");
188183
}
189184

185+
190186
my $flags;
191-
$flags->{libs} =
192-
[@ldflags,@lib_opts,'@ZLIB_DEPS@','@CLIENT_LIBS@','@openssl_libs@'];
193-
$flags->{libs_r} =
194-
[@ldflags,@lib_r_opts,'@ZLIB_DEPS@','@CLIENT_LIBS@','@openssl_libs@'];
195-
$flags->{embedded_libs} =
196-
[@ldflags,@lib_e_opts,'@ZLIB_DEPS@','@LIBS@','@WRAPLIBS@','@openssl_libs@'];
187+
$flags->{libs} = [@lib_opts, qw(@CONFIG_CLIENT_LIBS@)];
188+
$flags->{embedded_libs} = [@lib_e_opts, qw(@CONFIG_EMBEDD_LIBS@)];
197189

198190
$flags->{include} = ["-I$pkgincludedir"];
199191
$flags->{cflags} = [@{$flags->{include}},split(" ",'@CFLAGS@')];
200192
$flags->{cxxflags}= [@{$flags->{include}},split(" ",'@CXXFLAGS@')];
201193

202-
# ----------------------------------------------------------------------
203-
# Remove some options that a client doesn't have to care about
204-
# ----------------------------------------------------------------------
205-
206-
my @tmp = @{$flags->{cflags}}; # Copy the flag list
207-
$flags->{cflags} = []; # Clear it
208-
foreach my $cflag ( @tmp )
209-
{
210-
push(@{$flags->{cflags}}, $cflag);
211-
}
212-
@tmp = @{$flags->{cxxflags}}; # Copy the flag list
213-
$flags->{cxxflags} = []; # Clear it
214-
foreach my $cxxflag ( @tmp )
215-
{
216-
push(@{$flags->{cxxflags}}, $cxxflag);
217-
}
218-
219-
foreach my $lib_type ( "libs","libs_r","embedded_libs" )
220-
{
221-
my @tmp = @{$flags->{$lib_type}}; # Copy the flag list
222-
$flags->{$lib_type} = []; # Clear it
223-
foreach my $lib ( @tmp )
224-
{
225-
push(@{$flags->{$lib_type}}, $lib);
226-
}
227-
}
228-
229194
my $include = quote_options(@{$flags->{include}});
230195
my $cflags = quote_options(@{$flags->{cflags}});
231196
my $cxxflags= quote_options(@{$flags->{cxxflags}});
232197
my $libs = quote_options(@{$flags->{libs}});
233-
my $libs_r = quote_options(@{$flags->{libs_r}});
234198
my $embedded_libs = quote_options(@{$flags->{embedded_libs}});
235199

236200
##############################################################################
@@ -248,7 +212,7 @@ Options:
248212
--cxxflags [$cxxflags]
249213
--include [$include]
250214
--libs [$libs]
251-
--libs_r [$libs_r]
215+
--libs_r [$libs]
252216
--socket [$socket]
253217
--port [$port]
254218
--version [$version]@LIBMYSQLD_LIBS_USAGE@
@@ -269,7 +233,7 @@ GetOptions(
269233
"cxxflags"=> sub { print "$cxxflags\n" },
270234
"include" => sub { print "$include\n" },
271235
"libs" => sub { print "$libs\n" },
272-
"libs_r" => sub { print "$libs_r\n" },
236+
"libs_r" => sub { print "$libs\n" },
273237
"socket" => sub { print "$socket\n" },
274238
"port" => sub { print "$port\n" },
275239
"version" => sub { print "$version\n" },

scripts/mysql_config.sh

+6-19
Original file line numberDiff line numberDiff line change
@@ -110,28 +110,15 @@ else
110110
fi
111111

112112
# Create options
113-
libs="$ldflags"
114-
libs="$libs -L$pkglibdir"
115-
libs="$libs @RPATH_OPTION@ -lmysqlclient @ZLIB_DEPS@ @CLIENT_LIBS@"
116-
libs="$libs @openssl_libs@"
117-
libs="$libs @QUOTED_CMAKE_C_LINK_FLAGS@"
118-
119-
libs_r="$libs"
120-
121-
embedded_libs="$ldflags"
122-
embedded_libs="$embedded_libs -L$pkglibdir"
123-
embedded_libs="$embedded_libs @RPATH_OPTION@ -lmysqld @ZLIB_DEPS@ @LIBS@"
124-
embedded_libs="$embedded_libs @openssl_libs@"
125-
embedded_libs="$embedded_libs @QUOTED_CMAKE_CXX_LINK_FLAGS@"
113+
libs="-L$pkglibdir@RPATH_OPTION@"
114+
libs="$libs -l@LIBMYSQL_OS_OUTPUT_NAME@ @CONFIG_CLIENT_LIBS@"
115+
embedded_libs="-L$pkglibdir@RPATH_OPTION@"
116+
embedded_libs="$embedded_libs -l@LIBEMBED_OS_OUTPUT_NAME@ @CONFIG_EMBEDD_LIBS@"
126117

127118
cflags="-I$pkgincludedir @CFLAGS@"
128119
cxxflags="-I$pkgincludedir @CXXFLAGS@"
129120
include="-I$pkgincludedir"
130121

131-
# Strip whitespace
132-
libs=`echo "$libs" | sed -e 's; \+; ;g' | sed -e 's;^ *;;' | sed -e 's; *\$;;'`
133-
libs_r=`echo "$libs_r" | sed -e 's; \+; ;g' | sed -e 's;^ *;;' | sed -e 's; *\$;;'`
134-
embedded_libs=`echo "$embedded_libs" | sed -e 's; \+; ;g' | sed -e 's;^ *;;' | sed -e 's; *\$;;'`
135122

136123
usage () {
137124
cat <<EOF
@@ -141,7 +128,7 @@ Options:
141128
--cxxflags [$cxxflags]
142129
--include [$include]
143130
--libs [$libs]
144-
--libs_r [$libs_r]
131+
--libs_r [$libs]
145132
--plugindir [$plugindir]
146133
--socket [$socket]
147134
--port [$port]
@@ -162,7 +149,7 @@ while test $# -gt 0; do
162149
--cxxflags)echo "$cxxflags";;
163150
--include) echo "$include" ;;
164151
--libs) echo "$libs" ;;
165-
--libs_r) echo "$libs_r" ;;
152+
--libs_r) echo "$libs" ;;
166153
--plugindir) echo "$plugindir" ;;
167154
--socket) echo "$socket" ;;
168155
--port) echo "$port" ;;

scripts/mysqlclient.pc.in

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
2+
3+
prefix=@CMAKE_INSTALL_PREFIX@
4+
includedir=${prefix}/@INSTALL_INCLUDEDIR@
5+
libdir=${prefix}/@INSTALL_LIBDIR@
6+
7+
Name: @LIBMYSQL_OS_OUTPUT_NAME@
8+
Description: MySQL client library
9+
Version: @LIBMYSQL_OS_SHLIB_VERSION@
10+
Cflags: -I${includedir} @CFLAGS@
11+
Libs: -L${libdir} -l@LIBMYSQL_OS_OUTPUT_NAME@
12+
Libs.private: @CONFIG_CLIENT_LIBS@

0 commit comments

Comments
 (0)