#!/usr/bin/env python # Copyright (c) 2012 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. """Run 'candle' and 'light' to transform .wxs to .msi.""" from optparse import OptionParser import os import subprocess import sys def run(command, filter=None): popen = subprocess.Popen( command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) out, _ = popen.communicate() for line in out.splitlines(): if filter and line.strip() != filter: print line return popen.returncode def main(): parser = OptionParser() parser.add_option('--wix_path', dest='wix_path') parser.add_option('--version', dest='version') parser.add_option('--product_dir', dest='product_dir') parser.add_option('--intermediate_dir', dest='intermediate_dir') parser.add_option('--sas_dll_path', dest='sas_dll_path') parser.add_option('-d', dest='define_list', action='append') parser.add_option('--input', dest='input') parser.add_option('--output', dest='output') options, args = parser.parse_args() if args: parser.error("no positional arguments expected") parameters = dict(options.__dict__) parameters['basename'] = os.path.splitext(os.path.basename(options.input))[0] parameters['defines'] = '-d' + ' -d'.join(parameters['define_list']) common = ( '-nologo ' '-ext %(wix_path)s\\WixFirewallExtension.dll ' '-ext %(wix_path)s\\WixUIExtension.dll ' '-ext %(wix_path)s\\WixUtilExtension.dll ' '-dVersion=%(version)s ' '-dFileSource=%(product_dir)s ' '-dIconPath=resources/chromoting.ico ' '-dSasDllPath=%(sas_dll_path)s/sas.dll ' '%(defines)s ' ) candle_template = ('%(wix_path)s\\candle ' + common + '-out %(intermediate_dir)s/%(basename)s.wixobj ' + '%(input)s ') rc = run(candle_template % parameters, os.path.basename(parameters['input'])) if rc: return rc light_template = ('%(wix_path)s\\light ' + common + '-cultures:en-us ' + '-sw1076 ' + '-out %(output)s ' + '%(intermediate_dir)s/%(basename)s.wixobj ') rc = run(light_template % parameters) if rc: return rc return 0 if __name__ == "__main__": sys.exit(main())