xref: /llvm-project/clang/lib/InstallAPI/Library.cpp (revision feed66f3eae5006bb05e6cb34801930fd940daa8)
1*feed66f3SCyndy Ishida //===- Library.cpp --------------------------------------------------------===//
2*feed66f3SCyndy Ishida //
3*feed66f3SCyndy Ishida // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*feed66f3SCyndy Ishida // See https://llvm.org/LICENSE.txt for license information.
5*feed66f3SCyndy Ishida // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*feed66f3SCyndy Ishida //
7*feed66f3SCyndy Ishida //===----------------------------------------------------------------------===//
8*feed66f3SCyndy Ishida 
9*feed66f3SCyndy Ishida #include "clang/InstallAPI/Library.h"
10*feed66f3SCyndy Ishida 
11*feed66f3SCyndy Ishida using namespace llvm;
12*feed66f3SCyndy Ishida namespace clang::installapi {
13*feed66f3SCyndy Ishida 
14*feed66f3SCyndy Ishida const Regex Rule("(.+)/(.+)\\.framework/");
getFrameworkNameFromInstallName(StringRef InstallName)15*feed66f3SCyndy Ishida StringRef Library::getFrameworkNameFromInstallName(StringRef InstallName) {
16*feed66f3SCyndy Ishida   assert(InstallName.contains(".framework") && "expected a framework");
17*feed66f3SCyndy Ishida   SmallVector<StringRef, 3> Match;
18*feed66f3SCyndy Ishida   Rule.match(InstallName, &Match);
19*feed66f3SCyndy Ishida   if (Match.empty())
20*feed66f3SCyndy Ishida     return "";
21*feed66f3SCyndy Ishida   return Match.back();
22*feed66f3SCyndy Ishida }
23*feed66f3SCyndy Ishida 
getName() const24*feed66f3SCyndy Ishida StringRef Library::getName() const {
25*feed66f3SCyndy Ishida   assert(!IsUnwrappedDylib && "expected a framework");
26*feed66f3SCyndy Ishida   StringRef Path = BaseDirectory;
27*feed66f3SCyndy Ishida 
28*feed66f3SCyndy Ishida   // Return the framework name extracted from path.
29*feed66f3SCyndy Ishida   while (!Path.empty()) {
30*feed66f3SCyndy Ishida     if (Path.ends_with(".framework"))
31*feed66f3SCyndy Ishida       return sys::path::filename(Path);
32*feed66f3SCyndy Ishida     Path = sys::path::parent_path(Path);
33*feed66f3SCyndy Ishida   }
34*feed66f3SCyndy Ishida 
35*feed66f3SCyndy Ishida   // Otherwise, return the name of the BaseDirectory.
36*feed66f3SCyndy Ishida   Path = BaseDirectory;
37*feed66f3SCyndy Ishida   return sys::path::filename(Path.rtrim("/"));
38*feed66f3SCyndy Ishida }
39*feed66f3SCyndy Ishida 
40*feed66f3SCyndy Ishida } // namespace clang::installapi
41