Hello community,

here is the log from the commit of package gyp for openSUSE:Factory checked in 
at 2016-08-31 00:01:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gyp (Old)
 and      /work/SRC/openSUSE:Factory/.gyp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gyp"

Changes:
--------
--- /work/SRC/openSUSE:Factory/gyp/gyp.changes  2016-07-20 09:16:05.000000000 
+0200
+++ /work/SRC/openSUSE:Factory/.gyp.new/gyp.changes     2016-08-31 
00:01:15.000000000 +0200
@@ -1,0 +2,15 @@
+Sun Aug 28 12:09:58 UTC 2016 - [email protected]
+
+- Update to version 0+git.20160810:
+  * Adds support for a new target spec: 'mac_xcuitest_bundle'. This allows us 
to create UI testing bundles.
+  * Enabling /ZW (CompileAsWinRT) option for msvs
+  * ninja/mac: Add horrible workaround for horrible Xcode 7.3 ld bug.
+  * [gyp-ninja] Set simulator and device SDKROOT for iOS.
+  * Ignore more Xcode stderr logging information.
+  * Only call CopyStringsFile if convert_to_binary is False.
+  * Fix :rfc1034identifier when the value contains underscore.
+  * Complete PBXCopyFilesBuildPhase TODO in xcodeproj_file.py.
+  * Make the ninja backend transitively check for C++ sources to use the C++ 
compiler for linking
+  * Add new target type called windows_driver. * Modify GYP to set the 
PlatformToolset, the DriverType and the TargetVersion * Add msvs_target_version 
configuration
+
+-------------------------------------------------------------------

Old:
----
  gyp-0+git.20160620.tar.xz

New:
----
  gyp-0+git.20160810.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gyp.spec ++++++
--- /var/tmp/diff_new_pack.Bl5nXM/_old  2016-08-31 00:01:16.000000000 +0200
+++ /var/tmp/diff_new_pack.Bl5nXM/_new  2016-08-31 00:01:16.000000000 +0200
@@ -18,7 +18,7 @@
 
 
 Name:           gyp
-Version:        0+git.20160620
+Version:        0+git.20160810
 Release:        0
 Summary:        Generate Your Projects
 License:        BSD-3-Clause

++++++ gyp-0+git.20160620.tar.xz -> gyp-0+git.20160810.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gyp-0+git.20160620/pylib/gyp/MSVSUtil.py 
new/gyp-0+git.20160810/pylib/gyp/MSVSUtil.py
--- old/gyp-0+git.20160620/pylib/gyp/MSVSUtil.py        2016-07-06 
14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/pylib/gyp/MSVSUtil.py        2016-08-10 
22:13:45.000000000 +0200
@@ -14,6 +14,7 @@
   'loadable_module': 'dll',
   'shared_library': 'dll',
   'static_library': 'lib',
+  'windows_driver': 'sys',
 }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gyp-0+git.20160620/pylib/gyp/generator/msvs.py 
new/gyp-0+git.20160810/pylib/gyp/generator/msvs.py
--- old/gyp-0+git.20160620/pylib/gyp/generator/msvs.py  2016-07-06 
14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/pylib/gyp/generator/msvs.py  2016-08-10 
22:13:45.000000000 +0200
@@ -46,6 +46,8 @@
 
 
 generator_default_variables = {
+    'DRIVER_PREFIX': '',
+    'DRIVER_SUFFIX': '.sys',
     'EXECUTABLE_PREFIX': '',
     'EXECUTABLE_SUFFIX': '.exe',
     'STATIC_LIB_PREFIX': '',
@@ -272,6 +274,10 @@
     tool[setting] = value
 
 
+def _ConfigTargetVersion(config_data):
+  return config_data.get('msvs_target_version', 'Windows7')
+
+
 def _ConfigPlatform(config_data):
   return config_data.get('msvs_configuration_platform', 'Win32')
 
@@ -919,6 +925,8 @@
   toolset = default_config.get('msbuild_toolset')
   if not toolset and version.DefaultToolset():
     toolset = version.DefaultToolset()
+  if spec['type'] == 'windows_driver':
+    toolset = 'WindowsKernelModeDriver10.0'
   return toolset
 
 
@@ -1102,6 +1110,7 @@
         'shared_library': '2',  # .dll
         'loadable_module': '2',  # .dll
         'static_library': '4',  # .lib
+        'windows_driver': '5',  # .sys
         'none': '10',  # Utility type
         }[spec['type']]
   except KeyError:
@@ -1286,6 +1295,7 @@
       'executable': ('VCLinkerTool', 'Link', '$(OutDir)', '.exe'),
       'shared_library': ('VCLinkerTool', 'Link', '$(OutDir)', '.dll'),
       'loadable_module': ('VCLinkerTool', 'Link', '$(OutDir)', '.dll'),
+      'windows_driver': ('VCLinkerTool', 'Link', '$(OutDir)', '.sys'),
       'static_library': ('VCLibrarianTool', 'Lib', '$(OutDir)lib\\', '.lib'),
   }
   output_file_props = output_file_map.get(spec['type'])
@@ -1348,7 +1358,8 @@
 
 def _GetModuleDefinition(spec):
   def_file = ''
-  if spec['type'] in ['shared_library', 'loadable_module', 'executable']:
+  if spec['type'] in ['shared_library', 'loadable_module', 'executable',
+                      'windows_driver']:
     def_files = [s for s in spec.get('sources', []) if s.endswith('.def')]
     if len(def_files) == 1:
       def_file = _FixPath(def_files[0])
@@ -2710,14 +2721,20 @@
 
   return properties
 
+
 def _GetMSBuildConfigurationDetails(spec, build_file):
   properties = {}
   for name, settings in spec['configurations'].iteritems():
     msbuild_attributes = _GetMSBuildAttributes(spec, settings, build_file)
     condition = _GetConfigurationCondition(name, settings)
     character_set = msbuild_attributes.get('CharacterSet')
+    config_type = msbuild_attributes.get('ConfigurationType')
     _AddConditionalProperty(properties, condition, 'ConfigurationType',
-                            msbuild_attributes['ConfigurationType'])
+                            config_type)
+    if config_type == 'Driver':
+      _AddConditionalProperty(properties, condition, 'DriverType', 'WDM')
+      _AddConditionalProperty(properties, condition, 'TargetVersion',
+                              _ConfigTargetVersion(settings))
     if character_set:
       if 'msvs_enable_winrt' not in spec :
         _AddConditionalProperty(properties, condition, 'CharacterSet',
@@ -2816,6 +2833,7 @@
         '1': 'Application',
         '2': 'DynamicLibrary',
         '4': 'StaticLibrary',
+        '5': 'Driver',
         '10': 'Utility'
     }[config_type]
   return config_type
@@ -2855,6 +2873,7 @@
       'executable': 'Link',
       'shared_library': 'Link',
       'loadable_module': 'Link',
+      'windows_driver': 'Link',
       'static_library': 'Lib',
   }
   msbuild_tool = msbuild_tool_map.get(spec['type'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gyp-0+git.20160620/pylib/gyp/generator/ninja.py 
new/gyp-0+git.20160810/pylib/gyp/generator/ninja.py
--- old/gyp-0+git.20160620/pylib/gyp/generator/ninja.py 2016-07-06 
14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/pylib/gyp/generator/ninja.py 2016-08-10 
22:13:45.000000000 +0200
@@ -148,6 +148,9 @@
     # because dependents only link against the lib (not both the lib and the
     # dll) we keep track of the import library here.
     self.import_lib = None
+    # Track if this target contains any C++ files, to decide if gcc or g++
+    # should be used for linking.
+    self.uses_cpp = False
 
   def Linkable(self):
     """Return true if this is a target that can be linked against."""
@@ -375,9 +378,6 @@
     self.target = Target(spec['type'])
     self.is_standalone_static_library = bool(
         spec.get('standalone_static_library', 0))
-    # Track if this target contains any C++ files, to decide if gcc or g++
-    # should be used for linking.
-    self.uses_cpp = False
 
     self.target_rpath = generator_flags.get('target_rpath', r'\$$ORIGIN/lib/')
 
@@ -425,6 +425,8 @@
           target = self.target_outputs[dep]
           actions_depends.append(target.PreActionInput(self.flavor))
           compile_depends.append(target.PreCompileInput())
+          if target.uses_cpp:
+            self.target.uses_cpp = True
       actions_depends = filter(None, actions_depends)
       compile_depends = filter(None, compile_depends)
       actions_depends = self.WriteCollapsedDependencies('actions_depends',
@@ -450,7 +452,12 @@
 
     # Write out the compilation steps, if any.
     link_deps = []
-    sources = extra_sources + spec.get('sources', [])
+    try:
+      sources = extra_sources + spec.get('sources', [])
+    except TypeError:
+      print 'extra_sources: ', str(extra_sources)
+      print 'spec.get("sources"): ', str(spec.get('sources'))
+      raise
     if sources:
       if self.flavor == 'mac' and len(self.archs) > 1:
         # Write subninja file containing compile and link commands scoped to
@@ -1027,7 +1034,7 @@
       obj_ext = self.obj_ext
       if ext in ('cc', 'cpp', 'cxx'):
         command = 'cxx'
-        self.uses_cpp = True
+        self.target.uses_cpp = True
       elif ext == 'c' or (ext == 'S' and self.flavor != 'win'):
         command = 'cc'
       elif ext == 's' and self.flavor != 'win':  # Doesn't generate .o.d files.
@@ -1042,7 +1049,7 @@
         command = 'objc'
       elif self.flavor == 'mac' and ext == 'mm':
         command = 'objcxx'
-        self.uses_cpp = True
+        self.target.uses_cpp = True
       elif self.flavor == 'win' and ext == 'rc':
         command = 'rc'
         obj_ext = '.res'
@@ -1178,7 +1185,7 @@
           implicit_deps.add(final_output)
 
     extra_bindings = []
-    if self.uses_cpp and self.flavor != 'win':
+    if self.target.uses_cpp and self.flavor != 'win':
       extra_bindings.append(('ld', '$ldxx'))
 
     output = self.ComputeOutput(spec, arch)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gyp-0+git.20160620/pylib/gyp/input.py 
new/gyp-0+git.20160810/pylib/gyp/input.py
--- old/gyp-0+git.20160620/pylib/gyp/input.py   2016-07-06 14:15:59.000000000 
+0200
+++ new/gyp-0+git.20160810/pylib/gyp/input.py   2016-08-10 22:13:45.000000000 
+0200
@@ -33,6 +33,7 @@
   'shared_library',
   'loadable_module',
   'mac_kernel_extension',
+  'windows_driver',
 ]
 
 # A list of sections that contain links to other targets.
@@ -1734,12 +1735,13 @@
       dependencies.add(self.ref)
       return dependencies
 
-    # Executables, mac kernel extensions and loadable modules are already fully
-    # and finally linked. Nothing else can be a link dependency of them, there
-    # can only be dependencies in the sense that a dependent target might run
-    # an executable or load the loadable_module.
+    # Executables, mac kernel extensions, windows drivers and loadable modules
+    # are already fully and finally linked. Nothing else can be a link
+    # dependency of them, there can only be dependencies in the sense that a
+    # dependent target might run an executable or load the loadable_module.
     if not initial and target_type in ('executable', 'loadable_module',
-                                       'mac_kernel_extension'):
+                                       'mac_kernel_extension',
+                                       'windows_driver'):
       return dependencies
 
     # Shared libraries are already fully linked.  They should only be included
@@ -2490,7 +2492,7 @@
   """
   VALID_TARGET_TYPES = ('executable', 'loadable_module',
                         'static_library', 'shared_library',
-                        'mac_kernel_extension', 'none')
+                        'mac_kernel_extension', 'none', 'windows_driver')
   target_type = target_dict.get('type', None)
   if target_type not in VALID_TARGET_TYPES:
     raise GypError("Target %s has an invalid target type '%s'.  "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gyp-0+git.20160620/pylib/gyp/mac_tool.py 
new/gyp-0+git.20160810/pylib/gyp/mac_tool.py
--- old/gyp-0+git.20160620/pylib/gyp/mac_tool.py        2016-07-06 
14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/pylib/gyp/mac_tool.py        2016-08-10 
22:13:45.000000000 +0200
@@ -49,6 +49,7 @@
   def ExecCopyBundleResource(self, source, dest, convert_to_binary):
     """Copies a resource file to the bundle/Resources directory, performing any
     necessary compilation on each resource."""
+    convert_to_binary = convert_to_binary == 'True'
     extension = os.path.splitext(source)[1].lower()
     if os.path.isdir(source):
       # Copy tree.
@@ -62,14 +63,14 @@
       return self._CopyXIBFile(source, dest)
     elif extension == '.storyboard':
       return self._CopyXIBFile(source, dest)
-    elif extension == '.strings':
+    elif extension == '.strings' and not convert_to_binary:
       self._CopyStringsFile(source, dest)
     else:
       if os.path.exists(dest):
         os.unlink(dest)
       shutil.copy(source, dest)
 
-    if extension in ('.plist', '.strings') and convert_to_binary == 'True':
+    if convert_to_binary and extension in ('.plist', '.strings'):
       self._ConvertToBinary(dest)
 
   def _CopyXIBFile(self, source, dest):
@@ -174,7 +175,7 @@
 
     # Go through all the environment variables and replace them as variables in
     # the file.
-    IDENT_RE = re.compile(r'[/\s]')
+    IDENT_RE = re.compile(r'[_/\s]')
     for key in os.environ:
       if key.startswith('_'):
         continue
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gyp-0+git.20160620/pylib/gyp/xcode_emulation.py 
new/gyp-0+git.20160810/pylib/gyp/xcode_emulation.py
--- old/gyp-0+git.20160620/pylib/gyp/xcode_emulation.py 2016-07-06 
14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/pylib/gyp/xcode_emulation.py 2016-08-10 
22:13:45.000000000 +0200
@@ -312,6 +312,56 @@
       return self.GetBundleContentsFolderPath()
     return os.path.join(self.GetBundleContentsFolderPath(), 'Resources')
 
+  def GetBundleExecutableFolderPath(self):
+    """Returns the qualified path to the bundle's executables folder. E.g.
+    Chromium.app/Contents/MacOS. Only valid for bundles."""
+    assert self._IsBundle()
+    if self.spec['type'] in ('shared_library') or self.isIOS:
+      return self.GetBundleContentsFolderPath()
+    elif self.spec['type'] in ('executable', 'loadable_module'):
+      return os.path.join(self.GetBundleContentsFolderPath(), 'MacOS')
+
+  def GetBundleJavaFolderPath(self):
+    """Returns the qualified path to the bundle's Java resource folder.
+    E.g. Chromium.app/Contents/Resources/Java. Only valid for bundles."""
+    assert self._IsBundle()
+    return os.path.join(self.GetBundleResourceFolder(), 'Java')
+
+  def GetBundleFrameworksFolderPath(self):
+    """Returns the qualified path to the bundle's frameworks folder. E.g,
+    Chromium.app/Contents/Frameworks. Only valid for bundles."""
+    assert self._IsBundle()
+    return os.path.join(self.GetBundleContentsFolderPath(), 'Frameworks')
+
+  def GetBundleSharedFrameworksFolderPath(self):
+    """Returns the qualified path to the bundle's frameworks folder. E.g,
+    Chromium.app/Contents/SharedFrameworks. Only valid for bundles."""
+    assert self._IsBundle()
+    return os.path.join(self.GetBundleContentsFolderPath(),
+                        'SharedFrameworks')
+
+  def GetBundleSharedSupportFolderPath(self):
+    """Returns the qualified path to the bundle's shared support folder. E.g,
+    Chromium.app/Contents/SharedSupport. Only valid for bundles."""
+    assert self._IsBundle()
+    if self.spec['type'] == 'shared_library':
+      return self.GetBundleResourceFolder()
+    else:
+      return os.path.join(self.GetBundleContentsFolderPath(),
+                          'SharedSupport')
+
+  def GetBundlePlugInsFolderPath(self):
+    """Returns the qualified path to the bundle's plugins folder. E.g,
+    Chromium.app/Contents/PlugIns. Only valid for bundles."""
+    assert self._IsBundle()
+    return os.path.join(self.GetBundleContentsFolderPath(), 'PlugIns')
+
+  def GetBundleXPCServicesFolderPath(self):
+    """Returns the qualified path to the bundle's XPC services folder. E.g,
+    Chromium.app/Contents/XPCServices. Only valid for bundles."""
+    assert self._IsBundle()
+    return os.path.join(self.GetBundleContentsFolderPath(), 'XPCServices')
+
   def GetBundlePlistPath(self):
     """Returns the qualified path to the bundle's plist file. E.g.
     Chromium.app/Contents/Info.plist. Only valid for bundles."""
@@ -371,11 +421,8 @@
     """Returns the name of the bundle binary of by this target.
     E.g. Chromium.app/Contents/MacOS/Chromium. Only valid for bundles."""
     assert self._IsBundle()
-    if self.spec['type'] in ('shared_library') or self.isIOS:
-      path = self.GetBundleContentsFolderPath()
-    elif self.spec['type'] in ('executable', 'loadable_module'):
-      path = os.path.join(self.GetBundleContentsFolderPath(), 'MacOS')
-    return os.path.join(path, self.GetExecutableName())
+    return os.path.join(self.GetBundleExecutableFolderPath(), \
+                        self.GetExecutableName())
 
   def _GetStandaloneExecutableSuffix(self):
     if 'product_extension' in self.spec:
@@ -426,8 +473,8 @@
       return self._GetStandaloneBinaryPath()
 
   def GetExecutablePath(self):
-    """Returns the directory name of the bundle represented by this target. 
E.g.
-    Chromium.app/Contents/MacOS/Chromium."""
+    """Returns the qualified path to the primary executable of the bundle
+    represented by this target. E.g. Chromium.app/Contents/MacOS/Chromium."""
     if self._IsBundle():
       return self._GetBundleBinaryPath()
     else:
@@ -1541,13 +1588,14 @@
       additional_settings: An optional dict with more values to add to the
           result.
   """
+
   if not xcode_settings: return {}
 
   # This function is considered a friend of XcodeSettings, so let it reach into
   # its implementation details.
   spec = xcode_settings.spec
 
-  # These are filled in on a as-needed basis.
+  # These are filled in on an as-needed basis.
   env = {
     'BUILT_FRAMEWORKS_DIR' : built_products_dir,
     'BUILT_PRODUCTS_DIR' : built_products_dir,
@@ -1580,10 +1628,27 @@
       env['MACH_O_TYPE'] = mach_o_type
     env['PRODUCT_TYPE'] = xcode_settings.GetProductType()
   if xcode_settings._IsBundle():
+    # xcodeproj_file.py sets the same Xcode subfolder value for this as for
+    # FRAMEWORKS_FOLDER_PATH so Xcode builds will actually use FFP's value.
+    env['BUILT_FRAMEWORKS_DIR'] = \
+        os.path.join(built_products_dir + os.sep \
+                     + xcode_settings.GetBundleFrameworksFolderPath())
     env['CONTENTS_FOLDER_PATH'] = \
-      xcode_settings.GetBundleContentsFolderPath()
+        xcode_settings.GetBundleContentsFolderPath()
+    env['EXECUTABLE_FOLDER_PATH'] = \
+        xcode_settings.GetBundleExecutableFolderPath()
     env['UNLOCALIZED_RESOURCES_FOLDER_PATH'] = \
         xcode_settings.GetBundleResourceFolder()
+    env['JAVA_FOLDER_PATH'] = xcode_settings.GetBundleJavaFolderPath()
+    env['FRAMEWORKS_FOLDER_PATH'] = \
+        xcode_settings.GetBundleFrameworksFolderPath()
+    env['SHARED_FRAMEWORKS_FOLDER_PATH'] = \
+        xcode_settings.GetBundleSharedFrameworksFolderPath()
+    env['SHARED_SUPPORT_FOLDER_PATH'] = \
+        xcode_settings.GetBundleSharedSupportFolderPath()
+    env['PLUGINS_FOLDER_PATH'] = xcode_settings.GetBundlePlugInsFolderPath()
+    env['XPCSERVICES_FOLDER_PATH'] = \
+        xcode_settings.GetBundleXPCServicesFolderPath()
     env['INFOPLIST_PATH'] = xcode_settings.GetBundlePlistPath()
     env['WRAPPER_NAME'] = xcode_settings.GetWrapperName()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gyp-0+git.20160620/pylib/gyp/xcodeproj_file.py 
new/gyp-0+git.20160810/pylib/gyp/xcodeproj_file.py
--- old/gyp-0+git.20160620/pylib/gyp/xcodeproj_file.py  2016-07-06 
14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/pylib/gyp/xcodeproj_file.py  2016-08-10 
22:13:45.000000000 +0200
@@ -1945,24 +1945,40 @@
     'name':             [0, str, 0, 0],
   })
 
-  # path_tree_re matches "$(DIR)/path" or just "$(DIR)".  Match group 1 is
-  # "DIR", match group 3 is "path" or None.
-  path_tree_re = re.compile('^\\$\\((.*)\\)(/(.*)|)$')
-
-  # path_tree_to_subfolder maps names of Xcode variables to the associated
-  # dstSubfolderSpec property value used in a PBXCopyFilesBuildPhase object.
-  path_tree_to_subfolder = {
-    'BUILT_FRAMEWORKS_DIR': 10,  # Frameworks Directory
-    'BUILT_PRODUCTS_DIR': 16,  # Products Directory
-    # Other types that can be chosen via the Xcode UI.
-    # TODO(mark): Map Xcode variable names to these.
-    # : 1,  # Wrapper
-    # : 6,  # Executables: 6
-    # : 7,  # Resources
-    # : 15,  # Java Resources
-    # : 11,  # Shared Frameworks
-    # : 12,  # Shared Support
-    # : 13,  # PlugIns
+  # path_tree_re matches "$(DIR)/path", "$(DIR)/$(DIR2)/path" or just "$(DIR)".
+  # Match group 1 is "DIR", group 3 is "path" or "$(DIR2") or "$(DIR2)/path"
+  # or None. If group 3 is "path", group 4 will be None otherwise group 4 is
+  # "DIR2" and group 6 is "path".
+  path_tree_re = re.compile(r'^\$\((.*?)\)(/(\$\((.*?)\)(/(.*)|)|(.*)|)|)$')
+
+  # path_tree_{first,second}_to_subfolder map names of Xcode variables to the
+  # associated dstSubfolderSpec property value used in a PBXCopyFilesBuildPhase
+  # object.
+  path_tree_first_to_subfolder = {
+    # Types that can be chosen via the Xcode UI.
+    'BUILT_PRODUCTS_DIR':               16,  # Products Directory
+    'BUILT_FRAMEWORKS_DIR':             10,  # Not an official Xcode macro.
+                                             # Existed before support for the
+                                             # names below was added. Maps to
+                                             # "Frameworks".
+  }
+
+  path_tree_second_to_subfolder = {
+    'WRAPPER_NAME':                      1,  # Wrapper
+    # Although Xcode's friendly name is "Executables", the destination
+    # is demonstrably the value of the build setting
+    # EXECUTABLE_FOLDER_PATH not EXECUTABLES_FOLDER_PATH.
+    'EXECUTABLE_FOLDER_PATH':            6,  # Executables.
+    'UNLOCALIZED_RESOURCES_FOLDER_PATH': 7,  # Resources
+    'JAVA_FOLDER_PATH':                 15,  # Java Resources
+    'FRAMEWORKS_FOLDER_PATH':           10,  # Frameworks
+    'SHARED_FRAMEWORKS_FOLDER_PATH':    11,  # Shared Frameworks
+    'SHARED_SUPPORT_FOLDER_PATH':       12,  # Shared Support
+    'PLUGINS_FOLDER_PATH':              13,  # PlugIns
+    # For XPC Services, Xcode sets both dstPath and dstSubfolderSpec.
+    # Note that it re-uses the BUILT_PRODUCTS_DIR value for
+    # dstSubfolderSpec. dstPath is set below.
+    'XPCSERVICES_FOLDER_PATH':          16,  # XPC Services.
   }
 
   def Name(self):
@@ -1983,14 +1999,61 @@
 
     path_tree_match = self.path_tree_re.search(path)
     if path_tree_match:
-      # Everything else needs to be relative to an Xcode variable.
-      path_tree = path_tree_match.group(1)
-      relative_path = path_tree_match.group(3)
-
-      if path_tree in self.path_tree_to_subfolder:
-        subfolder = self.path_tree_to_subfolder[path_tree]
+      path_tree = path_tree_match.group(1);
+      if path_tree in self.path_tree_first_to_subfolder:
+        subfolder = self.path_tree_first_to_subfolder[path_tree]
+        relative_path = path_tree_match.group(3)
         if relative_path is None:
           relative_path = ''
+
+        if subfolder == 16 and path_tree_match.group(4) is not None:
+          # BUILT_PRODUCTS_DIR (16) is the first element in a path whose
+          # second element is possibly one of the variable names in
+          # path_tree_second_to_subfolder. Xcode sets the values of all these
+          # variables to relative paths so .gyp files must prefix them with
+          # BUILT_PRODUCTS_DIR, e.g.
+          # $(BUILT_PRODUCTS_DIR)/$(PLUGINS_FOLDER_PATH). Then
+          # xcode_emulation.py can export these variables with the same values
+          # as Xcode yet make & ninja files can determine the absolute path
+          # to the target. Xcode uses the dstSubfolderSpec value set here
+          # to determine the full path.
+          #
+          # An alternative of xcode_emulation.py setting the values to absolute
+          # paths when exporting these variables has been ruled out because
+          # then the values would be different depending on the build tool.
+          #
+          # Another alternative is to invent new names for the variables used
+          # to match to the subfolder indices in the second table. .gyp files
+          # then will not need to prepend $(BUILT_PRODUCTS_DIR) because
+          # xcode_emulation.py can set the values of those variables to
+          # the absolute paths when exporting. This is possibly the thinking
+          # behind BUILT_FRAMEWORKS_DIR which is used in exactly this manner.
+          #
+          # Requiring prepending BUILT_PRODUCTS_DIR has been chosen because
+          # this same way could be used to specify destinations in .gyp files
+          # that pre-date this addition to GYP. However they would only work
+          # with the Xcode generator. The previous version of 
xcode_emulation.py
+          # does not export these variables. Such files will get the benefit
+          # of the Xcode UI showing the proper destination name simply by
+          # regenerating the projects with this version of GYP.
+          path_tree = path_tree_match.group(4)
+          relative_path = path_tree_match.group(6)
+          separator = '/'
+
+          if path_tree in self.path_tree_second_to_subfolder:
+            subfolder = self.path_tree_second_to_subfolder[path_tree]
+            if relative_path is None:
+              relative_path = ''
+              separator = ''
+            if path_tree == 'XPCSERVICES_FOLDER_PATH':
+              relative_path = '$(CONTENTS_FOLDER_PATH)/XPCServices' \
+                              + separator + relative_path
+          else:
+            # subfolder = 16 from above
+            # The second element of the path is an unrecognized variable.
+            # Include it and any remaining elements in relative_path.
+            relative_path = path_tree_match.group(3);
+
       else:
         # The path starts with an unrecognized Xcode variable
         # name like $(SRCROOT).  Xcode will still handle this
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/Info.plist 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/Info.plist
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/Info.plist        
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/Info.plist        
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd";>
+<plist version="1.0">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleExecutable</key>
+       <string>${EXECUTABLE_NAME}</string>
+       <key>CFBundleIdentifier</key>
+       <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>${PRODUCT_NAME}</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleShortVersionString</key>
+       <string>1.0</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1</string>
+</dict>
+</plist>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/copies-with-xcode-envvars.gyp
 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/copies-with-xcode-envvars.gyp
--- 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/copies-with-xcode-envvars.gyp
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/copies-with-xcode-envvars.gyp
     2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1,97 @@
+# Copyright (c) 2016 Mark Callow. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# For testing use of the UI settings & environment variables
+# available in Xcode's PBXCopyFilesBuildPhase.
+{
+  'targets': [
+  {
+    'target_name': 'copies-with-xcode-envvars',
+    'type': 'executable',
+    'mac_bundle': 1,
+    'xcode_settings': {
+      'SDKROOT': 'iphoneos',
+      'TARGETED_DEVICE_FAMILY': '1,2',
+      'IPHONEOS_DEPLOYMENT_TARGET': '7.0',
+      'CODE_SIGNING_REQUIRED': 'NO',
+      'INFOPLIST_FILE': 'Info.plist',
+      # This is where the test framework looks for results. Without
+      # this line the result will be in build/Default-iphoneos.
+      'CONFIGURATION_BUILD_DIR':'build/Default',
+    },
+    'sources': [ 'empty.c' ],
+    'conditions': [
+      ['OS == "ios" or OS == "mac"', {
+        'copies': [{
+          'destination': '$(BUILT_PRODUCTS_DIR)',
+          'files': [
+            'file0',
+          ],
+        }, {
+          'destination': '$(BUILT_PRODUCTS_DIR)/$(WRAPPER_NAME)',
+          'files': [
+            'file1',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(EXECUTABLE_FOLDER_PATH)',
+          'files': [
+            'file2',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)',
+          'files': [
+            'file3',
+          ],
+        }, {
+          'destination': 
'<(PRODUCT_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/testimages',
+          'files': [
+            'file4',
+          ],
+        }, {
+          'destination': '$(BUILT_PRODUCTS_DIR)/$(JAVA_FOLDER_PATH)',
+          'files': [
+            'file5',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(FRAMEWORKS_FOLDER_PATH)',
+            'files': [
+              'file6',
+          ],
+        }, {
+          # NOTE: This is not an Xcode macro name but
+          # xcodeproj_file.py recognizes it and sends
+          # the output to the same place as
+          # $(FRAMEWORKS_FOLDER_PATH). xcode_emulation.py
+          # sets its value to an absolute path.
+          'destination': '$(BUILT_FRAMEWORKS_DIR)',
+          'files': [
+            'file7',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(SHARED_FRAMEWORKS_FOLDER_PATH)',
+          'files': [
+            'file8',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(SHARED_SUPPORT_FOLDER_PATH)',
+          'files': [
+            'file9',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(PLUGINS_FOLDER_PATH)',
+          'files': [
+            'file10',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(XPCSERVICES_FOLDER_PATH)',
+          'files': [
+            'file11',
+          ],
+        }], # copies
+      }], # OS == "ios" or OS == "mac"
+    ], # conditions
+  }], # targets
+}
+
+# vim:ai:ts=4:sts=4:sw=2:expandtab:textwidth=70
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/empty.c 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/empty.c
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/empty.c   
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/empty.c   
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+int main() {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file0 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file0
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file0     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file0     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file0 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file1 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file1
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file1     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file1     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file1 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file10 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file10
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file10    
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file10    
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file10 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file11 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file11
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file11    
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file11    
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file11 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file2 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file2
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file2     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file2     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file2 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file3 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file3
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file3     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file3     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file3 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file4 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file4
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file4     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file4     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file4 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file5 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file5
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file5     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file5     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file5 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file6 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file6
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file6     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file6     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file6 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file7 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file7
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file7     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file7     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file7 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file8 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file8
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file8     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file8     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file8 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file9 
new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file9
--- old/gyp-0+git.20160620/test/ios/copies-with-xcode-envvars/file9     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/copies-with-xcode-envvars/file9     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file9 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/ios/gyptest-copies-with-xcode-envvars.py 
new/gyp-0+git.20160810/test/ios/gyptest-copies-with-xcode-envvars.py
--- old/gyp-0+git.20160620/test/ios/gyptest-copies-with-xcode-envvars.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/ios/gyptest-copies-with-xcode-envvars.py        
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016 Mark Callow. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Verifies that files are copied to the correct destinations when those
+destinations are specified using environment variables available in
+Xcode's PBXCopyFilesBuildPhase.
+"""
+
+import TestGyp
+
+import os
+import stat
+import sys
+
+
+test = TestGyp.TestGyp(formats=['ninja', 'xcode'])
+
+if sys.platform == 'darwin':
+  test.run_gyp('copies-with-xcode-envvars.gyp',
+                chdir='copies-with-xcode-envvars')
+
+  test.build('copies-with-xcode-envvars.gyp', 
chdir='copies-with-xcode-envvars')
+
+  wrapper_name = 'copies-with-xcode-envvars.app/'
+  contents_path = wrapper_name
+  out_path = test.built_file_path('file0', chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file0 contents\n')
+  out_path = test.built_file_path(wrapper_name + 'file1',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file1 contents\n')
+  out_path = test.built_file_path(contents_path + 'file2',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file2 contents\n')
+  out_path = test.built_file_path(contents_path + 'file3',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file3 contents\n')
+  out_path = test.built_file_path(contents_path + 'testimages/file4',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file4 contents\n')
+  out_path = test.built_file_path(contents_path + 'Java/file5',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file5 contents\n')
+  out_path = test.built_file_path(contents_path + 'Frameworks/file6',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file6 contents\n')
+  out_path = test.built_file_path(contents_path + 'Frameworks/file7',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file7 contents\n')
+  out_path = test.built_file_path(contents_path + 'SharedFrameworks/file8',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file8 contents\n')
+  out_path = test.built_file_path(contents_path + 'SharedSupport/file9',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file9 contents\n')
+  out_path = test.built_file_path(contents_path + 'PlugIns/file10',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file10 contents\n')
+  out_path = test.built_file_path(contents_path + 'XPCServices/file11',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file11 contents\n')
+  test.pass_test()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/copies-with-xcode-envvars.gyp
 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/copies-with-xcode-envvars.gyp
--- 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/copies-with-xcode-envvars.gyp
     1970-01-01 01:00:00.000000000 +0100
+++ 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/copies-with-xcode-envvars.gyp
     2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1,87 @@
+# Copyright (c) 2016 Mark Callow. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# For testing use of the UI settings & environment variables
+# available in Xcode's PBXCopyFilesBuildPhase.
+{
+'targets': [
+  {
+    'target_name': 'copies-with-xcode-envvars',
+    'type': 'executable',
+    'mac_bundle': 1,
+    'sources': [ 'empty.c' ],
+    'conditions': [
+      ['OS == "ios" or OS == "mac"', {
+        'copies': [{
+          'destination': '$(BUILT_PRODUCTS_DIR)',
+          'files': [
+            'file0',
+          ],
+        }, {
+          'destination': '$(BUILT_PRODUCTS_DIR)/$(WRAPPER_NAME)',
+          'files': [
+            'file1',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(EXECUTABLE_FOLDER_PATH)',
+          'files': [
+            'file2',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)',
+          'files': [
+            'file3',
+          ],
+        }, {
+          'destination': 
'<(PRODUCT_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/testimages',
+          'files': [
+            'file4',
+          ],
+        }, {
+          'destination': '$(BUILT_PRODUCTS_DIR)/$(JAVA_FOLDER_PATH)',
+          'files': [
+            'file5',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(FRAMEWORKS_FOLDER_PATH)',
+            'files': [
+              'file6',
+          ],
+        }, {
+          # NOTE: This is not an Xcode macro name but
+          # xcodeproj_file.py recognizes it and sends
+          # the output to the same place as
+          # $(FRAMEWORKS_FOLDER_PATH). xcode_emulation.py
+          # sets its value to an absolute path.
+          'destination': '$(BUILT_FRAMEWORKS_DIR)',
+          'files': [
+            'file7',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(SHARED_FRAMEWORKS_FOLDER_PATH)',
+          'files': [
+            'file8',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(SHARED_SUPPORT_FOLDER_PATH)',
+          'files': [
+            'file9',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(PLUGINS_FOLDER_PATH)',
+          'files': [
+            'file10',
+          ],
+        }, {
+          'destination': '<(PRODUCT_DIR)/$(XPCSERVICES_FOLDER_PATH)',
+          'files': [
+            'file11',
+          ],
+        }], # copies
+      }], # OS == "ios" or OS == "mac"
+    ], # conditions
+  }], # targets
+}
+
+# vim:ai:ts=4:sts=4:sw=2:expandtab:textwidth=70
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/empty.c 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/empty.c
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/empty.c   
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/empty.c   
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+int main() {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file0 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file0
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file0     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file0     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file0 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file1 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file1
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file1     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file1     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file1 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file10 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file10
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file10    
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file10    
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file10 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file11 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file11
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file11    
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file11    
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file11 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file2 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file2
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file2     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file2     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file2 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file3 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file3
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file3     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file3     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file3 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file4 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file4
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file4     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file4     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file4 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file5 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file5
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file5     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file5     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file5 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file6 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file6
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file6     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file6     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file6 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file7 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file7
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file7     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file7     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file7 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file8 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file8
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file8     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file8     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file8 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file9 
new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file9
--- old/gyp-0+git.20160620/test/mac/copies-with-xcode-envvars/file9     
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/copies-with-xcode-envvars/file9     
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1 @@
+file9 contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/gyptest-copies-with-xcode-envvars.py 
new/gyp-0+git.20160810/test/mac/gyptest-copies-with-xcode-envvars.py
--- old/gyp-0+git.20160620/test/mac/gyptest-copies-with-xcode-envvars.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/mac/gyptest-copies-with-xcode-envvars.py        
2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016 Mark Callow. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Verifies that files are copied to the correct destinations when those
+destinations are specified using environment variables available in
+Xcode's PBXCopyFilesBuildPhase.
+"""
+
+import TestGyp
+
+import os
+import stat
+import sys
+
+
+test = TestGyp.TestGyp(formats=['make', 'ninja', 'xcode'])
+
+if sys.platform == 'darwin':
+  test.run_gyp('copies-with-xcode-envvars.gyp',
+               chdir='copies-with-xcode-envvars')
+
+  test.build('copies-with-xcode-envvars.gyp', 
chdir='copies-with-xcode-envvars')
+
+  wrapper_name = 'copies-with-xcode-envvars.app/'
+  contents_path = wrapper_name + 'Contents/'
+  out_path = test.built_file_path('file0', chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file0 contents\n')
+  out_path = test.built_file_path(wrapper_name + 'file1',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file1 contents\n')
+  out_path = test.built_file_path(contents_path + 'MacOS/file2',
+  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file2 contents\n')
+  out_path = test.built_file_path(contents_path + 'Resources/file3',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file3 contents\n')
+  out_path = test.built_file_path(contents_path + 'Resources/testimages/file4',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file4 contents\n')
+  out_path = test.built_file_path(contents_path + 'Resources/Java/file5',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file5 contents\n')
+  out_path = test.built_file_path(contents_path + 'Frameworks/file6',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file6 contents\n')
+  out_path = test.built_file_path(contents_path + 'Frameworks/file7',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file7 contents\n')
+  out_path = test.built_file_path(contents_path + 'SharedFrameworks/file8',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file8 contents\n')
+  out_path = test.built_file_path(contents_path + 'SharedSupport/file9',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file9 contents\n')
+  out_path = test.built_file_path(contents_path + 'PlugIns/file10',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file10 contents\n')
+  out_path = test.built_file_path(contents_path + 'XPCServices/file11',
+                                  chdir='copies-with-xcode-envvars')
+  test.must_contain(out_path, 'file11 contents\n')
+  test.pass_test()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/type_envvars/test_bundle_executable.sh 
new/gyp-0+git.20160810/test/mac/type_envvars/test_bundle_executable.sh
--- old/gyp-0+git.20160620/test/mac/type_envvars/test_bundle_executable.sh      
2016-07-06 14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/test/mac/type_envvars/test_bundle_executable.sh      
2016-08-10 22:13:45.000000000 +0200
@@ -14,6 +14,16 @@
 test "${EXECUTABLE_PATH}" = "My App.app/Contents/MacOS/My App"
 test "${WRAPPER_NAME}" = "My App.app"
 
+test "${CONTENTS_FOLDER_PATH}" = "My App.app/Contents"
+test "${EXECUTABLE_FOLDER_PATH}" = "My App.app/Contents/MacOS"
+test "${UNLOCALIZED_RESOURCES_FOLDER_PATH}" = "My App.app/Contents/Resources"
+test "${JAVA_FOLDER_PATH}" = "My App.app/Contents/Resources/Java"
+test "${FRAMEWORKS_FOLDER_PATH}" = "My App.app/Contents/Frameworks"
+test "${SHARED_FRAMEWORKS_FOLDER_PATH}" = "My 
App.app/Contents/SharedFrameworks"
+test "${SHARED_SUPPORT_FOLDER_PATH}" = "My App.app/Contents/SharedSupport"
+test "${PLUGINS_FOLDER_PATH}" = "My App.app/Contents/PlugIns"
+test "${XPCSERVICES_FOLDER_PATH}" = "My App.app/Contents/XPCServices"
+
 [[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
 [[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/type_envvars/test_bundle_loadable_module.sh 
new/gyp-0+git.20160810/test/mac/type_envvars/test_bundle_loadable_module.sh
--- old/gyp-0+git.20160620/test/mac/type_envvars/test_bundle_loadable_module.sh 
2016-07-06 14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/test/mac/type_envvars/test_bundle_loadable_module.sh 
2016-08-10 22:13:45.000000000 +0200
@@ -15,6 +15,20 @@
     "bundle_loadable_module.bundle/Contents/MacOS/bundle_loadable_module"
 test $WRAPPER_NAME = bundle_loadable_module.bundle
 
+test $CONTENTS_FOLDER_PATH = bundle_loadable_module.bundle/Contents
+test $EXECUTABLE_FOLDER_PATH = bundle_loadable_module.bundle/Contents/MacOS
+test $UNLOCALIZED_RESOURCES_FOLDER_PATH = \
+    bundle_loadable_module.bundle/Contents/Resources
+test $JAVA_FOLDER_PATH = bundle_loadable_module.bundle/Contents/Resources/Java
+test $FRAMEWORKS_FOLDER_PATH = 
bundle_loadable_module.bundle/Contents/Frameworks
+test $SHARED_FRAMEWORKS_FOLDER_PATH = \
+    bundle_loadable_module.bundle/Contents/SharedFrameworks
+test $SHARED_SUPPORT_FOLDER_PATH = \
+    bundle_loadable_module.bundle/Contents/SharedSupport
+test $PLUGINS_FOLDER_PATH = bundle_loadable_module.bundle/Contents/PlugIns
+test $XPCSERVICES_FOLDER_PATH = \
+    bundle_loadable_module.bundle/Contents/XPCServices
+
 [[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
 [[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/type_envvars/test_bundle_shared_library.sh 
new/gyp-0+git.20160810/test/mac/type_envvars/test_bundle_shared_library.sh
--- old/gyp-0+git.20160620/test/mac/type_envvars/test_bundle_shared_library.sh  
2016-07-06 14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/test/mac/type_envvars/test_bundle_shared_library.sh  
2016-08-10 22:13:45.000000000 +0200
@@ -15,6 +15,22 @@
     "bundle_shared_library.framework/Versions/A/bundle_shared_library"
 test $WRAPPER_NAME = bundle_shared_library.framework
 
+test $CONTENTS_FOLDER_PATH = bundle_shared_library.framework/Versions/A
+test $EXECUTABLE_FOLDER_PATH = bundle_shared_library.framework/Versions/A
+test $UNLOCALIZED_RESOURCES_FOLDER_PATH = \
+    bundle_shared_library.framework/Versions/A/Resources
+test $JAVA_FOLDER_PATH = \
+    bundle_shared_library.framework/Versions/A/Resources/Java
+test $FRAMEWORKS_FOLDER_PATH = \
+    bundle_shared_library.framework/Versions/A/Frameworks
+test $SHARED_FRAMEWORKS_FOLDER_PATH = \
+    bundle_shared_library.framework/Versions/A/SharedFrameworks
+test $SHARED_SUPPORT_FOLDER_PATH = \
+    bundle_shared_library.framework/Versions/A/Resources
+test $PLUGINS_FOLDER_PATH = bundle_shared_library.framework/Versions/A/PlugIns
+test $XPCSERVICES_FOLDER_PATH = \
+    bundle_shared_library.framework/Versions/A/XPCServices
+
 test $DYLIB_INSTALL_NAME_BASE = "/Library/Frameworks"
 test $LD_DYLIB_INSTALL_NAME = \
     
"/Library/Frameworks/bundle_shared_library.framework/Versions/A/bundle_shared_library"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_executable.sh 
new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_executable.sh
--- old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_executable.sh   
2016-07-06 14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_executable.sh   
2016-08-10 22:13:45.000000000 +0200
@@ -16,6 +16,17 @@
 test $EXECUTABLE_PATH = nonbundle_executable
 [[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
 
+[[ ! $CONTENTS_FOLDER_PATH && ${CONTENTS_FOLDER_PATH-_} ]]
+[[ ! $EXECUTABLE_FOLDER_PATH && ${EXECUTABLE_FOLDER_PATH-_} ]]
+[[ ! $UNLOCALIZED_RESOURCES_FOLDER_PATH \
+       && ${UNLOCALIZED_RESOURCES_FOLDER_PATH-_} ]]
+[[ ! $JAVA_FOLDER_PATH && ${JAVA_FOLDER_PATH-_} ]]
+[[ ! $FRAMEWORKS_FOLDER_PATH && ${FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_FRAMEWORKS_FOLDER_PATH && ${SHARED_FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_SUPPORT_FOLDER_PATH && ${SHARED_SUPPORT_FOLDER_PATH-_} ]]
+[[ ! $PLUGINS_FOLDER_PATH && ${PLUGINS_FOLDER_PATH-_} ]]
+[[ ! $XPCSERVICES_FOLDER_PATH && ${XPCSERVICES_FOLDER_PATH-_} ]]
+
 [[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
 [[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_loadable_module.sh 
new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_loadable_module.sh
--- 
old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_loadable_module.sh  
    2016-07-06 14:15:59.000000000 +0200
+++ 
new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_loadable_module.sh  
    2016-08-10 22:13:45.000000000 +0200
@@ -14,6 +14,17 @@
 test $EXECUTABLE_PATH = nonbundle_loadable_module.so
 [[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
 
+[[ ! $CONTENTS_FOLDER_PATH && ${CONTENTS_FOLDER_PATH-_} ]]
+[[ ! $EXECUTABLE_FOLDER_PATH && ${EXECUTABLE_FOLDER_PATH-_} ]]
+[[ ! $UNLOCALIZED_RESOURCES_FOLDER_PATH \
+       && ${UNLOCALIZED_RESOURCES_FOLDER_PATH-_} ]]
+[[ ! $JAVA_FOLDER_PATH && ${JAVA_FOLDER_PATH-_} ]]
+[[ ! $FRAMEWORKS_FOLDER_PATH && ${FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_FRAMEWORKS_FOLDER_PATH && ${SHARED_FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_SUPPORT_FOLDER_PATH && ${SHARED_SUPPORT_FOLDER_PATH-_} ]]
+[[ ! $PLUGINS_FOLDER_PATH && ${PLUGINS_FOLDER_PATH-_} ]]
+[[ ! $XPCSERVICES_FOLDER_PATH && ${XPCSERVICES_FOLDER_PATH-_} ]]
+
 test $DYLIB_INSTALL_NAME_BASE = "/usr/local/lib"
 test $LD_DYLIB_INSTALL_NAME = "/usr/local/lib/nonbundle_loadable_module.so"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_none.sh 
new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_none.sh
--- old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_none.sh 
2016-07-06 14:15:59.000000000 +0200
+++ new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_none.sh 
2016-08-10 22:13:45.000000000 +0200
@@ -15,6 +15,17 @@
 [[ ! $EXECUTABLE_PATH && ${EXECUTABLE_PATH-_} ]]
 [[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
 
+[[ ! $CONTENTS_FOLDER_PATH && ${CONTENTS_FOLDER_PATH-_} ]]
+[[ ! $EXECUTABLE_FOLDER_PATH && ${EXECUTABLE_FOLDER_PATH-_} ]]
+[[ ! $UNLOCALIZED_RESOURCES_FOLDER_PATH \
+       && ${UNLOCALIZED_RESOURCES_FOLDER_PATH-_} ]]
+[[ ! $JAVA_FOLDER_PATH && ${JAVA_FOLDER_PATH-_} ]]
+[[ ! $FRAMEWORKS_FOLDER_PATH && ${FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_FRAMEWORKS_FOLDER_PATH && ${SHARED_FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_SUPPORT_FOLDER_PATH && ${SHARED_SUPPORT_FOLDER_PATH-_} ]]
+[[ ! $PLUGINS_FOLDER_PATH && ${PLUGINS_FOLDER_PATH-_} ]]
+[[ ! $XPCSERVICES_FOLDER_PATH && ${XPCSERVICES_FOLDER_PATH-_} ]]
+
 [[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
 [[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_shared_library.sh 
new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_shared_library.sh
--- 
old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_shared_library.sh   
    2016-07-06 14:15:59.000000000 +0200
+++ 
new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_shared_library.sh   
    2016-08-10 22:13:45.000000000 +0200
@@ -14,6 +14,17 @@
 test $EXECUTABLE_PATH = libnonbundle_shared_library.dylib
 [[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
 
+[[ ! $CONTENTS_FOLDER_PATH && ${CONTENTS_FOLDER_PATH-_} ]]
+[[ ! $EXECUTABLE_FOLDER_PATH && ${EXECUTABLE_FOLDER_PATH-_} ]]
+[[ ! $UNLOCALIZED_RESOURCES_FOLDER_PATH && \
+       ${UNLOCALIZED_RESOURCES_FOLDER_PATH-_} ]]
+[[ ! $JAVA_FOLDER_PATH && ${JAVA_FOLDER_PATH-_} ]]
+[[ ! $FRAMEWORKS_FOLDER_PATH && ${FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_FRAMEWORKS_FOLDER_PATH && ${SHARED_FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_SUPPORT_FOLDER_PATH && ${SHARED_SUPPORT_FOLDER_PATH-_} ]]
+[[ ! $PLUGINS_FOLDER_PATH && ${PLUGINS_FOLDER_PATH-_} ]]
+[[ ! $XPCSERVICES_FOLDER_PATH && ${XPCSERVICES_FOLDER_PATH-_} ]]
+
 test $DYLIB_INSTALL_NAME_BASE = "/usr/local/lib"
 test $LD_DYLIB_INSTALL_NAME = 
"/usr/local/lib/libnonbundle_shared_library.dylib"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_static_library.sh 
new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_static_library.sh
--- 
old/gyp-0+git.20160620/test/mac/type_envvars/test_nonbundle_static_library.sh   
    2016-07-06 14:15:59.000000000 +0200
+++ 
new/gyp-0+git.20160810/test/mac/type_envvars/test_nonbundle_static_library.sh   
    2016-08-10 22:13:45.000000000 +0200
@@ -14,6 +14,17 @@
 test $EXECUTABLE_PATH = libnonbundle_static_library.a
 [[ ! $WRAPPER_NAME && ${WRAPPER_NAME-_} ]]
 
+[[ ! $CONTENTS_FOLDER_PATH && ${CONTENTS_FOLDER_PATH-_} ]]
+[[ ! $EXECUTABLE_FOLDER_PATH && ${EXECUTABLE_FOLDER_PATH-_} ]]
+[[ ! $UNLOCALIZED_RESOURCES_FOLDER_PATH && \
+       ${UNLOCALIZED_RESOURCES_FOLDER_PATH-_} ]]
+[[ ! $JAVA_FOLDER_PATH && ${JAVA_FOLDER_PATH-_} ]]
+[[ ! $FRAMEWORKS_FOLDER_PATH && ${FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_FRAMEWORKS_FOLDER_PATH && ${SHARED_FRAMEWORKS_FOLDER_PATH-_} ]]
+[[ ! $SHARED_SUPPORT_FOLDER_PATH && ${SHARED_SUPPORT_FOLDER_PATH-_} ]]
+[[ ! $PLUGINS_FOLDER_PATH && ${PLUGINS_FOLDER_PATH-_} ]]
+[[ ! $XPCSERVICES_FOLDER_PATH && ${XPCSERVICES_FOLDER_PATH-_} ]]
+
 [[ ! $DYLIB_INSTALL_NAME_BASE && ${DYLIB_INSTALL_NAME_BASE-_} ]]
 [[ ! $LD_DYLIB_INSTALL_NAME && ${LD_DYLIB_INSTALL_NAME-_} ]]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gyp-0+git.20160620/test/win/gyptest-sys.py 
new/gyp-0+git.20160810/test/win/gyptest-sys.py
--- old/gyp-0+git.20160620/test/win/gyptest-sys.py      1970-01-01 
01:00:00.000000000 +0100
+++ new/gyp-0+git.20160810/test/win/gyptest-sys.py      2016-08-10 
22:13:45.000000000 +0200
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Verifies that Windows drivers are built correctly.
+"""
+
+import TestGyp
+
+import sys
+
+if sys.platform == 'win32':
+  test = TestGyp.TestGyp(formats=['msvs'])
+
+  CHDIR = 'win-driver-target-type'
+  test.run_gyp('win-driver-target-type.gyp', chdir=CHDIR)
+  test.build('win-driver-target-type.gyp', 'win_driver_target_type',
+      chdir=CHDIR)
+
+  test.pass_test()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/win/win-driver-target-type/win-driver-target-type.c 
new/gyp-0+git.20160810/test/win/win-driver-target-type/win-driver-target-type.c
--- 
old/gyp-0+git.20160620/test/win/win-driver-target-type/win-driver-target-type.c 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/gyp-0+git.20160810/test/win/win-driver-target-type/win-driver-target-type.c 
    2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1,10 @@
+// Copyright (c) 2016 Google Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "win-driver-target-type.h"
+
+NTSTATUS DriverEntry(_In_ struct _DRIVER_OBJECT *DriverObject,
+                     _In_ PUNICODE_STRING RegistryPath) {
+  return STATUS_SUCCESS;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/win/win-driver-target-type/win-driver-target-type.gyp
 
new/gyp-0+git.20160810/test/win/win-driver-target-type/win-driver-target-type.gyp
--- 
old/gyp-0+git.20160620/test/win/win-driver-target-type/win-driver-target-type.gyp
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/gyp-0+git.20160810/test/win/win-driver-target-type/win-driver-target-type.gyp
   2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1,32 @@
+# Copyright (c) 2016 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+ 'targets': [
+    {
+      'target_name': 'win_driver_target_type',
+      'type': 'windows_driver',
+      'msvs_target_version': 'Windows7',
+      'sources': [
+        'win-driver-target-type.c',
+        'win-driver-target-type.h',
+        'win-driver-target-type.rc',
+      ],
+      'msvs_settings': {
+        'VCLinkerTool': {
+          'AdditionalDependencies': [
+            'wdmsec.lib',
+            'ntoskrnl.lib',
+            'hal.lib',
+            'wmilib.lib',
+            'bufferoverflowfastfailk.lib',
+          ],
+        },
+        'VCCLCompilerTool': {
+          'WarnAsError': 'false',
+        },
+      },
+    },
+  ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/win/win-driver-target-type/win-driver-target-type.h 
new/gyp-0+git.20160810/test/win/win-driver-target-type/win-driver-target-type.h
--- 
old/gyp-0+git.20160620/test/win/win-driver-target-type/win-driver-target-type.h 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/gyp-0+git.20160810/test/win/win-driver-target-type/win-driver-target-type.h 
    2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1,13 @@
+// Copyright (c) 2016 Google Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE
+
+#ifndef _WIN_DRIVER_TARGET_TYPE_H_
+#define _WIN_DRIVER_TARGET_TYPE_H_
+
+#include <ntifs.h>
+#include <ntdddisk.h>
+
+DRIVER_INITIALIZE DriverEntry;
+
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gyp-0+git.20160620/test/win/win-driver-target-type/win-driver-target-type.rc
 
new/gyp-0+git.20160810/test/win/win-driver-target-type/win-driver-target-type.rc
--- 
old/gyp-0+git.20160620/test/win/win-driver-target-type/win-driver-target-type.rc
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/gyp-0+git.20160810/test/win/win-driver-target-type/win-driver-target-type.rc
    2016-08-10 22:13:45.000000000 +0200
@@ -0,0 +1,14 @@
+// Copyright (c) 2016 Google Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <windows.h>
+#include <ntverp.h>
+
+#define VER_FILETYPE    VFT_DRV
+#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
+#define VER_FILEDESCRIPTION_STR     "Windows Driver GYP target type"
+#define VER_INTERNALNAME_STR        "win-driver-target-type.sys"
+#define VER_ORIGINALFILENAME_STR    "win-driver-target-type.sys"
+
+#include "common.ver"


Reply via email to