cmGraphVizWriter.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #ifndef CMGRAPHVIZWRITER_H
  4. #define CMGRAPHVIZWRITER_H
  5. #include "cmConfigure.h" // IWYU pragma: keep
  6. #include "cmStateTypes.h"
  7. #include "cmsys/RegularExpression.hxx"
  8. #include <map>
  9. #include <set>
  10. #include <string>
  11. #include <vector>
  12. class cmGeneratedFileStream;
  13. class cmGeneratorTarget;
  14. class cmLocalGenerator;
  15. /** This class implements writing files for graphviz (dot) for graphs
  16. * representing the dependencies between the targets in the project. */
  17. class cmGraphVizWriter
  18. {
  19. public:
  20. cmGraphVizWriter(const std::vector<cmLocalGenerator*>& localGenerators);
  21. void ReadSettings(const char* settingsFileName,
  22. const char* fallbackSettingsFileName);
  23. void WritePerTargetFiles(const char* fileName);
  24. void WriteTargetDependersFiles(const char* fileName);
  25. void WriteGlobalFile(const char* fileName);
  26. protected:
  27. void CollectTargetsAndLibs();
  28. int CollectAllTargets();
  29. int CollectAllExternalLibs(int cnt);
  30. void WriteHeader(cmGeneratedFileStream& str) const;
  31. void WriteConnections(const std::string& targetName,
  32. std::set<std::string>& insertedNodes,
  33. std::set<std::string>& insertedConnections,
  34. cmGeneratedFileStream& str) const;
  35. void WriteDependerConnections(const std::string& targetName,
  36. std::set<std::string>& insertedNodes,
  37. std::set<std::string>& insertedConnections,
  38. cmGeneratedFileStream& str) const;
  39. void WriteNode(const std::string& targetName,
  40. const cmGeneratorTarget* target,
  41. std::set<std::string>& insertedNodes,
  42. cmGeneratedFileStream& str) const;
  43. void WriteFooter(cmGeneratedFileStream& str) const;
  44. bool IgnoreThisTarget(const std::string& name);
  45. bool GenerateForTargetType(cmStateEnums::TargetType targetType) const;
  46. std::string GraphType;
  47. std::string GraphName;
  48. std::string GraphHeader;
  49. std::string GraphNodePrefix;
  50. std::vector<cmsys::RegularExpression> TargetsToIgnoreRegex;
  51. const std::vector<cmLocalGenerator*>& LocalGenerators;
  52. std::map<std::string, const cmGeneratorTarget*> TargetPtrs;
  53. // maps from the actual target names to node names in dot:
  54. std::map<std::string, std::string> TargetNamesNodes;
  55. bool GenerateForExecutables;
  56. bool GenerateForStaticLibs;
  57. bool GenerateForSharedLibs;
  58. bool GenerateForModuleLibs;
  59. bool GenerateForInterface;
  60. bool GenerateForExternals;
  61. bool GeneratePerTarget;
  62. bool GenerateDependers;
  63. bool HaveTargetsAndLibs;
  64. };
  65. #endif