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

apexer_tools = [
      "apexer",
      "aapt2",
      "avbtool",
      "e2fsdroid",
      "mke2fs",
      "resize2fs",
      "sefcontext_compile",
      "zipalign",
      // TODO(b/124476339) apex doesn't follow 'required' dependencies so we need to include this
      // manually for 'avbtool'.
      "fec",
]

// TODO(b/157110982): cannot specify "required" dependency on go binary
apexer_go_tools = [
      "merge_zips",
      "soong_zip",
]

python_library_host {
    name: "apex_manifest",
    srcs: [
        "apex_manifest.py",
    ],
    version: {
        py2: {
            enabled: true,
        },
        py3: {
            enabled: true,
        },
    },
    libs: [
        "apex_manifest_proto",
    ],
}

python_binary_host {
    name: "apexer",
    srcs: [
        "apexer.py",
    ],
    version: {
        py2: {
            enabled: true,
            embedded_launcher: true,
        },
        py3: {
            enabled: false,
        },
    },
    libs: [
        "apex_manifest",
        "apex_build_info_proto",
        "manifest_utils",
    ],
    required: apexer_tools,
}

python_binary_host {
    name: "conv_apex_manifest",
    srcs: [
        "conv_apex_manifest.py",
    ],
    version: {
        py2: {
            enabled: true,
            embedded_launcher: true,
        },
        py3: {
            enabled: false,
        },
    },
    libs: [
        "apex_manifest_proto",
    ],
}

apex_key {
  name: "com.android.support.apexer.key",
  public_key: "etc/com.android.support.apexer.avbpubkey",
  private_key: "etc/com.android.support.apexer.pem",
}

// This is a host-apex that contains all the binaries needed to create new apex's seprate from
// soong.
apex_test {
  name: "com.android.support.apexer",
  payload_type: "zip",
  host_supported: true,
  device_supported: false,
  manifest: "etc/manifest.json",
  ignore_system_library_special_case: true,
  key: "com.android.support.apexer.key",
  binaries: apexer_tools + apexer_go_tools,
}

// TODO(b/148659029): this test can't run in TEST_MAPPING.
python_test_host {
    name: "apexer_test",
    main: "apexer_test.py",
    srcs: [
        "apexer_test.py",
    ],
    data: [
        ":com.android.example.apex",
        ":com.android.example-legacy.apex",
        ":com.android.example-logging_parent.apex",
        ":com.android.example-overridden_package_name.apex",
        "testdata/com.android.example.apex.avbpubkey",
        "testdata/com.android.example.apex.pem",
        "testdata/com.android.example.apex.pk8",
        "testdata/com.android.example.apex.x509.pem",
    ],
    version: {
        py2: {
            enabled: false,
        },
        py3: {
            enabled: true,
        },
    },
    test_suites: ["general-tests"],
    libs: [
        "apex_manifest",
    ],
    required: [
        "apexer",
        "deapexer"
    ],
}
