1//===- llvm/TextAPI/Utils.h - TAPI Utils -----------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Helper functionality used for Darwin specific operations.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_TEXTAPI_UTILS_H
14#define LLVM_TEXTAPI_UTILS_H
15
16#include "llvm/ADT/Twine.h"
17#include "llvm/Support/Error.h"
18#include "llvm/Support/FileSystem.h"
19#include "llvm/Support/MemoryBuffer.h"
20#include "llvm/Support/Path.h"
21#include "llvm/Support/Regex.h"
22#include "llvm/TextAPI/Symbol.h"
23#include <map>
24
25#if !defined(PATH_MAX)
26#define PATH_MAX 1024
27#endif // !defined(PATH_MAX)
28
29#define MACCATALYST_PREFIX_PATH "/System/iOSSupport"
30#define DRIVERKIT_PREFIX_PATH "/System/DriverKit"
31
32namespace llvm::MachO {
33
34using PathSeq = std::vector<std::string>;
35
36// Defines simple struct for storing symbolic links.
37struct SymLink {
38 std::string SrcPath;
39 std::string LinkContent;
40
41 SymLink(std::string Path, std::string Link)
42 : SrcPath(std::move(Path)), LinkContent(std::move(Link)) {}
43
44 SymLink(StringRef Path, StringRef Link)
45 : SrcPath(std::string(Path)), LinkContent(std::string(Link)) {}
46};
47
48/// Replace extension considering frameworks.
49///
50/// \param Path Location of file.
51/// \param Extension File extension to update with.
52void replace_extension(SmallVectorImpl<char> &Path, const Twine &Extension);
53
54/// Determine whether to skip over symlink due to either too many symlink levels
55/// or is cyclic.
56///
57/// \param Path Location to symlink.
58/// \param Result Holds whether to skip over Path.
59std::error_code shouldSkipSymLink(const Twine &Path, bool &Result);
60
61/// Turn absolute symlink into relative.
62///
63/// \param From The symlink.
64/// \param To What the symlink points to.
65/// \param RelativePath Path location to update what the symlink points to.
66std::error_code make_relative(StringRef From, StringRef To,
67 SmallVectorImpl<char> &RelativePath);
68
69/// Determine if library is private by parsing file path.
70/// It does not touch the file system.
71///
72/// \param Path File path for library.
73/// \param IsSymLink Whether path points to a symlink.
74bool isPrivateLibrary(StringRef Path, bool IsSymLink = false);
75
76/// Create a regex rule from provided glob string.
77/// \param Glob String that represents glob input.
78/// \return The equivalent regex rule.
79llvm::Expected<llvm::Regex> createRegexFromGlob(llvm::StringRef Glob);
80
81using AliasEntry = std::pair<std::string, EncodeKind>;
82using AliasMap = std::map<AliasEntry, AliasEntry>;
83
84/// Parse input list and capture symbols and their alias.
85///
86/// \param Buffer Data contents of file for the alias list.
87/// \return Lookup table of alias to their base symbol.
88Expected<AliasMap> parseAliasList(std::unique_ptr<llvm::MemoryBuffer> &Buffer);
89
90} // namespace llvm::MachO
91#endif // LLVM_TEXTAPI_UTILS_H
92

source code of llvm/include/llvm/TextAPI/Utils.h