|
|
@@ -0,0 +1,107 @@
|
|
|
+/*=========================================================================
|
|
|
+
|
|
|
+ Program: CMake - Cross-Platform Makefile Generator
|
|
|
+ Module: $RCSfile$
|
|
|
+ Language: C++
|
|
|
+ Date: $Date$
|
|
|
+ Version: $Revision$
|
|
|
+
|
|
|
+ Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
|
|
+ See Copyright.txt or http://www.cmake.org/HTML/Copyright.html 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 "cmExportLibraryDependencies.h"
|
|
|
+#include "cmGlobalGenerator.h"
|
|
|
+#include "cmLocalGenerator.h"
|
|
|
+#include "cmake.h"
|
|
|
+
|
|
|
+// cmExecutableCommand
|
|
|
+bool cmExportLibraryDependenciesCommand::InitialPass(std::vector<std::string> const& args)
|
|
|
+{
|
|
|
+ // First argument is the name of the test
|
|
|
+ // Second argument is the name of the executable to run (a target or external
|
|
|
+ // program)
|
|
|
+ // Remaining arguments are the arguments to pass to the executable
|
|
|
+ if(args.size() < 1 )
|
|
|
+ {
|
|
|
+ this->SetError("called with incorrect number of arguments");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // store the arguments for the final pass
|
|
|
+ // also expand any CMake variables
|
|
|
+
|
|
|
+ m_Args = args;
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void cmExportLibraryDependenciesCommand::FinalPass()
|
|
|
+{
|
|
|
+ // don't do anything if local mode
|
|
|
+ if(m_Makefile->GetLocal())
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // Create a full path filename for output Testfile
|
|
|
+ std::string fname = m_Args[0];
|
|
|
+ bool append = false;
|
|
|
+ if(m_Args.size() > 1)
|
|
|
+ {
|
|
|
+ if(m_Args[1] == "APPEND")
|
|
|
+ {
|
|
|
+ append = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // Open the output Testfile
|
|
|
+ std::ofstream fout;
|
|
|
+ if(append)
|
|
|
+ {
|
|
|
+ fout.open(fname.c_str(), std::ios::app);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ fout.open(fname.c_str());
|
|
|
+ }
|
|
|
+ if (!fout)
|
|
|
+ {
|
|
|
+ cmSystemTools::Error("Error Writing ", fname.c_str());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ cmake* cm = m_Makefile->GetCMakeInstance();
|
|
|
+ cmGlobalGenerator* global = cm->GetGlobalGenerator();
|
|
|
+ std::vector<cmLocalGenerator *> locals;
|
|
|
+ global->GetLocalGenerators(locals);
|
|
|
+ std::string libDepName;
|
|
|
+ for(std::vector<cmLocalGenerator *>::iterator i = locals.begin();
|
|
|
+ i != locals.end(); ++i)
|
|
|
+ {
|
|
|
+ cmLocalGenerator* gen = *i;
|
|
|
+ cmTargets &tgts = gen->GetMakefile()->GetTargets();
|
|
|
+ for(cmTargets::const_iterator l = tgts.begin();
|
|
|
+ l != tgts.end(); ++l)
|
|
|
+ {
|
|
|
+ if ((l->second.GetType() != cmTarget::INSTALL_FILES)
|
|
|
+ && (l->second.GetType() != cmTarget::INSTALL_PROGRAMS))
|
|
|
+ {
|
|
|
+ libDepName = l->first;
|
|
|
+ libDepName += "_LIB_DEPENDS";
|
|
|
+ const char* def = m_Makefile->GetDefinition(libDepName.c_str());
|
|
|
+ if(def)
|
|
|
+ {
|
|
|
+ fout << "SET(" << libDepName << " \"" << def << "\")\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fout << ")" << std::endl;
|
|
|
+ fout.close();
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|