1#
2# Generate LIBS and CFLAGS that third-party clients should use
3#
4
5# Use cmake variables to inspect dependencies for
6# mysqlclient library (add -l stuff)
7SET(CLIENT_LIBS "")
8SET(LIBS "")
9
10# Avoid compatibility warning about lists with empty elements
11IF(POLICY CMP0011)
12  CMAKE_POLICY(SET CMP0011 NEW)
13ENDIF()
14
15# Extract dependencies using CMake's internal ${target}_LIB_DEPENDS variable
16# returned string in ${var} is can be passed to linker's command line
17MACRO(EXTRACT_LINK_LIBRARIES target var)
18  IF(${target}_LIB_DEPENDS)
19    LIST(REMOVE_ITEM ${target}_LIB_DEPENDS "")
20    LIST(REMOVE_DUPLICATES ${target}_LIB_DEPENDS)
21    FOREACH(lib ${${target}_LIB_DEPENDS})
22      # Filter out "general", it is not a library, just CMake hint
23      # Also, remove duplicates
24      IF(NOT lib STREQUAL "general" AND NOT ${var}  MATCHES "-l${lib} " AND NOT lib STREQUAL "zlib")
25        IF (lib MATCHES "^\\-")
26          SET(${var} "${${var}} ${lib} ")
27        ELSEIF(lib MATCHES "^/")
28          IF (lib MATCHES "\\.(a|so([0-9.]*)|lib|dll|dylib)$")
29            # Full path, convert to just filename, strip "lib" prefix and extension
30            GET_FILENAME_COMPONENT(lib "${lib}" NAME_WE)
31            STRING(REGEX REPLACE "^lib" "" lib "${lib}")
32            SET(${var} "${${var}}-l${lib} " )
33          ENDIF()
34        ELSE()
35          SET(${var} "${${var}}-l${lib} " )
36        ENDIF()
37      ENDIF()
38    ENDFOREACH()
39  ENDIF()
40  IF(MSVC)
41    STRING(REPLACE "-l" "" ${var} "${${var}}")
42  ENDIF()
43ENDMACRO()
44
45EXTRACT_LINK_LIBRARIES(libmariadb LIBS)
46EXTRACT_LINK_LIBRARIES(mysqlserver EMB_LIBS)
47
48SET(LIBS     "-lmariadb ${ZLIB_DEPS} ${LIBS} ${openssl_libs}")
49SET(EMB_LIBS "-lmysqld ${ZLIB_DEPS} ${EMB_LIBS} ${openssl_libs}")
50
51MACRO(REPLACE_FOR_CLIENTS VAR)
52  SET(v " ${${VAR}} ")
53  FOREACH(del ${ARGN})
54    STRING(REGEX REPLACE " -(${del}) " " " v ${v})
55  ENDFOREACH(del)
56  STRING(REGEX REPLACE " +" " " v ${v})
57  STRING(STRIP "${v}" ${VAR}_FOR_CLIENTS)
58ENDMACRO()
59
60# Remove some options that a client doesn't have to care about
61# FIXME until we have a --cxxflags, we need to remove -Xa
62#       and -xstrconst to make --cflags usable for Sun Forte C++
63# FIXME until we have a --cxxflags, we need to remove -AC99
64#       to make --cflags usable for HP C++ (aCC)
65REPLACE_FOR_CLIENTS(CFLAGS "[DU]DBUG_OFF" "[DU]SAFE_MUTEX" "[DU]NDEBUG"
66  "[DU]FORCE_INIT_OF_VARS" "[DU]EXTRA_DEBUG" "[DU]HAVE_valgrind"
67  "O" "O[0-9]" "xO[0-9]" "W[-A-Za-z]*" "mtune=[-A-Za-z0-9]*" "g" "fPIC"
68  "mcpu=[-A-Za-z0-9]*" "unroll2" "ip" "mp" "march=[-A-Za-z0-9]*" "Xa"
69  "xstrconst" "xc99=none" "AC99" "restrict" "W[-A-Za-z]*=[-A-Za-z0-9]*")
70
71# Same for --libs
72REPLACE_FOR_CLIENTS(LIBS "Wl,[^ ]*" lmtmalloc static-libcxa i-static static-intel)
73REPLACE_FOR_CLIENTS(EMB_LIBS lmtmalloc static-libcxa i-static static-intel)
74
75