cmCommand refactor: cmOutputRequiredFilesCommand

This commit is contained in:
Gabor Bencze
2019-08-21 20:49:22 +02:00
committed by Brad King
parent 7533e47ccc
commit c2c222eba1
3 changed files with 27 additions and 43 deletions
+24 -17
View File
@@ -5,9 +5,12 @@
#include "cmsys/FStream.hxx"
#include "cmsys/RegularExpression.hxx"
#include <map>
#include <set>
#include <stdio.h>
#include <utility>
#include "cmAlgorithms.h"
#include "cmExecutionStatus.h"
#include "cmGeneratorExpression.h"
#include "cmMakefile.h"
#include "cmSourceFile.h"
@@ -15,8 +18,7 @@
#include "cmSystemTools.h"
#include "cmTarget.h"
class cmExecutionStatus;
namespace {
/** \class cmDependInformation
* \brief Store dependency information for a single source file.
*
@@ -453,43 +455,47 @@ protected:
DirectoryToFileToPathMapType DirectoryToFileToPathMap;
};
void ListDependencies(cmDependInformation const* info, FILE* fout,
std::set<cmDependInformation const*>* visited);
}
// cmOutputRequiredFilesCommand
bool cmOutputRequiredFilesCommand::InitialPass(
std::vector<std::string> const& args, cmExecutionStatus&)
bool cmOutputRequiredFilesCommand(std::vector<std::string> const& args,
cmExecutionStatus& status)
{
if (args.size() != 2) {
this->SetError("called with incorrect number of arguments");
status.SetError("called with incorrect number of arguments");
return false;
}
// store the arg for final pass
this->File = args[0];
this->OutputFile = args[1];
const std::string& file = args[0];
const std::string& outputFile = args[1];
// compute the list of files
cmLBDepend md;
md.SetMakefile(this->Makefile);
md.AddSearchPath(this->Makefile->GetCurrentSourceDirectory());
md.SetMakefile(&status.GetMakefile());
md.AddSearchPath(status.GetMakefile().GetCurrentSourceDirectory());
// find the depends for a file
const cmDependInformation* info = md.FindDependencies(this->File.c_str());
const cmDependInformation* info = md.FindDependencies(file.c_str());
if (info) {
// write them out
FILE* fout = cmsys::SystemTools::Fopen(this->OutputFile, "w");
FILE* fout = cmsys::SystemTools::Fopen(outputFile, "w");
if (!fout) {
this->SetError(cmStrCat("Can not open output file: ", this->OutputFile));
status.SetError(cmStrCat("Can not open output file: ", outputFile));
return false;
}
std::set<cmDependInformation const*> visited;
this->ListDependencies(info, fout, &visited);
ListDependencies(info, fout, &visited);
fclose(fout);
}
return true;
}
void cmOutputRequiredFilesCommand::ListDependencies(
cmDependInformation const* info, FILE* fout,
std::set<cmDependInformation const*>* visited)
namespace {
void ListDependencies(cmDependInformation const* info, FILE* fout,
std::set<cmDependInformation const*>* visited)
{
// add info to the visited set
visited->insert(info);
@@ -504,7 +510,8 @@ void cmOutputRequiredFilesCommand::ListDependencies(
fprintf(fout, "%s\n", d->FullPath.c_str());
}
}
this->ListDependencies(d, fout, visited);
ListDependencies(d, fout, visited);
}
}
}
}