// 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",
      "merge_zips",
      "mke2fs",
      "resize2fs",
      "sefcontext_compile",
      "soong_zip",
      "zipalign",
      // TODO(b/124476339) apex doesn't follow 'required' dependencies so we need to include this
      // manually for 'avbtool'.
      "fec",
]

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,
}

// 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"
    ],
}
