| OLD | NEW |
| 1 # Copyright (c) 2013 Google Inc. All rights reserved. | 1 # Copyright (c) 2013 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 # Notes: | 5 # Notes: |
| 6 # | 6 # |
| 7 # This is all roughly based on the Makefile system used by the Linux | 7 # This is all roughly based on the Makefile system used by the Linux |
| 8 # kernel, but is a non-recursive make -- we put the entire dependency | 8 # kernel, but is a non-recursive make -- we put the entire dependency |
| 9 # graph in front of make and let it figure it out. | 9 # graph in front of make and let it figure it out. |
| 10 # | 10 # |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 qualified_out_dir = os.path.normpath(os.path.join( | 110 qualified_out_dir = os.path.normpath(os.path.join( |
| 111 output_dir, builddir_name, 'gypfiles')) | 111 output_dir, builddir_name, 'gypfiles')) |
| 112 | 112 |
| 113 global generator_filelist_paths | 113 global generator_filelist_paths |
| 114 generator_filelist_paths = { | 114 generator_filelist_paths = { |
| 115 'toplevel': params['options'].toplevel_dir, | 115 'toplevel': params['options'].toplevel_dir, |
| 116 'qualified_out_dir': qualified_out_dir, | 116 'qualified_out_dir': qualified_out_dir, |
| 117 } | 117 } |
| 118 | 118 |
| 119 | 119 |
| 120 def ensure_directory_exists(path): | |
| 121 dir = os.path.dirname(path) | |
| 122 if dir and not os.path.exists(dir): | |
| 123 os.makedirs(dir) | |
| 124 | |
| 125 | |
| 126 # The .d checking code below uses these functions: | 120 # The .d checking code below uses these functions: |
| 127 # wildcard, sort, foreach, shell, wordlist | 121 # wildcard, sort, foreach, shell, wordlist |
| 128 # wildcard can handle spaces, the rest can't. | 122 # wildcard can handle spaces, the rest can't. |
| 129 # Since I could find no way to make foreach work with spaces in filenames | 123 # Since I could find no way to make foreach work with spaces in filenames |
| 130 # correctly, the .d files have spaces replaced with another character. The .d | 124 # correctly, the .d files have spaces replaced with another character. The .d |
| 131 # file for | 125 # file for |
| 132 # Chromium\ Framework.framework/foo | 126 # Chromium\ Framework.framework/foo |
| 133 # is for example | 127 # is for example |
| 134 # out/Release/.deps/out/Release/Chromium?Framework.framework/foo | 128 # out/Release/.deps/out/Release/Chromium?Framework.framework/foo |
| 135 # This is the replacement character. | 129 # This is the replacement character. |
| (...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 684 """The main entry point: writes a .mk file for a single target. | 678 """The main entry point: writes a .mk file for a single target. |
| 685 | 679 |
| 686 Arguments: | 680 Arguments: |
| 687 qualified_target: target we're generating | 681 qualified_target: target we're generating |
| 688 base_path: path relative to source root we're building in, used to resolve | 682 base_path: path relative to source root we're building in, used to resolve |
| 689 target-relative paths | 683 target-relative paths |
| 690 output_filename: output .mk file name to write | 684 output_filename: output .mk file name to write |
| 691 spec, configs: gyp info | 685 spec, configs: gyp info |
| 692 part_of_all: flag indicating this target is part of 'all' | 686 part_of_all: flag indicating this target is part of 'all' |
| 693 """ | 687 """ |
| 694 ensure_directory_exists(output_filename) | 688 gyp.common.EnsureDirExists(output_filename) |
| 695 | 689 |
| 696 self.fp = open(output_filename, 'w') | 690 self.fp = open(output_filename, 'w') |
| 697 | 691 |
| 698 self.fp.write(header) | 692 self.fp.write(header) |
| 699 | 693 |
| 700 self.qualified_target = qualified_target | 694 self.qualified_target = qualified_target |
| 701 self.path = base_path | 695 self.path = base_path |
| 702 self.target = spec['target_name'] | 696 self.target = spec['target_name'] |
| 703 self.type = spec['type'] | 697 self.type = spec['type'] |
| 704 self.toolset = spec['toolset'] | 698 self.toolset = spec['toolset'] |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 813 | 807 |
| 814 This is a small, wrapper Makefile that calls the top-level Makefile to build | 808 This is a small, wrapper Makefile that calls the top-level Makefile to build |
| 815 the targets from a single gyp file (i.e. a sub-project). | 809 the targets from a single gyp file (i.e. a sub-project). |
| 816 | 810 |
| 817 Arguments: | 811 Arguments: |
| 818 output_filename: sub-project Makefile name to write | 812 output_filename: sub-project Makefile name to write |
| 819 makefile_path: path to the top-level Makefile | 813 makefile_path: path to the top-level Makefile |
| 820 targets: list of "all" targets for this sub-project | 814 targets: list of "all" targets for this sub-project |
| 821 build_dir: build output directory, relative to the sub-project | 815 build_dir: build output directory, relative to the sub-project |
| 822 """ | 816 """ |
| 823 ensure_directory_exists(output_filename) | 817 gyp.common.EnsureDirExists(output_filename) |
| 824 self.fp = open(output_filename, 'w') | 818 self.fp = open(output_filename, 'w') |
| 825 self.fp.write(header) | 819 self.fp.write(header) |
| 826 # For consistency with other builders, put sub-project build output in the | 820 # For consistency with other builders, put sub-project build output in the |
| 827 # sub-project dir (see test/subdirectory/gyptest-subdir-all.py). | 821 # sub-project dir (see test/subdirectory/gyptest-subdir-all.py). |
| 828 self.WriteLn('export builddir_name ?= %s' % | 822 self.WriteLn('export builddir_name ?= %s' % |
| 829 os.path.join(os.path.dirname(output_filename), build_dir)) | 823 os.path.join(os.path.dirname(output_filename), build_dir)) |
| 830 self.WriteLn('.PHONY: all') | 824 self.WriteLn('.PHONY: all') |
| 831 self.WriteLn('all:') | 825 self.WriteLn('all:') |
| 832 if makefile_path: | 826 if makefile_path: |
| 833 makefile_path = ' -C ' + makefile_path | 827 makefile_path = ' -C ' + makefile_path |
| (...skipping 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2060 value = os.environ[key] | 2054 value = os.environ[key] |
| 2061 make_global_settings += ' %s = %s\n' % (key, value) | 2055 make_global_settings += ' %s = %s\n' % (key, value) |
| 2062 make_global_settings += 'endif\n' | 2056 make_global_settings += 'endif\n' |
| 2063 else: | 2057 else: |
| 2064 make_global_settings += '%s ?= %s\n' % (key, value) | 2058 make_global_settings += '%s ?= %s\n' % (key, value) |
| 2065 # TODO(ukai): define cmd when only wrapper is specified in | 2059 # TODO(ukai): define cmd when only wrapper is specified in |
| 2066 # make_global_settings. | 2060 # make_global_settings. |
| 2067 | 2061 |
| 2068 header_params['make_global_settings'] = make_global_settings | 2062 header_params['make_global_settings'] = make_global_settings |
| 2069 | 2063 |
| 2070 ensure_directory_exists(makefile_path) | 2064 gyp.common.EnsureDirExists(makefile_path) |
| 2071 root_makefile = open(makefile_path, 'w') | 2065 root_makefile = open(makefile_path, 'w') |
| 2072 root_makefile.write(SHARED_HEADER % header_params) | 2066 root_makefile.write(SHARED_HEADER % header_params) |
| 2073 # Currently any versions have the same effect, but in future the behavior | 2067 # Currently any versions have the same effect, but in future the behavior |
| 2074 # could be different. | 2068 # could be different. |
| 2075 if android_ndk_version: | 2069 if android_ndk_version: |
| 2076 root_makefile.write( | 2070 root_makefile.write( |
| 2077 '# Define LOCAL_PATH for build of Android applications.\n' | 2071 '# Define LOCAL_PATH for build of Android applications.\n' |
| 2078 'LOCAL_PATH := $(call my-dir)\n' | 2072 'LOCAL_PATH := $(call my-dir)\n' |
| 2079 '\n') | 2073 '\n') |
| 2080 for toolset in toolsets: | 2074 for toolset in toolsets: |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2174 root_makefile.write("endif\n") | 2168 root_makefile.write("endif\n") |
| 2175 root_makefile.write('\n') | 2169 root_makefile.write('\n') |
| 2176 | 2170 |
| 2177 if (not generator_flags.get('standalone') | 2171 if (not generator_flags.get('standalone') |
| 2178 and generator_flags.get('auto_regeneration', True)): | 2172 and generator_flags.get('auto_regeneration', True)): |
| 2179 WriteAutoRegenerationRule(params, root_makefile, makefile_name, build_files) | 2173 WriteAutoRegenerationRule(params, root_makefile, makefile_name, build_files) |
| 2180 | 2174 |
| 2181 root_makefile.write(SHARED_FOOTER) | 2175 root_makefile.write(SHARED_FOOTER) |
| 2182 | 2176 |
| 2183 root_makefile.close() | 2177 root_makefile.close() |
| OLD | NEW |