Resync (forgot to add new files?)
[CMakeLuaTailorHgBridge.git] / CMakeLua / Source / cmOrderDirectories.h
blob9cb17e75dfb47552a85f7590ae320c9a3bf2463a
1 /*=========================================================================
3 Program: CMake - Cross-Platform Makefile Generator
4 Module: $RCSfile: cmOrderDirectories.h,v $
5 Language: C++
6 Date: $Date: 2008/02/21 16:41:11 $
7 Version: $Revision: 1.1 $
9 Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
10 See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
12 This software is distributed WITHOUT ANY WARRANTY; without even
13 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 PURPOSE. See the above copyright notices for more information.
16 =========================================================================*/
17 #ifndef cmOrderDirectories_h
18 #define cmOrderDirectories_h
20 #include "cmStandardIncludes.h"
22 #include <cmsys/RegularExpression.hxx>
24 class cmGlobalGenerator;
25 class cmOrderDirectoriesConstraint;
26 class cmOrderDirectoriesConstraintLibrary;
28 /** \class cmOrderDirectories
29 * \brief Compute a safe runtime path order for a set of shared libraries.
31 class cmOrderDirectories
33 public:
34 cmOrderDirectories(cmGlobalGenerator* gg, const char* name,
35 const char* purpose);
36 ~cmOrderDirectories();
37 void AddRuntimeLibrary(std::string const& fullPath, const char* soname = 0);
38 void AddLinkLibrary(std::string const& fullPath);
39 void AddUserDirectories(std::vector<std::string> const& extra);
40 void SetImplicitDirectories(std::set<cmStdString> const& implicitDirs);
41 void SetLinkExtensionInfo(std::vector<std::string> const& linkExtensions,
42 std::string const& removeExtRegex);
44 std::vector<std::string> const& GetOrderedDirectories();
45 private:
46 cmGlobalGenerator* GlobalGenerator;
47 std::string Name;
48 std::string Purpose;
50 bool Computed;
52 std::vector<std::string> OrderedDirectories;
54 bool OrderedDirectoriesComputed;
55 std::vector<cmOrderDirectoriesConstraint*> ConstraintEntries;
56 std::vector<std::string> UserDirectories;
57 cmsys::RegularExpression RemoveLibraryExtension;
58 std::vector<std::string> LinkExtensions;
59 std::set<cmStdString> ImplicitDirectories;
60 std::set<cmStdString> EmmittedConstraintSOName;
61 std::set<cmStdString> EmmittedConstraintLibrary;
62 std::vector<std::string> OriginalDirectories;
63 std::map<cmStdString, int> DirectoryIndex;
64 std::vector<int> DirectoryVisited;
65 void CollectOriginalDirectories();
66 int AddOriginalDirectory(std::string const& dir);
67 void FindConflicts();
68 void OrderDirectories();
69 void VisitDirectory(unsigned int i);
70 void DiagnoseCycle();
71 bool CycleDiagnosed;
72 int WalkId;
74 // Adjacency-list representation of runtime path ordering graph.
75 // This maps from directory to those that must come *before* it.
76 // Each entry that must come before is a pair. The first element is
77 // the index of the directory that must come first. The second
78 // element is the index of the runtime library that added the
79 // constraint.
80 typedef std::pair<int, int> ConflictPair;
81 struct ConflictList: public std::vector<ConflictPair> {};
82 std::vector<ConflictList> ConflictGraph;
84 friend class cmOrderDirectoriesConstraint;
85 friend class cmOrderDirectoriesConstraintLibrary;
88 #endif