// Copyright (C) 2021 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 {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_base_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_base_license"],
}

// An existing module name is reused to avoid merge conflicts.
// TODO: fix the font and module name.
filegroup {
    name: "NotoColorEmojiTtf",
    srcs: ["NotoColorEmoji.ttf"],
}

filegroup {
    name: "UpdatableSystemFontTestKeyPem",
    srcs: ["UpdatableSystemFontTestKey.pem"],
}

filegroup {
    name: "UpdatableSystemFontTestCertPem",
    srcs: ["UpdatableSystemFontTestCert.pem"],
}

filegroup {
    name: "UpdatableSystemFontTestCertDer",
    srcs: ["UpdatableSystemFontTestCert.der"],
}

genrule_defaults {
    name: "updatable_system_font_increment_font_revision_default",
}

genrule {
    name: "UpdatableSystemFontTestNotoColorEmojiV0Ttf",
    srcs: [":NotoColorEmojiTtf"],
    out: ["UpdatableSystemFontTestNotoColorEmojiV0.ttf"],
    tools: ["update_font_metadata"],
    cmd: "$(location update_font_metadata) " +
        "--input=$(in) " +
        "--output=$(out) " +
        "--revision=0",
}

genrule {
    name: "UpdatableSystemFontTestNotoColorEmojiVPlus1Ttf",
    srcs: [":NotoColorEmojiTtf"],
    out: ["UpdatableSystemFontTestNotoColorEmojiVPlus1.ttf"],
    tools: ["update_font_metadata"],
    cmd: "$(location update_font_metadata) " +
        "--input=$(in) " +
        "--output=$(out) " +
        "--revision=+1",
}

genrule {
    name: "UpdatableSystemFontTestNotoColorEmojiVPlus2Ttf",
    srcs: [":NotoColorEmojiTtf"],
    out: ["UpdatableSystemFontTestNotoColorEmojiVPlus2.ttf"],
    tools: ["update_font_metadata"],
    cmd: "$(location update_font_metadata) " +
        "--input=$(in) " +
        "--output=$(out) " +
        "--revision=+2",
}

genrule_defaults {
    name: "updatable_system_font_sig_gen_default",
    tools: ["fsverity"],
    tool_files: [
        ":UpdatableSystemFontTestKeyPem",
        ":UpdatableSystemFontTestCertPem",
    ],
    cmd: "$(location fsverity) sign $(in) $(out) " +
        "--key=$(location :UpdatableSystemFontTestKeyPem) " +
        "--cert=$(location :UpdatableSystemFontTestCertPem) " +
        "> /dev/null",
}

genrule {
    name: "UpdatableSystemFontTestNotoColorEmojiTtfFsvSig",
    defaults: ["updatable_system_font_sig_gen_default"],
    srcs: [":NotoColorEmojiTtf"],
    out: ["UpdatableSystemFontTestNotoColorEmoji.ttf.fsv_sig"],
}

genrule {
    name: "UpdatableSystemFontTestNotoColorEmojiV0TtfFsvSig",
    defaults: ["updatable_system_font_sig_gen_default"],
    srcs: [":UpdatableSystemFontTestNotoColorEmojiV0Ttf"],
    out: ["UpdatableSystemFontTestNotoColorEmojiV0.ttf.fsv_sig"],
}

genrule {
    name: "UpdatableSystemFontTestNotoColorEmojiVPlus1TtfFsvSig",
    defaults: ["updatable_system_font_sig_gen_default"],
    srcs: [":UpdatableSystemFontTestNotoColorEmojiVPlus1Ttf"],
    out: ["UpdatableSystemFontTestNotoColorEmojiVPlus1.ttf.fsv_sig"],
}

genrule {
    name: "UpdatableSystemFontTestNotoColorEmojiVPlus2TtfFsvSig",
    defaults: ["updatable_system_font_sig_gen_default"],
    srcs: [":UpdatableSystemFontTestNotoColorEmojiVPlus2Ttf"],
    out: ["UpdatableSystemFontTestNotoColorEmojiVPlus2.ttf.fsv_sig"],
}
