[Release] Webkit2-efl-123997_0.11.46
[framework/web/webkit-efl.git] / Source / cmake / WebKitMacros.cmake
1 MACRO (INCLUDE_IF_EXISTS _file)
2     IF (EXISTS ${_file})
3         MESSAGE(STATUS "Using platform-specific CMakeLists: ${_file}")
4         INCLUDE(${_file})
5     ELSE ()
6         MESSAGE(STATUS "Platform-specific CMakeLists not found: ${_file}")
7     ENDIF ()
8 ENDMACRO ()
9
10
11 # Append the given dependencies to the source file
12 MACRO (ADD_SOURCE_DEPENDENCIES _source _deps)
13     SET(_tmp)
14     GET_SOURCE_FILE_PROPERTY(_tmp ${_source} OBJECT_DEPENDS)
15     IF (NOT _tmp)
16         SET(_tmp "")
17     ENDIF ()
18
19     FOREACH (f ${_deps})
20         LIST(APPEND _tmp "${f}")
21     ENDFOREACH ()
22
23     SET_SOURCE_FILES_PROPERTIES(${_source} PROPERTIES OBJECT_DEPENDS "${_tmp}")
24 ENDMACRO ()
25
26
27 # Helper macro which wraps generate-bindings.pl script.
28 #   _output_source is a list name which will contain generated sources.(eg. WebCore_SOURCES)
29 #   _input_files are IDL files to generate.
30 #   _base_dir is base directory where script is called.
31 #   _idl_includes is value of --include argument. (eg. --include=${WEBCORE_DIR}/bindings/js)
32 #   _features is a value of --defines argument.
33 #   _destination is a value of --outputDir argument.
34 #   _prefix is a prefix of output files. (eg. JS - it makes JSXXX.cpp JSXXX.h from XXX.idl)
35 #   _generator is a value of --generator argument.
36 #   _supplemental_dependency_file is a value of --supplementalDependencyFile. (optional)
37 MACRO (GENERATE_BINDINGS _output_source _input_files _base_dir _idl_includes _features _destination _prefix _generator)
38     SET(BINDING_GENERATOR ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl)
39
40     SET(_supplemental_dependency_file ${ARGN})
41     IF (_supplemental_dependency_file)
42         SET(_supplemental_dependency --supplementalDependencyFile ${_supplemental_dependency_file})
43     ENDIF ()
44
45     FOREACH (_file ${_input_files})
46         GET_FILENAME_COMPONENT (_name ${_file} NAME_WE)
47
48         ADD_CUSTOM_COMMAND(
49             OUTPUT ${_destination}/${_prefix}${_name}.cpp ${_destination}/${_prefix}${_name}.h
50             MAIN_DEPENDENCY ${_file}
51             DEPENDS ${BINDING_GENERATOR} ${SCRIPTS_BINDINGS} ${_supplemental_dependency_file}
52             COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${BINDING_GENERATOR} --defines "${_features}" --generator ${_generator} ${_idl_includes} --outputDir "${_destination}" --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" ${_supplemental_dependency} ${_file}
53             WORKING_DIRECTORY ${_base_dir}
54             VERBATIM)
55
56         LIST(APPEND ${_output_source} ${_destination}/${_prefix}${_name}.cpp)
57     ENDFOREACH ()
58 ENDMACRO ()
59
60
61 MACRO (GENERATE_FONT_NAMES _infile)
62     SET(NAMES_GENERATOR ${WEBCORE_DIR}/dom/make_names.pl)
63     SET(_arguments  --fonts ${_infile})
64     SET(_outputfiles ${DERIVED_SOURCES_WEBCORE_DIR}/WebKitFontFamilyNames.cpp ${DERIVED_SOURCES_WEBCORE_DIR}/WebKitFontFamilyNames.h)
65
66     ADD_CUSTOM_COMMAND(
67         OUTPUT  ${_outputfiles}
68         MAIN_DEPENDENCY ${_infile}
69         DEPENDS ${NAMES_GENERATOR} ${SCRIPTS_BINDINGS}
70         COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${NAMES_GENERATOR} --outputDir ${DERIVED_SOURCES_WEBCORE_DIR} ${_arguments}
71         VERBATIM)
72 ENDMACRO ()
73
74
75 MACRO (GENERATE_EVENT_FACTORY _infile _outfile)
76     SET(NAMES_GENERATOR ${WEBCORE_DIR}/dom/make_event_factory.pl)
77
78     ADD_CUSTOM_COMMAND(
79         OUTPUT  ${DERIVED_SOURCES_WEBCORE_DIR}/${_outfile}
80         MAIN_DEPENDENCY ${_infile}
81         DEPENDS ${NAMES_GENERATOR} ${SCRIPTS_BINDINGS}
82         COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${NAMES_GENERATOR} --input ${_infile} --outputDir ${DERIVED_SOURCES_WEBCORE_DIR}
83         VERBATIM)
84 ENDMACRO ()
85
86
87 MACRO (GENERATE_EXCEPTION_CODE_DESCRIPTION _infile _outfile)
88     SET(NAMES_GENERATOR ${WEBCORE_DIR}/dom/make_dom_exceptions.pl)
89
90     ADD_CUSTOM_COMMAND(
91         OUTPUT  ${DERIVED_SOURCES_WEBCORE_DIR}/${_outfile}
92         MAIN_DEPENDENCY ${_infile}
93         DEPENDS ${NAMES_GENERATOR} ${SCRIPTS_BINDINGS}
94         COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${NAMES_GENERATOR} --input ${_infile} --outputDir ${DERIVED_SOURCES_WEBCORE_DIR}
95         VERBATIM)
96 ENDMACRO ()
97
98
99 MACRO (GENERATE_DOM_NAMES _namespace _attrs)
100     SET(NAMES_GENERATOR ${WEBCORE_DIR}/dom/make_names.pl)
101     SET(_arguments  --attrs ${_attrs})
102     SET(_outputfiles ${DERIVED_SOURCES_WEBCORE_DIR}/${_namespace}Names.cpp ${DERIVED_SOURCES_WEBCORE_DIR}/${_namespace}Names.h)
103     SET(_extradef)
104     SET(_tags)
105
106     FOREACH (f ${ARGN})
107         IF (_tags)
108             SET(_extradef "${_extradef} ${f}")
109         ELSE ()
110             SET(_tags ${f})
111         ENDIF ()
112     ENDFOREACH ()
113
114     IF (_tags)
115         SET(_arguments "${_arguments}" --tags ${_tags} --factory --wrapperFactory)
116         SET(_outputfiles "${_outputfiles}" ${DERIVED_SOURCES_WEBCORE_DIR}/${_namespace}ElementFactory.cpp ${DERIVED_SOURCES_WEBCORE_DIR}/${_namespace}ElementFactory.h ${DERIVED_SOURCES_WEBCORE_DIR}/JS${_namespace}ElementWrapperFactory.cpp ${DERIVED_SOURCES_WEBCORE_DIR}/JS${_namespace}ElementWrapperFactory.h)
117     ENDIF ()
118
119     IF (_extradef)
120         SET(_additionArguments "${_additionArguments}" --extraDefines=${_extradef})
121     ENDIF ()
122
123     ADD_CUSTOM_COMMAND(
124         OUTPUT  ${_outputfiles}
125         DEPENDS ${NAMES_GENERATOR} ${SCRIPTS_BINDINGS} ${_attrs} ${_tags}
126         COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${NAMES_GENERATOR} --preprocessor "${CODE_GENERATOR_PREPROCESSOR_WITH_LINEMARKERS}" --outputDir ${DERIVED_SOURCES_WEBCORE_DIR} ${_arguments} ${_additionArguments}
127         VERBATIM)
128 ENDMACRO ()
129
130
131 # - Create hash table *.lut.h
132 # GENERATE_HASH_LUT(input_file output_file)
133 MACRO (GENERATE_HASH_LUT _input _output)
134     SET(HASH_LUT_GENERATOR "${JAVASCRIPTCORE_DIR}/create_hash_table")
135
136     FOREACH (_tmp ${ARGN})
137         IF (${_tmp} STREQUAL "MAIN_DEPENDENCY")
138             SET(_main_dependency ${_input})
139         ENDIF ()
140     ENDFOREACH ()
141
142     ADD_CUSTOM_COMMAND(
143         OUTPUT ${_output}
144         MAIN_DEPENDENCY ${_main_dependency}
145         DEPENDS ${_input} ${HASH_LUT_GENERATOR}
146         COMMAND ${PERL_EXECUTABLE} ${HASH_LUT_GENERATOR} ${_input} -i > ${_output}
147         VERBATIM)
148 ENDMACRO ()
149
150
151 MACRO (GENERATE_GRAMMAR _prefix _input _output_header _output_source)
152     ADD_CUSTOM_COMMAND(
153         OUTPUT ${_output_header} ${_output_source}
154         MAIN_DEPENDENCY ${_input}
155         COMMAND ${BISON_EXECUTABLE} -p ${_prefix} ${_input} -o ${_output_source} --defines=${_output_header}
156         VERBATIM)
157 ENDMACRO ()
158
159 MACRO(MAKE_HASH_TOOLS _source)
160     GET_FILENAME_COMPONENT(_name ${_source} NAME_WE)
161
162     IF (${_source} STREQUAL "DocTypeStrings")
163         SET(_hash_tools_h "${DERIVED_SOURCES_WEBCORE_DIR}/HashTools.h")
164     ELSE ()
165         SET(_hash_tools_h "")
166     ENDIF ()
167
168     ADD_CUSTOM_COMMAND(
169         OUTPUT ${DERIVED_SOURCES_WEBCORE_DIR}/${_name}.cpp ${_hash_tools_h}
170         MAIN_DEPENDENCY ${_source}.gperf 
171         COMMAND ${PERL_EXECUTABLE} ${WEBCORE_DIR}/make-hash-tools.pl ${DERIVED_SOURCES_WEBCORE_DIR} ${_source}.gperf
172         VERBATIM)
173
174     UNSET(_name)
175     UNSET(_hash_tools_h)
176 ENDMACRO()
177
178 MACRO (WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS)
179     INCLUDE_IF_EXISTS(${CMAKE_CURRENT_SOURCE_DIR}/Platform${PORT}.cmake)
180 ENDMACRO ()
181
182 MACRO (WEBKIT_WRAP_SOURCELIST)
183     FOREACH (_file ${ARGN})
184         GET_FILENAME_COMPONENT(_basename ${_file} NAME_WE)
185         GET_FILENAME_COMPONENT(_path ${_file} PATH)
186
187         IF (NOT _file MATCHES "${DERIVED_SOURCES_WEBCORE_DIR}")
188             STRING(REGEX REPLACE "/" "\\\\\\\\" _sourcegroup "${_path}")
189             SOURCE_GROUP("${_sourcegroup}" FILES ${_file})
190         ENDIF ()
191
192         IF (WTF_PLATFORM_QT)
193             SET(_moc_filename ${DERIVED_SOURCES_WEBCORE_DIR}/${_basename}.moc)
194
195             FILE(READ ${_file} _contents)
196
197             STRING(REGEX MATCHALL "#include[ ]+\"${_basename}\\.moc\"" _match "${_contents}")
198             IF (_match)
199                 QT4_GENERATE_MOC(${_file} ${_moc_filename})
200                 ADD_SOURCE_DEPENDENCIES(${_file} ${_moc_filename})
201             ENDIF ()
202         ENDIF ()
203     ENDFOREACH ()
204
205     SOURCE_GROUP("DerivedSources" REGULAR_EXPRESSION "${DERIVED_SOURCES_WEBCORE_DIR}")
206 ENDMACRO ()
207
208
209 MACRO (WEBKIT_CREATE_FORWARDING_HEADER _target_directory _file)
210     GET_FILENAME_COMPONENT(_absolute "${_file}" ABSOLUTE)
211     GET_FILENAME_COMPONENT(_name "${_file}" NAME)
212     SET(_content "#include \"${_absolute}\"\n")
213     SET(_filename "${_target_directory}/${_name}")
214
215     IF (EXISTS "${_filename}")
216         FILE(READ "${_filename}" _old_content)
217     ENDIF ()
218
219     IF (NOT _old_content STREQUAL _content)
220         FILE(WRITE "${_filename}" "${_content}")
221     ENDIF ()
222 ENDMACRO ()
223
224 MACRO (WEBKIT_CREATE_FORWARDING_HEADERS _framework)
225     SET(_processing_directories 0)
226     SET(_processing_files 0)
227     SET(_target_directory "${DERIVED_SOURCES_DIR}/ForwardingHeaders/${_framework}")
228
229     FILE(GLOB _files "${_target_directory}/*.h")
230     FOREACH (_file ${_files})
231         FILE(READ "${_file}" _content)
232         STRING(REGEX MATCH "^#include \"([^\"]*)\"" _matched ${_content})
233         IF (_matched AND NOT EXISTS "${CMAKE_MATCH_1}")
234            FILE(REMOVE "${_file}")
235         ENDIF()
236     ENDFOREACH ()
237
238     FOREACH (_currentArg ${ARGN})
239         IF ("${_currentArg}" STREQUAL "DIRECTORIES")
240             SET(_processing_directories 1)
241             SET(_processing_files 0)
242         ELSEIF ("${_currentArg}" STREQUAL "FILES")
243             SET(_processing_directories 0)
244             SET(_processing_files 1)
245         ELSEIF (_processing_directories)
246             FILE(GLOB _files "${_currentArg}/*.h")
247             FOREACH (_file ${_files})
248                 WEBKIT_CREATE_FORWARDING_HEADER(${_target_directory} ${_file})
249             ENDFOREACH ()
250         ELSEIF (_processing_files)
251             WEBKIT_CREATE_FORWARDING_HEADER(${_target_directory} ${_currentArg})
252         ENDIF ()
253     ENDFOREACH ()
254 ENDMACRO ()