1 function(auto_sources RETURN_VALUE PATTERN SOURCE_SUBDIRS)
3 if ("${SOURCE_SUBDIRS}" STREQUAL "RECURSE")
10 if ("${SOURCE_SUBDIRS}" STREQUAL "RECURSE")
11 unset(${RETURN_VALUE})
12 file(GLOB SUBDIR_FILES "${PATH}/${PATTERN}")
13 list(APPEND ${RETURN_VALUE} ${SUBDIR_FILES})
15 file(GLOB subdirs RELATIVE ${PATH} ${PATH}/*)
17 foreach(DIR ${subdirs})
18 if (IS_DIRECTORY ${PATH}/${DIR})
19 if (NOT "${DIR}" STREQUAL "CMakeFiles")
20 file(GLOB_RECURSE SUBDIR_FILES "${PATH}/${DIR}/${PATTERN}")
21 list(APPEND ${RETURN_VALUE} ${SUBDIR_FILES})
26 file(GLOB ${RETURN_VALUE} "${PATTERN}")
28 foreach (PATH ${SOURCE_SUBDIRS})
29 file(GLOB SUBDIR_FILES "${PATH}/${PATTERN}")
30 list(APPEND ${RETURN_VALUE} ${SUBDIR_FILES})
31 endforeach(PATH ${SOURCE_SUBDIRS})
35 list(REMOVE_ITEM ${RETURN_VALUE} ${FILTER_OUT})
38 set(${RETURN_VALUE} ${${RETURN_VALUE}} PARENT_SCOPE)
39 endfunction(auto_sources)
41 macro(HHVM_SELECT_SOURCES DIR)
42 auto_sources(files "*.cpp" "RECURSE" "${DIR}")
44 if (NOT (${f} MATCHES "(ext_hhvm|/(old-)?tests?/)"))
45 list(APPEND CXX_SOURCES ${f})
48 auto_sources(files "*.c" "RECURSE" "${DIR}")
50 if (NOT (${f} MATCHES "(ext_hhvm|/(old-)?tests?/)"))
51 list(APPEND C_SOURCES ${f})
54 auto_sources(files "*.S" "RECURSE" "${DIR}")
56 if (NOT (${f} MATCHES "(ext_hhvm|/(old-)?tests?/)"))
57 list(APPEND ASM_SOURCES ${f})
60 auto_sources(files "*.h" "RECURSE" "${DIR}")
62 if (NOT (${f} MATCHES "(/(old-)?tests?/)"))
63 list(APPEND HEADER_SOURCES ${f})
66 endmacro(HHVM_SELECT_SOURCES)
68 function(CONTAINS_STRING FILE SEARCH RETURN_VALUE)
69 file(STRINGS ${FILE} FILE_CONTENTS REGEX ".*${SEARCH}.*")
71 set(${RETURN_VALUE} True PARENT_SCOPE)
73 endfunction(CONTAINS_STRING)
75 macro(MYSQL_SOCKET_SEARCH)
77 /var/run/mysqld/mysqld.sock
79 /var/run/mysql/mysql.sock
80 /var/lib/mysql/mysql.sock
82 /usr/local/mysql/var/mysql.sock
83 /Private/tmp/mysql.sock
84 /private/tmp/mysql.sock
94 set(MYSQL_UNIX_SOCK_ADDR ${MYSQL_SOCK} CACHE STRING "Path to MySQL Socket")
98 function(append_systemlib TARGET SOURCE SECTNAME)
100 set(${TARGET}_SLIBS ${${TARGET}_SLIBS} -Wl,-sectcreate,__text,${SECTNAME},${SOURCE} PARENT_SCOPE)
102 set(${TARGET}_SLIBS ${${TARGET}_SLIBS} "--add-section" "${SECTNAME}=${SOURCE}" PARENT_SCOPE)
104 # Add the systemlib file to the "LINK_DEPENDS" for the systemlib, this will cause it
105 # to be relinked and the systemlib re-embedded
106 set_property(TARGET ${TARGET} APPEND PROPERTY LINK_DEPENDS ${SOURCE})
107 endfunction(append_systemlib)
109 function(embed_systemlibs TARGET DEST)
111 target_link_libraries(${TARGET} ${${TARGET}_SLIBS})
113 add_custom_command(TARGET ${TARGET} POST_BUILD
115 ARGS ${${TARGET}_SLIBS} ${DEST}
116 COMMENT "Embedding php in ${TARGET}")
118 endfunction(embed_systemlibs)
120 macro(embed_systemlib_byname TARGET SLIB)
121 get_filename_component(SLIB_BN ${SLIB} "NAME_WE")
122 string(LENGTH ${SLIB_BN} SLIB_BN_LEN)
123 math(EXPR SLIB_BN_REL_LEN "${SLIB_BN_LEN} - 4")
124 string(SUBSTRING ${SLIB_BN} 4 ${SLIB_BN_REL_LEN} SLIB_EXTNAME)
125 string(MD5 SLIB_HASH_NAME ${SLIB_EXTNAME})
126 # Some platforms limit section names to 16 characters :(
127 string(SUBSTRING ${SLIB_HASH_NAME} 0 12 SLIB_HASH_NAME_SHORT)
128 append_systemlib(${TARGET} ${SLIB} "ext.${SLIB_HASH_NAME_SHORT}")
131 function(embed_all_systemlibs TARGET ROOT DEST)
132 append_systemlib(${TARGET} ${ROOT}/system/systemlib.php systemlib)
133 auto_sources(SYSTEMLIBS "ext_*.php" "RECURSE" "${HPHP_HOME}/hphp/runtime")
134 foreach(SLIB ${SYSTEMLIBS})
135 embed_systemlib_byname(${TARGET} ${SLIB})
137 embed_systemlibs(${TARGET} ${DEST})
138 endfunction(embed_all_systemlibs)
140 # Custom install function that doesn't relink, instead it uses chrpath to change it, if
141 # it's available, otherwise, it leaves the chrpath alone
142 function(HHVM_INSTALL TARGET DEST)
143 get_target_property(LOC ${TARGET} LOCATION)
144 get_target_property(TY ${TARGET} TYPE)
146 get_target_property(RPATH ${TARGET} INSTALL_RPATH)
147 if (NOT RPATH STREQUAL "RPATH-NOTFOUND")
148 if (RPATH STREQUAL "")
149 install(CODE "execute_process(COMMAND \"${CHRPATH}\" \"-d\" \"${LOC}\" ERROR_QUIET)")
151 install(CODE "execute_process(COMMAND \"${CHRPATH}\" \"-r\" \"${RPATH}\" \"${LOC}\" ERROR_QUIET)")
155 install(CODE "FILE(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${DEST}\" TYPE ${TY} FILES \"${LOC}\")")
156 endfunction(HHVM_INSTALL)
158 function(HHVM_PUBLIC_HEADERS TARGET)
160 CODE "INCLUDE(\"${HPHP_HOME}/CMake/HPHPFunctions.cmake\")
161 HHVM_INSTALL_HEADERS(${TARGET} ${HPHP_HOME}
162 \"${CMAKE_INSTALL_PREFIX}/include\" ${ARGN})"
166 function(HHVM_INSTALL_HEADERS TARGET SRCROOT DEST)
167 message(STATUS "Installing header files for ${TARGET}")
168 foreach(src_rel ${ARGN})
169 # Determine the relative directory name so that we can mirror the
170 # directory structure in the output
171 file(RELATIVE_PATH dest_rel ${SRCROOT} ${src_rel})
172 if (IS_ABSOLUTE ${dest_rel})
173 message(WARNING "${TARGET}: Header file ${dest_rel} is not inside ${SRCROOT}")
175 string(FIND ${dest_rel} / slash_pos REVERSE)
176 if(slash_pos EQUAL -1)
179 string(SUBSTRING ${dest_rel} 0 ${slash_pos} dest_rel)
182 DESTINATION "$ENV{DESTDIR}${DEST}/${dest_rel}"
183 NO_SOURCE_PERMISSIONS)
188 macro(HHVM_EXT_OPTION EXTNAME PACKAGENAME)
189 if (NOT DEFINED EXT_${EXTNAME})
191 find_package(${PACKAGENAME})
192 elseif (EXT_${EXTNAME} STREQUAL "ON")
194 find_package(${PACKAGENAME} REQUIRED)