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 gyp | 6 import gyp |
7 import gyp.common | 7 import gyp.common |
8 import gyp.msvs_emulation | 8 import gyp.msvs_emulation |
9 import gyp.MSVSVersion | 9 import gyp.MSVSVersion |
10 import gyp.system_test | 10 import gyp.system_test |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 by the shell.""" | 64 by the shell.""" |
65 # Rather than attempting to enumerate the bad shell characters, just | 65 # Rather than attempting to enumerate the bad shell characters, just |
66 # whitelist common OK ones and quote anything else. | 66 # whitelist common OK ones and quote anything else. |
67 if re.match(r'^[a-zA-Z0-9_=.\\/-]+$', arg): | 67 if re.match(r'^[a-zA-Z0-9_=.\\/-]+$', arg): |
68 return arg # No quoting necessary. | 68 return arg # No quoting necessary. |
69 if flavor == 'win': | 69 if flavor == 'win': |
70 return gyp.msvs_emulation.QuoteForRspFile(arg) | 70 return gyp.msvs_emulation.QuoteForRspFile(arg) |
71 return "'" + arg.replace("'", "'" + '"\'"' + "'") + "'" | 71 return "'" + arg.replace("'", "'" + '"\'"' + "'") + "'" |
72 | 72 |
73 | 73 |
| 74 def Define(d, flavor): |
| 75 """Takes a preprocessor define and returns a -D parameter that's ninja- and |
| 76 shell-escaped.""" |
| 77 if flavor == 'win': |
| 78 # cl.exe replaces literal # characters with = in preprocesor definitions for |
| 79 # some reason. Octal-encode to work around that. |
| 80 d = d.replace('#', '\\%03o' % ord('#')) |
| 81 return QuoteShellArgument(ninja_syntax.escape('-D' + d), flavor) |
| 82 |
| 83 |
74 def InvertRelativePath(path): | 84 def InvertRelativePath(path): |
75 """Given a relative path like foo/bar, return the inverse relative path: | 85 """Given a relative path like foo/bar, return the inverse relative path: |
76 the path from the relative path back to the origin dir. | 86 the path from the relative path back to the origin dir. |
77 | 87 |
78 E.g. os.path.normpath(os.path.join(path, InvertRelativePath(path))) | 88 E.g. os.path.normpath(os.path.join(path, InvertRelativePath(path))) |
79 should always produce the empty string.""" | 89 should always produce the empty string.""" |
80 | 90 |
81 if not path: | 91 if not path: |
82 return path | 92 return path |
83 # Only need to handle relative paths into subdirectories for now. | 93 # Only need to handle relative paths into subdirectories for now. |
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 """Write build rules for bundle Info.plist files.""" | 638 """Write build rules for bundle Info.plist files.""" |
629 info_plist, out, defines, extra_env = gyp.xcode_emulation.GetMacInfoPlist( | 639 info_plist, out, defines, extra_env = gyp.xcode_emulation.GetMacInfoPlist( |
630 self.ExpandSpecial(generator_default_variables['PRODUCT_DIR']), | 640 self.ExpandSpecial(generator_default_variables['PRODUCT_DIR']), |
631 self.xcode_settings, self.GypPathToNinja) | 641 self.xcode_settings, self.GypPathToNinja) |
632 if not info_plist: | 642 if not info_plist: |
633 return | 643 return |
634 if defines: | 644 if defines: |
635 # Create an intermediate file to store preprocessed results. | 645 # Create an intermediate file to store preprocessed results. |
636 intermediate_plist = self.GypPathToUniqueOutput( | 646 intermediate_plist = self.GypPathToUniqueOutput( |
637 os.path.basename(info_plist)) | 647 os.path.basename(info_plist)) |
638 defines = ' '.join( | 648 defines = ' '.join([Define(d, self.flavor) for d in defines]) |
639 [QuoteShellArgument(ninja_syntax.escape('-D' + d), self.flavor) | |
640 for d in defines]) | |
641 info_plist = self.ninja.build(intermediate_plist, 'infoplist', info_plist, | 649 info_plist = self.ninja.build(intermediate_plist, 'infoplist', info_plist, |
642 variables=[('defines',defines)]) | 650 variables=[('defines',defines)]) |
643 | 651 |
644 env = self.GetXcodeEnv(additional_settings=extra_env) | 652 env = self.GetXcodeEnv(additional_settings=extra_env) |
645 env = self.ComputeExportEnvString(env) | 653 env = self.ComputeExportEnvString(env) |
646 | 654 |
647 self.ninja.build(out, 'mac_tool', info_plist, | 655 self.ninja.build(out, 'mac_tool', info_plist, |
648 variables=[('mactool_cmd', 'copy-info-plist'), | 656 variables=[('mactool_cmd', 'copy-info-plist'), |
649 ('env', env)]) | 657 ('env', env)]) |
650 bundle_depends.append(out) | 658 bundle_depends.append(out) |
(...skipping 21 matching lines...) Expand all Loading... |
672 cflags_c = self.msvs_settings.GetCflagsC(config_name) | 680 cflags_c = self.msvs_settings.GetCflagsC(config_name) |
673 cflags_cc = self.msvs_settings.GetCflagsCC(config_name) | 681 cflags_cc = self.msvs_settings.GetCflagsCC(config_name) |
674 extra_defines = self.msvs_settings.GetComputedDefines(config_name) | 682 extra_defines = self.msvs_settings.GetComputedDefines(config_name) |
675 self.WriteVariableList('pdbname', [self.name + '.pdb']) | 683 self.WriteVariableList('pdbname', [self.name + '.pdb']) |
676 else: | 684 else: |
677 cflags = config.get('cflags', []) | 685 cflags = config.get('cflags', []) |
678 cflags_c = config.get('cflags_c', []) | 686 cflags_c = config.get('cflags_c', []) |
679 cflags_cc = config.get('cflags_cc', []) | 687 cflags_cc = config.get('cflags_cc', []) |
680 | 688 |
681 defines = config.get('defines', []) + extra_defines | 689 defines = config.get('defines', []) + extra_defines |
682 self.WriteVariableList('defines', | 690 self.WriteVariableList('defines', [Define(d, self.flavor) for d in defines]) |
683 [QuoteShellArgument(ninja_syntax.escape('-D' + d), self.flavor) | |
684 for d in defines]) | |
685 if self.flavor == 'win': | 691 if self.flavor == 'win': |
686 self.WriteVariableList('rcflags', | 692 self.WriteVariableList('rcflags', |
687 [QuoteShellArgument(self.ExpandSpecial(f), self.flavor) | 693 [QuoteShellArgument(self.ExpandSpecial(f), self.flavor) |
688 for f in self.msvs_settings.GetRcflags(config_name)]) | 694 for f in self.msvs_settings.GetRcflags(config_name)]) |
689 | 695 |
690 include_dirs = config.get('include_dirs', []) | 696 include_dirs = config.get('include_dirs', []) |
691 if self.flavor == 'win': | 697 if self.flavor == 'win': |
692 include_dirs = self.msvs_settings.AdjustIncludeDirs(include_dirs, | 698 include_dirs = self.msvs_settings.AdjustIncludeDirs(include_dirs, |
693 config_name) | 699 config_name) |
694 self.WriteVariableList('includes', | 700 self.WriteVariableList('includes', |
(...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1489 | 1495 |
1490 user_config = params.get('generator_flags', {}).get('config', None) | 1496 user_config = params.get('generator_flags', {}).get('config', None) |
1491 if user_config: | 1497 if user_config: |
1492 GenerateOutputForConfig(target_list, target_dicts, data, params, | 1498 GenerateOutputForConfig(target_list, target_dicts, data, params, |
1493 user_config) | 1499 user_config) |
1494 else: | 1500 else: |
1495 config_names = target_dicts[target_list[0]]['configurations'].keys() | 1501 config_names = target_dicts[target_list[0]]['configurations'].keys() |
1496 for config_name in config_names: | 1502 for config_name in config_names: |
1497 GenerateOutputForConfig(target_list, target_dicts, data, params, | 1503 GenerateOutputForConfig(target_list, target_dicts, data, params, |
1498 config_name) | 1504 config_name) |
OLD | NEW |