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

python_defaults {
    name: "atest_lib_default",
    pkg_path: "atest",
    version: {
        py2: {
            enabled: false,
            embedded_launcher: false,
        },
        py3: {
            enabled: true,
            embedded_launcher: false,
        },
    },
}

// Remove this defaults after python3 migration is finished.
python_defaults {
    name: "atest_py2_default",
    pkg_path: "atest",
    version: {
        py2: {
            enabled: true,
            embedded_launcher: false,
        },
        py3: {
            enabled: false,
            embedded_launcher: false,
        },
    },
}

python_binary_host {
    name: "atest-py2",
    main: "atest.py",
    srcs: [
        "**/*.py",
    ],
    exclude_srcs: [
        "*_unittest.py",
        "*/*_unittest.py",
        "asuite_lib_test/*.py",
        "proto/*_pb2.py",
        "proto/__init__.py",
    ],
    libs: [
        "atest_proto",
    ],
    data: [
        "tools/updatedb_darwin.sh",
        ":asuite_version",
    ],
    // Make atest's built name to atest-py2-dev
    stem: "atest-py2-dev",
    defaults: ["atest_py2_default"],
    dist: {
        targets: ["droidcore"],
    },
}

python_library_host {
    name: "atest_module_info",
    defaults: ["atest_lib_default"],
    srcs: [
        "atest_error.py",
        "atest_decorator.py",
        "atest_utils.py",
        "constants.py",
        "constants_default.py",
        "module_info.py",
    ],
}

// Move asuite_default and asuite_metrics to //tools/asuite when atest is
// running as a prebuilt.
python_defaults {
    name: "asuite_default",
    pkg_path: "asuite",
    version: {
        py2: {
            enabled: true,
            embedded_launcher: false,
        },
        py3: {
            enabled: true,
            embedded_launcher: false,
        },
    },
}

python_library_host {
    name: "asuite_metrics",
    defaults: ["asuite_default"],
    srcs: [
        "asuite_metrics.py",
    ],
}

// Exclude atest_updatedb_unittest due to it's a test for ATest's wrapper of updatedb, but there's
// no updatedb binary on test server.
python_test_host {
    name: "atest-py2_unittests",
    main: "atest_run_unittests.py",
    pkg_path: "atest",
    srcs: [
        "**/*.py",
    ],
    data: [
        "tools/updatedb_darwin.sh",
        "unittest_data/**/*",
        "unittest_data/**/.*",
    ],
    exclude_srcs: [
        "asuite_lib_test/*.py",
        "proto/*_pb2.py",
        "proto/__init__.py",
        "tools/atest_updatedb_unittest.py",
    ],
    libs: [
        "py-mock",
        "atest_proto",
    ],
    test_config: "atest_unittests.xml",
    test_suites: ["general-tests"],
    defaults: ["atest_py2_default"],
}

python_library_host {
    name: "atest_proto",
    defaults: ["atest_py2_default"],
    srcs: [
        "proto/*.proto",
    ],
    proto: {
        canonical_path_from_root: false,
    },
}

java_library_host {
    name: "asuite_proto_java",
    srcs: [
        "proto/*.proto",
    ],
    proto: {
        type: "full",
        canonical_path_from_root: false,
        include_dirs: ["external/protobuf/src"],
    },
}

python_library_host {
    name: "asuite_proto",
    defaults: ["asuite_default"],
    srcs: [
        "proto/*.proto",
    ],
    proto: {
        canonical_path_from_root: false,
    },
}

python_library_host {
    name: "asuite_cc_client",
    defaults: ["asuite_default"],
    srcs: [
        "atest_error.py",
        "atest_decorator.py",
        "atest_utils.py",
        "constants.py",
        "constants_default.py",
        "metrics/*.py",
    ],
    libs: [
        "asuite_proto",
        "asuite_metrics",
    ],
}

genrule {
    name: "asuite_version",
    cmd: "DATETIME=$$(TZ='America/Log_Angelos' date +'%F');" +
         "if [[ -n $$BUILD_NUMBER ]]; then" +
         "  echo $${DATETIME}_$${BUILD_NUMBER} > $(out);" +
         "else" +
         "  echo $$(date +'%F_%R') > $(out);" +
         "fi",
    out: [
        "VERSION",
    ],
}
