mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-15 03:48:02 +08:00
NMake: Detect nmake version
Run `nmake -?` and extract the version from its output. Use a timeout because Watcom tools come with a `nmake` tool that always waits for user input on `-?`.
This commit is contained in:
@@ -2,7 +2,10 @@
|
|||||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||||
#include "cmGlobalNMakeMakefileGenerator.h"
|
#include "cmGlobalNMakeMakefileGenerator.h"
|
||||||
|
|
||||||
|
#include "cmsys/RegularExpression.hxx"
|
||||||
|
|
||||||
#include "cmDocumentationEntry.h"
|
#include "cmDocumentationEntry.h"
|
||||||
|
#include "cmDuration.h"
|
||||||
#include "cmLocalUnixMakefileGenerator3.h"
|
#include "cmLocalUnixMakefileGenerator3.h"
|
||||||
#include "cmMakefile.h"
|
#include "cmMakefile.h"
|
||||||
#include "cmState.h"
|
#include "cmState.h"
|
||||||
@@ -34,6 +37,37 @@ void cmGlobalNMakeMakefileGenerator::EnableLanguage(
|
|||||||
this->cmGlobalUnixMakefileGenerator3::EnableLanguage(l, mf, optional);
|
this->cmGlobalUnixMakefileGenerator3::EnableLanguage(l, mf, optional);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cmGlobalNMakeMakefileGenerator::FindMakeProgram(cmMakefile* mf)
|
||||||
|
{
|
||||||
|
if (!this->cmGlobalGenerator::FindMakeProgram(mf)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (cmProp nmakeCommand = mf->GetDefinition("CMAKE_MAKE_PROGRAM")) {
|
||||||
|
std::vector<std::string> command;
|
||||||
|
command.emplace_back(*nmakeCommand);
|
||||||
|
command.emplace_back("-?");
|
||||||
|
std::string out;
|
||||||
|
std::string err;
|
||||||
|
if (!cmSystemTools::RunSingleCommand(command, &out, &err, nullptr, nullptr,
|
||||||
|
cmSystemTools::OUTPUT_NONE,
|
||||||
|
cmDuration(30))) {
|
||||||
|
mf->IssueMessage(MessageType::FATAL_ERROR,
|
||||||
|
cmStrCat("Running\n '", cmJoin(command, "' '"),
|
||||||
|
"'\n"
|
||||||
|
"failed with:\n ",
|
||||||
|
err));
|
||||||
|
cmSystemTools::SetFatalErrorOccured();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
cmsys::RegularExpression regex(
|
||||||
|
"Program Maintenance Utility Version ([1-9][0-9.]+)");
|
||||||
|
if (regex.find(err)) {
|
||||||
|
this->NMakeVersion = regex.match(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void cmGlobalNMakeMakefileGenerator::GetDocumentation(
|
void cmGlobalNMakeMakefileGenerator::GetDocumentation(
|
||||||
cmDocumentationEntry& entry)
|
cmDocumentationEntry& entry)
|
||||||
{
|
{
|
||||||
|
@@ -55,6 +55,9 @@ protected:
|
|||||||
void PrintBuildCommandAdvice(std::ostream& os, int jobs) const override;
|
void PrintBuildCommandAdvice(std::ostream& os, int jobs) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::string NMakeVersion;
|
||||||
|
bool FindMakeProgram(cmMakefile* mf) override;
|
||||||
|
|
||||||
void PrintCompilerAdvice(std::ostream& os, std::string const& lang,
|
void PrintCompilerAdvice(std::ostream& os, std::string const& lang,
|
||||||
const char* envVar) const override;
|
const char* envVar) const override;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user