// 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",
      "make_f2fs",
      "sload_f2fs",
      // 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",
    ],
    // TODO(b/157625953) mke2fs.conf can't embedded directly.
    data: [
        ":mke2fs_conf",
    ],
    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",
        ":apexer_test_host_tools",
        "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",
    ],
}

apexer_deps_minus_go_tools = apexer_tools + [
    "deapexer",
    "debugfs_static",
]

apexer_deps_tools = apexer_deps_minus_go_tools + apexer_go_tools

genrule_defaults {
    name: "apexer_test_host_tools_list",
    tools: apexer_deps_tools + [
        "signapk",
    ],
}

genrule {
    name: "apexer_test_host_tools",
    srcs: [
        ":current_android_jar",
    ],
    out: ["apexer_test_host_tools.zip"],
    tools: apexer_deps_tools + [
        // To force signapk.jar generated in out/soong/host
        "signapk",
    ],
    cmd: "HOST_OUT_BIN=$$(dirname $(location apexer)) && " +
        "HOST_SOONG_OUT=$$(dirname $$HOST_OUT_BIN) && " +
        "SIGNAPK_JAR=$$(find $${HOST_SOONG_OUT}/framework -name \"signapk*\") && " +
        "LIBCPLUSPLUS=$$(find $${HOST_SOONG_OUT}/lib64 -name \"libc++.*\") && " +
        "LIBCONSCRYPT_OPENJDK_JNI=$$(find $${HOST_SOONG_OUT}/lib64 -name \"libconscrypt_openjdk_jni.*\") && " +
        "BASE=$(genDir)/binary_files && " +
        "BIN=$$BASE/bin && " +
        "LIB=$$BASE/lib64 && " +
        "mkdir -p $$BIN && " +
        "mkdir -p $$LIB && " +
        "cp $(in) $$BIN && " +
        "cp $(location apexer) $$BIN && " +
        "cp $(location deapexer) $$BIN && " +
        "cp $(location avbtool) $$BIN && " +
        "cp $(location aapt2) $$BIN && " +
        "cp $(location e2fsdroid) $$BIN && " +
        "cp $(location merge_zips) $$BIN && " +
        "cp $(location mke2fs) $$BIN && " +
        "cp $(location resize2fs) $$BIN && " +
        "cp $(location sefcontext_compile) $$BIN && " +
        "cp $(location soong_zip) $$BIN && " +
        "cp $(location fec) $$BIN && " +
        "cp $(location zipalign) $$BIN && " +
        "cp $(location debugfs_static) $$BIN && " +
        "cp $$SIGNAPK_JAR $$BIN && " +
        "cp $$LIBCPLUSPLUS $$LIB && " +
        "cp $$LIBCONSCRYPT_OPENJDK_JNI $$LIB && " +
        "$(location soong_zip) -C $$BASE -D $$BASE -o $(out) && " +
        "rm -rf $$BASE",
}
