// 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: "acloud_default",
    pkg_path: "acloud",
    version: {
        py2: {
            enabled: true,
            embedded_launcher: false,
            libs: [
                "py-pyopenssl",
            ]
        },
        py3: {
            enabled: false,
            embedded_launcher: false,
        },
    },
}

python_binary_host {
    name: "acloud",
    // Make acloud's built name to acloud-dev
    stem: "acloud-dev",
    defaults: ["acloud_default"],
    main: "public/acloud_main.py",
    srcs: [
        "public/acloud_main.py",
        "errors.py"
    ],
    data: [
        "public/data/default.config",
	":acloud_version",
    ],
    libs: [
        "acloud_create",
        "acloud_delete",
        "acloud_reconnect",
        "acloud_internal",
        "acloud_list",
        "acloud_pull",
        "acloud_metrics",
        "acloud_proto",
        "acloud_public",
        "acloud_setup",
        "py-apitools",
        "py-dateutil",
        "py-google-api-python-client",
        "py-oauth2client",
        "py-six",
    ],
    dist: {
        targets: ["droidcore"],
    },
}

python_test_host {
    name: "acloud_test",
    main: "acloud_test.py",
    defaults: ["acloud_default"],
    data: [
        "public/data/default.config",
    ],
    srcs: [
        "acloud_test.py",
        "errors.py",
        "public/*_test.py",
        "public/actions/*_test.py",
        "internal/lib/*_test.py",
        "metrics/*.py",
    ],
    libs: [
        "acloud_create",
        "acloud_delete",
        "acloud_reconnect",
        "acloud_internal",
        "acloud_list",
        "acloud_pull",
        "acloud_proto",
        "acloud_public",
        "acloud_setup",
        "asuite_cc_client",
        "py-apitools",
        "py-dateutil",
        "py-google-api-python-client",
        "py-mock",
        "py-oauth2client",
    ],
    test_config: "acloud_unittest.xml",
    test_suites: ["general-tests"],
}

python_library_host {
    name: "acloud_public",
    defaults: ["acloud_default"],
    srcs: [
        "public/*.py",
        "public/actions/*.py",
    ],
    exclude_srcs: [
        "public/*_test.py",
        "public/actions/*_test.py",
        "public/acloud_main.py",
    ]
}

python_library_host {
    name: "acloud_internal",
    defaults: ["acloud_default"],
    srcs: [
        "internal/*.py",
        "internal/lib/*.py",
    ],
    exclude_srcs: [
        "internal/lib/*_test.py",
    ]
}

python_library_host {
    name: "acloud_proto",
    defaults: ["acloud_default"],
    srcs: [
        "internal/proto/*.proto",
    ],
    proto: {
        canonical_path_from_root: false,
    },
}

python_library_host{
    name: "acloud_setup",
    defaults: ["acloud_default"],
    srcs: [
         "setup/*.py",
    ],
    exclude_srcs: [
        "setup/*_test.py",
    ],
}

python_library_host{
    name: "acloud_create",
    defaults: ["acloud_default"],
    srcs: [
         "create/*.py",
    ],
}

python_library_host{
    name: "acloud_delete",
    defaults: ["acloud_default"],
    srcs: [
         "delete/*.py",
    ],
}

python_library_host{
    name: "acloud_list",
    defaults: ["acloud_default"],
    srcs: [
         "list/*.py",
    ],
}

python_library_host{
    name: "acloud_reconnect",
    defaults: ["acloud_default"],
    srcs: [
         "reconnect/*.py",
    ],
}

python_library_host{
    name: "acloud_pull",
    defaults: ["acloud_default"],
    srcs: [
         "pull/*.py",
    ],
}

python_library_host{
    name: "acloud_metrics",
    defaults: ["acloud_default"],
    srcs: [
         "metrics/*.py",
    ],
    libs: [
         "asuite_cc_client",
         "asuite_metrics",
    ],
}

genrule {
    name: "acloud_version",
    tool_files: ["gen_version.sh"],
    cmd: "$(location gen_version.sh) $(out)",
    out: ["public/data/VERSION"],
}

python_defaults {
    // Make acloud's built name to acloud-py3-dev for python3.
    name: "acloud_py3_default",
    pkg_path: "acloud",
    version: {
        py2: {
            enabled: false,
            embedded_launcher: false,
        },
        py3: {
            enabled: true,
            embedded_launcher: false,
        },
    },
}

python_binary_host {
    name: "acloud_py3",
    stem: "acloud-py3-dev",
    defaults: ["acloud_py3_default"],
    main: "public/acloud_main.py",
    srcs: [
        "public/acloud_main.py",
        "errors.py"
    ],
    data: [
        "public/data/default.config",
	":acloud_version",
    ],
    libs: [
        "acloud_create_py3",
        "acloud_delete_py3",
        "acloud_reconnect_py3",
        "acloud_internal_py3",
        "acloud_list_py3",
        "acloud_pull_py3",
        "acloud_metrics_py3",
        "acloud_proto_py3",
        "acloud_public_py3",
        "acloud_setup_py3",
        "py-apitools",
        "py-dateutil",
        "py-google-api-python-client",
        "py-oauth2client",
        "py-six",
    ],
    dist: {
        targets: ["droidcore"],
    },
}

python_test_host {
    name: "acloud_test_py3",
    main: "acloud_test.py",
    defaults: ["acloud_py3_default"],
    data: [
        "public/data/default.config",
    ],
    srcs: [
        "acloud_test.py",
        "errors.py",
        "public/*_test.py",
        "public/actions/*_test.py",
        "internal/lib/*_test.py",
        "metrics/*.py",
    ],
    libs: [
        "acloud_create_py3",
        "acloud_delete_py3",
        "acloud_reconnect_py3",
        "acloud_internal_py3",
        "acloud_list_py3",
        "acloud_pull_py3",
        "acloud_proto_py3",
        "acloud_public_py3",
        "acloud_setup_py3",
        "asuite_cc_client",
        "py-apitools",
        "py-dateutil",
        "py-google-api-python-client",
        "py-mock",
        "py-oauth2client",
    ],
    test_config: "acloud_unittest.xml",
    test_suites: ["general-tests"],
}

python_library_host {
    name: "acloud_public_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
        "public/*.py",
        "public/actions/*.py",
    ],
    exclude_srcs: [
        "public/*_test.py",
        "public/actions/*_test.py",
        "public/acloud_main.py",
    ]
}

python_library_host {
    name: "acloud_internal_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
        "internal/*.py",
        "internal/lib/*.py",
    ],
    exclude_srcs: [
        "internal/lib/*_test.py",
    ]
}

python_library_host {
    name: "acloud_proto_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
        "internal/proto/*.proto",
    ],
    proto: {
        canonical_path_from_root: false,
    },
}

python_library_host{
    name: "acloud_setup_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
         "setup/*.py",
    ],
    exclude_srcs: [
        "setup/*_test.py",
    ],
}

python_library_host{
    name: "acloud_create_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
         "create/*.py",
    ],
}

python_library_host{
    name: "acloud_delete_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
         "delete/*.py",
    ],
}

python_library_host{
    name: "acloud_list_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
         "list/*.py",
    ],
}

python_library_host{
    name: "acloud_reconnect_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
         "reconnect/*.py",
    ],
}

python_library_host{
    name: "acloud_pull_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
         "pull/*.py",
    ],
}

python_library_host{
    name: "acloud_metrics_py3",
    defaults: ["acloud_py3_default"],
    srcs: [
         "metrics/*.py",
    ],
    libs: [
         "asuite_cc_client",
         "asuite_metrics",
    ],
}

