Index: pylib/gyp/generator/ninja.py |
=================================================================== |
--- pylib/gyp/generator/ninja.py (revision 1758) |
+++ pylib/gyp/generator/ninja.py (working copy) |
@@ -58,6 +58,7 @@ |
generator_additional_non_configuration_keys = [] |
generator_additional_path_sections = [] |
generator_extra_sources_for_rules = [] |
+generator_filelist_path = None |
# TODO: figure out how to not build extra host objects in the non-cross-compile |
# case when this is enabled, and enable unconditionally. |
@@ -1458,7 +1459,38 @@ |
default_variables.setdefault('LIB_DIR', |
os.path.join('$!PRODUCT_DIR', 'obj')) |
+def ComputeOutputDir(params): |
+ """Returns the path from the toplevel_dir to the build output directory.""" |
+ # generator_dir: relative path from pwd to where make puts build files. |
+ # Makes migrating from make to ninja easier, ninja doesn't put anything here. |
+ generator_dir = os.path.relpath(params['options'].generator_output or '.') |
+ # output_dir: relative path from generator_dir to the build directory. |
+ output_dir = params.get('generator_flags', {}).get('output_dir', 'out') |
+ |
+ # Relative path from source root to our output files. e.g. "out" |
+ return os.path.normpath(os.path.join(generator_dir, output_dir)) |
+ |
+ |
+def CalculateGeneratorInputInfo(params): |
+ """Called by __init__ to initialize generator values based on params.""" |
+ # E.g. "out/gypfiles" |
+ qualified_out_dir = os.path.normpath(os.path.join( |
+ params['options'].toplevel_dir, ComputeOutputDir(params), 'gypfiles')) |
+ |
+ def gypfile_path(build_file_dir, name): |
+ # build_file_dir is absolute, make it relative to toplevel |
+ if os.path.isabs(build_file_dir): |
+ build_file_dir = gyp.common.RelativePath(build_file_dir, toplevel) |
+ name = os.path.join(qualified_out_dir, build_file_dir, name) |
+ if not os.path.isdir(os.path.dirname(name)): |
+ os.makedirs(os.path.dirname(name)) |
+ return name |
+ |
+ global generator_filelist_path |
+ generator_filelist_path = gypfile_path |
+ |
+ |
def OpenOutput(path, mode='w'): |
"""Open |path| for writing, creating directories if necessary.""" |
try: |
@@ -1608,18 +1640,10 @@ |
flavor = gyp.common.GetFlavor(params) |
generator_flags = params.get('generator_flags', {}) |
- # generator_dir: relative path from pwd to where make puts build files. |
- # Makes migrating from make to ninja easier, ninja doesn't put anything here. |
- generator_dir = os.path.relpath(params['options'].generator_output or '.') |
- |
- # output_dir: relative path from generator_dir to the build directory. |
- output_dir = generator_flags.get('output_dir', 'out') |
- |
# build_dir: relative path from source root to our output files. |
# e.g. "out/Debug" |
- build_dir = os.path.normpath(os.path.join(generator_dir, |
- output_dir, |
- config_name)) |
+ build_dir = os.path.normpath( |
+ os.path.join(ComputeOutputDir(params), config_name)) |
toplevel_build = os.path.join(options.toplevel_dir, build_dir) |