|
@@ -0,0 +1,124 @@
|
|
|
|
|
+/*=========================================================================
|
|
|
|
|
+
|
|
|
|
|
+ Program: Insight Segmentation & Registration Toolkit
|
|
|
|
|
+ Module: $RCSfile$
|
|
|
|
|
+ Language: C++
|
|
|
|
|
+ Date: $Date$
|
|
|
|
|
+ Version: $Revision$
|
|
|
|
|
+
|
|
|
|
|
+ Copyright (c) 2002 Insight Consortium. All rights reserved.
|
|
|
|
|
+ See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
|
|
|
|
|
+
|
|
|
|
|
+ This software is distributed WITHOUT ANY WARRANTY; without even
|
|
|
|
|
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
|
|
|
+ PURPOSE. See the above copyright notices for more information.
|
|
|
|
|
+
|
|
|
|
|
+=========================================================================*/
|
|
|
|
|
+#include "cmTryRunCommand.h"
|
|
|
|
|
+#include "cmCacheManager.h"
|
|
|
|
|
+#include "cmTryCompileCommand.h"
|
|
|
|
|
+
|
|
|
|
|
+// cmExecutableCommand
|
|
|
|
|
+bool cmTryRunCommand::InitialPass(std::vector<std::string> const& argv)
|
|
|
|
|
+{
|
|
|
|
|
+ if(argv.size() < 4)
|
|
|
|
|
+ {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // build an arg list for TryCompile and extract the runArgs
|
|
|
|
|
+ std::vector<std::string> tryCompile;
|
|
|
|
|
+ std::string runArgs;
|
|
|
|
|
+ int i;
|
|
|
|
|
+ for (i = 1; i < argv.size(); ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (argv[i] == "ARGS")
|
|
|
|
|
+ {
|
|
|
|
|
+ ++i;
|
|
|
|
|
+ while (i < argv.size() && argv[i] != "COMPILE_DEFINITIONS" &&
|
|
|
|
|
+ argv[i] != "CMAKE_FLAGS")
|
|
|
|
|
+ {
|
|
|
|
|
+ runArgs += " ";
|
|
|
|
|
+ runArgs += argv[i];
|
|
|
|
|
+ ++i;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (i < argv.size())
|
|
|
|
|
+ {
|
|
|
|
|
+ tryCompile.push_back(argv[i]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ tryCompile.push_back(argv[i]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // do the try compile
|
|
|
|
|
+ int res = cmTryCompileCommand::CoreTryCompileCode(m_Makefile, tryCompile, false);
|
|
|
|
|
+
|
|
|
|
|
+ // now try running the command if it compiled
|
|
|
|
|
+ std::string binaryDirectory = argv[1] + "/CMakeTmp";
|
|
|
|
|
+ if (!res)
|
|
|
|
|
+ {
|
|
|
|
|
+ int retVal;
|
|
|
|
|
+ std::string output;
|
|
|
|
|
+ std::string command;
|
|
|
|
|
+ command = binaryDirectory;
|
|
|
|
|
+ command += "/cmTryRunExec";
|
|
|
|
|
+ command += cmSystemTools::GetExecutableExtension();
|
|
|
|
|
+ std::string fullPath;
|
|
|
|
|
+ if(cmSystemTools::FileExists(command.c_str()))
|
|
|
|
|
+ {
|
|
|
|
|
+ fullPath = cmSystemTools::CollapseFullPath(command.c_str());
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ command = binaryDirectory;
|
|
|
|
|
+ command += "/Debug/cmTryRunExec";
|
|
|
|
|
+ command += cmSystemTools::GetExecutableExtension();
|
|
|
|
|
+ if(cmSystemTools::FileExists(command.c_str()))
|
|
|
|
|
+ {
|
|
|
|
|
+ fullPath = cmSystemTools::CollapseFullPath(command.c_str());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (runArgs.size() > 1)
|
|
|
|
|
+ {
|
|
|
|
|
+ std::string finalCommand = fullPath;
|
|
|
|
|
+ if(runArgs.size())
|
|
|
|
|
+ {
|
|
|
|
|
+ finalCommand = cmSystemTools::ConvertToOutputPath(fullPath.c_str());
|
|
|
|
|
+ finalCommand += runArgs;
|
|
|
|
|
+ }
|
|
|
|
|
+ cmSystemTools::RunCommand(finalCommand.c_str(), output, retVal);
|
|
|
|
|
+ // set the run var
|
|
|
|
|
+ char retChar[1000];
|
|
|
|
|
+ sprintf(retChar,"%i",retVal);
|
|
|
|
|
+ m_Makefile->AddDefinition(argv[1].c_str(), retChar);
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ cmSystemTools::Error("Unable to find executable for TRY_RUN");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // if we created a directory etc, then cleanup after ourselves
|
|
|
|
|
+ cmDirectory dir;
|
|
|
|
|
+ dir.Load(binaryDirectory.c_str());
|
|
|
|
|
+ size_t fileNum;
|
|
|
|
|
+ for (fileNum = 0; fileNum < dir.GetNumberOfFiles(); ++fileNum)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (strcmp(dir.GetFile(fileNum),".") &&
|
|
|
|
|
+ strcmp(dir.GetFile(fileNum),".."))
|
|
|
|
|
+ {
|
|
|
|
|
+ std::string fullPath = binaryDirectory;
|
|
|
|
|
+ fullPath += "/";
|
|
|
|
|
+ fullPath += dir.GetFile(fileNum);
|
|
|
|
|
+ cmSystemTools::RemoveFile(fullPath.c_str());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|