• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
29import os, sys
30from xml.dom import minidom
31
32scriptDir = os.path.abspath(sys.path[0])
33wkroot = os.path.abspath(os.path.join(scriptDir, "../.."))
34
35def 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
66def 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
90sources = getWebCoreFilesDict()
91generateWebCoreSourcesGTKAndQT(sources)
92
93# Coming soon - MSVC and hopefully XCode support!
94