WebKitTools/Scripts/update-sources-list.py
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 #!/usr/bin/env python
       
     2 
       
     3 # Copyright (C) 2007 Kevin Ollivier  All rights reserved.
       
     4 #
       
     5 # Redistribution and use in source and binary forms, with or without
       
     6 # modification, are permitted provided that the following conditions
       
     7 # are met:
       
     8 # 1. Redistributions of source code must retain the above copyright
       
     9 #    notice, this list of conditions and the following disclaimer.
       
    10 # 2. Redistributions in binary form must reproduce the above copyright
       
    11 #    notice, this list of conditions and the following disclaimer in the
       
    12 #    documentation and/or other materials provided with the distribution.
       
    13 #
       
    14 # THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
       
    15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
       
    16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       
    17 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
       
    18 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
       
    19 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       
    20 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
       
    21 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
       
    22 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    23 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
       
    24 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    25 #
       
    26 # Make sure any port-independent files added to the Bakefile are
       
    27 # added to GTK, QT, etc. so that file updates can happen in one place.
       
    28 
       
    29 import os, sys
       
    30 from xml.dom import minidom
       
    31 
       
    32 scriptDir = os.path.abspath(sys.path[0])
       
    33 wkroot = os.path.abspath(os.path.join(scriptDir, "../.."))
       
    34 
       
    35 def getWebCoreFilesDict():
       
    36     """
       
    37     This method parses the WebCoreSources.bkl file, which has a list of all sources not specific
       
    38     to any port, and returns the result as a dictionary with items of the form
       
    39     (groupName, groupFiles). 
       
    40     """
       
    41     sources = {}
       
    42     sources_prefix = "WEBCORE_"
       
    43     filepath = os.path.join(wkroot, "WebCore/WebCoreSources.bkl")
       
    44     assert(os.path.exists(filepath))
       
    45     
       
    46     doc = minidom.parse(filepath)
       
    47     for sourceGroup in doc.getElementsByTagName("set"):
       
    48         groupName = ""
       
    49         if sourceGroup.attributes.has_key("var"):
       
    50             groupName = sourceGroup.attributes["var"].value
       
    51             groupName = groupName.replace(sources_prefix, "")
       
    52             
       
    53         sourcesList = []
       
    54         for node in sourceGroup.childNodes:
       
    55             if node.nodeType == node.TEXT_NODE:
       
    56                 sourcesText = node.nodeValue.strip()
       
    57                 sourcesList = sourcesText.split("\n")
       
    58                 
       
    59         assert(groupName != "")
       
    60         assert(sourcesList != [])
       
    61         
       
    62         sources[groupName] = sourcesList
       
    63         
       
    64     return sources
       
    65 
       
    66 def generateWebCoreSourcesGTKAndQT(sources):
       
    67     """
       
    68     Convert the dictionary obtained from getWebCoreFilesDict() into a Unix makefile syntax,
       
    69     which IIUC is suitable for both GTK and QT build systems. To take advantage of this,
       
    70     QT and GTK would have to include the file "WebCore/sources.inc" into their makefiles.
       
    71     """
       
    72     makefileString = ""
       
    73     
       
    74     for key in sources.keys():
       
    75         makefileString += key + "+="
       
    76         for source in sources[key]:
       
    77             makefileString += " \\\n\t\t" + source.strip()
       
    78             
       
    79         makefileString += "\n\n"
       
    80     
       
    81     makefileString += "BASE_SOURCES +="
       
    82     for key in sources.keys():
       
    83         makefileString += " \\\n\t\t" + key
       
    84     
       
    85     outfile = os.path.join(wkroot, "WebCore/sources.inc")
       
    86     sourcefile = open(outfile, "w")
       
    87     sourcefile.write(makefileString)
       
    88     sourcefile.close()
       
    89     
       
    90 sources = getWebCoreFilesDict()
       
    91 generateWebCoreSourcesGTKAndQT(sources)
       
    92 
       
    93 # Coming soon - MSVC and hopefully XCode support!