Skip to content
Snippets Groups Projects
Commit 8a4f536b authored by Brad King's avatar Brad King
Browse files

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 `-?`.
parent 49c6d0f2
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,10 @@
file Copyright.txt or https://cmake.org/licensing for details. */
#include "cmGlobalNMakeMakefileGenerator.h"
#include "cmsys/RegularExpression.hxx"
#include "cmDocumentationEntry.h"
#include "cmDuration.h"
#include "cmLocalUnixMakefileGenerator3.h"
#include "cmMakefile.h"
#include "cmState.h"
......@@ -34,6 +37,37 @@ void cmGlobalNMakeMakefileGenerator::EnableLanguage(
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(
cmDocumentationEntry& entry)
{
......
......@@ -55,6 +55,9 @@ protected:
void PrintBuildCommandAdvice(std::ostream& os, int jobs) const override;
private:
std::string NMakeVersion;
bool FindMakeProgram(cmMakefile* mf) override;
void PrintCompilerAdvice(std::ostream& os, std::string const& lang,
const char* envVar) const override;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment