diff --git gyp/generator/ninja.py gyp/generator/ninja.py
index 58be3bf..4dcb2a6 100644
--- gyp/generator/ninja.py
+++ gyp/generator/ninja.py
@@ -745,7 +745,16 @@ class NinjaWriter(object):
       for path in copy['files']:
         # Normalize the path so trailing slashes don't confuse us.
         path = os.path.normpath(path)
-        basename = os.path.split(path)[1]
+        (parent_path, basename) = os.path.split(path)
+
+        # Xcode uses .lproj directories for localized resources. Add a special
+        # case to maintain the localization directory component if present.
+        if parent_path != '':
+          parent_basename = os.path.basename(parent_path)
+          (parent_root, parent_ext) = os.path.splitext(parent_basename)
+          if parent_ext == '.lproj':
+            basename = os.path.join(parent_basename, basename)
+
         src = self.GypPathToNinja(path, env)
         dst = self.GypPathToNinja(os.path.join(copy['destination'], basename),
                                   env)
diff --git gyp/msvs_emulation.py gyp/msvs_emulation.py
index ca67b12..a3fd903 100644
--- gyp/msvs_emulation.py
+++ gyp/msvs_emulation.py
@@ -1027,8 +1027,10 @@ def GenerateEnvironmentFiles(toplevel_build_dir, generator_flags,
     args = vs.SetupScript(arch)
     args.extend(('&&', 'set'))
     popen = subprocess.Popen(
-        args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+        args, shell=True, stdout=subprocess.PIPE)
     variables, _ = popen.communicate()
+    if popen.returncode != 0:
+      raise Exception('Error invoking setup script: ' + repr(args))
     env = _ExtractImportantEnvironment(variables)
 
     # Inject system includes from gyp files into INCLUDE.