OLD | NEW |
| (Empty) |
1 # -*- python -*- | |
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 import build_utils | |
7 import glob | |
8 import os | |
9 import shutil | |
10 import subprocess | |
11 import sys | |
12 | |
13 from SCons import Script | |
14 | |
15 # Directories used throughout this script. | |
16 script_dir = os.path.abspath(os.getcwd()) | |
17 sdk_root_dir = os.getenv('NACL_SDK_ROOT') | |
18 build_tools_dir = os.path.join(sdk_root_dir, 'build_tools') | |
19 libraries_dir = os.path.join(sdk_root_dir, 'libraries') | |
20 | |
21 # Add the path to build_tools to the shell's python path. | |
22 shell_env = os.environ.copy() | |
23 python_paths = [build_tools_dir] | |
24 python_paths += [shell_env.get('PYTHONPATH', '')] | |
25 shell_env['PYTHONPATH'] = os.pathsep.join(python_paths) | |
26 | |
27 # Argv for the install-gtest python script. | |
28 script_argv = [ | |
29 '--toolchain=%s' % ( | |
30 build_utils.NormalizeToolchain(base_dir=sdk_root_dir, | |
31 arch='x86', | |
32 variant='glibc')), | |
33 '--toolchain=%s' % ( | |
34 build_utils.NormalizeToolchain(base_dir=sdk_root_dir, | |
35 arch='x86', | |
36 variant='newlib')), | |
37 '--working_dir=%s' % script_dir | |
38 ] | |
39 | |
40 # The scons build env. | |
41 build_env = Script.Environment().Clone() | |
42 | |
43 # Where the src for gtest and gmock will be found after running the install | |
44 # script. We keep them around as a sentinel, to indicate they they have been | |
45 # installed. (See BuildGTestLibs below.) | |
46 gtest_src = os.path.join(script_dir, 'gtest-1.5.0') | |
47 gmock_src = os.path.join(script_dir, 'gmock-1.5.0') | |
48 | |
49 | |
50 def BuildGTestLibs(env, target, source): | |
51 '''Build and install the gtest/gmock libraries. | |
52 | |
53 This invokes the gtest_install.py script in the build_tools directory. In turn | |
54 that scripts downloads, untar, patches and build the gtest/gmock libraries. | |
55 Finally, the libraries and related include files are copied to the toolchain. | |
56 | |
57 Args: | |
58 env: The construction Environment() that is building the examples. | |
59 target: The target that triggered this build. Not used. | |
60 source: The sources used for this build. Not used. | |
61 ''' | |
62 # If our sentinel, the gtest source is present, do not build. | |
63 if os.path.exists(gtest_src): | |
64 return | |
65 # Remove any old gmock source if still present. | |
66 shutil.rmtree(gmock_src, ignore_errors=True) | |
67 # Invoke the gtest install script. | |
68 script = os.path.join(build_tools_dir, 'install_gtest', 'install_gtest.py') | |
69 py_command = [sys.executable, script] | |
70 subprocess.check_call(py_command + script_argv, env=shell_env) | |
71 | |
72 # Clean up: remove left-over tgz files. | |
73 for f in glob.iglob(os.path.join(script_dir, '*.tgz')): | |
74 os.remove(f) | |
75 | |
76 | |
77 def CleanGTestLibs(env, target, suite_name): | |
78 '''Clean the gtest/gmock libraries sources. | |
79 | |
80 This does a partial clean up of the gtest/gmock projects. It removes the src | |
81 directories. However, the actual libraries and related includes in the | |
82 toolchains are not removed. It is however sufficient to trigger a full | |
83 rebuild of gtest/gmock. | |
84 | |
85 Args: | |
86 env: The construction Environment() that is building the examples. | |
87 target: The target that triggered this build. | |
88 suite_name: A suite name that should cause this target to be cleaned. | |
89 ''' | |
90 # Only do this in 'clean' mode. | |
91 if not build_env.GetOption('clean'): | |
92 return | |
93 # Only clean target if it's on the cmd line or it's a clean all. | |
94 clean_this = True | |
95 if len(COMMAND_LINE_TARGETS) > 0: | |
96 clean_this = False | |
97 for cl_target in COMMAND_LINE_TARGETS: | |
98 if cl_target == suite_name or cl_target == target: | |
99 clean_this = True | |
100 break | |
101 # Delete the src trees for gtest and gmock. | |
102 if clean_this: | |
103 shutil.rmtree(gmock_src, ignore_errors=True) | |
104 shutil.rmtree(gtest_src, ignore_errors=True) | |
105 | |
106 | |
107 gtest_libs_builder = build_env.Alias('gtest_libs', [], BuildGTestLibs) | |
108 build_env.AlwaysBuild(gtest_libs_builder) | |
109 CleanGTestLibs(build_env, 'gtest_libs', 'bot') | |
110 | |
111 # ---------------------------------------------------------------------------- | |
112 build_env.Default('gtest_libs') | |
OLD | NEW |