Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b5a37c8 authored by Jiyong Park's avatar Jiyong Park
Browse files

Refactor public_libraries.cpp more

- *_public_libraries() are now thread-safe
- removed some of the duplicated code

Bug: 130388701
Test: build & pass presubmit tests
Change-Id: I34b5149f75e28bb892cffe8fd9070be886d2f9bd
parent 72fe2840
Loading
Loading
Loading
Loading
+97 −98
Original line number Diff line number Diff line
@@ -68,6 +68,16 @@ std::string vndk_version_str() {
  return "";
}

// For debuggable platform builds use ANDROID_ADDITIONAL_PUBLIC_LIBRARIES environment
// variable to add libraries to the list. This is intended for platform tests only.
std::string additional_public_libraries() {
  if (debuggable()) {
    const char* val = getenv("ANDROID_ADDITIONAL_PUBLIC_LIBRARIES");
    return val ? val : "";
  }
  return "";
}

void InsertVndkVersionStr(std::string* file_name) {
  CHECK(file_name != nullptr);
  size_t insert_pos = file_name->find_last_of(".");
@@ -171,12 +181,7 @@ void ReadExtensionLibraries(const char* dirname, std::vector<std::string>* sonam
  }
}

}  // namespace

const std::string& default_public_libraries() {
  static bool cached = false;
  static std::string list;
  if (!cached) {
static std::string InitDefaultPublicLibraries() {
  std::string config_file = root_dir() + kDefaultPublicLibrariesFile;
  std::vector<std::string> sonames;
  std::string error_msg;
@@ -184,15 +189,10 @@ const std::string& default_public_libraries() {
                      "Error reading public native library list from \"%s\": %s",
                      config_file.c_str(), error_msg.c_str());

    // For debuggable platform builds use ANDROID_ADDITIONAL_PUBLIC_LIBRARIES environment
    // variable to add libraries to the list. This is intended for platform tests only.
    if (debuggable()) {
      const char* additional_libs = getenv("ANDROID_ADDITIONAL_PUBLIC_LIBRARIES");
      if (additional_libs != nullptr && additional_libs[0] != '\0') {
        std::vector<std::string> additional_libs_vector = base::Split(additional_libs, ":");
        std::copy(additional_libs_vector.begin(), additional_libs_vector.end(),
                  std::back_inserter(sonames));
      }
  std::string additional_libs = additional_public_libraries();
  if (!additional_libs.empty()) {
    auto vec = base::Split(additional_libs, ":");
    std::copy(vec.begin(), vec.end(), std::back_inserter(sonames));
  }

  // Remove the public libs in the runtime namespace.
@@ -217,84 +217,83 @@ const std::string& default_public_libraries() {
      sonames.erase(it);
    }
  }
    list = android::base::Join(sonames, ':');
    cached = true;
  }
  return list;
  return android::base::Join(sonames, ':');
}

const std::string& runtime_public_libraries() {
  static bool cached = false;
  static std::string list;
  if (!cached) {
    list = android::base::Join(kRuntimePublicLibraries, ":");
    // For debuggable platform builds use ANDROID_ADDITIONAL_PUBLIC_LIBRARIES environment
    // variable to add libraries to the list. This is intended for platform tests only.
    if (debuggable()) {
      const char* additional_libs = getenv("ANDROID_ADDITIONAL_PUBLIC_LIBRARIES");
      if (additional_libs != nullptr && additional_libs[0] != '\0') {
static std::string InitRuntimePublicLibraries() {
  CHECK(sizeof(kRuntimePublicLibraries) > 0);
  std::string list = android::base::Join(kRuntimePublicLibraries, ":");

  std::string additional_libs = additional_public_libraries();
  if (!additional_libs.empty()) {
    list = list + ':' + additional_libs;
  }
    }
  }
  return list;
}

const std::string& vendor_public_libraries() {
  static bool cached = false;
  static std::string list;
  if (!cached) {
static std::string InitVendorPublicLibraries() {
  // This file is optional, quietly ignore if the file does not exist.
  std::vector<std::string> sonames;
  ReadConfig(kVendorPublicLibrariesFile, &sonames, always_true, nullptr);
    list = android::base::Join(sonames, ':');
    cached = true;
  }
  return list;
  return android::base::Join(sonames, ':');
}

// read /system/etc/public.libraries-<companyname>.txt and
// /product/etc/public.libraries-<companyname>.txt which contain partner defined
// system libs that are exposed to apps. The libs in the txt files must be
// named as lib<name>.<companyname>.so.
const std::string& extended_public_libraries() {
  static bool cached = false;
  static std::string list;
  if (!cached) {
static std::string InitExtendedPublicLibraries() {
  std::vector<std::string> sonames;
  ReadExtensionLibraries("/system/etc", &sonames);
  ReadExtensionLibraries("/product/etc", &sonames);
    list = android::base::Join(sonames, ':');
    cached = true;
  }
  return list;
  return android::base::Join(sonames, ':');
}

const std::string& llndk_libraries() {
  static bool cached = false;
  static std::string list;
  if (!cached) {
static std::string InitLlndkLibraries() {
  std::string config_file = kLlndkLibrariesFile;
  InsertVndkVersionStr(&config_file);
  std::vector<std::string> sonames;
  ReadConfig(config_file, &sonames, always_true, nullptr);
    list = android::base::Join(sonames, ':');
    cached = true;
  }
  return list;
  return android::base::Join(sonames, ':');
}

const std::string& vndksp_libraries() {
  static bool cached = false;
  static std::string list;
  if (!cached) {
static std::string InitVndkspLibraries() {
  std::string config_file = kVndkLibrariesFile;
  InsertVndkVersionStr(&config_file);
  std::vector<std::string> sonames;
  ReadConfig(config_file, &sonames, always_true, nullptr);
    list = android::base::Join(sonames, ':');
    cached = true;
  return android::base::Join(sonames, ':');
}

}  // namespace

const std::string& default_public_libraries() {
  static std::string list = InitDefaultPublicLibraries();
  return list;
}

const std::string& runtime_public_libraries() {
  static std::string list = InitRuntimePublicLibraries();
  return list;
}

const std::string& vendor_public_libraries() {
  static std::string list = InitVendorPublicLibraries();
  return list;
}

const std::string& extended_public_libraries() {
  static std::string list = InitExtendedPublicLibraries();
  return list;
}

const std::string& llndk_libraries() {
  static std::string list = InitLlndkLibraries();
  return list;
}

const std::string& vndksp_libraries() {
  static std::string list = InitVndkspLibraries();
  return list;
}