| Index: installers/tag_meta_installers.py
|
| diff --git a/installers/tag_meta_installers.py b/installers/tag_meta_installers.py
|
| deleted file mode 100644
|
| index d85d5b0f13808c47a9577c3bb9afc0cd1e2abd89..0000000000000000000000000000000000000000
|
| --- a/installers/tag_meta_installers.py
|
| +++ /dev/null
|
| @@ -1,285 +0,0 @@
|
| -#!/usr/bin/python2.4
|
| -#
|
| -# Copyright 2005-2009 Google Inc.
|
| -#
|
| -# Licensed under the Apache License, Version 2.0 (the "License");
|
| -# you may not use this file except in compliance with the License.
|
| -# You may obtain a copy of the License at
|
| -#
|
| -# http://www.apache.org/licenses/LICENSE-2.0
|
| -#
|
| -# Unless required by applicable law or agreed to in writing, software
|
| -# distributed under the License is distributed on an "AS IS" BASIS,
|
| -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -# See the License for the specific language governing permissions and
|
| -# limitations under the License.
|
| -# ========================================================================
|
| -
|
| -"""Creates application specific meta-installers.
|
| -
|
| -Run this script with the directory that contains the build files,
|
| -GoogleupdateSetup_<lang>.exe and pass it the file that contains the application
|
| -information to be stamped inside the binary.
|
| -
|
| -"""
|
| -
|
| -import codecs
|
| -import os
|
| -import sys
|
| -import re
|
| -import urllib
|
| -
|
| -class Bundle:
|
| - """Represents the information for a bundle"""
|
| - def __init__(self, exe_name, admin, language,
|
| - browser_type, stats, installers_txt_filename, applications):
|
| - self.applications = applications
|
| - self.name = exe_name
|
| - self.needs_admin = admin
|
| - self.lang = language
|
| - self.browser = browser_type
|
| - self.usage_stats = stats
|
| - self.installers_txt_filename = installers_txt_filename
|
| - self.output_file_name = ""
|
| -
|
| -def UrlEncodeString(name):
|
| - """Converts the name into utf8 encoded and then urlencodes it.
|
| -
|
| - Args:
|
| - name: The string to utf8 convert.
|
| -
|
| - Returns:
|
| - The utf8 converted urlencoded string.
|
| - """
|
| - utf8_str = name.encode('utf8')
|
| - return urllib.quote(utf8_str)
|
| -
|
| -def ReadBundleInstallerFile(installers_txt_filename):
|
| - """Read the installation file and return a list of the values.
|
| - Only reads information from bundle installer files. The filename
|
| - should contain the "bundle" word.
|
| - Args:
|
| - installers_txt_filename: The file which contains application specific
|
| - values, of guid, name, exe_name, needs_admin and
|
| - language.
|
| -
|
| - Returns:
|
| - A dictionary of Bundles key=language, value=[Bundle]
|
| - """
|
| - bundles = {}
|
| - installers_txt_file = codecs.open(installers_txt_filename, 'r', 'utf16')
|
| - for line in installers_txt_file.readlines():
|
| - line = line.strip()
|
| - if len(line) and not line.startswith('#'):
|
| - (exe_name, needs_admin, language, browser, usage, bundle_apps) =\
|
| - eval(line)
|
| - bundle = Bundle(exe_name, needs_admin, language,
|
| - browser, usage,
|
| - installers_txt_filename, bundle_apps)
|
| - if (not bundles.has_key(language)):
|
| - bundles[language] = [bundle]
|
| - else:
|
| - bundles[language] .append(bundle)
|
| - return bundles
|
| -
|
| -def BuildOutputDirectory(output_dir, lang, app):
|
| - """Returns the output directory for the app.
|
| -
|
| - Args:
|
| - app: The application for which to generate the path.
|
| - lang: The language of the applicaiton.
|
| - output_dir: The output directory.
|
| -
|
| - Returns:
|
| - The path of the output file.
|
| - """
|
| - installers_txt_filename = app.installers_txt_filename
|
| -
|
| - end_idx = installers_txt_filename.find('_installers.txt')
|
| - app_dirname = installers_txt_filename[:end_idx]
|
| -
|
| - app_path = os.path.join(output_dir, app_dirname)
|
| - lang_path = os.path.join(app_path, lang)
|
| - return lang_path
|
| -
|
| -
|
| -def SetOutputFileNames(file_name, apps, output_dir):
|
| - """Sets the output file names inside the Application.
|
| -
|
| - Args:
|
| - file_name: The input file name that needs to be stamped. This
|
| - is used for deciding whether to use TEST in the name,
|
| - and the directory. The names of this file is expected
|
| - to be either TEST_GoogleUpdateSetup.exe or
|
| - GoogleUpdateSetup.exe
|
| - apps: Dictionary of applications keyed by language.
|
| - output_dir: The output directory.
|
| -
|
| - Returns:
|
| - All the applications for a particular language.
|
| - """
|
| -
|
| - # Determine the language.
|
| - file = os.path.basename(file_name)
|
| - if file.startswith('TEST_'):
|
| - test = True
|
| - else:
|
| - test = False
|
| -
|
| - for (lang, apps_lang) in apps.iteritems():
|
| - # Get the output filename and set it on the application.
|
| - for app in apps_lang:
|
| - output_path = BuildOutputDirectory(output_dir, lang, app)
|
| - path = os.path.join(output_path, GetOutputFileName(test, app.name, lang))
|
| - app.output_file_name = path
|
| -
|
| -def GetOutputFileName(test, name, lang):
|
| - """Creates the output file name based on the language and the name of the app.
|
| - Args:
|
| - test: Whether the input file name starts with TEST.
|
| - name: The name of the application. I.e. Chrome, GoogleGears.
|
| - lang: The language of the installer.
|
| - Returns:
|
| - The output filename
|
| - """
|
| - if test:
|
| - file_name = 'Tagged_TEST_%sSetup_%s.exe' % (name, lang)
|
| - else:
|
| - file_name = 'Tagged_%sSetup_%s.exe' % (name, lang)
|
| - return file_name
|
| -
|
| -def BuildTagStringForBundle(bundle):
|
| - """Builds the string to be tagged into the binary for a bundle.
|
| - Args:
|
| - bundle: Contains all information about a bundle.
|
| - Returns:
|
| - The string to be tagged into the installer.
|
| - """
|
| - args = '\"'
|
| - first_app = True
|
| - for app in bundle.applications:
|
| - if not first_app:
|
| - args += '&'
|
| - first_app = False
|
| - (guid, name, ap) = app
|
| - display_name = UrlEncodeString(name)
|
| - args += 'appguid=%s&appname=%s&needsadmin=%s' % \
|
| - (guid, display_name, bundle.needs_admin)
|
| - if ap:
|
| - args += '&ap=%s' % ap
|
| -
|
| - if bundle.usage_stats:
|
| - args += '&usagestats=%s' % bundle.usage_stats
|
| - if bundle.browser:
|
| - args += '&browser=%s' % bundle.browser
|
| - if bundle.lang:
|
| - args += '&lang=%s' % bundle.lang
|
| - args += '\"'
|
| - return args
|
| -
|
| -def TagOneFile(file, app, applytag_exe_name):
|
| - """Tags one file with the information contained inside the application.
|
| - Args:
|
| - file: The input file to be stamped.
|
| - app: Contains all the application data.
|
| - applytag_exe_name: The full path of applytag.exe.
|
| - """
|
| - tag_string = BuildTagStringForBundle(app)
|
| -
|
| - output_path = app.output_file_name
|
| - if not os.path.exists(file):
|
| - print 'Could not find file %s required for creating %s' % \
|
| - (file, output_path)
|
| - return False
|
| -
|
| - arguments = [applytag_exe_name,
|
| - file,
|
| - output_path,
|
| - tag_string
|
| - ]
|
| - print 'Building %s with tag %s' % (output_path, tag_string)
|
| - os.spawnv(os.P_WAIT, applytag_exe_name, arguments)
|
| - return True
|
| -
|
| -def GetAllSetupExeInDirectory(dir):
|
| - """Creates a number of application specific binaries for the
|
| - passed in binary.
|
| - Args:
|
| - dir: The input directory.
|
| - Returns:
|
| - A list of files that are match the regex:
|
| - TEST_GoogleUpdateSetup_.*.exe$|^GoogleUpdateSetup_.*.exe$
|
| - """
|
| - ret_files = []
|
| - files = os.listdir(dir)
|
| - for file in files:
|
| - regex = re.compile('^TEST_GoogleUpdateSetup_.*.exe$|'
|
| - '^GoogleUpdateSetup_.*.exe$')
|
| - if not regex.match(file):
|
| - continue
|
| - ret_files.append(file)
|
| - return ret_files
|
| -
|
| -def TagBinary(apps, file, applytag_exe_name):
|
| - """Creates a number of application specific binaries for the
|
| - passed in binary.
|
| - Args:
|
| - apps: Dictionary of key=lang, value=[Application].
|
| - file: The input file to be stamped.
|
| - applytag_exe_name: The full path to applytag_exe_name.
|
| - """
|
| - if not apps:
|
| - return
|
| - for apps_lang in apps:
|
| - for app in apps[apps_lang]:
|
| - TagOneFile(file, app, applytag_exe_name)
|
| -
|
| -def PrintUsage():
|
| - print ''
|
| - print 'Tool to stamp the Guid, Application name, needs admin into the'
|
| - print 'meta-installer.'
|
| - print 'Reads <installer file> which contains the application name,'
|
| - print 'guid, needs_admin and stamps the meta-installer <file> with'
|
| - print 'these values.'
|
| - print 'For an example of the <installer file> take a look at'
|
| - print '#/installers/googlegears_installer.txt'
|
| - print ''
|
| - print 'tag_meta_installers.py <applytag> <input file> <installer file>\
|
| - <output file>'
|
| -
|
| -def main():
|
| - if len(sys.argv) != 5:
|
| - PrintUsage()
|
| - return
|
| -
|
| - apply_tag_exe = sys.argv[1]
|
| - input_file = sys.argv[2]
|
| - file_name = sys.argv[3]
|
| - output_dir = sys.argv[4]
|
| -
|
| - if not os.path.exists(apply_tag_exe):
|
| - print "Could not find applytag.exe"
|
| - PrintUsage()
|
| - return
|
| -
|
| - if not os.path.exists(file_name):
|
| - print "Invalid filename %s" % file_name
|
| - PrintUsage()
|
| - return
|
| -
|
| - if not os.path.exists(input_file):
|
| - print "Invalid directory %s" % input_file
|
| - PrintUsage()
|
| - return
|
| -
|
| - if not os.path.exists(output_dir):
|
| - os.mkdir(output_dir)
|
| -
|
| - # Read in the installers.txt file.
|
| - apps = ReadBundleInstallerFile(file_name)
|
| -
|
| - SetOutputFileNames(input_file, apps, output_dir)
|
| - TagBinary(apps, input_file, apply_tag_exe)
|
| -
|
| -if __name__ == '__main__':
|
| - main()
|
|
|