mirror of
https://github.com/reactos/CMake.git
synced 2024-11-24 03:59:58 +00:00
another signature for Try_Compile
This commit is contained in:
parent
2aea6d528e
commit
31f714fc2a
@ -20,26 +20,83 @@
|
||||
// cmExecutableCommand
|
||||
bool cmTryCompileCommand::InitialPass(std::vector<std::string> const& argv)
|
||||
{
|
||||
if(argv.size() < 4)
|
||||
if(argv.size() < 3)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* sourceDirectory = argv[1].c_str();
|
||||
|
||||
// where will the binaries be stored
|
||||
const char* binaryDirectory = argv[2].c_str();
|
||||
const char* projectName = argv[3].c_str();
|
||||
const char* sourceDirectory = argv[1].c_str();
|
||||
const char* projectName = 0;
|
||||
const char* targetName = 0;
|
||||
|
||||
if (argv.size() == 5)
|
||||
std::string tmpString;
|
||||
|
||||
// compute the binary dir when TRY_COMPILE is called with a src file
|
||||
// signature
|
||||
if (argv.size() == 3)
|
||||
{
|
||||
targetName = argv[4].c_str();
|
||||
tmpString = argv[2] + "/CMakeTmp";
|
||||
binaryDirectory = tmpString.c_str();
|
||||
}
|
||||
|
||||
// do not allow recursive try Compiles
|
||||
if (!strcmp(binaryDirectory,m_Makefile->GetHomeOutputDirectory()))
|
||||
{
|
||||
cmSystemTools::Error("Attempt at a recursive or nested TRY_COMPILE",
|
||||
binaryDirectory);
|
||||
return false;
|
||||
}
|
||||
|
||||
// which signature are we using? If we are using var srcfile bindir
|
||||
if (argv.size() == 3)
|
||||
{
|
||||
// remove any CMakeCache.txt files so we will have a clean test
|
||||
std::string ccFile = tmpString + "/CMakeCache.txt";
|
||||
cmSystemTools::RemoveFile(ccFile.c_str());
|
||||
|
||||
// we need to create a directory and CMakeList file etc...
|
||||
// first create the directories
|
||||
sourceDirectory = binaryDirectory;
|
||||
cmSystemTools::MakeDirectory(binaryDirectory);
|
||||
|
||||
// now create a CMakeList.txt file in that directory
|
||||
std::string outFileName = tmpString + "/CMakeLists.txt";
|
||||
FILE *fout = fopen(outFileName.c_str(),"w");
|
||||
if (!fout)
|
||||
{
|
||||
cmSystemTools::Error("Failed to create CMakeList file for ",
|
||||
outFileName.c_str());
|
||||
return false;
|
||||
}
|
||||
fprintf(fout,"PROJECT(CMAKE_TRY_COMPILE)\n");
|
||||
fprintf(fout,"ADD_EXECUTABLE(cmTryCompileExec \"%s\")\n",argv[1].c_str());
|
||||
fclose(fout);
|
||||
projectName = "CMAKE_TRY_COMPILE";
|
||||
targetName = "cmTryCompileExec";
|
||||
}
|
||||
// else the srcdir bindir project target signature
|
||||
else
|
||||
{
|
||||
projectName = argv[3].c_str();
|
||||
|
||||
if (argv.size() == 5)
|
||||
{
|
||||
targetName = argv[4].c_str();
|
||||
}
|
||||
}
|
||||
|
||||
// actually do the try compile now that everything is setup
|
||||
int res = m_Makefile->TryCompile(sourceDirectory, binaryDirectory,
|
||||
projectName, targetName);
|
||||
|
||||
// set the result var to the return value to indicate success or failure
|
||||
m_Makefile->AddDefinition(argv[0].c_str(), (res == 0 ? "TRUE" : "FALSE"));
|
||||
|
||||
// if we created a directory etc, then cleanup after ourselves
|
||||
// Actually right now lets not clean up after ourselves, removing
|
||||
// a directory is tricky and putting that code in could be a risk
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,9 @@ public:
|
||||
"TRY_COMPILE(RESULT_VAR srcdir bindir projectName <targetName>)\n"
|
||||
"Try compiling a program. Return the success or failure in RESULT_VAR "
|
||||
"If <target name> is specified then build just that target "
|
||||
"otherwise the all or ALL_BUILD target is built.";
|
||||
"otherwise the all or ALL_BUILD target is built.\n"
|
||||
"TRY_COMPILE(RESULT_VAR srcfile bindir)\n"
|
||||
"Try compiling a srcfile. Return the success or failure in RESULT_VAR.";
|
||||
}
|
||||
|
||||
cmTypeMacro(cmTryCompileCommand, cmCommand);
|
||||
|
Loading…
Reference in New Issue
Block a user