// 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.

cc_library {
    name: "libcarpowermanager",

    aidl: {
        export_aidl_headers: true,
        local_include_dirs: [
            "src",
        ],
    },

    cflags: [
        "-Wall",
        "-Werror",
        "-Wextra",
        "-Wno-unused-parameter",
    ],

    include_dirs: [
        "packages/services/Car/car-lib/native/include",
    ],

    shared_libs: [
        "libbinder",
        "liblog",
        "libutils",
    ],

    srcs: [
        "src/android/car/ICar.aidl",
        "src/android/car/hardware/power/ICarPower.aidl",
        "src/android/car/hardware/power/ICarPowerStateListener.aidl",
        "native/CarPowerManager/CarPowerManager.cpp",
    ],
}

java_library {
    name: "android.car",
    srcs: [
        "src/**/*.java",
        "src_feature_future/**/*.java",
        "src/**/I*.aidl",
    ],
    aidl: {
        include_dirs: [
            "system/bt/binder",
        ],
    },
    exclude_srcs: [
        "src/android/car/storagemonitoring/IoStats.aidl",
        "src/android/car/storagemonitoring/IoStatsEntry.aidl",
    ],
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
    installable: true,
}

doc_defaults {
    name: "android.car-docs-default",
    srcs: [
        "src/**/*.java",
        "src_feature_future/**/*.java",
    ],
    libs: [
        "android.car",
    ],
    custom_template: "droiddoc-templates-sdk",
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
}

genrule {
    name: "android-car-last-released-api",
    srcs: [
        "api/released/*.txt",
    ],
    cmd: "cp -f $$(echo $(in) | tr \" \" \"\\n\" | sort -n | tail -1) $(genDir)/last-released-api.txt",
    out: [
        "last-released-api.txt",
    ],
}

genrule {
    name: "android-car-last-released-system-api",
    srcs: [
        "api/system-released/*.txt",
    ],
    cmd: "cp -f $$(echo $(in) | tr \" \" \"\\n\" | sort -n | tail -1) $(genDir)/last-released-system-api.txt",
    out: [
        "last-released-system-api.txt",
    ],
}

genrule {
    name: "android-car-last-released-test-api",
    srcs: [
        "api/test-released/*.txt",
    ],
    cmd: "cp -f $$(echo $(in) | tr \" \" \"\\n\" | sort -n | tail -1) $(genDir)/last-released-test-api.txt",
    out: [
        "last-released-test-api.txt",
    ],
}

droiddoc {
    name: "android.car-stubs-docs",
    defaults: ["android.car-docs-default"],
    api_tag_name: "ANDROID_CAR",
    api_filename: "api.txt",
    removed_api_filename: "removed.txt",
    args: "-hide 113 -hide 110 -nodocs -stubpackages android.car* ",
    installable: false,
    check_api: {
        last_released: {
            api_file: ":android-car-last-released-api",
            removed_api_file: "api/removed.txt",
            args: " -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 -hide 26 -hide 27 " +
                  " -warning 7 -warning 8 -warning 9 -warning 10 -warning 11 -warning 12 " +
                  " -warning 13 -warning 14 -warning 15 -warning 16 -warning 17 -warning 18 -hide 113 ",
        },
        current: {
            api_file: "api/current.txt",
            removed_api_file: "api/removed.txt",
            args: " -error 2 -error 3 -error 4 -error 5 -error 6 -error 7 -error 8 -error 9 -error 10 -error 11 " +
                  " -error 12 -error 13 -error 14 -error 15 -error 16 -error 17 -error 18 -error 19 -error 20 " +
                  " -error 21 -error 23 -error 24 -error 25 -hide 113 ",
        },
    },
}

droiddoc {
    name: "android.car-system-stubs-docs",
    defaults: ["android.car-docs-default"],
    api_tag_name: "ANDROID_CAR_SYSTEM",
    api_filename: "api.txt",
    removed_api_filename: "removed.txt",
    args: "-hide 113 -hide 110 -nodocs -stubpackages android.car* " +
        "-showAnnotation android.annotation.SystemApi ",
    installable: false,
    check_api: {
        last_released: {
            api_file: ":android-car-last-released-system-api",
            removed_api_file: "api/system-removed.txt",
            args: " -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 -hide 26 -hide 27 " +
                  " -warning 7 -warning 8 -warning 9 -warning 10 -warning 11 -warning 12 " +
                  " -warning 13 -warning 14 -warning 15 -warning 16 -warning 17 -warning 18 -hide 113 ",
        },
        current: {
            api_file: "api/system-current.txt",
            removed_api_file: "api/system-removed.txt",
            args: " -error 2 -error 3 -error 4 -error 5 -error 6 -error 7 -error 8 -error 9 -error 10 -error 11 " +
                  " -error 12 -error 13 -error 14 -error 15 -error 16 -error 17 -error 18 -error 19 -error 20 " +
                  " -error 21 -error 23 -error 24 -error 25 -hide 113 ",
        },
    },
}

droiddoc {
    name: "android.car-test-stubs-docs",
    defaults: ["android.car-docs-default"],
    api_tag_name: "ANDROID_CAR_SYSTEM",
    api_filename: "api.txt",
    removed_api_filename: "removed.txt",
    args: "-hide 113 -hide 110 -nodocs -stubpackages android.car* " +
        "-showAnnotation android.annotation.TestApi ",
    installable: false,
    check_api: {
        current: {
            api_file: "api/test-current.txt",
            removed_api_file: "api/test-removed.txt",
            args: " -error 2 -error 3 -error 4 -error 5 -error 6 -error 7 -error 8 -error 9 -error 10 -error 11 " +
                  " -error 12 -error 13 -error 14 -error 15 -error 16 -error 17 -error 18 -error 19 -error 20 " +
                  " -error 21 -error 23 -error 24 -error 25 -hide 113 ",
        },
    },
}

droiddoc {
    name: "android.car-stub-docs",
    srcs: [
        "src/**/*.java",
    ],
    libs: [
        "android.car",
    ],
    api_tag_name: "ANDROID_CAR_STUB",
    api_filename: "api.txt",
    custom_template: "droiddoc-templates-sdk",
    args: "-nodocs -stubpackages android.car* ",
    installable: false,
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
}

java_library_static {
    name: "android.car-stubs",
    srcs: [
        ":android.car-stub-docs",
    ],
    libs: [
        "android.car",
    ],
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
    compile_dex: true,
}

java_library_static {
    name: "android.car-system-stubs",
    srcs: [
        ":android.car-system-stubs-docs",
    ],
    libs: [
        "android.car",
    ],
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
    compile_dex: true,
}

java_library_static {
    name: "android.car-test-stubs",
    srcs: [
        ":android.car-test-stubs-docs",
    ],
    libs: [
        "android.car",
    ],
    product_variables: {
        pdk: {
            enabled: false,
        },
    },
    compile_dex: true,
}
