diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2003-01-20 16:59:02 -0500 |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2003-01-20 16:59:02 -0500 |
commit | c4fa5d1fdf8a8bdc03872f148b29432e8f55ae9a (patch) | |
tree | ad9ce56528b85193ae6f75a51b1418498e0c59b3 /Source/cmExportLibraryDependencies.cxx | |
parent | ece369eaf3bb463a4a9675f1aed69199ce8b3832 (diff) | |
download | cmake-c4fa5d1fdf8a8bdc03872f148b29432e8f55ae9a.tar.gz |
ENH: add a new command that allows exports of library dependencies from a project to a file
Diffstat (limited to 'Source/cmExportLibraryDependencies.cxx')
-rw-r--r-- | Source/cmExportLibraryDependencies.cxx | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/Source/cmExportLibraryDependencies.cxx b/Source/cmExportLibraryDependencies.cxx new file mode 100644 index 0000000000..6992b19419 --- /dev/null +++ b/Source/cmExportLibraryDependencies.cxx @@ -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; +} + |