blob: 0a4f7f5679c0ecf206aabede04f8bb7d570457e7 [file] [log] [blame]
#!/usr/bin/python2.4
#
# Copyright 2009-2010 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.
# ========================================================================
Import('env')
import binascii
import md5
from enterprise.installer import build_enterprise_installer
def BuildMSI(version, namespace, exe_name, wxs_template, msi_base_name,
is_enterprise=False, prefix=''):
if is_enterprise:
msi_base_name = 'enterprise_' + msi_base_name
msi_base_name = prefix + msi_base_name
# Have to use 'copy' here because we are renaming the file, and it is being
# renamed to match the final msi name to avoid collisions in the wixobj files.
copy_target = env.Command(
target=msi_base_name + '.wxs',
source=wxs_template,
action='@copy /y $SOURCE $TARGET',
)
PRODUCT_GUID = build_enterprise_installer.GenerateNameBasedGUID(
namespace,
'Product ' + version
)
COMPONENT_GUID = build_enterprise_installer.GenerateNameBasedGUID(
namespace,
'Component ' + version
)
COMPONENT_GUID_REGISTRY = build_enterprise_installer.GenerateNameBasedGUID(
namespace,
'Component Registry ' + version
)
COMPONENT_GUID_NOTIFY_SUCCESS = (
build_enterprise_installer.GenerateNameBasedGUID(
namespace,
'Component Notify Success ' + version
))
COMPONENT_GUID_REGISTER_LAUNCH = (
build_enterprise_installer.GenerateNameBasedGUID(
namespace,
'Component Register Launch Command ' + version
))
COMPONENT_GUID_NOTIFY_FAILED = (
build_enterprise_installer.GenerateNameBasedGUID(
namespace,
'Component Notify Failed ' + version
))
COMPONENT_GUID_PROPERTY_BAR = (
build_enterprise_installer.GenerateNameBasedGUID(
namespace,
'Component Property Bar ' + version
))
wix_env = env.Clone()
wix_env.Append(
WIXLIGHTFLAGS = [
# Add a supress for:
# warning LGHT1076 : ICE91: The file will be installed to the per user
# directory that doesn't vary based on ALLUSERS value. This file won't
# be copied to each user's profile even if a per machine installation
# is desired.
# This warning is generated by light when we produce a user only
# installer, and can be ignored as this is a user only installer.
'-sw1076'
],
WIXCANDLEFLAGS = [
'-dFooExePath=' + wix_env.File(exe_name).abspath,
'-dFooVersion=' + version,
'-dFooProductGuid=' + PRODUCT_GUID,
'-dFooComponentGuid=' + COMPONENT_GUID,
'-dFooComponentGuidRegistry=' + COMPONENT_GUID_REGISTRY,
'-dFooComponentGuidNotifySuccess=' + COMPONENT_GUID_NOTIFY_SUCCESS,
'-dFooComponentRegisterLaunchCommand=' +
COMPONENT_GUID_REGISTER_LAUNCH,
'-dFooComponentGuidNotifyFailed=' + COMPONENT_GUID_NOTIFY_FAILED,
'-dFooComponentGuidPropertyBar=' + COMPONENT_GUID_PROPERTY_BAR,
],
)
wix_inputs = copy_target
# Force a rebuild when the exe file changes.
additional_dependencies = [exe_name]
if is_enterprise:
output_dir = '$TARGET_ROOT/Test_Installers'
wix_env['WIXCANDLEFLAGS'] += ['-dIsEnterprise=1']
# The metainstaller change does not get passed through even though the
# .wixobj file is rebuilt because the hash of the .wixobj does not change.
metainstaller_path = '$STAGING_DIR/%sGoogleUpdateSetup.exe' % (prefix)
google_update_wixobj = build_enterprise_installer.BuildGoogleUpdateFragment(
env,
metainstaller_path,
'Test Foo',
version,
'{D6B08267-B440-4c85-9F79-E195E80D9937}',
'&ap=enterprise',
msi_base_name,
('$MAIN_DIR/enterprise/installer/'
'google_update_installer_fragment.wxs.xml'),
is_using_google_update_1_2_171_or_later=True
)
wix_inputs += [google_update_wixobj]
additional_dependencies += [metainstaller_path]
else:
output_dir = '$TESTS_DIR'
wix_env['WIXCANDLEFLAGS'] += ['-dIsEnterprise=0']
unsigned_msi = wix_env.WiX('unsigned_%s.msi' % msi_base_name, wix_inputs)
wix_env.Depends(unsigned_msi, additional_dependencies)
signed_output = env.SignedBinary(
target=msi_base_name + '.msi',
source=unsigned_msi,
)
env.Replicate(output_dir, signed_output)
_GUID_NAMESPACE = binascii.a2b_hex('BE19B3E4502845af8B3E67A99FCDCFB1')
_USER_GUID_NAMESPACE = binascii.a2b_hex('2B599C061F7C4eed9D686616EEBDDFDB')
# test_foo.wxs.xml is so named because SCons tries to apply WiX building
# rules to any input file with the .wxs suffix even in a custom command.
_WXS_TEMPLATE_NAME = 'test_foo.wxs.xml'
_USER_WXS_TEMPLATE_NAME = 'user_app.wxs.xml'
for (major, minor, build, patch) in [(1,0,101,0), (1,0,102,0)]:
version = '%d.%d.%d.%d' % (major, minor, build, patch)
msi_base_name = 'test_foo_v' + version
ver_env = env.Clone()
ver_env.Append(
LIBS = [
('libcmt.lib', 'libcmtd.lib')[env.Bit('debug')],
('libcpmt.lib', 'libcpmtd.lib')[env.Bit('debug')],
'version.lib',
],
RCFLAGS = [
'-DVERSION_STRING=%s' % version,
'-DMAJOR=%s' % major,
'-DMINOR=%s' % minor,
'-DBUILD=%s' % build,
'-DPATCH=%s' % patch
],
)
ver_env['OBJPREFIX'] = '%s%s/' % (ver_env['OBJPREFIX'], version)
base_name = 'test_foo_v%s' % version.replace('.', '_')
signed_target_name = base_name + '.exe'
target_name = base_name + '_unsigned'
unsigned_exe = ver_env.ComponentTestProgram(
prog_name=target_name,
source=[
'test_foo.cc',
ver_env.RES('test_foo_v%s.res' % version, 'test_foo.rc'),
],
COMPONENT_TEST_RUNNABLE=False
)
signed_output = ver_env.SignedBinary(
target=signed_target_name,
source=unsigned_exe,
)
ver_env.Replicate('$TESTS_DIR', signed_output)
signed_exe = signed_output[0]
BuildMSI(version, _GUID_NAMESPACE, signed_exe, _WXS_TEMPLATE_NAME,
msi_base_name)
# Build the enterprise installer for each version of Omaha.
first = True
for _ in env['product_version']:
if first:
first = False
prefix = ''
else:
prefix = 'TEST_'
BuildMSI(version, _GUID_NAMESPACE, signed_exe, _WXS_TEMPLATE_NAME,
msi_base_name, is_enterprise=True, prefix=prefix)
BuildMSI(version, _USER_GUID_NAMESPACE, signed_exe, _USER_WXS_TEMPLATE_NAME,
'user_app_v' + version)
bar_env = env.Clone()
bar_env.Append(
LIBS = [
('libcmt.lib', 'libcmtd.lib')[env.Bit('debug')],
('libcpmt.lib', 'libcpmtd.lib')[env.Bit('debug')],
],
)
bar_env.ComponentTestProgram(prog_name='test_bar',
source='test_bar.cc',
COMPONENT_TEST_RUNNABLE=False)
""" This is commented out because it step_test is currently unused,
and may be removed. Remove this if/when step_test is removed.
omaha_system_env = env.Clone()
omaha_system_env.Append(
CPPDEFINES = [
'UNICODE',
'_UNICODE'
],
LIBS = [
'$LIB_PATH/common.lib',
('atls.lib', 'atlsd.lib')[env.Bit('debug')],
('libcmt.lib', 'libcmtd.lib')[env.Bit('debug')],
('libcpmt.lib', 'libcpmtd.lib')[env.Bit('debug')],
],
)
omaha_system_env.FilterOut(LINKFLAGS = ['/SUBSYSTEM:WINDOWS'])
omaha_system_env['LINKFLAGS'] += ['/SUBSYSTEM:CONSOLE']
omaha_system_env.ComponentTestProgram([
'omaha_system_test.cc',
'step_test.cc',
],
COMPONENT_TEST_RUNNABLE=False
)
"""