2 # +----------------------------------------------------------------------+
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 # +----------------------------------------------------------------------+
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")
26 include_directories(${Boost_INCLUDE_DIRS})
27 link_directories(${Boost_LIBRARY_DIRS})
30 find_package(MySQL REQUIRED)
31 include_directories(${MYSQL_INCLUDE_DIR})
32 link_directories(${MYSQL_LIB_DIR})
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)
41 include_directories(${LIBMEMCACHED_INCLUDE_DIR})
44 find_package(PCRE REQUIRED)
45 include_directories(${PCRE_INCLUDE_DIRS})
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)
60 set(CMAKE_REQUIRED_LIBRARIES)
63 find_package(GD REQUIRED)
65 option(WANT_FB_LIBMCC "want FB Memcache" 0)
68 add_definitions(-DHPHP_WITH_LIBMCC)
69 message(FATAL_ERROR Need to add libmcc and libch for linking)
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)
87 set(CMAKE_REQUIRED_LIBRARIES)
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)
112 include_directories("${HPHP_HOME}/src/third_party/xhp/xhp")
116 find_package(ICU REQUIRED)
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})
127 # (google heap OR cpu profiler) AND libunwind
128 FIND_LIBRARY(UNWIND_LIB unwind)
131 add_definitions(-DNO_JEMALLOC=1)
132 option(USE_TCMALLOC "Use tcmalloc" ON)
135 FIND_LIBRARY(GOOGLE_TCMALLOC_LIB tcmalloc_minimal)
138 if (NOT GOOGLE_TCMALLOC_LIB)
139 message(STATUS "Skipping TCmalloc")
140 add_definitions(-DNO_TCMALLOC=1)
142 message(STATUS "Found tcmalloc: ${GOOGLE_TCMALLOC_LIB}")
143 add_definitions(-DGOOGLE_TCMALLOC=1)
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)
156 include_directories(${TBB_INCLUDE_DIRS})
157 link_directories(${TBB_LIBRARY_DIRS})
160 find_package(Mcrypt REQUIRED)
161 include_directories(${Mcrypt_INCLUDE_DIR})
164 find_package(OpenSSL REQUIRED)
165 include_directories(${OPENSSL_INCLUDE_DIR})
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})
176 find_package(ONIGURUMA REQUIRED)
177 include_directories(${ONIGURUMA_INCLUDE_DIRS})
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)
198 FIND_LIBRARY (CRYPT_LIB crypto)
199 FIND_LIBRARY (ICONV_LIB iconv)
203 FIND_LIBRARY (CAP_LIB cap)
206 message(FATAL_ERROR "You need to install libcap")
211 FIND_LIBRARY (DL_LIB dl)
212 FIND_LIBRARY (RESOLV_LIB resolv)
215 FIND_LIBRARY (BFD_LIB bfd)
216 FIND_LIBRARY (BINUTIL_LIB iberty)
219 message(FATAL_ERROR "You need to install binutils")
223 message(FATAL_ERROR "You need to install binutils")
227 FIND_LIBRARY (EXECINFO_LIB execinfo)
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")
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})
249 target_link_libraries(${target} ${CAP_LIB})
253 target_link_libraries(${target} ${RESOLV_LIB})
254 target_link_libraries(${target} ${DL_LIB})
258 target_link_libraries(${target} ${EXECINFO_LIB})
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})
284 target_link_libraries(${target} ${CRYPTO_LIB})
285 target_link_libraries(${target} ${ICONV_LIB})
288 if (USE_TCMALLOC AND HAVE_TCMALLOC)
289 target_link_libraries(${target} ${GOOGLE_TCMALLOC_LIB})
292 target_link_libraries(${target} timelib)
293 target_link_libraries(${target} sqlite3)
295 if (SKIP_BUNDLED_XHP)
296 target_link_libraries(${target} ${XHP_LIB})
298 target_link_libraries(${target} xhp)
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})