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 endmacro(HHVM_SELECT_SOURCES)
62 function(CONTAINS_STRING FILE SEARCH RETURN_VALUE)
63 file(STRINGS ${FILE} FILE_CONTENTS REGEX ".*${SEARCH}.*")
65 set(${RETURN_VALUE} True PARENT_SCOPE)
67 endfunction(CONTAINS_STRING)
69 macro(MYSQL_SOCKET_SEARCH)
71 /var/run/mysqld/mysqld.sock
73 /var/run/mysql/mysql.sock
74 /var/lib/mysql/mysql.sock
76 /usr/local/mysql/var/mysql.sock
77 /Private/tmp/mysql.sock
78 /private/tmp/mysql.sock
88 set(MYSQL_UNIX_SOCK_ADDR ${MYSQL_SOCK} CACHE STRING "Path to MySQL Socket")
92 function(append_systemlib TARGET SOURCE SECTNAME)
94 set(${TARGET}_SLIBS ${${TARGET}_SLIBS} -Wl,-sectcreate,__text,${SECTNAME},${SOURCE} PARENT_SCOPE)
96 set(${TARGET}_SLIBS ${${TARGET}_SLIBS} "--add-section" "${SECTNAME}=${SOURCE}" PARENT_SCOPE)
98 # Add the systemlib file to the "LINK_DEPENDS" for the systemlib, this will cause it
99 # to be relinked and the systemlib re-embedded
100 set_property(TARGET ${TARGET} APPEND PROPERTY LINK_DEPENDS ${SOURCE})
101 endfunction(append_systemlib)
103 function(embed_systemlibs TARGET DEST)
105 target_link_libraries(${TARGET} ${${TARGET}_SLIBS})
107 add_custom_command(TARGET ${TARGET} POST_BUILD
109 ARGS ${${TARGET}_SLIBS} ${DEST}
110 COMMENT "Embedding php in ${TARGET}")
112 endfunction(embed_systemlibs)
114 function(embed_all_systemlibs TARGET DEST)
115 append_systemlib(${TARGET} ${HPHP_HOME}/hphp/system/systemlib.php systemlib)
116 auto_sources(SYSTEMLIBS "ext_*.php" "RECURSE" "${HPHP_HOME}/hphp/runtime")
117 foreach(SLIB ${SYSTEMLIBS})
118 get_filename_component(SLIB_BN ${SLIB} "NAME_WE")
119 string(LENGTH ${SLIB_BN} SLIB_BN_LEN)
120 math(EXPR SLIB_BN_REL_LEN "${SLIB_BN_LEN} - 4")
121 string(SUBSTRING ${SLIB_BN} 4 ${SLIB_BN_REL_LEN} SLIB_EXTNAME)
122 string(MD5 SLIB_HASH_NAME ${SLIB_EXTNAME})
123 string(SUBSTRING ${SLIB_HASH_NAME} 0 12 SLIB_HASH_NAME_SHORT)
124 append_systemlib(${TARGET} ${SLIB} "ext.${SLIB_HASH_NAME_SHORT}")
126 embed_systemlibs(${TARGET} ${DEST})
127 endfunction(embed_all_systemlibs)
129 # Custom install function that doesn't relink, instead it uses chrpath to change it, if
130 # it's available, otherwise, it leaves the chrpath alone
131 function(HHVM_INSTALL TARGET DEST)
132 get_target_property(LOC ${TARGET} LOCATION)
133 get_target_property(TY ${TARGET} TYPE)
135 get_target_property(RPATH ${TARGET} INSTALL_RPATH)
136 if (NOT RPATH STREQUAL "RPATH-NOTFOUND")
137 if (RPATH STREQUAL "")
138 install(CODE "execute_process(COMMAND \"${CHRPATH}\" \"-d\" \"${LOC}\" ERROR_QUIET)")
140 install(CODE "execute_process(COMMAND \"${CHRPATH}\" \"-r\" \"${RPATH}\" \"${LOC}\" ERROR_QUIET)")
144 install(CODE "FILE(INSTALL DESTINATION \"\${CMAKE_INSTALL_PREFIX}/${DEST}\" TYPE ${TY} FILES \"${LOC}\")")
145 endfunction(HHVM_INSTALL)
147 function(HHVM_EXTENSION EXTNAME)
148 list(REMOVE_AT ARGV 0)
149 add_library(${EXTNAME} SHARED ${ARGV})
150 set_target_properties(${EXTNAME} PROPERTIES PREFIX "")
151 set_target_properties(${EXTNAME} PROPERTIES SUFFIX ".so")
154 function(HHVM_SYSTEMLIB EXTNAME SOURCE_FILE)
155 append_systemlib(${EXTNAME} ${SOURCE_FILE} systemlib)
156 embed_systemlibs(${EXTNAME} "${EXTNAME}.so")