ENH: Start working on a method that abstracts generating of build command
This commit is contained in:
parent
7c5745ae95
commit
cb3ea2328a
|
@ -67,23 +67,16 @@ void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf)
|
|||
}
|
||||
}
|
||||
|
||||
int cmGlobalVisualStudio6Generator::Build(
|
||||
const char *,
|
||||
const char *bindir,
|
||||
const char *projectName,
|
||||
const char *targetName,
|
||||
std::string *output,
|
||||
const char *makeCommandCSTR,
|
||||
const char *config,
|
||||
bool clean)
|
||||
std::string cmGlobalVisualStudio6Generator::GenerateBuildCommand(const char* makeProgram, const char *projectName, const char *targetName,
|
||||
const char* config)
|
||||
{
|
||||
// now build the test
|
||||
std::vector<std::string> mp;
|
||||
mp.push_back("[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Setup;VsCommonDir]/MSDev98/Bin");
|
||||
cmSystemTools::ExpandRegistryValues(mp[0]);
|
||||
std::string originalCommand = makeCommandCSTR;
|
||||
std::string originalCommand = makeProgram;
|
||||
std::string makeCommand =
|
||||
cmSystemTools::FindProgram(makeCommandCSTR, mp);
|
||||
cmSystemTools::FindProgram(makeProgram, mp);
|
||||
if(makeCommand.size() == 0)
|
||||
{
|
||||
std::string e = "Generator cannot find Visual Studio 6 msdev program \"";
|
||||
|
@ -91,15 +84,10 @@ int cmGlobalVisualStudio6Generator::Build(
|
|||
e += "\" specified by CMAKE_MAKE_PROGRAM cache entry. ";
|
||||
e += "Please fix the setting.";
|
||||
cmSystemTools::Error(e.c_str());
|
||||
return 1;
|
||||
return "";
|
||||
}
|
||||
makeCommand = cmSystemTools::ConvertToOutputPath(makeCommand.c_str());
|
||||
|
||||
/**
|
||||
* Run an executable command and put the stdout in output.
|
||||
*/
|
||||
std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
|
||||
cmSystemTools::ChangeDirectory(bindir);
|
||||
// if there are spaces in the makeCommand, assume a full path
|
||||
// and convert it to a path with no spaces in it as the
|
||||
// RunSingleCommand does not like spaces
|
||||
|
@ -112,6 +100,12 @@ int cmGlobalVisualStudio6Generator::Build(
|
|||
makeCommand += " ";
|
||||
makeCommand += projectName;
|
||||
makeCommand += ".dsw /MAKE \"";
|
||||
bool clean = false;
|
||||
if ( targetName && strcmp(targetName, "clean") == 0 )
|
||||
{
|
||||
clean = true;
|
||||
targetName = "ALL_BUILD";
|
||||
}
|
||||
if (targetName && strlen(targetName))
|
||||
{
|
||||
makeCommand += targetName;
|
||||
|
@ -131,30 +125,13 @@ int cmGlobalVisualStudio6Generator::Build(
|
|||
}
|
||||
if(clean)
|
||||
{
|
||||
makeCommand += "\" /REBUILD";
|
||||
makeCommand += "\" /CLEAN";
|
||||
}
|
||||
else
|
||||
{
|
||||
makeCommand += "\" /BUILD";
|
||||
}
|
||||
int retVal;
|
||||
int timeout = cmGlobalGenerator::s_TryCompileTimeout;
|
||||
if (!cmSystemTools::RunSingleCommand(makeCommand.c_str(), output,
|
||||
&retVal, 0, false, timeout))
|
||||
{
|
||||
std::string e = "Error executing make program \"";
|
||||
e += originalCommand;
|
||||
e += "\" specified by CMAKE_MAKE_PROGRAM cache entry. ";
|
||||
e += "The command string used was \"";
|
||||
e += makeCommand.c_str();
|
||||
e += "\".";
|
||||
cmSystemTools::Error(e.c_str());
|
||||
// return to the original directory
|
||||
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||
return 1;
|
||||
}
|
||||
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||
return retVal;
|
||||
return makeCommand;
|
||||
}
|
||||
|
||||
///! Create a local generator appropriate to this Global Generator
|
||||
|
|
|
@ -54,11 +54,8 @@ public:
|
|||
* Try running cmake and building a file. This is used for dynalically
|
||||
* loaded commands, not as part of the usual build process.
|
||||
*/
|
||||
virtual int Build(const char *srcdir, const char *bindir,
|
||||
const char *projectName, const char *targetName,
|
||||
std::string *output,
|
||||
const char *makeProgram,
|
||||
const char *config, bool clean);
|
||||
virtual std::string GenerateBuildCommand(const char* makeProgram,
|
||||
const char *projectName, const char *targetName, const char* config);
|
||||
|
||||
/**
|
||||
* Generate the all required files for building this project/tree. This
|
||||
|
|
|
@ -43,28 +43,14 @@ void cmGlobalVisualStudio7Generator::EnableLanguage(std::vector<std::string>cons
|
|||
this->cmGlobalGenerator::EnableLanguage(lang, mf);
|
||||
}
|
||||
|
||||
int cmGlobalVisualStudio7Generator::Build(
|
||||
const char *,
|
||||
const char *bindir,
|
||||
const char *projectName,
|
||||
const char *targetName,
|
||||
std::string *output,
|
||||
const char *makeCommandCSTR,
|
||||
const char *config,
|
||||
bool clean)
|
||||
std::string cmGlobalVisualStudio7Generator::GenerateBuildCommand(const char* makeProgram, const char *projectName, const char *targetName, const char* config)
|
||||
{
|
||||
// now build the test
|
||||
std::string makeCommand =
|
||||
cmSystemTools::ConvertToOutputPath(makeCommandCSTR);
|
||||
cmSystemTools::ConvertToOutputPath(makeProgram);
|
||||
std::string lowerCaseCommand = makeCommand;
|
||||
cmSystemTools::LowerCase(lowerCaseCommand);
|
||||
|
||||
/**
|
||||
* Run an executable command and put the stdout in output.
|
||||
*/
|
||||
std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
|
||||
cmSystemTools::ChangeDirectory(bindir);
|
||||
|
||||
// if there are spaces in the makeCommand, assume a full path
|
||||
// and convert it to a path with no spaces in it as the
|
||||
// RunSingleCommand does not like spaces
|
||||
|
@ -77,9 +63,15 @@ int cmGlobalVisualStudio7Generator::Build(
|
|||
makeCommand += " ";
|
||||
makeCommand += projectName;
|
||||
makeCommand += ".sln ";
|
||||
bool clean = false;
|
||||
if ( targetName && strcmp(targetName, "clean") == 0 )
|
||||
{
|
||||
clean = true;
|
||||
targetName = "ALL_BUILD";
|
||||
}
|
||||
if(clean)
|
||||
{
|
||||
makeCommand += "/rebuild ";
|
||||
makeCommand += "/clean";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -104,20 +96,7 @@ int cmGlobalVisualStudio7Generator::Build(
|
|||
{
|
||||
makeCommand += "ALL_BUILD";
|
||||
}
|
||||
|
||||
int retVal;
|
||||
int timeout = cmGlobalGenerator::s_TryCompileTimeout;
|
||||
if (!cmSystemTools::RunSingleCommand(makeCommand.c_str(), output, &retVal,
|
||||
0, false, timeout))
|
||||
{
|
||||
cmSystemTools::Error("Generator: execution of devenv failed.");
|
||||
// return to the original directory
|
||||
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||
return 1;
|
||||
}
|
||||
*output += makeCommand;
|
||||
cmSystemTools::ChangeDirectory(cwd.c_str());
|
||||
return retVal;
|
||||
return makeCommand;
|
||||
}
|
||||
|
||||
///! Create a local generator appropriate to this Global Generator
|
||||
|
|
|
@ -53,11 +53,8 @@ public:
|
|||
* Try running cmake and building a file. This is used for dynalically
|
||||
* loaded commands, not as part of the usual build process.
|
||||
*/
|
||||
virtual int Build(const char *srcdir, const char *bindir,
|
||||
const char *projectName, const char *targetName,
|
||||
std::string *output,
|
||||
const char *makeProgram,
|
||||
const char *config, bool clean);
|
||||
virtual std::string GenerateBuildCommand(const char* makeProgram,
|
||||
const char *projectName, const char *targetName, const char* config);
|
||||
|
||||
/**
|
||||
* Generate the all required files for building this project/tree. This
|
||||
|
|
Loading…
Reference in New Issue