OLD | NEW |
1 # Copyright (c) 2012 Google Inc. All rights reserved. | 1 # Copyright (c) 2012 Google Inc. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import copy | 5 import copy |
6 import hashlib | 6 import hashlib |
7 import multiprocessing | 7 import multiprocessing |
8 import os.path | 8 import os.path |
9 import re | 9 import re |
| 10 import signal |
10 import subprocess | 11 import subprocess |
11 import sys | 12 import sys |
12 import gyp | 13 import gyp |
13 import gyp.common | 14 import gyp.common |
14 import gyp.msvs_emulation | 15 import gyp.msvs_emulation |
15 import gyp.MSVSVersion | 16 import gyp.MSVSVersion |
16 import gyp.xcode_emulation | 17 import gyp.xcode_emulation |
17 | 18 |
18 from gyp.common import GetEnvironFallback | 19 from gyp.common import GetEnvironFallback |
19 import gyp.ninja_syntax as ninja_syntax | 20 import gyp.ninja_syntax as ninja_syntax |
(...skipping 1722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1742 def PerformBuild(data, configurations, params): | 1743 def PerformBuild(data, configurations, params): |
1743 options = params['options'] | 1744 options = params['options'] |
1744 for config in configurations: | 1745 for config in configurations: |
1745 builddir = os.path.join(options.toplevel_dir, 'out', config) | 1746 builddir = os.path.join(options.toplevel_dir, 'out', config) |
1746 arguments = ['ninja', '-C', builddir] | 1747 arguments = ['ninja', '-C', builddir] |
1747 print 'Building [%s]: %s' % (config, arguments) | 1748 print 'Building [%s]: %s' % (config, arguments) |
1748 subprocess.check_call(arguments) | 1749 subprocess.check_call(arguments) |
1749 | 1750 |
1750 | 1751 |
1751 def CallGenerateOutputForConfig(arglist): | 1752 def CallGenerateOutputForConfig(arglist): |
| 1753 # Ignore the interrupt signal so that the parent process catches it and |
| 1754 # kills all multiprocessing children. |
| 1755 signal.signal(signal.SIGINT, signal.SIG_IGN) |
| 1756 |
1752 (target_list, target_dicts, data, params, config_name) = arglist | 1757 (target_list, target_dicts, data, params, config_name) = arglist |
1753 GenerateOutputForConfig(target_list, target_dicts, data, params, config_name) | 1758 GenerateOutputForConfig(target_list, target_dicts, data, params, config_name) |
1754 | 1759 |
| 1760 |
1755 def GenerateOutput(target_list, target_dicts, data, params): | 1761 def GenerateOutput(target_list, target_dicts, data, params): |
1756 user_config = params.get('generator_flags', {}).get('config', None) | 1762 user_config = params.get('generator_flags', {}).get('config', None) |
1757 if user_config: | 1763 if user_config: |
1758 GenerateOutputForConfig(target_list, target_dicts, data, params, | 1764 GenerateOutputForConfig(target_list, target_dicts, data, params, |
1759 user_config) | 1765 user_config) |
1760 else: | 1766 else: |
1761 config_names = target_dicts[target_list[0]]['configurations'].keys() | 1767 config_names = target_dicts[target_list[0]]['configurations'].keys() |
1762 if params['parallel']: | 1768 if params['parallel']: |
1763 pool = multiprocessing.Pool(len(config_names)) | 1769 try: |
1764 arglists = [] | 1770 pool = multiprocessing.Pool(len(config_names)) |
1765 for config_name in config_names: | 1771 arglists = [] |
1766 arglists.append((target_list, target_dicts, data, params, config_name)) | 1772 for config_name in config_names: |
1767 pool.map(CallGenerateOutputForConfig, arglists) | 1773 arglists.append( |
| 1774 (target_list, target_dicts, data, params, config_name)) |
| 1775 pool.map(CallGenerateOutputForConfig, arglists) |
| 1776 except KeyboardInterrupt, e: |
| 1777 pool.terminate() |
| 1778 raise e |
1768 else: | 1779 else: |
1769 for config_name in config_names: | 1780 for config_name in config_names: |
1770 GenerateOutputForConfig(target_list, target_dicts, data, params, | 1781 GenerateOutputForConfig(target_list, target_dicts, data, params, |
1771 config_name) | 1782 config_name) |
OLD | NEW |