Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(307)

Side by Side Diff: main.scons

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « installers/tagged_installer.py ('k') | mi_exe_stub/README.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python2.4
2 #
3 # Copyright 2009-2010 Google Inc.
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 # ========================================================================
17
18
19 # This main.scons file is the root description of the build specified in this
20 # directory and those under it. Individual components and the source files
21 # used to build them are described in subsidiary files called 'build.scons'.
22 #
23 # To build this project change the current directory to googleclient/Omaha.
24 # Then run hammer.bat
25 #
26 # A number of command line options can be specified. For a full list, use the
27 # -h and -H command options.
28 #
29 # Some useful options include:
30 # -h : Prints a list of which modules and build variants are available
31 # in this project.
32 # -H : Print SCons specific help. SCons is a build tool which this
33 # project uses in tandem with the Software Construction Toolkit
34 # to build.
35 # -c : Clean the project. I.e. delete all build output.
36 # -j3 : Run up to 3 build steps at once.
37 #
38 # Some useful build targets include:
39 # all_programs : Build all programs generated by this project.
40 # all_libraries : Build all libraries generated by this project.
41 # all_tests : Build all tests generated by this project.
42 # run_all_tests : Build and run all tests generated by this project.
43 #
44 # Some examples:
45 # Build all programs and libraries in debug mode:
46 # hammer
47 # Build and run all tests in debug mode on windows:
48 # hammer MODE=dbg-win run_all_tests
49 # Build arbitrary library in the default mode:
50 # hammer <library name>
51
52 import copy
53 import os
54 import sys
55
56 import omaha_version_utils
57
58 # To switch the build, simply change the value of the msc_ver variable below.
59 # VC2003/VC71 is 1310 but not supported by the current build.
60 # VC2005/VC80 is 1400.
61 # VC2008/VC90 is 1500.
62 _msc_ver = 1400
63
64 _sdk_path = os.environ['OMAHA_VISTASDK_DIR']
65
66 _signtool_path = os.path.join(_sdk_path, 'bin/signtool.exe')
67
68 # Build the "Google Update", the Google-specific version of Omaha.
69 # TODO(omaha): Set based on an environment variable and/or Hammer arg.
70 is_google_update_build = False
71
72 #
73 # Begin vendor-specific constants.
74 #
75 # These values must be changed when customizing open source Omaha.
76 # You may also wish to replace the language-neutral constants in the individual
77 # *generated_resources_*.rc files with localized strings.
78 _FULL_COMPANY_NAME = 'OmahaCompanyName Inc.'
79 _SHORT_COMPANY_NAME = 'OmahaCompanyName'
80 _PRODUCT_NAME = 'Update'
81 _COMPANY_DOMAIN_BASE = 'google'
82 _COMPANY_DOMAIN = _COMPANY_DOMAIN_BASE + '.com'
83 _MAIN_EXE_BASE_NAME = 'GoogleUpdate'
84 # TODO(omaha): Use this throughout the build files where goopdate and
85 # goopdateres are referenced.
86 _MAIN_DLL_BASE_NAME = 'goopdate'
87 # "Google Inc." must not be removed from the copyright string. This literal also
88 # appears as LegalCopyright in the VERSIONINFO section of .rc files.
89 # TODO(omaha): Use this variable in .wxs files, etc.
90 _OMAHA_COPYRIGHT_STRING_ENGLISH = 'Copyright 2007-2010 Google Inc.'
91
92
93 # TODO(omaha): Allow open source Omaha to be built without the Recovery MSI,
94 # which requires an extra certificate file and is unlikely to be used, or
95 # ClickOnce, which requires specifying a certificate hash. Disabling Recovery
96 # by default also means the open source build will work by default without
97 # having to check in SaveArguments.exe to SVN every 100 days.
98 # TODO(omaha3): Allow open source Omaha to be built without support for
99 # Omaha 2's COM APIs.
100
101 # The hash comes from the Thumbprint item in the Details tab of the file
102 # properties for the public key .cer file.
103 # TODO(omaha): Can we automate reading this and/or pass it on the command line?
104 _BUILD_SERVER_CERTIFICATE_HASH = 'cafd39335d6e76f0e26d81296e7cbbfbdf16a720'
105
106 #
107 # End vendor-specific constants.
108 #
109
110
111 # Windows is the only environment we bulid for, so create a specialized base
112 # environment for Windows.
113 win_env = Environment(
114 # For internal builds only, it is a good idea to have set before the
115 # 'component_setup' tool is used even though we add the SDK directories to
116 # the appropriate environment variables manually below.
117 PLATFORM_SDK_DIR = _sdk_path,
118 tools=[
119 'component_setup',
120 'target_platform_windows',
121 # Need to use 'masm' to override the 'as' tool currently used
122 # by default in 'target_platform_windows'
123 'masm',
124 'atlmfc_vc80',
125 'code_signing',
126 'component_targets_msvs',
127 'omaha_builders',
128 ],
129 msc_ver = _msc_ver,
130 build_server_certificate_hash = _BUILD_SERVER_CERTIFICATE_HASH,
131 # Visual Studio 2008 does not ship the sign tool. Use the sign tool from
132 # the Platform SDK. This must come after the 'code_signing' tool is used.
133 # Remove this if http://code.google.com/p/swtoolkit/issues/detail?id=16 is
134 # fixed.
135 SIGNTOOL = '"' + _signtool_path + '"',
136 )
137
138 # Remove this value because it conflicts with a #define
139 # in shlwapi.h in the Vista SDK
140 win_env.FilterOut(CPPDEFINES = ['OS_WINDOWS=OS_WINDOWS'])
141
142 # We pre-generate our own manifests, so make sure hammer does not generate
143 # default ones for us
144 del win_env['MANIFEST_FILE']
145
146 # Hack to work around bug in Hammer (http://b/1585388).
147 # TODO(Omaha): Remove when bug is fixed.
148 if win_env['ENV'].has_key('SYSTEMROOT'):
149 if win_env['ENV'].has_key('SystemRoot'):
150 del win_env['ENV']['SYSTEMROOT']
151 del os.environ['SYSTEMROOT']
152
153 # Work around http://code.google.com/p/swtoolkit/issues/detail?id=10.
154 win_env['COMPONENT_TEST_SUBSYSTEM_WINDOWS'] = 1
155
156 # Declare command line options relating to code signing
157 # authenticode_file and authenticode_password are used by the normal signing
158 # tool and to sign manifests for ClickOnce.
159 # patching_certificate is used to create patchable MSI installers and MSPs.
160 # authenticode_file and authenticode_password are only used if !build_server.
161 # patching_certificate is used in all cases.
162 AddOption(
163 '--authenticode_file',
164 action='store',
165 nargs=1,
166 type='string',
167 default='$MAIN_DIR/data/OmahaTestCert.pfx'
168 )
169
170 default_cert_password = 'test'
171 AddOption(
172 '--authenticode_password',
173 action='store',
174 nargs=1,
175 type='string',
176 default=default_cert_password
177 )
178
179 AddOption(
180 '--patching_certificate',
181 action='store',
182 nargs=1,
183 type='string',
184 default='$MAIN_DIR/data/OmahaTestCert.cer'
185 )
186
187 # Declare option for specifying path to new official build files
188 AddOption(
189 '--official_build_path',
190 action='store',
191 nargs=1,
192 type='string',
193 default=None
194 )
195
196 # Declare option for specifying the set of official app installers to build.
197 # The value describes the name of the directory containing the official
198 # installer manifests and definitions.
199 AddOption(
200 '--official_installer_app',
201 action='store',
202 nargs=1,
203 type='string',
204 default=None
205 )
206
207 AddOption(
208 '--official_installer_file',
209 action='store',
210 nargs=1,
211 type='string',
212 default=None
213 )
214
215 AddOption(
216 '--build_number',
217 action='store',
218 nargs=1,
219 type='string',
220 default=''
221 )
222
223 # Declare various boolean states.
224 DeclareBit('use_precompiled_headers', 'Use precompiled headers in build')
225 DeclareBit('official_installers', 'Building using checked-in binaries')
226 DeclareBit('build_server', 'Running on the build server')
227 DeclareBit('build_two_versions', 'Build second version for self-update testing')
228 DeclareBit('test_certificate', 'Files will be signed with the test certificate')
229 DeclareBit('bin', 'Building from pre-built binaries')
230 DeclareBit('min', 'Building minimal set of projects')
231 DeclareBit('all', 'Building all Projects')
232 DeclareBit('msvs', 'Building Visual Studio solution files')
233 DeclareBit('no-tests', 'Do not build the unit tests')
234
235 # Build official installers if --official_installers is on the command line.
236 win_env.SetBitFromOption('official_installers', False)
237
238 # Build as a build server if --build_server is on the command line.
239 win_env.SetBitFromOption('build_server', False)
240
241 # Build two versions if --build_two_versions is on the command line.
242 win_env.SetBitFromOption('build_two_versions', False)
243
244 # Store new versions of pre-built binaries if --bin is on the command line.
245 win_env.SetBitFromOption('bin', False)
246
247 # Build minimal set of libs if --min is on the command line.
248 win_env.SetBitFromOption('min', False)
249
250 # Build all libs if --all is on the command line.
251 win_env.SetBitFromOption('all', False)
252
253 # Build Visual Studio solution files if --msvs is on the command line.
254 win_env.SetBitFromOption('msvs', False)
255
256 # Do not build the unit tests if the bit is set.
257 win_env.SetBitFromOption('no-tests', False)
258
259 # Build all directories and two versions if this is the build server.
260 if win_env.Bit('build_server'):
261 win_env.SetBits('all')
262 win_env.SetBits('build_two_versions')
263
264 # Make sure 'all' overrides 'min'.
265 if win_env.Bit('all'):
266 win_env.ClearBits('min')
267
268 # Allow use of command-line-specified certificates to sign with, but
269 # only if we're not on the build server.
270 if not win_env.Bit('build_server'):
271 win_env.Replace(
272 CERTIFICATE_PATH=GetOption('authenticode_file'),
273 CERTIFICATE_PASSWORD=GetOption('authenticode_password'),
274 )
275
276 # Store whether we're using the default test cert separately, because
277 # we won't always know what the default password was.
278 if GetOption('authenticode_password') is default_cert_password:
279 win_env.SetBits('test_certificate')
280
281
282 # The precompiled headers are to be used as an optional build speed up
283 # build facility. Individual compilation units in the project must build with
284 # or without precompiled headers. Building without precompiled headers is sort
285 # of meaningless, since all the time we should build with it. However,
286 # eliminating the dependency is desirable from a few reasons:
287 # 1. making sure the files in the project include all the definitions they need
288 # 2. creating different precompile headers if needed.
289 # 3. making sure the precompile headers do not add to the size bloat.
290 # There are two current limitations with the current setup.
291 # First, due to pushing the warning level to W4 and WAll, we rely on the
292 # common precompile.h to properly turn off the warnings inside system and
293 # library code.
294 # Second, to override the ATLASSERT, a file must be included before any of
295 # the atl headers. To do this on a case by case basis is impractical and
296 # error prone.
297 # Therefore, when building with precompile headers off, the code is
298 # building on W3 and it is not taking over the ATL asserts.
299 win_env.SetBitFromOption('use_precompiled_headers', True)
300
301 if win_env.Bit('use_precompiled_headers'):
302 print 'Using precompiled headers.'
303
304
305 #
306 # Set up version info.
307 #
308 omaha_version_info = omaha_version_utils.OmahaVersionInfo('VERSION')
309 omaha_versions_info = [omaha_version_info]
310
311 if win_env.Bit('build_two_versions'):
312 omaha_test_version_info = copy.deepcopy(omaha_version_info)
313 omaha_test_version_info.MakeTestVersion()
314 omaha_versions_info.append(omaha_test_version_info)
315
316 # Print the version(s) being built.
317 print 'Building versions: %s' % ', '.join(
318 [version_info.GetVersionString() for version_info in omaha_versions_info])
319
320 build_number = GetOption('build_number')
321 if build_number:
322 print 'Build number: %s' % build_number
323
324 win_env['omaha_versions_info'] = omaha_versions_info
325
326 if is_google_update_build:
327 win_env.Append(
328 CPPDEFINES = ['GOOGLE_UPDATE_BUILD'],
329 RCFLAGS = ['/DGOOGLE_UPDATE_BUILD=1'],
330 )
331
332 # Make sure python.exe can be located.
333 win_env.AppendENVPath('PATH', os.environ['OMAHA_PYTHON_DIR'])
334
335 win_env.Append(
336 # Add windows specific compiler flags.
337 CCFLAGS = [
338 '/nologo',
339 '/c',
340 '/Zc:forScope',
341 '/D_HAS_EXCEPTIONS=0',
342 '/DCOMPILER_MSVC',
343 '/J',
344 '/DSTL_MSVC',
345 '/GR-',
346 '/D_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES=1',
347 '/D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1',
348 '/D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1',
349 '/WX', # warnings as errors
350
351 #
352 # Disable the following level 4 warnings below.
353 #
354 '/wd4127', # conditional expression is constant
355 '/wd4189', # local variable is initialized but not referenced
356 '/wd4505', # unreferenced local function has been removed
357
358 #
359 # Disable the pedantic warnings below.
360 #
361 '/wd4191', # unsafe conversion from 'type of expression' to
362 # 'type required'
363 '/wd4217', # member template functions cannot be used for
364 # copy-assignment...
365 '/wd4365', # conversion from 'type_1' to 'type_2',
366 # signed/unsigned mismatch
367 '/wd4512', # assignment operator could not be generated
368 '/wd4514', # unreferenced inline function has been removed
369 '/wd4555', # expression has no effect
370 '/wd4619', # #pragma warning : there is no warning number 'number'
371 '/wd4623', # default constructor could not be generated...
372 '/wd4625', # copy constructor could not be generated...
373 '/wd4626', # assignment operator could not be generated...
374 '/wd4668', # not defined as a preprocessor macro, replacing with '0'.
375 '/wd4710', # function not inlined
376 '/wd4711', # function 'function' selected for inline expansion
377 '/wd4738', # storing 32-bit float result in memory...
378 '/wd4820', # bytes padding added after construct 'member_name'
379 ],
380
381 # Where to look for include files.
382 CPPPATH = [
383 '$MAIN_DIR',
384 '$MAIN_DIR/..',
385 '$MAIN_DIR/third_party/chrome',
386 '$MAIN_DIR/third_party/gtest/include',
387 ],
388
389 # Defines for windows environment.
390 CPPDEFINES = [
391 'WIN32', '_WINDOWS',
392 'UNICODE', '_UNICODE',
393 'WIN32_LEAN_AND_MEAN',
394 'STRICT',
395 'SECURITY_WIN32',
396 '_ATL_ALL_WARNINGS',
397 '_ATL_CSTRING_EXPLICIT_CONSTRUCTORS',
398 '_ATL_CSTRING_NO_CRT',
399 '_ATL_NO_ACLAPI',
400 '_ATL_NO_DEFAULT_LIBS',
401 '_ATL_NO_EXCEPTIONS',
402 '_ATL_NO_GLOBAL_SOCKET_STARTUP',
403 '_ATL_NO_PERF_SUPPORT',
404 '_ATL_NO_TRACK_HEAP',
405 '_ATL_NO_UUIDOF',
406 '_ATL_STATIC_REGISTRY',
407 '_CRT_RAND_S', # rand_s support available in Windows XP only.
408 '_WTL_NO_CSTRING', # WTL uses ATL CString instead.
409
410 # '_ATL_NO_CONNECTION_POINTS',
411 # '_ATL_NO_DOCHOSTUIHANDLER',
412 # '_ATL_NO_HOSTING',
413
414 # Set these C_DEFINES when APPVER=5.0
415 # (see win32.mak in Platform SDK)
416 # Target Windows XP and IE 6.0 and above.
417 'WINVER=0x0501',
418 '_WIN32_WINNT=0x0501',
419 '_WIN32_IE=0x0600',
420 '_RICHEDIT_VER=0x0010',
421
422 # don't define min and max in windef.h
423 'NOMINMAX',
424
425 # Logging is enabled in all modes for diagnostics purposes.
426 'LOGGING',
427
428 'FULL_COMPANY_NAME_ANSI=\\"%s\\"' % _FULL_COMPANY_NAME,
429 'SHORT_COMPANY_NAME_ANSI=\\"%s\\"' % _SHORT_COMPANY_NAME,
430 'PRODUCT_NAME_ANSI=\\"%s\\"' % _PRODUCT_NAME,
431 'COMPANY_DOMAIN_BASE_ANSI=\\"%s\\"' % _COMPANY_DOMAIN_BASE,
432 'COMPANY_DOMAIN_ANSI=\\"%s\\"' % _COMPANY_DOMAIN,
433 'OMAHA_APP_NAME_ANSI=\\"%s %s\\"' % (
434 _SHORT_COMPANY_NAME, _PRODUCT_NAME),
435 'MAIN_EXE_BASE_NAME_ANSI=\\"%s\\"' % _MAIN_EXE_BASE_NAME,
436 'MAIN_DLL_BASE_NAME_ANSI=\\"%s\\"' % _MAIN_DLL_BASE_NAME,
437 'OFFICIAL_BUILD=%d' % win_env.Bit('build_server'),
438 'TEST_CERTIFICATE=%d' % win_env.Bit('test_certificate'),
439 'ONECLICK_PLUGIN_NAME=_T(\\"%s\\")' % (
440 omaha_version_utils.GetONECLICK_PLUGIN_NAME()),
441 'ONECLICK_PLUGIN_VERSION_ANSI=\\"%d\\"' % (
442 omaha_version_info.oneclick_plugin_version),
443 'ONECLICK_PLUGIN_FILENAME=_T(\\"%s\\")' % (
444 omaha_version_info.oneclick_plugin_filename),
445 'UPDATE_PLUGIN_NAME=_T(\\"%s\\")' % (
446 omaha_version_utils.GetUPDATE_PLUGIN_NAME()),
447 'UPDATE_PLUGIN_VERSION_ANSI=\\"%d\\"' % (
448 omaha_version_info.update_plugin_version),
449 'UPDATE_PLUGIN_FILENAME=_T(\\"%s\\")' % (
450 omaha_version_info.update_plugin_filename),
451 'BHO_NAME=_T(\\"%s\\")' % omaha_version_utils.GetBHO_NAME(),
452 'BHO_FILENAME=_T(\\"%s\\")' % omaha_version_info.bho_filename,
453 'CRASH_HANDLER_NAME=_T(\\"%s\\")' % omaha_version_utils.GetCRASH_HANDLER _NAME(),
454 ],
455
456 # Link in some windows libraries.
457 LIBS = [
458 'advapi32',
459 'comdlg32',
460 'gdi32',
461 'kernel32',
462 'odbc32',
463 'odbccp32',
464 'ole32',
465 'oleaut32',
466 'shell32',
467 'user32',
468 'uuid',
469 'winspool',
470 ],
471
472 # Common linker flags.
473 LINKFLAGS = [
474 '/nologo',
475 '/SUBSYSTEM:WINDOWS',
476 '/MACHINE:X86',
477 '/RELEASE',
478 '/MAP',
479 '/NODEFAULTLIB',
480 '/DYNAMICBASE', # Enable ASLR. See http://goo.gl/k2IE.
481 '/NXCOMPAT', # Enable NX support. See http://goo.gl/k2IE.
482 '/SAFESEH',
483 ],
484
485 # Shared library specific linker flags.
486 SHLINKFLAGS = [
487 '/nologo',
488 '/SUBSYSTEM:WINDOWS',
489 '/MACHINE:x86',
490 ],
491
492 # Resource compiler flags.
493 # Defines in CCFLAGS are automatically included.
494 RCFLAGS = [
495 '/l 1033', # /l == default language ID
496 '/DBUILD_NUMBER=\\"%s\\"' % build_number,
497 '/DOMAHA_COPYRIGHT_STRING_ENGLISH=\\"%s\\"' % (
498 _OMAHA_COPYRIGHT_STRING_ENGLISH),
499 ],
500 )
501
502 # Allow verification of these settings in the build log.
503 if win_env.Bit('build_server'):
504 print 'OFFICIAL_BUILD=1'
505 print 'TEST_CERTIFICATE=%d' % win_env.Bit('test_certificate')
506
507
508 # Add the parent directory of the main omaha directory to the Python path so
509 # that we can import using the format "omaha.subdir.module".
510 sys.path.append(os.path.split(win_env.Dir('$MAIN_DIR').abspath)[0])
511
512 # Make sure Vista SDK in all the important paths earlier in path than VC80.
513 for mid_dir in ['', 'vc']:
514 for env_var, sub_dir in [('PATH', 'bin'),
515 ('INCLUDE', 'include'),
516 ('LIB', 'lib')]:
517 var_path = os.path.join(_sdk_path, mid_dir, sub_dir)
518 if os.path.exists(var_path):
519 win_env.PrependENVPath(env_var, var_path)
520
521 if not win_env.Bit('official_installers'):
522 win_env.Append(CPPPATH = os.environ['OMAHA_WTL_DIR'])
523
524 # Make sure csc.exe can be located.
525 win_env.AppendENVPath('PATH', os.environ['OMAHA_NET_DIR'])
526
527 sys.path.append('tools') # for import proxy_clsid_utils.py
528 import proxy_clsid_utils
529
530 # Generate uniqe proxy CLSIDs for each build.
531 win_env.Execute('python $MAIN_DIR\\tools\\proxy_clsid_utils.py')
532 win_env.Append(
533 CPPDEFINES = [
534 'PROXY_CLSID_IS_MACHINE=%s' % proxy_clsid_utils.GetMachineProxyClsid(),
535 'PROXY_CLSID_IS_USER=%s' % proxy_clsid_utils.GetUserProxyClsid(),
536 ],
537 )
538
539 # WiX path has to be added before the WiX tool can be called.
540 win_env.AppendENVPath('PATH', os.environ['OMAHA_WIX_DIR'])
541
542 win_env.Tool('wix')
543
544
545 _base_dirs = [
546 '.',
547 'base',
548 'clickonce',
549 'client',
550 'common',
551 'core',
552 'google_update',
553 'goopdate',
554 'net',
555 'service',
556 'setup',
557 'statsreport',
558 'third_party',
559 'tools',
560 'ui',
561 ]
562
563 _normal_dirs = [
564 'installers',
565 'mi_exe_stub',
566 'plugins',
567 'recovery',
568 ]
569
570 _official_installers_dirs = [
571 'installers',
572 ]
573
574 _extra_dirs = [
575 'enterprise',
576 'standalone',
577 ]
578
579 #
580 # Need to decide which subdirs need to be built.
581 #
582 _dirs_to_build_set = set()
583
584 if win_env.Bit('official_installers'):
585 # Only want to build very specific subdirs.
586 win_env.SetBits('no-tests')
587 _dirs_to_build_set.update(_official_installers_dirs)
588 elif not win_env.Bit('bin'):
589 # All other configs get the base dirs.
590 _dirs_to_build_set.update(_base_dirs)
591
592 if win_env.Bit('min'):
593 print '*** Building Minimal Set of Projects ***'
594 else:
595 _dirs_to_build_set.update(_normal_dirs)
596
597 if win_env.Bit('all'):
598 _dirs_to_build_set.update(_extra_dirs)
599
600 # Build Google application-specific metainstallers.
601 if os.path.exists(win_env.Dir('$MAIN_DIR/internal').abspath):
602 _dirs_to_build_set.update(['internal'])
603
604 _dirs_to_build = list(_dirs_to_build_set)
605
606 # This must be the last directory.
607 if not win_env.Bit('no-tests'):
608 _dirs_to_build.append('testing')
609
610 # Instruct Hammer which dirs to build.
611 win_env['BUILD_SCONSCRIPTS'] = _dirs_to_build
612
613 # These are used by the Omaha Builder OmahaUnittest(). They must be added to the
614 # environment because there must be one per-mode.
615 win_env['all_in_one_unittest_sources'] = []
616 win_env['all_in_one_unittest_libs'] = set()
617
618
619 # Create the leaf debug Windows environment.
620 windows_debug_env = win_env.Clone(
621 # Give this build a name and a description.
622 BUILD_TYPE = 'dbg-win',
623 BUILD_TYPE_DESCRIPTION = 'Windows debug build',
624 )
625
626 # Use common debug settings.
627 windows_debug_env.Tool('target_debug')
628
629 windows_debug_env.Append(
630 CCFLAGS = [
631 '/RTC1',
632 '/Od',
633 '/MTd',
634 ],
635 CPPDEFINES = [
636 '_DEBUG',
637 'DEBUG',
638 ],
639 )
640
641
642 # Create the leaf optimized Windows environment.
643 windows_optimized_env = win_env.Clone(
644 # Give this build a name and a description.
645 BUILD_TYPE = 'opt-win',
646 BUILD_TYPE_DESCRIPTION = 'Windows optimized build',
647 )
648
649 # Use common optimized settings.
650 windows_optimized_env.Tool('target_optimized')
651
652 windows_optimized_env.Append(
653 CCFLAGS = [
654 '/O1', # Optimize for small size.
655 '/GS',
656 '/FD',
657 '/GL', # Global optimization goes with link flag '/LTCG'
658 '/MT',
659 ],
660 CPPDEFINES = [
661 'NDEBUG',
662 'SHIPPING' # code in 'common' needs this
663 ],
664 ARFLAGS = [
665 '/LTCG', # Set LTCG for creation of .lib files too.
666 ],
667 LINKFLAGS = [
668 '/incremental:no',
669 '/opt:ref',
670 '/opt:icf=32',
671 '/opt:nowin98',
672 '/LTCG', # Link-time code generation goes with cl flag '/GL'
673 ],
674 )
675
676
677 # Create an environment for coverage test builds, based on the dbg build.
678 windows_coverage_env = windows_debug_env.Clone(
679 BUILD_TYPE = 'coverage-win',
680 BUILD_TYPE_DESCRIPTION = 'Windows coverage build',
681 )
682 # The Coverage build require additional tools that not everyone has. Therefore,
683 # it should build as part of the all group.
684 windows_coverage_env.FilterOut(BUILD_GROUPS=['all'])
685
686 windows_coverage_env.Tool('code_coverage')
687
688 # Coverage will run omaha_unittest.exe, which requires some extra environment.
689 for env_var in os.environ:
690 if not env_var in windows_coverage_env['ENV']:
691 windows_coverage_env['ENV'][env_var] = os.environ[env_var]
692
693 # Create a target that covers everything in the staging dir, as many of those
694 # files will be required for the unittests to run successfully.
695 # TODO(omaha3): This may not be necessary when using ComponentTestProgram. If it
696 # is, it needs to be changed to use test/ instead of $STAGING_DIR/.
697 windows_coverage_env.Alias(
698 'run_omaha_unittest_for_coverage',
699 '$STAGING_DIR',
700 '$STAGING_DIR/omaha_unittest.exe'
701 )
702 windows_coverage_env.Append(
703 # TODO(omaha): We cannot run our unit tests on the new build system. Ensure
704 # coverage works with the new test execution system.
705 # COVERAGE_TARGETS=['run_omaha_unittest_for_coverage'],
706 COVERAGE_INSTRUMENTATION_PATHS=['$STAGING_DIR'],
707 # This value should only be used in code if absolutely necessary.
708 CPPDEFINES=['COVERAGE_ENABLED'],
709 )
710
711 # TODO(omaha): Prevent the analyzer, which will fail, from running until we can
712 # run unit tests on the build system. See the TODO above.
713 windows_coverage_env['COVERAGE_START_CMD'] = '@echo Not starting coverage'
714 windows_coverage_env['COVERAGE_STOP_CMD'] = '@echo Not ending coverage'
715
716 # Skip signing in coverage build until the last step.
717 windows_coverage_env['SIGNTOOL_ORIG'] = windows_coverage_env['SIGNTOOL']
718 windows_coverage_env['SIGNTOOL'] = '@echo Signing deferred: '
719
720 def SigningCommand(env, filename):
721 # Only do signing if there is a certificate file or certificate name.
722 if env.subst('$CERTIFICATE_PATH') or env.subst('$CERTIFICATE_NAME'):
723 # The command used to do signing (target added on below).
724 signing_cmd = '$SIGNTOOL_ORIG sign '
725 # Add in certificate file if any.
726 if env.subst('$CERTIFICATE_PATH'):
727 signing_cmd += ' /f "$CERTIFICATE_PATH"'
728 # Add certificate password if any.
729 if env.subst('$CERTIFICATE_PASSWORD'):
730 signing_cmd += ' /p "$CERTIFICATE_PASSWORD"'
731 # Add certificate store if any.
732 if env.subst('$CERTIFICATE_NAME'):
733 # The command used to do signing (target added on below).
734 signing_cmd += ' /s "$CERTIFICATE_STORE" /n "$CERTIFICATE_NAME"'
735 # Add timestamp server if any.
736 if env.subst('$TIMESTAMP_SERVER'):
737 signing_cmd += ' /t "$TIMESTAMP_SERVER"'
738 # Add in target name
739 signing_cmd += ' "%s"' % filename
740 return signing_cmd
741 else:
742 return 'echo no signing needed'
743
744 def _IsInstrumentableFileType(file):
745 if (file.endswith('.exe') or
746 file.endswith('.dll')):
747 return True
748 return False
749
750 def _IsSignableFileType(file):
751 if (file.endswith('.exe') or
752 file.endswith('.dll') or
753 file.endswith('.msi') or
754 file.endswith('.msp')):
755 return True
756 return False
757
758 # Sign files during the install stage, since instrumentation invalidates the
759 # signature. Signing within the individual build files was disabled above.
760 # Do not sign intermediate "_unsigned" or "_unittest" files.
761 # Instrumented files must be signed after installing becuase install is what
762 # does the instrumentation. This also seems to be required to avoid
763 # unnecessarily rebuilding non-instrumentable files.
764 def _PostCoverageSigningInstall(dest, source, env):
765 if _IsInstrumentableFileType(dest) or not _IsSignableFileType(dest):
766 # Install the file to staging. Includes instrumentation if appropriate.
767 env['PRECOVERAGE_SIGN_INSTALL'](dest, source, env)
768 else:
769 # For signable but not instrumentable files, copy the files rather than
770 # using PRECOVERAGE_SIGN_INSTALL as this works around unnecessary rebuilds
771 # caused by http://code.google.com/p/swtoolkit/issues/detail?id=13.
772 env.Execute('copy "%s" "%s"' % (source, dest))
773
774 if (_IsSignableFileType(dest) and
775 (-1 == dest.find('_unsigned')) and
776 (-1 == dest.find('_unittest')) and
777 os.path.split(os.path.split(dest)[0])[1] == 'staging'):
778 env.Execute(SigningCommand(env, dest))
779
780 windows_coverage_env['PRECOVERAGE_SIGN_INSTALL'] = (
781 windows_coverage_env['INSTALL'])
782 windows_coverage_env['INSTALL'] = _PostCoverageSigningInstall
783
784
785 # Make debug the default build after any copies of it have been made.
786 windows_debug_env.Append(BUILD_GROUPS = ['default'])
787
788 # ----------------------------------------------------------
789
790 # Build the variants listed above.
791 # This step will call each of the SConscripts (build.scons) listed,
792 # once for each variant currently being built.
793 BuildEnvironments(
794 [ windows_debug_env,
795 windows_optimized_env,
796 windows_coverage_env,
797 ]
798 )
799
800 if 'HAMMER_RUNS_TESTS' in os.environ.keys():
801 # Hammer sets the default target to 'scons-out'. This causes run_* aliases
802 # to also be built, which means the tests run by default. To avoid this, clear
803 # Default and set the default to just build the programs.
804 Default(None)
805 # TODO(omaha): Not all of our core binaries are included in these three
806 # aliases. This is because SignedBinary() and Command() do not add the outputs
807 # to a group. Fix this.
808 Default(['all_programs', 'all_libraries', 'all_test_programs'])
809
810 if win_env.Bit('msvs'):
811 source_project = win_env.ComponentVSDirProject('all_source', ['$MAIN_DIR'])
812
813 # 'all_*' values do not appear to be populated until after BuildEnvironments
814 # is called. Thus, the solution will be specific to either debug or optimized.
815 # ComponentVSSourceProject() might be more desirable, but it does not appear
816 # to work.
817 windows_debug_env.ComponentVSSolution('omaha_dbg',
818 ['all_programs', 'all_libraries'],
819 projects=[source_project])
OLDNEW
« no previous file with comments | « installers/tagged_installer.py ('k') | mi_exe_stub/README.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698