Enable the [Supplemental] IDL on CMake
https://bugs.webkit.org/show_bug.cgi?id=75345

Reviewed by Daniel Bates.

This patch enables the [Supplemental] IDL on CMake by changing the build
flow of CMake as follows.

- Previous build flow:
    foreach $idl (all IDL files) {
        generate-bindings.pl depends on $idl;
        generate-bindings.pl reads $idl;
        generate-bindings.pl generates .h and .cpp files for $idl;
    }

- New build flow (See the discussions in bug 72138 for more details):
    resolve-supplemental.pl depends on all IDL files;
    resolve-supplemental.pl reads all IDL files;
    resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
    resolve-supplemental.pl outputs supplemental_dependency.tmp;
    foreach $idl (all IDL files) {
        generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
        generate-bindings.pl reads $idl;
        generate-bindings.pl reads supplemental_dependency.tmp;
        generate-bindings.pl generates .h and .cpp files for $idl,
            including all attributes in the IDL files that are implementing $idl;
    }

Tests: Confirm that build succeeds.
       http/tests/websocket/tests/*

* CMakeLists.txt:
* UseJSC.cmake: Modified to reflect the new build flow as described above.
* UseV8.cmake: Ditto.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@103854 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt
index 0efcc45..320a0a4 100644
--- a/Source/WebCore/CMakeLists.txt
+++ b/Source/WebCore/CMakeLists.txt
@@ -369,6 +369,7 @@
     webaudio/AudioProcessingEvent.idl
     webaudio/AudioSourceNode.idl
     webaudio/ConvolverNode.idl
+    webaudio/DOMWindowWebAudio.idl
     webaudio/DelayNode.idl
     webaudio/HighPass2FilterNode.idl
     webaudio/JavaScriptAudioNode.idl
@@ -376,6 +377,7 @@
     webaudio/RealtimeAnalyserNode.idl
 
     websockets/CloseEvent.idl
+    websockets/DOMWindowWebSocket.idl
 
     xml/DOMParser.idl
     xml/XMLHttpRequest.idl
@@ -2218,12 +2220,17 @@
 ENDIF ()
 
 # Modules that the bindings generator scripts may use
+SET(SCRIPTS_RESOLVE_SUPPLEMENTAL
+    ${WEBCORE_DIR}/bindings/scripts/IDLParser.pm
+)
 SET(SCRIPTS_BINDINGS
     ${WEBCORE_DIR}/bindings/scripts/IDLParser.pm
     ${WEBCORE_DIR}/bindings/scripts/IDLStructure.pm
     ${WEBCORE_DIR}/bindings/scripts/InFilesParser.pm
     ${WEBCORE_DIR}/bindings/scripts/preprocessor.pm
 )
+SET(IDL_FILES_TMP ${DERIVED_SOURCES_WEBCORE_DIR}/idl_files.tmp)
+SET(SUPPLEMENTAL_DEPENDENCY_FILE ${DERIVED_SOURCES_WEBCORE_DIR}/supplemental_dependency.tmp)
 
 INCLUDE(${WEBCORE_DIR}/UseJSC.cmake)
 
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 9411d40..e76c824 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,40 @@
+2011-12-30  Kentaro Hara  <haraken@chromium.org>
+
+        Enable the [Supplemental] IDL on CMake
+        https://bugs.webkit.org/show_bug.cgi?id=75345
+
+        Reviewed by Daniel Bates.
+
+        This patch enables the [Supplemental] IDL on CMake by changing the build
+        flow of CMake as follows.
+
+        - Previous build flow:
+            foreach $idl (all IDL files) {
+                generate-bindings.pl depends on $idl;
+                generate-bindings.pl reads $idl;
+                generate-bindings.pl generates .h and .cpp files for $idl;
+            }
+
+        - New build flow (See the discussions in bug 72138 for more details):
+            resolve-supplemental.pl depends on all IDL files;
+            resolve-supplemental.pl reads all IDL files;
+            resolve-supplemental.pl resolves the dependency of [Supplemental=XXXX];
+            resolve-supplemental.pl outputs supplemental_dependency.tmp;
+            foreach $idl (all IDL files) {
+                generate-bindings.pl depends on $idl and supplemental_dependency.tmp;
+                generate-bindings.pl reads $idl;
+                generate-bindings.pl reads supplemental_dependency.tmp;
+                generate-bindings.pl generates .h and .cpp files for $idl,
+                    including all attributes in the IDL files that are implementing $idl;
+            }
+
+        Tests: Confirm that build succeeds.
+               http/tests/websocket/tests/*
+
+        * CMakeLists.txt:
+        * UseJSC.cmake: Modified to reflect the new build flow as described above.
+        * UseV8.cmake: Ditto.
+
 2011-12-30  Robert Hogan  <robert@webkit.org>
 
         REGRESSION (r94492): Text is shifted to the right in some buttons in the Mac App Store
diff --git a/Source/WebCore/UseJSC.cmake b/Source/WebCore/UseJSC.cmake
index fc929d6..2a456f0 100644
--- a/Source/WebCore/UseJSC.cmake
+++ b/Source/WebCore/UseJSC.cmake
@@ -258,13 +258,24 @@
 ENDFOREACH ()
 
 # Create JavaScript C++ code given an IDL input
+FOREACH (_idl ${WebCore_IDL_FILES})
+    SET(IDL_FILES_LIST "${IDL_FILES_LIST}${WEBCORE_DIR}/${_idl}\n")
+ENDFOREACH ()
+FILE(WRITE ${IDL_FILES_TMP} ${IDL_FILES_LIST})
+
+ADD_CUSTOM_COMMAND(
+    OUTPUT ${SUPPLEMENTAL_DEPENDENCY_FILE}
+    DEPENDS ${WEBCORE_DIR}/bindings/scripts/resolve-supplemental.pl ${SCRIPTS_RESOLVE_SUPPLEMENTAL} ${WebCore_IDL_FILES}
+    COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${WEBCORE_DIR}/bindings/scripts/resolve-supplemental.pl --defines "${FEATURE_DEFINES_JAVASCRIPT}" --idlFilesList ${IDL_FILES_TMP} --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" --supplementalDependencyFile ${SUPPLEMENTAL_DEPENDENCY_FILE}
+    VERBATIM)
+
 FOREACH (_file ${WebCore_IDL_FILES})
     GET_FILENAME_COMPONENT (_name ${_file} NAME_WE)
     ADD_CUSTOM_COMMAND(
         OUTPUT  ${DERIVED_SOURCES_WEBCORE_DIR}/JS${_name}.cpp ${DERIVED_SOURCES_WEBCORE_DIR}/JS${_name}.h
         MAIN_DEPENDENCY ${_file}
-        DEPENDS ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl ${SCRIPTS_BINDINGS} ${WEBCORE_DIR}/bindings/scripts/CodeGeneratorJS.pm ${_file}
-        COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl --defines "${FEATURE_DEFINES_JAVASCRIPT}" --generator JS ${IDL_INCLUDES} --outputDir "${DERIVED_SOURCES_WEBCORE_DIR}" --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" ${WEBCORE_DIR}/${_file}
+        DEPENDS ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl ${SCRIPTS_BINDINGS} ${WEBCORE_DIR}/bindings/scripts/CodeGeneratorJS.pm ${SUPPLEMENTAL_DEPENDENCY_FILE}
+        COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl --defines "${FEATURE_DEFINES_JAVASCRIPT}" --generator JS ${IDL_INCLUDES} --outputDir "${DERIVED_SOURCES_WEBCORE_DIR}" --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" --supplementalDependencyFile ${SUPPLEMENTAL_DEPENDENCY_FILE} ${WEBCORE_DIR}/${_file}
         VERBATIM)
     LIST(APPEND WebCore_SOURCES ${DERIVED_SOURCES_WEBCORE_DIR}/JS${_name}.cpp)
 ENDFOREACH ()
diff --git a/Source/WebCore/UseV8.cmake b/Source/WebCore/UseV8.cmake
index d80f63f..3d2f44d 100755
--- a/Source/WebCore/UseV8.cmake
+++ b/Source/WebCore/UseV8.cmake
@@ -246,13 +246,24 @@
 LIST(APPEND WebCore_SOURCES ${DERIVED_SOURCES_WEBCORE_DIR}/V8ArrayBufferViewCustomScript.h)
 
 # Create JavaScript C++ code given an IDL input
+FOREACH (_idl ${WebCore_IDL_FILES})
+    SET(IDL_FILES_LIST "${IDL_FILES_LIST}${WEBCORE_DIR}/${_idl}\n")
+ENDFOREACH ()
+FILE(WRITE ${IDL_FILES_TMP} ${IDL_FILES_LIST})
+
+ADD_CUSTOM_COMMAND(
+    OUTPUT ${SUPPLEMENTAL_DEPENDENCY_FILE}
+    DEPENDS ${WEBCORE_DIR}/bindings/scripts/resolve-supplemental.pl ${SCRIPTS_RESOLVE_SUPPLEMENTAL} ${WebCore_IDL_FILES}
+    COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${WEBCORE_DIR}/bindings/scripts/resolve-supplemental.pl --defines "${FEATURE_DEFINES_JAVASCRIPT}" --idlFilesList ${IDL_FILES_TMP} --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" --supplementalDependencyFile ${SUPPLEMENTAL_DEPENDENCY_FILE}
+    VERBATIM)
+
 FOREACH (_file ${WebCore_IDL_FILES})
     GET_FILENAME_COMPONENT (_name ${_file} NAME_WE)
     ADD_CUSTOM_COMMAND(
         OUTPUT  ${DERIVED_SOURCES_WEBCORE_DIR}/V8${_name}.cpp ${DERIVED_SOURCES_WEBCORE_DIR}/V8${_name}.h
         MAIN_DEPENDENCY ${_file}
-        DEPENDS ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl ${SCRIPTS_BINDINGS} ${WEBCORE_DIR}/bindings/scripts/CodeGeneratorV8.pm ${_file}
-        COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl --defines "${FEATURE_DEFINES_JAVASCRIPT}" --generator V8 ${IDL_INCLUDES} --outputDir "${DERIVED_SOURCES_WEBCORE_DIR}" --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" ${WEBCORE_DIR}/${_file}
+        DEPENDS ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl ${SCRIPTS_BINDINGS} ${WEBCORE_DIR}/bindings/scripts/CodeGeneratorV8.pm ${SUPPLEMENTAL_DEPENDENCY_FILE}
+        COMMAND ${PERL_EXECUTABLE} -I${WEBCORE_DIR}/bindings/scripts ${WEBCORE_DIR}/bindings/scripts/generate-bindings.pl --defines "${FEATURE_DEFINES_JAVASCRIPT}" --generator V8 ${IDL_INCLUDES} --outputDir "${DERIVED_SOURCES_WEBCORE_DIR}" --preprocessor "${CODE_GENERATOR_PREPROCESSOR}" --supplementalDependencyFile ${SUPPLEMENTAL_DEPENDENCY_FILE} ${WEBCORE_DIR}/${_file}
         VERBATIM)
     LIST(APPEND WebCore_SOURCES ${DERIVED_SOURCES_WEBCORE_DIR}/V8${_name}.cpp)
 ENDFOREACH ()