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