Release the HHVM async mysql extension
[hiphop-php.git] / CMake / HPHPFindLibs.cmake
blob9a89c11820f497799b6de2eb4287be99f4b5ee6b
2 #   +----------------------------------------------------------------------+
3 #   | HipHop for PHP                                                       |
4 #   +----------------------------------------------------------------------+
5 #   | Copyright (c) 2010 Facebook, Inc. (http://www.facebook.com)          |
6 #   | Copyright (c) 1997-2010 The PHP Group                                |
7 #   +----------------------------------------------------------------------+
8 #   | This source file is subject to version 3.01 of the PHP license,      |
9 #   | that is bundled with this package in the file LICENSE, and is        |
10 #   | available through the world-wide-web at the following url:           |
11 #   | http://www.php.net/license/3_01.txt                                  |
12 #   | If you did not receive a copy of the PHP license and are unable to   |
13 #   | obtain it through the world-wide-web, please send a note to          |
14 #   | license@php.net so we can mail you a copy immediately.               |
15 #   +----------------------------------------------------------------------+
18 include(CheckFunctionExists)
20 # libdl
21 find_package(LibDL)
22 if (LIBDL_INCLUDE_DIRS)
23   add_definitions("-DHAVE_LIBDL")
24   include_directories(${LIBDL_INCLUDE_DIRS})
25   if (LIBDL_NEEDS_UNDERSCORE)
26     add_definitions("-DLIBDL_NEEDS_UNDERSCORE")
27   endif()
28 endif()
30 # boost checks
31 find_package(Boost 1.49.0 COMPONENTS system program_options filesystem REQUIRED)
32 include_directories(${Boost_INCLUDE_DIRS})
33 link_directories(${Boost_LIBRARY_DIRS})
34 add_definitions("-DHAVE_BOOST1_49")
37 # features.h
38 FIND_PATH(FEATURES_HEADER features.h)
39 if (FEATURES_HEADER)
40   add_definitions("-DHAVE_FEATURES_H=1")
41 endif()
43 # google-glog
44 find_package(Glog REQUIRED)
45 include_directories(${LIBGLOG_INCLUDE_DIR})
47 # inotify checks
48 find_package(Libinotify)
49 if (LIBINOTIFY_INCLUDE_DIR)
50   include_directories(${LIBINOTIFY_INCLUDE_DIR})
51 endif()
53 # iconv checks
54 find_package(Libiconv REQUIRED)
55 include_directories(${LIBICONV_INCLUDE_DIR})
56 if (LIBICONV_CONST)
57   message(STATUS "Using const for input to iconv() call")
58   add_definitions("-DICONV_CONST=const")
59 endif()
61 # mysql checks - if we're using async mysql, we use webscalesqlclient from
62 # third-party/ instead
63 if (ENABLE_ASYNC_MYSQL)
64   include_directories(
65     ${TP_DIR}/squangle/src/
66     ${TP_DIR}/webscalesqlclient/src/include/
67     ${TP_DIR}/webscalesqlclient/build/src/webscalesqlclient-build/include/
68   )
69   set(MYSQL_CLIENT_LIB_DIR
70     ${TP_DIR}/webscalesqlclient/build/src/webscalesqlclient-build/)
71   # Unlike the .so, the static library intentionally does not link against
72   # yassl, despite building it :/
73   set(MYSQL_CLIENT_LIBS
74     ${MYSQL_CLIENT_LIB_DIR}/libmysql/libwebscalesqlclient_r.a
75     ${MYSQL_CLIENT_LIB_DIR}/extra/yassl/libyassl.a
76     ${MYSQL_CLIENT_LIB_DIR}/extra/yassl/taocrypt/libtaocrypt.a
77   )
78 else()
79   find_package(MySQL REQUIRED)
80   link_directories(${MYSQL_LIB_DIR})
81   include_directories(${MYSQL_INCLUDE_DIR})
82 endif()
83 MYSQL_SOCKET_SEARCH()
84 if (MYSQL_UNIX_SOCK_ADDR)
85   add_definitions(-DPHP_MYSQL_UNIX_SOCK_ADDR="${MYSQL_UNIX_SOCK_ADDR}")
86 endif()
88 # libmemcached checks
89 find_package(Libmemcached REQUIRED)
90 if (LIBMEMCACHED_VERSION VERSION_LESS "0.39")
91   unset(LIBMEMCACHED_INCLUDE_DIR CACHE)
92   unset(LIBMEMCACHED_LIBRARY CACHE)
93   unset(LIBMEMCACHED_VERSION CACHE)
94   message(FATAL_ERROR "libmemcache is too old, found ${LIBMEMCACHED_VERSION} and we need 0.39")
95 endif ()
96 include_directories(${LIBMEMCACHED_INCLUDE_DIR})
97 link_directories(${LIBMEMCACHED_LIBRARY_DIRS})
99 # pcre checks
100 find_package(PCRE)
101 include_directories(${PCRE_INCLUDE_DIR})
103 # libevent checks
104 find_package(LibEvent REQUIRED)
105 include_directories(${LIBEVENT_INCLUDE_DIR})
107 set(CMAKE_REQUIRED_LIBRARIES "${LIBEVENT_LIB}")
108 CHECK_FUNCTION_EXISTS("evhttp_bind_socket_with_fd" HAVE_CUSTOM_LIBEVENT)
109 if(HAVE_CUSTOM_LIBEVENT)
110         message("Using custom LIBEVENT")
111         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_CUSTOM_LIBEVENT")
112 endif()
113 set(CMAKE_REQUIRED_LIBRARIES)
115 find_package(LibUODBC)
116 if (LIBUODBC_INCLUDE_DIRS)
117   include_directories(${LIBUODBC_INCLUDE_DIRS})
118   add_definitions("-DHAVE_UODBC")
119 endif ()
121 # libXed
122 find_package(LibXed)
123 if (LibXed_INCLUDE_DIR AND LibXed_LIBRARY)
124   include_directories(${LibXed_INCLUDE_DIR})
125   add_definitions("-DHAVE_LIBXED")
126 endif()
128 # CURL checks
129 find_package(CURL REQUIRED)
130 include_directories(${CURL_INCLUDE_DIR})
132 set(CMAKE_REQUIRED_LIBRARIES "${CURL_LIBRARIES}")
133 CHECK_FUNCTION_EXISTS("curl_multi_select" HAVE_CURL_MULTI_SELECT)
134 CHECK_FUNCTION_EXISTS("curl_multi_wait" HAVE_CURL_MULTI_WAIT)
135 if (HAVE_CURL_MULTI_SELECT)
136   add_definitions("-DHAVE_CURL_MULTI_SELECT")
137 endif()
138 if (HAVE_CURL_MULTI_WAIT)
139   add_definitions("-DHAVE_CURL_MULTI_WAIT")
140 endif()
141 set(CMAKE_REQUIRED_LIBRARIES)
143 # LibXML2 checks
144 find_package(LibXml2 REQUIRED)
145 include_directories(${LIBXML2_INCLUDE_DIR})
146 add_definitions(${LIBXML2_DEFINITIONS})
148 find_package(LibXslt REQUIRED)
149 include_directories(${LIBXSLT_INCLUDE_DIR})
150 add_definitions(${LIBXSLT_DEFINITIONS})
152 find_package(EXPAT REQUIRED)
153 include_directories(${EXPAT_INCLUDE_DIRS})
155 # libsqlite3
156 find_package(LibSQLite)
157 if (LIBSQLITE_INCLUDE_DIR)
158   include_directories(${LIBSQLITE_INCLUDE_DIR})
159 endif ()
161 # libdouble-conversion
162 find_package(DoubleConversion)
163 if (DOUBLE_CONVERSION_INCLUDE_DIR)
164   include_directories(${DOUBLE_CONVERSION_INCLUDE_DIR})
165 endif ()
167 # liblz4
168 find_package(LZ4)
169 if (LZ4_INCLUDE_DIR)
170   include_directories(${LZ4_INCLUDE_DIR})
171 endif()
173 # fastlz
174 find_package(FastLZ)
175 if (FASTLZ_INCLUDE_DIR)
176   include_directories(${FASTLZ_INCLUDE_DIR})
177 endif()
179 # libzip
180 find_package(LibZip)
181 if (LIBZIP_INCLUDE_DIR_ZIP AND LIBZIP_INCLUDE_DIR_ZIPCONF)
182   if (LIBZIP_VERSION VERSION_LESS "0.11")
183     unset(LIBZIP_FOUND CACHE)
184     unset(LIBZIP_LIBRARY CACHE)
185     unset(LIBZIP_INCLUDE_DIR_ZIP CACHE)
186     unset(LIBZIP_INCLUDE_DIR_ZIPCONF CACHE)
187     message(STATUS "libzip is too old, found ${LIBZIP_VERSION} and we need 0.11+, using third-party bundled libzip")
188   else ()
189     include_directories(${LIBZIP_INCLUDE_DIR_ZIP} ${LIBZIP_INCLUDE_DIR_ZIPCONF})
190     message(STATUS "Found libzip: ${LIBZIP_LIBRARY} ${LIBZIP_VERSION}")
191   endif ()
192 else ()
193   message(STATUS "Using third-party bundled libzip")
194 endif()
196 # ICU
197 find_package(ICU REQUIRED)
198 if (ICU_FOUND)
199   if (ICU_VERSION VERSION_LESS "4.2")
200     unset(ICU_FOUND CACHE)
201     unset(ICU_INCLUDE_DIRS CACHE)
202     unset(ICU_LIBRARIES CACHE)
203     message(FATAL_ERROR "ICU is too old, found ${ICU_VERSION} and we need 4.2")
204   endif ()
205   include_directories(${ICU_INCLUDE_DIRS})
206 endif (ICU_FOUND)
208 # jemalloc/tmalloc and profiler
209 if (USE_GOOGLE_HEAP_PROFILER OR USE_GOOGLE_CPU_PROFILER)
210   FIND_LIBRARY(GOOGLE_PROFILER_LIB profiler)
211   FIND_PATH(GOOGLE_PROFILER_INCLUDE_DIR NAMES google/profiler.h)
212   if (GOOGLE_PROFILER_INCLUDE_DIR)
213     include_directories(${GOOGLE_PROFILER_INCLUDE_DIR})
214   endif()
215   if (GOOGLE_PROFILER_LIB)
216     message(STATUS "Found Google profiler: ${GOOGLE_PROFILER_LIB}")
217     if (USE_GOOGLE_CPU_PROFILER)
218       set(GOOGLE_CPU_PROFILER_ENABLED 1)
219     endif()
220   else()
221     message(STATUS "Can't find Google profiler")
222   endif()
223 endif()
225 if (USE_GOOGLE_HEAP_PROFILER AND GOOGLE_PROFILER_LIB)
226   FIND_LIBRARY(GOOGLE_TCMALLOC_FULL_LIB tcmalloc)
227   if (GOOGLE_TCMALLOC_FULL_LIB)
228     message(STATUS "Found full tcmalloc: ${GOOGLE_TCMALLOC_FULL_LIB}")
229     set(GOOGLE_HEAP_PROFILER_ENABLED 1)
230     set(GOOGLE_TCMALLOC_ENABLED 1)
231   else()
232     message(STATUS "Can't find full tcmalloc - heap profiling is disabled")
233   endif()
234 endif()
236 if (USE_JEMALLOC AND NOT GOOGLE_TCMALLOC_ENABLED)
237   FIND_LIBRARY(JEMALLOC_LIB NAMES jemalloc)
238   FIND_PATH(JEMALLOC_INCLUDE_DIR NAMES jemalloc/jemalloc.h)
240   if (JEMALLOC_INCLUDE_DIR AND JEMALLOC_LIB)
241     include_directories(${JEMALLOC_INCLUDE_DIR})
243     set (CMAKE_REQUIRED_INCLUDES ${JEMALLOC_INCLUDE_DIR})
244     INCLUDE(CheckCXXSourceCompiles)
245     CHECK_CXX_SOURCE_COMPILES("
246 #include <jemalloc/jemalloc.h>
248 #define JEMALLOC_VERSION_NUMERIC ((JEMALLOC_VERSION_MAJOR << 24) | (JEMALLOC_VERSION_MINOR << 16) | (JEMALLOC_VERSION_BUGFIX << 8) | JEMALLOC_VERSION_NDEV)
250 #if JEMALLOC_VERSION_NUMERIC < 0x03050100
251 # error jemalloc version >= 3.5.1 required
252 #endif
254 int main(void) { return 0; }" JEMALLOC_VERSION_MINIMUM)
255     set (CMAKE_REQUIRED_INCLUDES)
257     if (JEMALLOC_VERSION_MINIMUM)
258       message(STATUS "Found jemalloc: ${JEMALLOC_LIB}")
259       set(JEMALLOC_ENABLED 1)
260     else()
261       message(STATUS "Found jemalloc, but it was too old")
262     endif()
263   endif()
264 endif()
266 if (USE_TCMALLOC AND NOT JEMALLOC_ENABLED AND NOT GOOGLE_TCMALLOC_ENABLED)
267   FIND_LIBRARY(GOOGLE_TCMALLOC_MIN_LIB tcmalloc_minimal)
268   if (GOOGLE_TCMALLOC_MIN_LIB)
269     message(STATUS "Found minimal tcmalloc: ${GOOGLE_TCMALLOC_MIN_LIB}")
270     set(GOOGLE_TCMALLOC_ENABLED 1)
271   else()
272     message(STATUS "Can't find minimal tcmalloc")
273   endif()
274 endif()
276 if (JEMALLOC_ENABLED)
277   add_definitions(-DUSE_JEMALLOC=1)
278 else()
279   add_definitions(-DNO_JEMALLOC=1)
280 endif()
281 if (GOOGLE_TCMALLOC_ENABLED)
282   add_definitions(-DGOOGLE_TCMALLOC=1)
283 else()
284   add_definitions(-DNO_TCMALLOC=1)
285 endif()
286 if (GOOGLE_HEAP_PROFILER_ENABLED)
287   add_definitions(-DGOOGLE_HEAP_PROFILER=1)
288 endif()
289 if (GOOGLE_CPU_PROFILER_ENABLED)
290   add_definitions(-DGOOGLE_CPU_PROFILER=1)
291 endif()
293 # tbb libs
294 find_package(TBB REQUIRED)
295 if (${TBB_INTERFACE_VERSION} LESS 5005)
296   unset(TBB_FOUND CACHE)
297   unset(TBB_INCLUDE_DIRS CACHE)
298   unset(TBB_LIBRARIES CACHE)
299   message(FATAL_ERROR "TBB is too old, please install at least 3.0(5005), preferably 4.0(6000) or higher")
300 endif()
301 include_directories(${TBB_INCLUDE_DIRS})
302 link_directories(${TBB_LIBRARY_DIRS})
304 # mcrypt libs
305 find_package(Mcrypt REQUIRED)
306 include_directories(${Mcrypt_INCLUDE_DIR})
308 # OpenSSL libs
309 find_package(OpenSSL REQUIRED)
310 include_directories(${OPENSSL_INCLUDE_DIR})
312 # LibreSSL explicitly refuses to support RAND_egd()
313 SET(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES})
314 INCLUDE(CheckCXXSourceCompiles)
315 CHECK_CXX_SOURCE_COMPILES("#include <openssl/rand.h>
316 int main() {
317   return RAND_egd(\"/dev/null\");
318 }" OPENSSL_HAVE_RAND_EGD)
319 if (NOT OPENSSL_HAVE_RAND_EGD)
320   add_definitions("-DOPENSSL_NO_RAND_EGD")
321 endif()
324 # ZLIB
325 find_package(ZLIB REQUIRED)
326 include_directories(${ZLIB_INCLUDE_DIR})
328 find_package(BZip2 REQUIRED)
329 include_directories(${BZIP2_INCLUDE_DIR})
330 add_definitions(${BZIP2_DEFINITIONS})
332 # oniguruma
333 find_package(ONIGURUMA REQUIRED)
334 include_directories(${ONIGURUMA_INCLUDE_DIRS})
336 # LDAP
337 find_package(Ldap REQUIRED)
338 include_directories(${LDAP_INCLUDE_DIR})
340 # libpthreads
341 find_package(PThread REQUIRED)
342 include_directories(${LIBPTHREAD_INCLUDE_DIRS})
344 # Either Readline or Editline (for hphpd)
345 find_package(Readline)
346 find_package(Editline)
347 if (EDITLINE_INCLUDE_DIRS)
348   add_definitions("-DUSE_EDITLINE")
349   include_directories(${EDITLINE_INCLUDE_DIRS})
350 elseif (READLINE_INCLUDE_DIR)
351   include_directories(${READLINE_INCLUDE_DIR})
352 else()
353   message(FATAL_ERROR "Could not find Readline or Editline")
354 endif()
356 find_package(LibDwarf REQUIRED)
357 include_directories(${LIBDWARF_INCLUDE_DIRS})
358 if (LIBDWARF_CONST_NAME)
359   add_definitions("-DLIBDWARF_CONST_NAME")
360 endif()
361 if (LIBDWARF_USE_INIT_C)
362   add_definitions("-DLIBDWARF_USE_INIT_C")
363 endif()
365 find_package(LibElf REQUIRED)
366 include_directories(${LIBELF_INCLUDE_DIRS})
367 if (ELF_GETSHDRSTRNDX)
368   add_definitions("-DHAVE_ELF_GETSHDRSTRNDX")
369 endif()
371 find_package(Libpam)
372 if (PAM_INCLUDE_PATH)
373   include_directories(${PAM_INCLUDE_PATH})
374 endif()
376 # LLVM. Disabled in OSS for now: t5056266
377 # find_package(LLVM)
378 # if (LIBLLVM_INCLUDE_DIR)
379 #   include_directories(LIBLLVM_INCLUDE_DIR)
380 #   add_definitions("-DUSE_LLVM")
381 # endif()
383 FIND_LIBRARY(CRYPT_LIB NAMES xcrypt crypt crypto)
384 if (LINUX OR FREEBSD)
385   FIND_LIBRARY (RT_LIB rt)
386 endif()
388 if (LINUX)
389   FIND_LIBRARY (CAP_LIB cap)
391   if (NOT CAP_LIB)
392     message(FATAL_ERROR "You need to install libcap")
393   endif()
394 endif()
396 if (LINUX OR APPLE)
397   FIND_LIBRARY (DL_LIB dl)
398   FIND_LIBRARY (RESOLV_LIB resolv)
399 endif()
401 FIND_LIBRARY (BFD_LIB libbfd.a)
402 FIND_LIBRARY (LIBIBERTY_LIB iberty)
404 if (NOT BFD_LIB)
405   message(FATAL_ERROR "You need to install binutils")
406 endif()
408 if (NOT LIBIBERTY_LIB)
409   message(FATAL_ERROR "You need to install libiberty (usually bundled with binutils)")
410 endif()
412 if (FREEBSD)
413   FIND_LIBRARY (EXECINFO_LIB execinfo)
414   if (NOT EXECINFO_LIB)
415     message(FATAL_ERROR "You need to install libexecinfo")
416   endif()
417 endif()
419 if (APPLE)
420   find_library(LIBINTL_LIBRARIES NAMES intl libintl)
421   if (LIBINTL_INCLUDE_DIR)
422     include_directories(${LIBINTL_INCLUDE_DIR})
423   endif()
424   find_library(KERBEROS_LIB NAMES gssapi_krb5)
425 endif()
427 #find_package(BISON REQUIRED)
428 #find_package(FLEX REQUIRED)
430 #if (${FLEX_VERSION} VERSION_LESS 2.5.33)
431 #  message(FATAL_ERROR "Flex is too old, found ${FLEX_VERSION} and we need 2.5.33")
432 #endif()
434 include_directories(${HPHP_HOME}/hphp)
436 macro(hphp_link target)
437   if (LIBDL_LIBRARIES)
438     target_link_libraries(${target} ${LIBDL_LIBRARIES})
439   endif ()
441   if (GOOGLE_HEAP_PROFILER_ENABLED OR GOOGLE_CPU_PROFILER_ENABLED)
442     target_link_libraries(${target} ${GOOGLE_PROFILER_LIB})
443   endif()
445   if (JEMALLOC_ENABLED)
446     target_link_libraries(${target} ${JEMALLOC_LIB})
447   endif()
449   if (GOOGLE_HEAP_PROFILER_ENABLED)
450     target_link_libraries(${target} ${GOOGLE_TCMALLOC_FULL_LIB})
451   elseif (GOOGLE_TCMALLOC_ENABLED)
452     target_link_libraries(${target} ${GOOGLE_TCMALLOC_MIN_LIB})
453   endif()
455   target_link_libraries(${target} ${Boost_LIBRARIES})
456   target_link_libraries(${target} ${MYSQL_CLIENT_LIBS})
457   if (ENABLE_ASYNC_MYSQL)
458     target_link_libraries(${target} squangle)
459   endif()
460   target_link_libraries(${target} ${PCRE_LIBRARY})
461   target_link_libraries(${target} ${ICU_DATA_LIBRARIES} ${ICU_I18N_LIBRARIES} ${ICU_LIBRARIES})
462   target_link_libraries(${target} ${LIBEVENT_LIB})
463   target_link_libraries(${target} ${CURL_LIBRARIES})
464   target_link_libraries(${target} ${LIBGLOG_LIBRARY})
465   if (LIBJSONC_LIBRARY)
466     target_link_libraries(${target} ${LIBJSONC_LIBRARY})
467   endif()
469   if (LibXed_LIBRARY)
470     target_link_libraries(${target} ${LibXed_LIBRARY})
471   endif()
473   if (LIBINOTIFY_LIBRARY)
474     target_link_libraries(${target} ${LIBINOTIFY_LIBRARY})
475   endif()
477   if (LIBICONV_LIBRARY)
478     target_link_libraries(${target} ${LIBICONV_LIBRARY})
479   endif()
481   if (LINUX)
482     target_link_libraries(${target} ${CAP_LIB})
483   endif()
485   if (LINUX OR APPLE)
486     target_link_libraries(${target} ${RESOLV_LIB})
487     target_link_libraries(${target} ${DL_LIB})
488   endif()
490   if (FREEBSD)
491     target_link_libraries(${target} ${EXECINFO_LIB})
492   endif()
494   if (APPLE)
495     target_link_libraries(${target} ${LIBINTL_LIBRARIES})
496     target_link_libraries(${target} ${KERBEROS_LIB})
497   endif()
499   target_link_libraries(${target} ${BFD_LIB})
500   target_link_libraries(${target} ${LIBIBERTY_LIB})
502   if (${LIBPTHREAD_LIBRARIES})
503     target_link_libraries(${target} ${LIBPTHREAD_LIBRARIES})
504   endif()
506   target_link_libraries(${target} ${TBB_LIBRARIES})
507   target_link_libraries(${target} ${OPENSSL_LIBRARIES})
508   target_link_libraries(${target} ${ZLIB_LIBRARIES})
509   target_link_libraries(${target} ${BZIP2_LIBRARIES})
511   target_link_libraries(${target} ${LIBXML2_LIBRARIES})
512   target_link_libraries(${target} ${LIBXSLT_LIBRARIES})
513   target_link_libraries(${target} ${LIBXSLT_EXSLT_LIBRARIES})
514   target_link_libraries(${target} ${EXPAT_LIBRARY})
515   target_link_libraries(${target} ${ONIGURUMA_LIBRARIES})
516   target_link_libraries(${target} ${Mcrypt_LIB})
518   if (LIBUODBC_LIBRARIES)
519     target_link_libraries(${target} ${LIBUODBC_LIBRARIES})
520   endif()
522   target_link_libraries(${target} ${LDAP_LIBRARIES})
523   target_link_libraries(${target} ${LBER_LIBRARIES})
525   target_link_libraries(${target} ${LIBMEMCACHED_LIBRARY})
527   target_link_libraries(${target} ${CRYPT_LIB})
529   if (LINUX OR FREEBSD)
530     target_link_libraries(${target} ${RT_LIB})
531   endif()
533   if (LIBSQLITE3_FOUND AND LIBSQLITE3_LIBRARY)
534     target_link_libraries(${target} ${LIBSQLITE3_LIBRARY})
535   else()
536     target_link_libraries(${target} sqlite3)
537   endif()
539   if (DOUBLE_CONVERSION_LIBRARY)
540     target_link_libraries(${target} ${DOUBLE_CONVERSION_LIBRARY})
541   else()
542     target_link_libraries(${target} double-conversion)
543   endif()
545   if (LZ4_LIBRARY)
546     target_link_libraries(${target} ${LZ4_LIBRARY})
547   else()
548     target_link_libraries(${target} lz4)
549   endif()
551   if (LIBZIP_LIBRARY)
552     target_link_libraries(${target} ${LIBZIP_LIBRARY})
553   else()
554     target_link_libraries(${target} zip_static)
555   endif()
557   if (PCRE_LIBRARY)
558     target_link_libraries(${target} ${PCRE_LIBRARY})
559   else()
560     target_link_libraries(${target} pcre)
561   endif()
563   if (LIBFASTLZ_LIBRARY)
564     target_link_libraries(${target} ${LIBFASTLZ_LIBRARY})
565   else()
566     target_link_libraries(${target} fastlz)
567   endif()
569   target_link_libraries(${target} timelib)
570   target_link_libraries(${target} folly)
572   target_link_libraries(${target} mcrouter)
573   target_link_libraries(${target} afdt)
574   target_link_libraries(${target} mbfl)
576   if (EDITLINE_LIBRARIES)
577     target_link_libraries(${target} ${EDITLINE_LIBRARIES})
578   elseif (READLINE_LIBRARY)
579     target_link_libraries(${target} ${READLINE_LIBRARY})
580   endif()
582   if (PAM_LIBRARY)
583     target_link_libraries(${target} ${PAM_LIBRARY})
584   endif()
586   target_link_libraries(${target} ${LIBDWARF_LIBRARIES})
587   target_link_libraries(${target} ${LIBELF_LIBRARIES})
589   if (LIBLLVM_LIBRARY)
590     target_link_libraries(${target} ${LIBLLVM_LIBRARY})
591   endif()
593   if (LINUX)
594     target_link_libraries(${target} -Wl,--wrap=pthread_create -Wl,--wrap=pthread_exit -Wl,--wrap=pthread_join)
595   endif()
596 endmacro()