#ifndef CMGRAPHVIZWRITER_H #define CMGRAPHVIZWRITER_H /*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2000-2009 Kitware, Inc., Insight Software Consortium Distributed under the OSI-approved BSD License (the "License"); see accompanying file Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. ============================================================================*/ #include "cmStandardIncludes.h" #include "cmLocalGenerator.h" #include "cmGeneratedFileStream.h" #include "cmTarget.h" #include /** This class implements writing files for graphviz (dot) for graphs * representing the dependencies between the targets in the project. */ class cmGraphVizWriter { public: cmGraphVizWriter(const std::vector& localGenerators); void ReadSettings(const char* settingsFileName, const char* fallbackSettingsFileName); void WritePerTargetFiles(const char* fileName); void WriteTargetDependersFiles(const char* fileName); void WriteGlobalFile(const char* fileName); protected: void CollectTargetsAndLibs(); int CollectAllTargets(); int CollectAllExternalLibs(int cnt); void WriteHeader(cmGeneratedFileStream& str) const; void WriteConnections(const char* targetName, std::set& insertedNodes, std::set& insertedConnections, cmGeneratedFileStream& str) const; void WriteDependerConnections(const char* targetName, std::set& insertedNodes, std::set& insertedConnections, cmGeneratedFileStream& str) const; void WriteNode(const char* targetName, const cmTarget* target, std::set& insertedNodes, cmGeneratedFileStream& str) const; void WriteFooter(cmGeneratedFileStream& str) const; bool IgnoreThisTarget(const char* name); bool GenerateForTargetType(cmTarget::TargetType targetType) const; cmStdString GraphType; cmStdString GraphName; cmStdString GraphHeader; cmStdString GraphNodePrefix; bool GenerateForExecutables; bool GenerateForStaticLibs; bool GenerateForSharedLibs; bool GenerateForModuleLibs; bool GenerateForExternals; std::vector TargetsToIgnoreRegex; const std::vector& LocalGenerators; std::map TargetPtrs; // maps from the actual target names to node names in dot: std::map TargetNamesNodes; bool HaveTargetsAndLibs; }; #endif