1 /*=========================================================================
3 Program: CMake - Cross-Platform Makefile Generator
4 Module: $RCSfile: cmOrderDirectories.h,v $
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
34 cmOrderDirectories(cmGlobalGenerator
* gg
, const char* name
,
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();
46 cmGlobalGenerator
* GlobalGenerator
;
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
);
68 void OrderDirectories();
69 void VisitDirectory(unsigned int i
);
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
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
;