Add imap support, requires cclient
[hiphop-php.git] / CMake / HPHPFindLibs.cmake
blob8b424dbb9b8deab88696455b1b750c81d4950ab4
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 # boost checks
20 find_package(Boost 1.37.0 COMPONENTS system;program_options;filesystem REQUIRED)
21 if (BOOST_VERSION EQUAL 104200)
22         # Boost bug #3942 prevents us using 1.42
23         message(FATAL_ERROR "Boost 1.42 is not compatible with HipHop")
24 endif()
26 include_directories(${Boost_INCLUDE_DIRS})
27 link_directories(${Boost_LIBRARY_DIRS})
29 # mysql checks
30 find_package(MySQL REQUIRED)
31 include_directories(${MYSQL_INCLUDE_DIR})
32 link_directories(${MYSQL_LIB_DIR})
34 # libmemcached checks
35 find_package(Libmemcached REQUIRED)
36 if (LIBMEMCACHED_VERSION VERSION_LESS "0.39")
37   message(FATAL_ERROR "libmemcache is too old, found ${LIBMEMCACHED_VERSION} and we need 0.39")
38   unset(LIBMEMCACHED_INCLUDE_DIR)
39   unset(LIBMEMCACHED_LIBRARIES)
40 endif ()
41 include_directories(${LIBMEMCACHED_INCLUDE_DIR})
43 # pcre checks
44 find_package(PCRE REQUIRED)
45 include_directories(${PCRE_INCLUDE_DIRS})
47 # libevent checks
48 find_package(LibEvent REQUIRED)
49 include_directories(${LIBEVENT_INCLUDE_DIR})
51 set(CMAKE_REQUIRED_LIBRARIES "${LIBEVENT_LIB}")
52 CHECK_FUNCTION_EXISTS("evhttp_bind_socket_with_fd" HAVE_CUSTOM_LIBEVENT)
53 if (NOT HAVE_CUSTOM_LIBEVENT)
54         message(FATAL_ERROR "Custom libevent is required with HipHop patches")
55         unset(HAVE_CUSTOM_LIBEVENT CACHE)
56         unset(LIBEVENT_INCLUDE_DIR CACHE)
57         unset(LIBEVENT_LIB CACHE)
58         unset(LibEvent_FOUND CACHE)
59 endif ()
60 set(CMAKE_REQUIRED_LIBRARIES)
62 # GD checks
63 find_package(GD REQUIRED)
65 option(WANT_FB_LIBMCC "want FB Memcache" 0)
67 if (WANT_FB_LIBMCC)
68         add_definitions(-DHPHP_WITH_LIBMCC)
69         message(FATAL_ERROR Need to add libmcc and libch for linking)
70 else ()
71         # nothing for now
72 endif()
74 # CURL checks
75 find_package(CURL REQUIRED)
76 include_directories(${CURL_INCLUDE_DIR})
78 set(CMAKE_REQUIRED_LIBRARIES "${CURL_LIBRARIES}")
79 CHECK_FUNCTION_EXISTS("curl_multi_select" HAVE_CUSTOM_CURL)
80 if (NOT HAVE_CUSTOM_CURL)
81         message(FATAL_ERROR "Custom libcurl is required with HipHop patches ${HAVE_CUSTOM_CURL}")
82                 unset(HAVE_CUSTOM_CURL CACHE)
83                 unset(CURL_INCLUDE_DIR CACHE)
84                 unset(CURL_LIBRARIES CACHE)
85                 unset(CURL_FOUND CACHE)
86 endif ()
87 set(CMAKE_REQUIRED_LIBRARIES)
89 # LibXML2 checks
90 find_package(LibXml2 REQUIRED)
91 include_directories(${LIBXML2_INCLUDE_DIR})
92 add_definitions(${LIBXML2_DEFINITIONS})
94 find_package(EXPAT REQUIRED)
95 include_directories(${EXPAT_INCLUDE_DIRS})
97 # SQLite3 + timelib are bundled in HPHP sources
98 include_directories("${HPHP_HOME}/src/third_party/libsqlite3")
99 include_directories("${HPHP_HOME}/src/third_party/timelib")
100 include_directories("${HPHP_HOME}/src/third_party/libafdt/src")
101 include_directories("${HPHP_HOME}/src/third_party/libmbfl")
102 include_directories("${HPHP_HOME}/src/third_party/libmbfl/mbfl")
103 include_directories("${HPHP_HOME}/src/third_party/libmbfl/filter")
105 FIND_LIBRARY(XHP_LIB xhp)
106 FIND_PATH(XHP_INCLUDE_DIR xhp_preprocess.hpp)
108 if (XHP_LIB AND XHP_INCLUDE_DIR)
109         include_directories(${XHP_INCLUDE_DIR})
110         set(SKIP_BUNDLED_XHP ON)
111 else()
112         include_directories("${HPHP_HOME}/src/third_party/xhp/xhp")
113 endif()
115 # ICU
116 find_package(ICU REQUIRED)
117 if (ICU_FOUND)
118         if (ICU_VERSION VERSION_LESS "4.2")
119                 message(FATAL_ERROR "ICU is too old, found ${ICU_VERSION} and we need 4.2")
120                 unset(ICU_FOUND CACHE)
121                 unset(ICU_INCLUDE_DIRS CACHE)
122                 unset(ICU_LIBRARIES CACHE)
123         endif (ICU_VERSION VERSION_LESS "4.2")
124         include_directories(${ICU_INCLUDE_DIRS})
125 endif (ICU_FOUND)
127 # (google heap OR cpu profiler) AND libunwind 
128 FIND_LIBRARY(UNWIND_LIB unwind)
130 # Google tmalloc
131 add_definitions(-DNO_JEMALLOC=1)
132 option(USE_TCMALLOC "Use tcmalloc" ON)
134 if (USE_TCMALLOC)
135         FIND_LIBRARY(GOOGLE_TCMALLOC_LIB tcmalloc_minimal)
137         set(HAVE_TCMALLOC 0)
138         if (NOT GOOGLE_TCMALLOC_LIB)
139                 message(STATUS "Skipping TCmalloc")
140                 add_definitions(-DNO_TCMALLOC=1)
141         else()
142                 message(STATUS "Found tcmalloc: ${GOOGLE_TCMALLOC_LIB}")
143                 add_definitions(-DGOOGLE_TCMALLOC=1)
144                 set(HAVE_TCMALLOC 1)
145         endif()
146 endif()
148 # tbb libs
149 find_package(TBB REQUIRED)
150 if (${TBB_INTERFACE_VERSION} LESS 3016)
151         message(FATAL_ERROR "TBB is too old, please install a newer version")
152         unset(TBB_FOUND CACHE)
153         unset(TBB_INCLUDE_DIRS CACHE)
154         unset(TBB_LIBRARIES CACHE)
155 endif()
156 include_directories(${TBB_INCLUDE_DIRS})
157 link_directories(${TBB_LIBRARY_DIRS})
159 # mcrypt libs
160 find_package(Mcrypt REQUIRED)
161 include_directories(${Mcrypt_INCLUDE_DIR})
163 # OpenSSL libs
164 find_package(OpenSSL REQUIRED)
165 include_directories(${OPENSSL_INCLUDE_DIR})
167 # ZLIB
168 find_package(ZLIB REQUIRED)
169 include_directories(${ZLIB_INCLUDE_DIR})
171 find_package(BZip2 REQUIRED)
172 include_directories(${BZIP2_INCLUDE_DIR})
173 add_definitions(${BZIP2_DEFINITIONS})
175 # oniguruma
176 find_package(ONIGURUMA REQUIRED)
177 include_directories(${ONIGURUMA_INCLUDE_DIRS})
179 # LDAP
180 find_package(Ldap REQUIRED)
181 include_directories(${LDAP_INCLUDE_DIR})
183 # ncurses, readline and history
184 #set(CURSES_NEED_NCURSES true)
185 find_package(Ncurses REQUIRED)
186 include_directories(${NCURSES_INCLUDE_PATH})
188 find_package(Readline REQUIRED)
189 include_directories(${READLINE_INCLUDE_DIR})
191 find_package(CClient REQUIRED)
192 include_directories(${CCLIENT_INCLUDE_PATH})
194 if (LINUX OR FREEBSD)
195         FIND_LIBRARY (CRYPT_LIB crypt)
196         FIND_LIBRARY (RT_LIB rt)
197 elseif (APPLE)
198         FIND_LIBRARY (CRYPT_LIB crypto)
199         FIND_LIBRARY (ICONV_LIB iconv)
200 endif()
202 if (LINUX)
203         FIND_LIBRARY (CAP_LIB cap)
205         if (NOT CAP_LIB)
206                 message(FATAL_ERROR "You need to install libcap")
207         endif()
208 endif()
210 if (LINUX OR APPLE)
211         FIND_LIBRARY (DL_LIB dl)
212         FIND_LIBRARY (RESOLV_LIB resolv)
213 endif()
215 FIND_LIBRARY (BFD_LIB bfd)
216 FIND_LIBRARY (BINUTIL_LIB iberty)
218 if (NOT BFD_LIB)
219         message(FATAL_ERROR "You need to install binutils")
220 endif()
222 if (NOT BINUTIL_LIB)
223         message(FATAL_ERROR "You need to install binutils")
224 endif()
226 if (FREEBSD)
227         FIND_LIBRARY (EXECINFO_LIB execinfo)
228 endif()
230 #find_package(BISON REQUIRED)
231 #find_package(FLEX REQUIRED)
233 #if (${FLEX_VERSION} VERSION_LESS 2.5.33)
234 #       message(FATAL_ERROR "Flex is too old, found ${FLEX_VERSION} and we need 2.5.33")
235 #endif()
237 include_directories(${HPHP_HOME}/src)
238 include_directories(${HPHP_HOME}/src/system/gen)
240 macro(hphp_link target)
241         target_link_libraries(${target} ${Boost_LIBRARIES})
242         target_link_libraries(${target} ${MYSQL_CLIENT_LIBS})
243         target_link_libraries(${target} ${PCRE_LIBRARY})
244         target_link_libraries(${target} ${ICU_LIBRARIES} ${ICU_I18N_LIBRARIES})
245         target_link_libraries(${target} ${LIBEVENT_LIB})
246         target_link_libraries(${target} ${CURL_LIBRARIES})
248 if (LINUX)
249         target_link_libraries(${target} ${CAP_LIB})
250 endif()
252 if (LINUX OR APPLE)
253         target_link_libraries(${target} ${RESOLV_LIB})
254         target_link_libraries(${target} ${DL_LIB})
255 endif()
257 if (FREEBSD)
258         target_link_libraries(${target} ${EXECINFO_LIB})
259 endif()
261         target_link_libraries(${target} ${BFD_LIB})
262         target_link_libraries(${target} ${BINUTIL_LIB})
263         target_link_libraries(${target} pthread)
264         target_link_libraries(${target} ${TBB_LIBRARIES})
265         target_link_libraries(${target} ${OPENSSL_LIBRARIES})
266         target_link_libraries(${target} ${ZLIB_LIBRARIES})
267         target_link_libraries(${target} ${BZIP2_LIBRARIES})
269         target_link_libraries(${target} ${LIBXML2_LIBRARIES})
270         target_link_libraries(${target} ${EXPAT_LIBRARY})
271         target_link_libraries(${target} ${ONIGURUMA_LIBRARIES})
272         target_link_libraries(${target} ${Mcrypt_LIB})
273         target_link_libraries(${target} ${GD_LIBRARY})
275         target_link_libraries(${target} ${LDAP_LIBRARIES})
276         target_link_libraries(${target} ${LBER_LIBRARIES})
278         target_link_libraries(${target} ${LIBMEMCACHED_LIBRARIES})
280         if (LINUX OR FREEBSD)
281                 target_link_libraries(${target} ${CRYPT_LIB})
282                 target_link_libraries(${target} ${RT_LIB})
283         elseif (APPLE)
284                 target_link_libraries(${target} ${CRYPTO_LIB})
285                 target_link_libraries(${target} ${ICONV_LIB})   
286         endif()
288         if (USE_TCMALLOC AND HAVE_TCMALLOC)
289                 target_link_libraries(${target} ${GOOGLE_TCMALLOC_LIB})
290         endif()
292         target_link_libraries(${target} timelib)
293         target_link_libraries(${target} sqlite3)
295         if (SKIP_BUNDLED_XHP)
296                 target_link_libraries(${target} ${XHP_LIB})
297         else()
298                 target_link_libraries(${target} xhp)
299         endif()
301         target_link_libraries(${target} afdt)
302         target_link_libraries(${target} mbfl)
304         target_link_libraries(${target} ${READLINE_LIBRARY})
305         target_link_libraries(${target} ${NCURSES_LIBRARY})
306         target_link_libraries(${target} ${CCLIENT_LIBRARY})
307 endmacro()