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