| Index: pylib/gyp/generator/make.py
 | 
| ===================================================================
 | 
| --- pylib/gyp/generator/make.py	(revision 1569)
 | 
| +++ pylib/gyp/generator/make.py	(working copy)
 | 
| @@ -62,6 +62,7 @@
 | 
|  def CalculateVariables(default_variables, params):
 | 
|    """Calculate additional variables for use in the build (called by gyp)."""
 | 
|    flavor = gyp.common.GetFlavor(params)
 | 
| +  default_variables.setdefault('HOST_OS', gyp.common.GetHostOS())
 | 
|    if flavor == 'mac':
 | 
|      default_variables.setdefault('OS', 'mac')
 | 
|      default_variables.setdefault('SHARED_LIB_SUFFIX', '.dylib')
 | 
| @@ -161,8 +162,11 @@
 | 
|  
 | 
|  LINK_COMMANDS_MAC = """\
 | 
|  quiet_cmd_alink = LIBTOOL-STATIC $@
 | 
| -cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^)
 | 
| +cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -v -static -o $@ $(filter %.o,$^)
 | 
|  
 | 
| +quiet_cmd_alink_thin = LIBTOOL-STATIC-THIN-FAKE $@
 | 
| +cmd_alink_thin = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -v -static -o $@ $(filter %.o,$^)
 | 
| +
 | 
|  quiet_cmd_link = LINK($(TOOLSET)) $@
 | 
|  cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS)
 | 
|  
 | 
| @@ -178,28 +182,26 @@
 | 
|  """
 | 
|  
 | 
|  LINK_COMMANDS_ANDROID = """\
 | 
| -quiet_cmd_alink = AR($(TOOLSET)) $@
 | 
| -cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
 | 
| +quiet_cmd_alink_target = AR($(TOOLSET)) $@
 | 
| +cmd_alink_target = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
 | 
|  
 | 
| -quiet_cmd_alink_thin = AR($(TOOLSET)) $@
 | 
| -cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^)
 | 
| +quiet_cmd_alink_thin_target = AR($(TOOLSET)) $@
 | 
| +cmd_alink_thin_target = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^)
 | 
|  
 | 
|  # Due to circular dependencies between libraries :(, we wrap the
 | 
|  # special "figure out circular dependencies" flags around the entire
 | 
|  # input list during linking.
 | 
| -quiet_cmd_link = LINK($(TOOLSET)) $@
 | 
| -quiet_cmd_link_host = LINK($(TOOLSET)) $@
 | 
| -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS)
 | 
| -cmd_link_host = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS)
 | 
| +quiet_cmd_link_target = LINK($(TOOLSET)) $@
 | 
| +cmd_link_target = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS)
 | 
|  
 | 
|  # Other shared-object link notes:
 | 
|  # - Set SONAME to the library filename so our binaries don't reference
 | 
|  # the local, absolute paths used on the link command-line.
 | 
| -quiet_cmd_solink = SOLINK($(TOOLSET)) $@
 | 
| -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS)
 | 
| +quiet_cmd_solink_target = SOLINK($(TOOLSET)) $@
 | 
| +cmd_solink_target = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS)
 | 
|  
 | 
| -quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
 | 
| -cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS)
 | 
| +quiet_cmd_solink_module_target = SOLINK_MODULE($(TOOLSET)) $@
 | 
| +cmd_solink_module_target = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS)
 | 
|  quiet_cmd_solink_module_host = SOLINK_MODULE($(TOOLSET)) $@
 | 
|  cmd_solink_module_host = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
 | 
|  """
 | 
| @@ -1515,8 +1517,8 @@
 | 
|        self.WriteLn('%s: LD_INPUTS := %s' % (
 | 
|            QuoteSpaces(self.output_binary),
 | 
|            ' '.join(map(QuoteSpaces, link_deps))))
 | 
| -      if self.toolset == 'host' and self.flavor == 'android':
 | 
| -        self.WriteDoCmd([self.output_binary], link_deps, 'link_host',
 | 
| +      if self.toolset == 'target' and self.flavor == 'android':
 | 
| +        self.WriteDoCmd([self.output_binary], link_deps, 'link_target',
 | 
|                          part_of_all, postbuilds=postbuilds)
 | 
|        else:
 | 
|          self.WriteDoCmd([self.output_binary], link_deps, 'link', part_of_all,
 | 
| @@ -1528,24 +1530,36 @@
 | 
|              "Spaces in alink input filenames not supported (%s)"  % link_dep)
 | 
|        if (self.flavor not in ('mac', 'win') and not
 | 
|            self.is_standalone_static_library):
 | 
| -        self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin',
 | 
| -                        part_of_all, postbuilds=postbuilds)
 | 
| +        if self.toolset == 'target' and self.flavor == 'android':
 | 
| +          self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin_target',
 | 
| +                  part_of_all, postbuilds=postbuilds)
 | 
| +        else:
 | 
| +          self.WriteDoCmd([self.output_binary], link_deps, 'alink_thin',
 | 
| +                  part_of_all, postbuilds=postbuilds)
 | 
|        else:
 | 
| -        self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all,
 | 
| -                        postbuilds=postbuilds)
 | 
| +        if self.toolset == 'target' and self.flavor == 'android':
 | 
| +          self.WriteDoCmd([self.output_binary], link_deps, 'alink_target',
 | 
| +                  part_of_all, postbuilds=postbuilds)
 | 
| +        else:
 | 
| +          self.WriteDoCmd([self.output_binary], link_deps, 'alink', part_of_all,
 | 
| +                          postbuilds=postbuilds)
 | 
|      elif self.type == 'shared_library':
 | 
|        self.WriteLn('%s: LD_INPUTS := %s' % (
 | 
|              QuoteSpaces(self.output_binary),
 | 
|              ' '.join(map(QuoteSpaces, link_deps))))
 | 
| -      self.WriteDoCmd([self.output_binary], link_deps, 'solink', part_of_all,
 | 
| -                      postbuilds=postbuilds)
 | 
| +      if self.toolset == 'target' and self.flavor == 'android':
 | 
| +        self.WriteDoCmd([self.output_binary], link_deps, 'solink_target',
 | 
| +                part_of_all, postbuilds=postbuilds)
 | 
| +      else:
 | 
| +        self.WriteDoCmd([self.output_binary], link_deps, 'solink', part_of_all,
 | 
| +                        postbuilds=postbuilds)
 | 
|      elif self.type == 'loadable_module':
 | 
|        for link_dep in link_deps:
 | 
|          assert ' ' not in link_dep, (
 | 
|              "Spaces in module input filenames not supported (%s)"  % link_dep)
 | 
| -      if self.toolset == 'host' and self.flavor == 'android':
 | 
| -        self.WriteDoCmd([self.output_binary], link_deps, 'solink_module_host',
 | 
| -                        part_of_all, postbuilds=postbuilds)
 | 
| +      if self.toolset == 'target' and self.flavor == 'android':
 | 
| +        self.WriteDoCmd([self.output_binary], link_deps, 'solink_module_target',
 | 
| +            part_of_all, postbuilds=postbuilds)
 | 
|        else:
 | 
|          self.WriteDoCmd(
 | 
|              [self.output_binary], link_deps, 'solink_module', part_of_all,
 | 
| @@ -1913,6 +1927,7 @@
 | 
|  def GenerateOutput(target_list, target_dicts, data, params):
 | 
|    options = params['options']
 | 
|    flavor = gyp.common.GetFlavor(params)
 | 
| +  host_os = gyp.common.GetHostOS()
 | 
|    generator_flags = params.get('generator_flags', {})
 | 
|    builddir_name = generator_flags.get('output_dir', 'out')
 | 
|    android_ndk_version = generator_flags.get('android_ndk_version', None)
 | 
| @@ -1967,27 +1982,36 @@
 | 
|        'extra_commands': '',
 | 
|        'srcdir': srcdir,
 | 
|      }
 | 
| -  if flavor == 'mac':
 | 
| +  if host_os == 'mac':
 | 
|      flock_command = './gyp-mac-tool flock'
 | 
|      header_params.update({
 | 
|          'flock': flock_command,
 | 
|          'flock_index': 2,
 | 
|          'link_commands': LINK_COMMANDS_MAC,
 | 
| -        'extra_commands': SHARED_HEADER_MAC_COMMANDS,
 | 
|      })
 | 
| -  elif flavor == 'android':
 | 
| +  elif host_os == 'solaris':
 | 
| +    flock_command = './gyp-sun-tool flock',
 | 
|      header_params.update({
 | 
| -        'link_commands': LINK_COMMANDS_ANDROID,
 | 
| +        'flock': flock_command,
 | 
| +        'flock_index': 2,
 | 
|      })
 | 
| +  elif host_os == 'freebsd':
 | 
| +    flock_command = 'lockf',
 | 
| +    header_params.update({
 | 
| +        'flock': flock_command,
 | 
| +    })
 | 
| +
 | 
| +  if flavor == 'mac':
 | 
| +    header_params.update({
 | 
| +        'extra_commands': SHARED_HEADER_MAC_COMMANDS,
 | 
| +    })
 | 
|    elif flavor == 'solaris':
 | 
|      header_params.update({
 | 
| -        'flock': './gyp-sun-tool flock',
 | 
| -        'flock_index': 2,
 | 
|          'extra_commands': SHARED_HEADER_SUN_COMMANDS,
 | 
|      })
 | 
| -  elif flavor == 'freebsd':
 | 
| +  elif flavor == 'android':
 | 
|      header_params.update({
 | 
| -        'flock': 'lockf',
 | 
| +        'extra_commands': LINK_COMMANDS_ANDROID,
 | 
|      })
 | 
|  
 | 
|    header_params.update({
 | 
| @@ -2010,7 +2034,7 @@
 | 
|      if key == 'LINK':
 | 
|        make_global_settings += ('%s ?= %s $(builddir)/linker.lock %s\n' %
 | 
|                                 (key, flock_command, value))
 | 
| -    elif key in ('CC', 'CC.host', 'CXX', 'CXX.host'):
 | 
| +    elif key in ('CC', 'CC.host', 'CXX', 'CXX.host', 'AR', 'AR.host'):
 | 
|        make_global_settings += (
 | 
|            'ifneq (,$(filter $(origin %s), undefined default))\n' % key)
 | 
|        # Let gyp-time envvars win over global settings.
 | 
| @@ -2038,7 +2062,7 @@
 | 
|  
 | 
|    # Put build-time support tools next to the root Makefile.
 | 
|    dest_path = os.path.dirname(makefile_path)
 | 
| -  gyp.common.CopyTool(flavor, dest_path)
 | 
| +  gyp.common.CopyTool(host_os, dest_path)
 | 
|  
 | 
|    # Find the list of targets that derive from the gyp file(s) being built.
 | 
|    needed_targets = set()
 | 
| 
 |