Browse Source

cmLocalNinjaGenerator: Report line of failure in ninja generated batch file

Fixes: 18676
Mark O'Neill 7 years ago
parent
commit
2c3f2dfa5a
1 changed files with 14 additions and 2 deletions
  1. 14 2
      Source/cmLocalNinjaGenerator.cxx

+ 14 - 2
Source/cmLocalNinjaGenerator.cxx

@@ -318,7 +318,9 @@ std::string cmLocalNinjaGenerator::WriteCommandScript(
 
   cmsys::ofstream script(scriptPath.c_str());
 
-#ifndef _WIN32
+#ifdef _WIN32
+  int line = 1;
+#else
   script << "set -e\n\n";
 #endif
 
@@ -329,12 +331,22 @@ std::string cmLocalNinjaGenerator::WriteCommandScript(
     // for the raw shell script.
     cmSystemTools::ReplaceString(cmd, "$$", "$");
 #ifdef _WIN32
-    script << cmd << " || exit /b 1" << '\n';
+    script << cmd << " || (set FAIL_LINE=" << ++line << "& goto :ABORT)"
+           << '\n';
 #else
     script << cmd << '\n';
 #endif
   }
 
+#ifdef _WIN32
+  script << "goto :EOF\n\n"
+            ":ABORT\n"
+            "set ERROR_CODE=%ERRORLEVEL%\n"
+            "echo Batch file failed at line %FAIL_LINE% "
+            "with errorcode %ERRORLEVEL%\n"
+            "exit /b %ERROR_CODE%";
+#endif
+
   return scriptPath;
 }