File: HostInfoSwift.cpp

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (59 lines) | stat: -rw-r--r-- 2,173 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//===-- HostInfoSwift.cpp -------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "lldb/Host/common/HostInfoSwift.h"
#include "lldb/Host/FileSystem.h"
#include "lldb/Host/HostInfoBase.h"
#include "lldb/Host/Config.h"
#include "lldb/Utility/Log.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
#include "lldb/Utility/LLDBLog.h"

bool lldb_private::VerifySwiftPath(const llvm::Twine &swift_path) {
  if (FileSystem::Instance().IsDirectory(swift_path))
    return true;
  Log *log = GetLog(LLDBLog::Host);
  if (log)
    log->Printf("VerifySwiftPath(): "
                "failed to stat swift resource directory at \"%s\"",
                swift_path.str().c_str());
  return false;
}

bool lldb_private::DefaultComputeSwiftResourceDirectory(
    FileSpec &lldb_shlib_spec, FileSpec &file_spec, bool verify) {
  if (!lldb_shlib_spec)
    return false;
  Log *log = GetLog(LLDBLog::Host);
  std::string raw_path = lldb_shlib_spec.GetPath();
  // Drop bin (windows) or lib
  llvm::StringRef parent_path = llvm::sys::path::parent_path(raw_path);

  static const llvm::StringRef kResourceDirSuffixes[] = {
      "lib/swift",
      LLDB_INSTALL_LIBDIR_BASENAME "/lldb/swift",
  };
  for (const auto &Suffix : kResourceDirSuffixes) {
    llvm::SmallString<256> swift_path(parent_path);
    llvm::SmallString<32> relative_path(Suffix);
    llvm::sys::path::append(swift_path, relative_path);
    if (!verify || VerifySwiftPath(swift_path)) {
      if (log)
        log->Printf("DefaultComputeSwiftResourceDir: Setting SwiftResourceDir "
                    "to \"%s\", verify = %s",
                    swift_path.str().str().c_str(), verify ? "true" : "false");
      file_spec.SetDirectory(swift_path);
      FileSystem::Instance().Resolve(file_spec);
      return true;
    }
  }
  return false;
}