cmGraphVizWriter.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. class cmGlobalGenerator;
  16. /** This class implements writing files for graphviz (dot) for graphs
  17. * representing the dependencies between the targets in the project. */
  18. class cmGraphVizWriter
  19. {
  20. public:
  21. cmGraphVizWriter(const cmGlobalGenerator* globalGenerator);
  22. void ReadSettings(const char* settingsFileName,
  23. const char* fallbackSettingsFileName);
  24. void WritePerTargetFiles(const char* fileName);
  25. void WriteTargetDependersFiles(const char* fileName);
  26. void WriteGlobalFile(const char* fileName);
  27. protected:
  28. void CollectTargetsAndLibs();
  29. int CollectAllTargets();
  30. int CollectAllExternalLibs(int cnt);
  31. void WriteHeader(cmGeneratedFileStream& str) const;
  32. void WriteConnections(const std::string& targetName,
  33. std::set<std::string>& insertedNodes,
  34. std::set<std::string>& insertedConnections,
  35. cmGeneratedFileStream& str) const;
  36. void WriteDependerConnections(const std::string& targetName,
  37. std::set<std::string>& insertedNodes,
  38. std::set<std::string>& insertedConnections,
  39. cmGeneratedFileStream& str) const;
  40. void WriteNode(const std::string& targetName,
  41. const cmGeneratorTarget* target,
  42. std::set<std::string>& insertedNodes,
  43. cmGeneratedFileStream& str) const;
  44. void WriteFooter(cmGeneratedFileStream& str) const;
  45. bool IgnoreThisTarget(const std::string& name);
  46. bool GenerateForTargetType(cmStateEnums::TargetType targetType) const;
  47. std::string GraphType;
  48. std::string GraphName;
  49. std::string GraphHeader;
  50. std::string GraphNodePrefix;
  51. std::vector<cmsys::RegularExpression> TargetsToIgnoreRegex;
  52. const cmGlobalGenerator* GlobalGenerator;
  53. const std::vector<cmLocalGenerator*>& LocalGenerators;
  54. std::map<std::string, const cmGeneratorTarget*> TargetPtrs;
  55. // maps from the actual target names to node names in dot:
  56. std::map<std::string, std::string> TargetNamesNodes;
  57. bool GenerateForExecutables;
  58. bool GenerateForStaticLibs;
  59. bool GenerateForSharedLibs;
  60. bool GenerateForModuleLibs;
  61. bool GenerateForInterface;
  62. bool GenerateForExternals;
  63. bool GeneratePerTarget;
  64. bool GenerateDependers;
  65. bool HaveTargetsAndLibs;
  66. };
  67. #endif