// Copyright (C) 2011 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.

package {
    default_applicable_licenses: ["frameworks_base_data_fonts_license"],
}

// Added automatically by a large-scale-change
// See: http://go/android-license-faq
license {
    name: "frameworks_base_data_fonts_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
    ],
    license_text: [
        "NOTICE",
    ],
}

prebuilt_font {
    name: "DroidSansMono.ttf",
    src: "DroidSansMono.ttf",
    required: [
        // Roboto-Regular.ttf provides DroidSans.ttf as a symlink to itself
        // Roboto-Regular.ttf provides DroidSans-Bold.ttf as a symlink to itself
        "Roboto-Regular.ttf",
    ],
}

prebuilt_font {
    name: "AndroidClock.ttf",
    src: "AndroidClock.ttf",
}

/////////////////////////////////
// Copies the font configuration file into system/etc for the product as fonts.xml.
// Additional fonts should be installed to /product/fonts/ alongside a corresponding
// fonts_customiztion.xml in /product/etc/

soong_config_bool_variable {
    name: "use_var_font",
}

soong_config_module_type {
    name: "prebuilt_fonts_xml",
    module_type: "prebuilt_etc",
    config_namespace: "noto_sans_cjk_config",
    bool_variables: ["use_var_font"],
    properties: ["src"],
}

prebuilt_fonts_xml {
    name: "fonts.xml",
    src: "fonts.xml",
    soong_config_variables: {
        use_var_font: {
            src: "fonts_cjkvf.xml",
        },
    },
}

prebuilt_etc {
    name: "font_fallback.xml",
    src: ":generate_font_fallback",
}

/////////////////////////////////
// Move `fontchain_lint` to `core/tasks/fontchain_lint.mk`.
// Because `system.img` is a dependency of `fontchain_lint`, it cannot be
// converted to Android.bp for now.
// After system.img can be generated by Soong, then it can be converted to Android.bp.

filegroup {
    name: "DroidSansMono",
    srcs: ["font_config.json"],
    required: [
        "DroidSansMono.ttf",
    ],
}

genrule {
    name: "generate_font_fallback",
    tools: [":generate_fonts_xml"],
    tool_files: [
        "alias.json",
        "fallback_order.json",
    ],
    srcs: [
        ":CarroisGothicSC",
        ":ComingSoon",
        ":CutiveMono",
        ":DancingScript",
        ":DroidSansMono",
        ":Roboto",
        ":RobotoFlex",
        ":SourceSansPro",
        ":noto-fonts",
    ],
    exclude_srcs: [
        "alias.json",
        "fallback_order.json",
    ],
    out: ["font_fallback.xml"],
    cmd: "$(location :generate_fonts_xml) " +
        "--alias=$(location alias.json) " +
        "--fallback=$(location fallback_order.json) " +
        "$(in) " +
        "-o $(out)",
}
