OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Entry point for both build and try bots | 6 """Entry point for both build and try bots |
7 | 7 |
8 This script is invoked from XXX, usually without arguments | 8 This script is invoked from XXX, usually without arguments |
9 to package an SDK. It automatically determines whether | 9 to package an SDK. It automatically determines whether |
10 this SDK is for mac, win, linux. | 10 this SDK is for mac, win, linux. |
11 | 11 |
12 The script inspects the following environment variables: | 12 The script inspects the following environment variables: |
13 | 13 |
14 BUILDBOT_BUILDERNAME to determine whether the script is run locally | 14 BUILDBOT_BUILDERNAME to determine whether the script is run locally |
15 and whether it should upload an SDK to file storage (GSTORE) | 15 and whether it should upload an SDK to file storage (GSTORE) |
16 """ | 16 """ |
17 | 17 |
18 # pylint: disable=W0621 | 18 # pylint: disable=W0621 |
19 | 19 |
20 # std python includes | 20 # std python includes |
21 import copy | 21 import copy |
22 import datetime | 22 import datetime |
23 import generate_make | |
24 import optparse | 23 import optparse |
25 import os | 24 import os |
| 25 import re |
26 import subprocess | 26 import subprocess |
27 import sys | 27 import sys |
28 | 28 |
29 # local includes | 29 # local includes |
30 import buildbot_common | 30 import buildbot_common |
31 import build_updater | 31 import build_updater |
32 import build_utils | 32 import build_utils |
| 33 import generate_make |
| 34 import generate_notice |
33 import manifest_util | 35 import manifest_util |
34 from tests import test_server | 36 from tests import test_server |
35 | 37 |
36 # Create the various paths of interest | 38 # Create the various paths of interest |
37 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) | 39 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) |
38 SDK_SRC_DIR = os.path.dirname(SCRIPT_DIR) | 40 SDK_SRC_DIR = os.path.dirname(SCRIPT_DIR) |
39 SDK_EXAMPLE_DIR = os.path.join(SDK_SRC_DIR, 'examples') | 41 SDK_EXAMPLE_DIR = os.path.join(SDK_SRC_DIR, 'examples') |
40 SDK_LIBRARY_DIR = os.path.join(SDK_SRC_DIR, 'libraries') | 42 SDK_LIBRARY_DIR = os.path.join(SDK_SRC_DIR, 'libraries') |
41 SDK_DIR = os.path.dirname(SDK_SRC_DIR) | 43 SDK_DIR = os.path.dirname(SDK_SRC_DIR) |
42 SRC_DIR = os.path.dirname(SDK_DIR) | 44 SRC_DIR = os.path.dirname(SDK_DIR) |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 buildbot_common.MakeDir(pepperdir) | 163 buildbot_common.MakeDir(pepperdir) |
162 | 164 |
163 | 165 |
164 def BuildStepMakePepperDirs(pepperdir, subdirs): | 166 def BuildStepMakePepperDirs(pepperdir, subdirs): |
165 for subdir in subdirs: | 167 for subdir in subdirs: |
166 buildbot_common.MakeDir(os.path.join(pepperdir, subdir)) | 168 buildbot_common.MakeDir(os.path.join(pepperdir, subdir)) |
167 | 169 |
168 | 170 |
169 def BuildStepCopyTextFiles(pepperdir, pepper_ver, revision): | 171 def BuildStepCopyTextFiles(pepperdir, pepper_ver, revision): |
170 buildbot_common.BuildStep('Add Text Files') | 172 buildbot_common.BuildStep('Add Text Files') |
171 files = ['AUTHORS', 'COPYING', 'LICENSE', 'NOTICE'] | 173 files = ['AUTHORS', 'COPYING', 'LICENSE'] |
172 files = [os.path.join(SDK_SRC_DIR, filename) for filename in files] | 174 files = [os.path.join(SDK_SRC_DIR, filename) for filename in files] |
173 oshelpers.Copy(['-v'] + files + [pepperdir]) | 175 oshelpers.Copy(['-v'] + files + [pepperdir]) |
174 | 176 |
175 # Replace a few placeholders in README | 177 # Replace a few placeholders in README |
176 readme_text = open(os.path.join(SDK_SRC_DIR, 'README'), 'rt').read() | 178 readme_text = open(os.path.join(SDK_SRC_DIR, 'README'), 'rt').read() |
177 readme_text = readme_text.replace('${VERSION}', pepper_ver) | 179 readme_text = readme_text.replace('${VERSION}', pepper_ver) |
178 readme_text = readme_text.replace('${REVISION}', revision) | 180 readme_text = readme_text.replace('${REVISION}', revision) |
179 | 181 |
180 # Year/Month/Day Hour:Minute:Second | 182 # Year/Month/Day Hour:Minute:Second |
181 time_format = '%Y/%m/%d %H:%M:%S' | 183 time_format = '%Y/%m/%d %H:%M:%S' |
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
705 # Clean to remove temporary files but keep the built libraries. | 707 # Clean to remove temporary files but keep the built libraries. |
706 buildbot_common.Run([make, '-j8', 'clean'], | 708 buildbot_common.Run([make, '-j8', 'clean'], |
707 cwd=os.path.abspath(make_dir)) | 709 cwd=os.path.abspath(make_dir)) |
708 | 710 |
709 | 711 |
710 def BuildStepBuildLibraries(pepperdir, platform, directory, clean=True): | 712 def BuildStepBuildLibraries(pepperdir, platform, directory, clean=True): |
711 BuildStepMakeAll(pepperdir, platform, directory, 'Build Libraries', | 713 BuildStepMakeAll(pepperdir, platform, directory, 'Build Libraries', |
712 clean=clean) | 714 clean=clean) |
713 | 715 |
714 | 716 |
| 717 def BuildStepGenerateNotice(pepperdir): |
| 718 # Look for LICENSE files |
| 719 license_filenames_re = re.compile('LICENSE|COPYING') |
| 720 |
| 721 license_files = [] |
| 722 for root, _, files in os.walk(pepperdir): |
| 723 for filename in files: |
| 724 if license_filenames_re.match(filename): |
| 725 path = os.path.join(root, filename) |
| 726 license_files.append(path) |
| 727 print '\n'.join(license_files) |
| 728 |
| 729 notice_filename = os.path.join(pepperdir, 'NOTICE') |
| 730 generate_notice.Generate(notice_filename, pepperdir, license_files) |
| 731 |
| 732 |
715 def BuildStepTarBundle(pepper_ver, tarfile): | 733 def BuildStepTarBundle(pepper_ver, tarfile): |
716 buildbot_common.BuildStep('Tar Pepper Bundle') | 734 buildbot_common.BuildStep('Tar Pepper Bundle') |
717 buildbot_common.MakeDir(os.path.dirname(tarfile)) | 735 buildbot_common.MakeDir(os.path.dirname(tarfile)) |
718 buildbot_common.Run([sys.executable, CYGTAR, '-C', OUT_DIR, '-cjf', tarfile, | 736 buildbot_common.Run([sys.executable, CYGTAR, '-C', OUT_DIR, '-cjf', tarfile, |
719 'pepper_' + pepper_ver], cwd=NACL_DIR) | 737 'pepper_' + pepper_ver], cwd=NACL_DIR) |
720 | 738 |
721 | 739 |
722 def GetManifestBundle(pepper_ver, revision, tarfile, archive_url): | 740 def GetManifestBundle(pepper_ver, revision, tarfile, archive_url): |
723 with open(tarfile, 'rb') as tarfile_stream: | 741 with open(tarfile, 'rb') as tarfile_stream: |
724 archive_sha1, archive_size = manifest_util.DownloadAndComputeHash( | 742 archive_sha1, archive_size = manifest_util.DownloadAndComputeHash( |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 BuildStepCopyTextFiles(pepperdir, pepper_ver, clnumber) | 974 BuildStepCopyTextFiles(pepperdir, pepper_ver, clnumber) |
957 BuildStepUntarToolchains(pepperdir, platform, arch, toolchains) | 975 BuildStepUntarToolchains(pepperdir, platform, arch, toolchains) |
958 BuildStepBuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains) | 976 BuildStepBuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains) |
959 InstallHeaders(os.path.join(pepperdir, 'include'), None, 'libs') | 977 InstallHeaders(os.path.join(pepperdir, 'include'), None, 'libs') |
960 BuildStepCopyBuildHelpers(pepperdir, platform) | 978 BuildStepCopyBuildHelpers(pepperdir, platform) |
961 BuildStepCopyExamples(pepperdir, toolchains, options.build_experimental, | 979 BuildStepCopyExamples(pepperdir, toolchains, options.build_experimental, |
962 True) | 980 True) |
963 | 981 |
964 # Ship with libraries prebuilt, so run that first. | 982 # Ship with libraries prebuilt, so run that first. |
965 BuildStepBuildLibraries(pepperdir, platform, 'src') | 983 BuildStepBuildLibraries(pepperdir, platform, 'src') |
| 984 BuildStepGenerateNotice(pepperdir) |
966 | 985 |
967 if not options.skip_tar: | 986 if not options.skip_tar: |
968 BuildStepTarBundle(pepper_ver, tarfile) | 987 BuildStepTarBundle(pepper_ver, tarfile) |
969 build_updater.BuildUpdater(OUT_DIR) | 988 build_updater.BuildUpdater(OUT_DIR) |
970 | 989 |
971 # BuildStepTestUpdater downloads the bundle to its own directory. Build | 990 # BuildStepTestUpdater downloads the bundle to its own directory. Build |
972 # the examples and test from this directory instead of the original. | 991 # the examples and test from this directory instead of the original. |
973 pepperdir = BuildStepTestUpdater(platform, pepper_ver, clnumber, tarfile) | 992 pepperdir = BuildStepTestUpdater(platform, pepper_ver, clnumber, tarfile) |
974 BuildStepBuildExamples(pepperdir, platform) | 993 BuildStepBuildExamples(pepperdir, platform) |
975 BuildStepCopyTests(pepperdir, toolchains, options.build_experimental, | 994 BuildStepCopyTests(pepperdir, toolchains, options.build_experimental, |
976 True) | 995 True) |
977 BuildStepBuildTests(pepperdir, platform) | 996 BuildStepBuildTests(pepperdir, platform) |
978 if options.test_examples: | 997 if options.test_examples: |
979 BuildStepRunPyautoTests(pepperdir, platform, pepper_ver) | 998 BuildStepRunPyautoTests(pepperdir, platform, pepper_ver) |
980 | 999 |
981 # Archive on non-trybots. | 1000 # Archive on non-trybots. |
982 if options.archive or buildbot_common.IsSDKBuilder(): | 1001 if options.archive or buildbot_common.IsSDKBuilder(): |
983 BuildStepArchiveBundle(pepper_ver, clnumber, tarfile) | 1002 BuildStepArchiveBundle(pepper_ver, clnumber, tarfile) |
984 BuildStepArchiveSDKTools() | 1003 BuildStepArchiveSDKTools() |
985 | 1004 |
986 return 0 | 1005 return 0 |
987 | 1006 |
988 | 1007 |
989 if __name__ == '__main__': | 1008 if __name__ == '__main__': |
990 sys.exit(main(sys.argv)) | 1009 sys.exit(main(sys.argv)) |
OLD | NEW |