diff options
-rw-r--r-- | Source/cmake.cxx | 2 | ||||
-rw-r--r-- | Source/cmakemain.cxx | 11 |
2 files changed, 8 insertions, 5 deletions
diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 32064b4..7ab7600 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -2820,7 +2820,7 @@ int cmake::Run(const std::vector<std::string>& args, bool noconfigure) if (cmSystemTools::GetErrorOccurredFlag()) { return -1; } - return 0; + return this->HasScriptModeExitCode() ? this->GetScriptModeExitCode() : 0; } // If MAKEFLAGS are given in the environment, remove the environment diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx index ced83dc..8462734 100644 --- a/Source/cmakemain.cxx +++ b/Source/cmakemain.cxx @@ -389,13 +389,16 @@ int do_cmake(int ac, char const* const* av) } } - // Always return a non-negative value. Windows tools do not always - // interpret negative return values as errors. + // Always return a non-negative value (except exit code from SCRIPT_MODE). + // Windows tools do not always interpret negative return values as errors. if (res != 0) { + auto scriptModeExitCode = + cm.HasScriptModeExitCode() ? cm.GetScriptModeExitCode() : 0; + res = scriptModeExitCode ? scriptModeExitCode : 1; #ifdef CMake_ENABLE_DEBUGGER - cm.StopDebuggerIfNeeded(1); + cm.StopDebuggerIfNeeded(res); #endif - return 1; + return res; } #ifdef CMake_ENABLE_DEBUGGER cm.StopDebuggerIfNeeded(0); |