diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/Bakefiles/update-file-lists.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/osswebengine/Bakefiles/update-file-lists.py Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,180 @@ +#!/usr/bin/python + +# Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# A script to make sure the source file list for the Bakefiles is up-to-date +# with the MSVC project files. + +import sys, os +from xml.dom import minidom + +WebKitRoot = ".." + + +class MSVS8Compiler: + def __init__(self): + self.precomp_headers = True + self.warning_level = "default" + self.defines = [] + self.includes = [] + + def fromXML(self, tool): + if tool.attributes.has_key("AdditionalIncludeDirectories"): + includes_string = tool.attributes["AdditionalIncludeDirectories"].value + includes_string = includes_string.replace(""", '"') + includes_string = includes_string.replace("$", "$(DOLLAR)") + self.includes = includes_string.split(";") + + if tool.attributes.has_key("PreprocessorDefinitions"): + self.defines = tool.attributes["PreprocessorDefinitions"].value.split(";") + +class MSVS8Config: + def __init__(self): + self.target_type="exe" + self.target_name="Release" + self.output_dir = "" + self.build_dir = "" + self.pre_build_step = "" + self.compiler = MSVS8Compiler() + + def fromXML(self, config): + if config.attributes.has_key("Name"): + self.target_name = config.attributes["Name"].value + + config_type = config.attributes["ConfigurationType"].value + if config_type == "1": + self.target_type = "exe" + elif config_type == "2": + self.target_type = "dll" + elif config_type == "4": + self.target_type = "lib" + else: + print "Unknown project type %s. Exiting..." % (config_type) + sys.exit(1) + + tools = config.getElementsByTagName("Tool") + + for tool in tools: + if tool.attributes.has_key("Name") and tool.attributes["Name"].value == "VCPreBuildEventTool" and tool.attributes.has_key("VCPreBuildEventTool"): + self.pre_build_step = tool.attributes["VCPreBuildEventTool"].value + continue + + if tool.attributes.has_key("Name") and tool.attributes["Name"].value == "VCCLCompilerTool": + self.compiler.fromXML(tool) + + def asBkl(self, doc): + target = doc.createElement(self.target_type) + target.setAttribute("id", self.target_name) + + return target + +class MSVS8Filter: + def __init__(self): + self.files = [] + self.name = "" + self.varname = "" + self.prefix = "WEBCORE_" + + def fromXML(self, filter): + if filter.attributes.has_key("Name"): + self.name = filter.attributes["Name"].value + self.varname = self.prefix + "SOURCES_" + self.name.upper() + + for node in filter.childNodes: + if node.nodeName == "File" and node.attributes.has_key("RelativePath"): + filename = node.attributes["RelativePath"].value.replace("$", "$(DOLLAR)") + filename = filename.replace("\\", "/") + filename = "\t\t" + filename.replace("../../", "") + if os.path.splitext(filename)[1] in [".c", ".cpp"]: + self.files.append(filename) + + def asBkl(self, doc): + sources = doc.createElement("set") + if self.name != "": + sources.setAttribute("var", self.varname) + # currently we 'flatten' the MSVC sources hierarchy to a simple list + # so we may end up with duplicates for self.varname when the root + # and subfolders share the same name. For now, just make sure the + # sources are added together as part of the target + sources.setAttribute("append", "1") + + sources_text = "\n" + for afile in self.files: + sources_text += afile + "\n" + + sources.appendChild(doc.createTextNode(sources_text)) + return sources + +class MSVS8Project: + def __init__(self): + self.configs = [] + self.file_list = [] + self.prefix = "WEBCORE_" + + def loadFromXML(self, filename): + doc = minidom.parse(filename) + configs = doc.getElementsByTagName("Configuration") + for config in configs: + config_obj = MSVS8Config() + config_obj.fromXML(config) + self.configs.append(config_obj) + + if filename.find("JavaScriptCore") != -1: + self.prefix = "JSCORE_" + + files = doc.getElementsByTagName("Filter") + for node in files: + files = MSVS8Filter() + files.prefix = self.prefix + files.fromXML(node) + self.file_list.append(files) + + def saveAsBkl(self, filename): + doc = minidom.Document() + makefile = doc.createElement("makefile") + source_tags = [] + for files in self.file_list: + makefile.appendChild(files.asBkl(doc)) + + doc.appendChild(makefile) + + outfile = open(filename, "w") + outfile.write(doc.toprettyxml()) + outfile.close() + +jsdir = os.path.join(WebKitRoot, "JavaScriptCore") +wcdir = os.path.join(WebKitRoot, "WebCore") + +files = { jsdir: os.path.join(jsdir, "JavaScriptCore.vcproj", "JavaScriptCore", "JavaScriptCore.vcproj"), + wcdir: os.path.join(wcdir, "WebCore.vcproj", "WebCore", "WebCore.vcproj") + } + +for adir in files: + project = MSVS8Project() + project.loadFromXML(files[adir]) + outputfile = os.path.join(adir, os.path.splitext(os.path.basename(files[adir]))[0] + "Sources.bkl") + project.saveAsBkl(outputfile)