diff options
author | robertshield@google.com <robertshield@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-17 20:30:06 +0000 |
---|---|---|
committer | robertshield@google.com <robertshield@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-17 20:30:06 +0000 |
commit | e06b745eb745c7e3bd177f76869c04dfc1efaa94 (patch) | |
tree | 67873f2afcd893c058414180a06df5929072d2a8 /chrome/tools | |
parent | 4a9717e2030aadf15cb62275ed0f4ff1a37e869f (diff) | |
download | chromium_src-e06b745eb745c7e3bd177f76869c04dfc1efaa94.zip chromium_src-e06b745eb745c7e3bd177f76869c04dfc1efaa94.tar.gz chromium_src-e06b745eb745c7e3bd177f76869c04dfc1efaa94.tar.bz2 |
Second stab at applying http://codereview.chromium.org/43138/show.
Removing the (not really needed) dependency on chrome\VERSION which works on the try server but breaks on buildbot.
Review URL: http://codereview.chromium.org/42289
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11909 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/tools')
-rw-r--r-- | chrome/tools/build/win/scan_server_dlls.py | 141 | ||||
-rw-r--r-- | chrome/tools/build/win/server.rules | 21 |
2 files changed, 162 insertions, 0 deletions
diff --git a/chrome/tools/build/win/scan_server_dlls.py b/chrome/tools/build/win/scan_server_dlls.py new file mode 100644 index 0000000..084728d --- /dev/null +++ b/chrome/tools/build/win/scan_server_dlls.py @@ -0,0 +1,141 @@ +#!/usr/bin/python +# Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Script used to scan for server DLLs at build time and build a header + included by setup.exe. This header contains an array of the names of + the DLLs that need registering at install time. + +""" + +import ConfigParser +import glob +import optparse +import os +import sys + +CHROME_DIR = "Chrome-bin" +SERVERS_DIR = "servers" +GENERATED_DLL_INCLUDE_FILE_NAME = "registered_dlls.h" +GENERATED_DLL_INCLUDE_FILE_CONTENTS = """ +// This file is automatically generated by scan_server_dlls.py. +// It contains the list of COM server dlls that need registering at +// install time. +#include "base/basictypes.h" + +namespace { +const wchar_t* kDllsToRegister[] = { %s }; +const int kNumDllsToRegister = %d; +} +""" + + +def Readconfig(output_dir, input_file): + """Reads config information from input file after setting default value of + global variabes. + """ + variables = {} + variables['ChromeDir'] = CHROME_DIR + # Use a bogus version number, we don't really care what it is, we just + # want to find the files that would get picked up from chrome.release, + # and don't care where the installer archive task ends up putting them. + variables['VersionDir'] = os.path.join(variables['ChromeDir'], + '0.0.0.0') + config = ConfigParser.SafeConfigParser(variables) + + print "Reading input_file: " + input_file + + config.read(input_file) + return config + + +def CreateRegisteredDllIncludeFile(registered_dll_list, header_output_dir): + """ Outputs the header file included by the setup project that + contains the names of the DLLs to be registered at installation + time. + """ + output_file = os.path.join(header_output_dir, GENERATED_DLL_INCLUDE_FILE_NAME) + + dll_array_string = "" + for dll in registered_dll_list: + dll.replace("\\", "\\\\") + if dll_array_string: + dll_array_string += ', ' + dll_array_string += "L\"%s\"" % dll + + f = open(output_file, 'w') + try: + if len(registered_dll_list) == 0: + f.write(GENERATED_DLL_INCLUDE_FILE_CONTENTS % ("L\"\"", 0)) + else: + f.write(GENERATED_DLL_INCLUDE_FILE_CONTENTS % (dll_array_string, + len(registered_dll_list))) + finally: + f.close() + + +def ScanServerDlls(config, distribution, output_dir): + """Scans for DLLs in the specified section of config that are in the + subdirectory of output_dir named SERVERS_DIR. Returns a list of only the + filename components of the paths to all matching DLLs. + """ + + registered_dll_list = [] + ScanDllsInSection(config, 'GENERAL', output_dir, registered_dll_list) + if distribution: + if len(distribution) > 1 and distribution[0] == '_': + distribution = distribution[1:] + ScanDllsInSection(config, distribution.upper(), output_dir, + registered_dll_list) + + return registered_dll_list + + +def ScanDllsInSection(config, section, output_dir, registered_dll_list): + """Scans for DLLs in the specified section of config that are in the + subdirectory of output_dir named SERVERS_DIR. Appends the file name of all + matching dlls to registered_dll_list. + """ + for option in config.options(section): + if option.endswith('dir'): + continue + + dst = config.get(section, option) + (x, src_folder) = os.path.split(dst) + + for file in glob.glob(os.path.join(output_dir, option)): + if option.startswith(SERVERS_DIR): + (x, file_name) = os.path.split(file) + print "Found server DLL file: " + file_name + registered_dll_list.append(file_name) + + +def RunSystemCommand(cmd): + if (os.system(cmd) != 0): + raise "Error while running cmd: %s" % cmd + + +def main(options): + """Main method that reads input file, scans <build_output>\servers for + matches to files described in the input file. A header file for the + setup project is then generated. + """ + config = Readconfig(options.output_dir, options.input_file) + registered_dll_list = ScanServerDlls(config, options.distribution, + options.output_dir) + CreateRegisteredDllIncludeFile(registered_dll_list, + options.header_output_dir) + + +if '__main__' == __name__: + option_parser = optparse.OptionParser() + option_parser.add_option('-o', '--output_dir', help='Build Output directory') + option_parser.add_option('-x', '--header_output_dir', + help='Location where the generated header file will be placed.') + option_parser.add_option('-i', '--input_file', help='Input file') + option_parser.add_option('-d', '--distribution', + help='Name of Chromium Distribution. Optional.') + + options, args = option_parser.parse_args() + sys.exit(main(options)) diff --git a/chrome/tools/build/win/server.rules b/chrome/tools/build/win/server.rules new file mode 100644 index 0000000..b9ba301 --- /dev/null +++ b/chrome/tools/build/win/server.rules @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+ Name="DLL Registration Rules"
+ Version="8.00"
+ >
+ <Rules>
+ <CustomBuildRule
+ Name="Scan Server DLLs"
+ DisplayName="Scan Server DLLs"
+ CommandLine="$(SolutionDir)..\third_party\python_24\python.exe $(SolutionDir)tools\build\win\scan_server_dlls.py --output_dir="$(OutDir)" --input_file="$(InputPath)" --header_output_dir="$(IntDir)" --distribution=$(CHROMIUM_BUILD)"
+ Outputs="$(OutDir)/registered_dlls.h;"
+ AdditionalDependencies="$(SolutionDir)\tools\build\win\scan_server_dlls.py;$(OutDir)\chrome.exe;$(OutDir)\crash_reporter.exe;$(OutDir)\chrome.dll;$(OutDir)\locales\en-US.dll;$(OutDir)\icudt38.dll"
+ FileExtensions="*.release"
+ ExecutionDescription="Scanning for COM Server DLLs..."
+ ShowOnlyRuleProperties="false"
+ >
+ <Properties>
+ </Properties>
+ </CustomBuildRule>
+ </Rules>
+</VisualStudioToolFile>
|