Disable /Zend/tests/inter_06.php in repo mode
[hiphop-php.git] / CMake / HPHPFunctions.cmake
blob3c5c7b7aafe77086ef36aa766052d5aa8c02ccf4
1 function(auto_sources RETURN_VALUE PATTERN SOURCE_SUBDIRS)
3         if ("${SOURCE_SUBDIRS}" STREQUAL "RECURSE")
4                 SET(PATH ".")
5                 if (${ARGC} EQUAL 4)
6                         list(GET ARGV 3 PATH)
7                 endif ()
8         endif()
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})
22                                 endif()
23                         endif()
24                 endforeach()
25         else ()
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})
32         endif ()
34         if (${FILTER_OUT})
35                 list(REMOVE_ITEM ${RETURN_VALUE} ${FILTER_OUT})
36         endif()
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}")
43         foreach(f ${files})
44                 if (NOT (${f} MATCHES "(ext_hhvm|/(old-)?tests?/)"))
45                         list(APPEND CXX_SOURCES ${f})
46                 endif()
47         endforeach()
48         auto_sources(files "*.c" "RECURSE" "${DIR}")
49         foreach(f ${files})
50                 if (NOT (${f} MATCHES "(ext_hhvm|/(old-)?tests?/)"))
51                         list(APPEND C_SOURCES ${f})
52                 endif()
53         endforeach()
54         auto_sources(files "*.S" "RECURSE" "${DIR}")
55         foreach(f ${files})
56                 if (NOT (${f} MATCHES "(ext_hhvm|/(old-)?tests?/)"))
57                         list(APPEND ASM_SOURCES ${f})
58                 endif()
59         endforeach()
60 endmacro(HHVM_SELECT_SOURCES)
62 function(CONTAINS_STRING FILE SEARCH RETURN_VALUE)
63         file(STRINGS ${FILE} FILE_CONTENTS REGEX ".*${SEARCH}.*")
64         if (FILE_CONTENTS)
65                 set(${RETURN_VALUE} True PARENT_SCOPE)
66         endif()
67 endfunction(CONTAINS_STRING)
69 macro(MYSQL_SOCKET_SEARCH)
70         foreach (i
71                 /var/run/mysqld/mysqld.sock
72                 /var/tmp/mysql.sock
73                 /var/run/mysql/mysql.sock
74                 /var/lib/mysql/mysql.sock
75                 /var/mysql/mysql.sock
76                 /usr/local/mysql/var/mysql.sock
77                 /Private/tmp/mysql.sock
78                 /private/tmp/mysql.sock
79                 /tmp/mysql.sock
80                 )
81                 if (EXISTS ${i})
82                         set(MYSQL_SOCK ${i})
83                         break()
84                 endif()
85         endforeach()
87         if (MYSQL_SOCK)
88                 set(MYSQL_UNIX_SOCK_ADDR ${MYSQL_SOCK} CACHE STRING "Path to MySQL Socket")
89         endif()
90 endmacro()
92 function(append_systemlib TARGET SOURCE SECTNAME)
93         if (APPLE)
94                 set(${TARGET}_SLIBS ${${TARGET}_SLIBS} -Wl,-sectcreate,__text,${SECTNAME},${SOURCE} PARENT_SCOPE)
95         else()
96                 set(${TARGET}_SLIBS ${${TARGET}_SLIBS} "--add-section" "${SECTNAME}=${SOURCE}" PARENT_SCOPE)
97         endif()
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)
104         if (APPLE)
105                 target_link_libraries(${TARGET} ${${TARGET}_SLIBS})
106         else()
107                 add_custom_command(TARGET ${TARGET} POST_BUILD
108                            COMMAND "objcopy"
109                            ARGS ${${TARGET}_SLIBS} ${DEST}
110                            COMMENT "Embedding php in ${TARGET}")
111         endif()
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}")
125         endforeach()
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)
134         if (FOUND_CHRPATH)
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)")
139                         else()
140                                 install(CODE "execute_process(COMMAND \"${CHRPATH}\" \"-r\" \"${RPATH}\" \"${LOC}\" ERROR_QUIET)")
141                         endif()
142                 endif()
143         endif()
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")
152 endfunction()
154 function(HHVM_SYSTEMLIB EXTNAME SOURCE_FILE)
155         append_systemlib(${EXTNAME} ${SOURCE_FILE} systemlib)
156         embed_systemlibs(${EXTNAME} "${EXTNAME}.so")
157 endfunction()