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 IshidaStringRef 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 IshidaStringRef 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