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 import buildbot_common | 6 import buildbot_common |
7 import make_rules | 7 import make_rules |
8 import optparse | 8 import optparse |
9 import os | 9 import os |
10 import sys | 10 import sys |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 out += line[:-1] + '\n' | 56 out += line[:-1] + '\n' |
57 line = '%s+=%s ' % (varname, value) | 57 line = '%s+=%s ' % (varname, value) |
58 else: | 58 else: |
59 line += value + ' ' | 59 line += value + ' ' |
60 | 60 |
61 if line: | 61 if line: |
62 out += line[:-1] + '\n' | 62 out += line[:-1] + '\n' |
63 return out | 63 return out |
64 | 64 |
65 | 65 |
66 def GenerateCopyList(desc): | 66 def GenerateSourceCopyList(desc): |
67 sources = [] | 67 sources = [] |
68 # Add sources for each target | 68 # Add sources for each target |
69 for target in desc['TARGETS']: | 69 for target in desc['TARGETS']: |
70 sources.extend(target['SOURCES']) | 70 sources.extend(target['SOURCES']) |
71 | 71 |
72 # And HTML and data files | 72 # And HTML and data files |
73 sources.extend(desc.get('DATA', [])) | 73 sources.extend(desc.get('DATA', [])) |
74 | 74 |
75 if desc['DEST'] == 'examples': | 75 if desc['DEST'] == 'examples': |
76 sources.append('common.js') | 76 sources.append('common.js') |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 'PREREQ' : (list, '', False), | 264 'PREREQ' : (list, '', False), |
265 'TARGETS' : (list, { | 265 'TARGETS' : (list, { |
266 'NAME': (str, '', True), | 266 'NAME': (str, '', True), |
267 'TYPE': (str, ['main', 'nexe', 'lib', 'so'], True), | 267 'TYPE': (str, ['main', 'nexe', 'lib', 'so'], True), |
268 'SOURCES': (list, '', True), | 268 'SOURCES': (list, '', True), |
269 'CCFLAGS': (list, '', False), | 269 'CCFLAGS': (list, '', False), |
270 'CXXFLAGS': (list, '', False), | 270 'CXXFLAGS': (list, '', False), |
271 'LDFLAGS': (list, '', False), | 271 'LDFLAGS': (list, '', False), |
272 'LIBS' : (list, '', False) | 272 'LIBS' : (list, '', False) |
273 }, True), | 273 }, True), |
| 274 'HEADERS': (list, { |
| 275 'FILES': (list, '', True), |
| 276 'DEST': (str, '', True), |
| 277 }, False), |
274 'SEARCH': (list, '', False), | 278 'SEARCH': (list, '', False), |
275 'POST': (str, '', False), | 279 'POST': (str, '', False), |
276 'PRE': (str, '', False), | 280 'PRE': (str, '', False), |
277 'DEST': (str, ['examples', 'src'], True), | 281 'DEST': (str, ['examples', 'src'], True), |
278 'NAME': (str, '', False), | 282 'NAME': (str, '', False), |
279 'DATA': (list, '', False), | 283 'DATA': (list, '', False), |
280 'TITLE': (str, '', False), | 284 'TITLE': (str, '', False), |
281 'DESC': (str, '', False), | 285 'DESC': (str, '', False), |
282 'INFO': (str, '', False) | 286 'INFO': (str, '', False) |
283 } | 287 } |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 match = False | 448 match = False |
445 for toolchain in toolchains: | 449 for toolchain in toolchains: |
446 if toolchain in desc['TOOLS']: | 450 if toolchain in desc['TOOLS']: |
447 match = True | 451 match = True |
448 break | 452 break |
449 if not match: | 453 if not match: |
450 return None | 454 return None |
451 return desc | 455 return desc |
452 | 456 |
453 | 457 |
| 458 def FindAndCopyFiles(src_files, root, search_dirs, dst_dir): |
| 459 buildbot_common.MakeDir(dst_dir) |
| 460 for src_name in src_files: |
| 461 src_file = FindFile(src_name, root, search_dirs) |
| 462 if not src_file: |
| 463 ErrorMsgFunc('Failed to find: ' + src_name) |
| 464 return None |
| 465 dst_file = os.path.join(dst_dir, src_name) |
| 466 buildbot_common.CopyFile(src_file, dst_file) |
| 467 |
| 468 |
454 def ProcessProject(srcroot, dstroot, desc, toolchains): | 469 def ProcessProject(srcroot, dstroot, desc, toolchains): |
455 name = desc['NAME'] | 470 name = desc['NAME'] |
456 out_dir = os.path.join(dstroot, desc['DEST'], name) | 471 out_dir = os.path.join(dstroot, desc['DEST'], name) |
457 buildbot_common.MakeDir(out_dir) | 472 buildbot_common.MakeDir(out_dir) |
458 srcdirs = desc.get('SEARCH', ['.', '..']) | 473 srcdirs = desc.get('SEARCH', ['.', '..']) |
459 | 474 |
460 # Copy sources to example directory | 475 # Copy sources to example directory |
461 sources = GenerateCopyList(desc) | 476 sources = GenerateSourceCopyList(desc) |
462 for src_name in sources: | 477 FindAndCopyFiles(sources, srcroot, srcdirs, out_dir) |
463 src_file = FindFile(src_name, srcroot, srcdirs) | 478 |
464 if not src_file: | 479 # Copy public headers to the include directory. |
465 ErrorMsgFunc('Failed to find: ' + src_name) | 480 for headers_set in desc.get('HEADERS', []): |
466 return None | 481 headers = headers_set['FILES'] |
467 dst_file = os.path.join(out_dir, src_name) | 482 header_out_dir = os.path.join(dstroot, headers_set['DEST']) |
468 buildbot_common.CopyFile(src_file, dst_file) | 483 FindAndCopyFiles(headers, srcroot, srcdirs, header_out_dir) |
469 | 484 |
470 if IsNexe(desc): | 485 if IsNexe(desc): |
471 template=os.path.join(SCRIPT_DIR, 'template.mk') | 486 template=os.path.join(SCRIPT_DIR, 'template.mk') |
472 else: | 487 else: |
473 template=os.path.join(SCRIPT_DIR, 'library.mk') | 488 template=os.path.join(SCRIPT_DIR, 'library.mk') |
474 | 489 |
475 tools = [] | 490 tools = [] |
476 for tool in desc['TOOLS']: | 491 for tool in desc['TOOLS']: |
477 if tool in toolchains: | 492 if tool in toolchains: |
478 tools.append(tool) | 493 tools.append(tool) |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 master_in = os.path.join(SDK_EXAMPLE_DIR, 'Makefile') | 571 master_in = os.path.join(SDK_EXAMPLE_DIR, 'Makefile') |
557 master_out = os.path.join(options.dstroot, 'examples', 'Makefile') | 572 master_out = os.path.join(options.dstroot, 'examples', 'Makefile') |
558 GenerateMasterMakefile(master_in, master_out, examples) | 573 GenerateMasterMakefile(master_in, master_out, examples) |
559 master_out = os.path.join(options.dstroot, 'src', 'Makefile') | 574 master_out = os.path.join(options.dstroot, 'src', 'Makefile') |
560 GenerateMasterMakefile(master_in, master_out, libs) | 575 GenerateMasterMakefile(master_in, master_out, libs) |
561 return 0 | 576 return 0 |
562 | 577 |
563 | 578 |
564 if __name__ == '__main__': | 579 if __name__ == '__main__': |
565 sys.exit(main(sys.argv[1:])) | 580 sys.exit(main(sys.argv[1:])) |
OLD | NEW |