// Copyright (C) 2018 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// A shared library for use on Android by frameworks and other code outside
// of the ART mainline module. It provides a subset of ICU APIs, some
// Android extensions and stable symbols. Most Android target code should
// depend on this library.
//
// With the exception of a few special cases like host apex build targets,
// host binaries should use libicuuc + libicui18n directly.
package {
    default_team: "trendy_team_java_core_libraries",
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "external_icu_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    //   SPDX-license-identifier-Unicode-DFS
    default_applicable_licenses: ["external_icu_license"],
    default_visibility: ["//external/icu:__subpackages__"],
}

cc_library_shared {
    name: "libandroidicu",

    // All code is imported via libandroidicu_static.
    srcs: [],
    // host_supported is required for some cases, e.g. host apex. This library
    // is not intended for general host use.  Please refer to
    // external/icu/build/icu.go for the full allowlist.
    host_supported: true,
    native_bridge_supported: true,
    unique_host_soname: true,
    apex_available: [
        "com.android.i18n",
    ],

    // The implementation of libandroidicu depends on libicuuc and and libicui18n,
    // but we need to export the headers in include/.
    //
    // However, include/unicode has a copy of a subset of header files
    // as in libicuuc and libicui18n. We can't build C/C++ codes against
    // both set of headers, since the headers have the same relative paths,
    // and the compiler will find it ambiguous.
    //
    // Instead, we build the implementation of the shim libaray
    // as a static library aganist libicuuc and libicui18n first,
    // and export the headers in include/.
    whole_static_libs: ["libandroidicu_static"],
    shared_libs: [
        "libbase",
        "libicuuc",
        "libicui18n",
        "liblog",
    ],
    header_libs: ["libandroidicu_headers"],
    export_header_lib_headers: ["libandroidicu_headers"],
    stubs: {
        symbol_file: "libandroidicu.map.txt",
        versions: [
            "1",
        ],
    },
    cflags: [
        "-Wall",
        "-Werror",
    ],
    target: {
        android: {
            cflags: [
                "-DANDROID_LINK_SHARED_ICU4C",
            ],
            version_script: "libandroidicu.map.txt",
        },
        windows: {
            enabled: true,
        },
    },
    // Only add a new path below if your project needs UConverter or URegularExpression from ICU.
    visibility: [
        "//build/orchestrator/apis",
        "//external/icu:__subpackages__",
        "//packages/modules/RuntimeI18n:__subpackages__",
        // The following dependencies can't use libicu instead, because it depends on UConverter
        // or URegularExpression or statically linking libsqlite / libxml2.
        "//external/libxml2",
        "//external/robolectric/nativeruntime/external/sqlite/android",
        "//external/sqlite:__subpackages__",
        "//external/sfntly",
        "//frameworks/av/media/libmedia",
        "//frameworks/base/ravenwood:__subpackages__",
    ],
}

cc_library_headers {
    name: "libandroidicu_headers",
    host_supported: true,
    native_bridge_supported: true,
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
        "com.android.i18n",
    ],

    // include/unicode/: Includes modified C headers from ICU4C,
    //                   but excludes C++ headers.
    // include/uconfig_local.h: local configuration specific for libandroidicu
    export_include_dirs: ["include"],
    target: {
        windows: {
            enabled: true,
        },
    },
}

// TODO: http://b/120776993 Testing for libandroidicu
