| 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 11 matching lines...) Expand all Loading... |
| 22 # the side to keep the the files readable. | 22 # the side to keep the the files readable. |
| 23 | 23 |
| 24 import os | 24 import os |
| 25 import re | 25 import re |
| 26 import sys | 26 import sys |
| 27 import subprocess | 27 import subprocess |
| 28 import gyp | 28 import gyp |
| 29 import gyp.common | 29 import gyp.common |
| 30 import gyp.xcode_emulation | 30 import gyp.xcode_emulation |
| 31 from gyp.common import GetEnvironFallback | 31 from gyp.common import GetEnvironFallback |
| 32 from gyp.common import GypError |
| 32 | 33 |
| 33 generator_default_variables = { | 34 generator_default_variables = { |
| 34 'EXECUTABLE_PREFIX': '', | 35 'EXECUTABLE_PREFIX': '', |
| 35 'EXECUTABLE_SUFFIX': '', | 36 'EXECUTABLE_SUFFIX': '', |
| 36 'STATIC_LIB_PREFIX': 'lib', | 37 'STATIC_LIB_PREFIX': 'lib', |
| 37 'SHARED_LIB_PREFIX': 'lib', | 38 'SHARED_LIB_PREFIX': 'lib', |
| 38 'STATIC_LIB_SUFFIX': '.a', | 39 'STATIC_LIB_SUFFIX': '.a', |
| 39 'INTERMEDIATE_DIR': '$(obj).$(TOOLSET)/$(TARGET)/geni', | 40 'INTERMEDIATE_DIR': '$(obj).$(TOOLSET)/$(TARGET)/geni', |
| 40 'SHARED_INTERMEDIATE_DIR': '$(obj)/gen', | 41 'SHARED_INTERMEDIATE_DIR': '$(obj)/gen', |
| 41 'PRODUCT_DIR': '$(builddir)', | 42 'PRODUCT_DIR': '$(builddir)', |
| (...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 return path | 625 return path |
| 625 if os.path.isabs(path): | 626 if os.path.isabs(path): |
| 626 return path | 627 return path |
| 627 return srcdir_prefix + path | 628 return srcdir_prefix + path |
| 628 | 629 |
| 629 | 630 |
| 630 def QuoteSpaces(s, quote=r'\ '): | 631 def QuoteSpaces(s, quote=r'\ '): |
| 631 return s.replace(' ', quote) | 632 return s.replace(' ', quote) |
| 632 | 633 |
| 633 | 634 |
| 635 # TODO: Avoid code duplication with _ValidateSourcesForMSVSProject in msvs.py. |
| 636 def _ValidateSourcesForOSX(spec, all_sources): |
| 637 """Makes sure if duplicate basenames are not specified in the source list. |
| 638 |
| 639 Arguments: |
| 640 spec: The target dictionary containing the properties of the target. |
| 641 """ |
| 642 if spec.get('type', None) != 'static_library': |
| 643 return |
| 644 |
| 645 basenames = {} |
| 646 for source in all_sources: |
| 647 name, ext = os.path.splitext(source) |
| 648 is_compiled_file = ext in [ |
| 649 '.c', '.cc', '.cpp', '.cxx', '.m', '.mm', '.s', '.S'] |
| 650 if not is_compiled_file: |
| 651 continue |
| 652 basename = os.path.basename(name) # Don't include extension. |
| 653 basenames.setdefault(basename, []).append(source) |
| 654 |
| 655 error = '' |
| 656 for basename, files in basenames.iteritems(): |
| 657 if len(files) > 1: |
| 658 error += ' %s: %s\n' % (basename, ' '.join(files)) |
| 659 |
| 660 if error: |
| 661 print('static library %s has several files with the same basename:\n' % |
| 662 spec['target_name'] + error + 'libtool on OS X will generate' + |
| 663 ' warnings for them.') |
| 664 raise GypError('Duplicate basenames in sources section, see list above') |
| 665 |
| 666 |
| 634 # Map from qualified target to path to output. | 667 # Map from qualified target to path to output. |
| 635 target_outputs = {} | 668 target_outputs = {} |
| 636 # Map from qualified target to any linkable output. A subset | 669 # Map from qualified target to any linkable output. A subset |
| 637 # of target_outputs. E.g. when mybinary depends on liba, we want to | 670 # of target_outputs. E.g. when mybinary depends on liba, we want to |
| 638 # include liba in the linker line; when otherbinary depends on | 671 # include liba in the linker line; when otherbinary depends on |
| 639 # mybinary, we just want to build mybinary first. | 672 # mybinary, we just want to build mybinary first. |
| 640 target_link_deps = {} | 673 target_link_deps = {} |
| 641 | 674 |
| 642 | 675 |
| 643 class MakefileWriter: | 676 class MakefileWriter: |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 # Bundle resources. | 784 # Bundle resources. |
| 752 if self.is_mac_bundle: | 785 if self.is_mac_bundle: |
| 753 all_mac_bundle_resources = ( | 786 all_mac_bundle_resources = ( |
| 754 spec.get('mac_bundle_resources', []) + extra_mac_bundle_resources) | 787 spec.get('mac_bundle_resources', []) + extra_mac_bundle_resources) |
| 755 self.WriteMacBundleResources(all_mac_bundle_resources, mac_bundle_deps) | 788 self.WriteMacBundleResources(all_mac_bundle_resources, mac_bundle_deps) |
| 756 self.WriteMacInfoPlist(mac_bundle_deps) | 789 self.WriteMacInfoPlist(mac_bundle_deps) |
| 757 | 790 |
| 758 # Sources. | 791 # Sources. |
| 759 all_sources = spec.get('sources', []) + extra_sources | 792 all_sources = spec.get('sources', []) + extra_sources |
| 760 if all_sources: | 793 if all_sources: |
| 794 if self.flavor == 'mac': |
| 795 # libtool on OS X generates warnings for duplicate basenames in the same |
| 796 # target. |
| 797 _ValidateSourcesForOSX(spec, all_sources) |
| 761 self.WriteSources( | 798 self.WriteSources( |
| 762 configs, deps, all_sources, extra_outputs, | 799 configs, deps, all_sources, extra_outputs, |
| 763 extra_link_deps, part_of_all, | 800 extra_link_deps, part_of_all, |
| 764 gyp.xcode_emulation.MacPrefixHeader( | 801 gyp.xcode_emulation.MacPrefixHeader( |
| 765 self.xcode_settings, lambda p: Sourceify(self.Absolutify(p)), | 802 self.xcode_settings, lambda p: Sourceify(self.Absolutify(p)), |
| 766 self.Pchify)) | 803 self.Pchify)) |
| 767 sources = filter(Compilable, all_sources) | 804 sources = filter(Compilable, all_sources) |
| 768 if sources: | 805 if sources: |
| 769 self.WriteLn(SHARED_HEADER_SUFFIX_RULES_COMMENT1) | 806 self.WriteLn(SHARED_HEADER_SUFFIX_RULES_COMMENT1) |
| 770 extensions = set([os.path.splitext(s)[1] for s in sources]) | 807 extensions = set([os.path.splitext(s)[1] for s in sources]) |
| (...skipping 1401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2172 root_makefile.write("endif\n") | 2209 root_makefile.write("endif\n") |
| 2173 root_makefile.write('\n') | 2210 root_makefile.write('\n') |
| 2174 | 2211 |
| 2175 if (not generator_flags.get('standalone') | 2212 if (not generator_flags.get('standalone') |
| 2176 and generator_flags.get('auto_regeneration', True)): | 2213 and generator_flags.get('auto_regeneration', True)): |
| 2177 WriteAutoRegenerationRule(params, root_makefile, makefile_name, build_files) | 2214 WriteAutoRegenerationRule(params, root_makefile, makefile_name, build_files) |
| 2178 | 2215 |
| 2179 root_makefile.write(SHARED_FOOTER) | 2216 root_makefile.write(SHARED_FOOTER) |
| 2180 | 2217 |
| 2181 root_makefile.close() | 2218 root_makefile.close() |
| OLD | NEW |