//
// Copyright (C) 2010 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.
//

java_defaults {
    name: "bouncycastle-errorprone-defaults",
    errorprone: {
        javacflags: [
            "-Xep:MissingOverride:OFF",  // Ignore missing @Override.
        ],
    },
}

// These cannot build in the PDK, because the PDK requires all libraries
// compile against SDK versions.
java_defaults {
    name: "bouncycastle-defaults",
    defaults: [
        "bouncycastle-errorprone-defaults",
    ],
    hostdex: true,
    target: {
        android: {
            product_variables: {
                pdk: {
                    enabled: false,
                },
            },
        },
    },
}

// A bouncycastle library in the original org.bouncycastle package for use
// outside of the platform. e.g. for host or in unbundled apps.
java_library_static {
    name: "bouncycastle-unbundled",
    defaults: ["bouncycastle-defaults"],
    host_supported: true,

    srcs: ["bcprov/src/main/java/**/*.java"],
    exclude_srcs: [
        "bcprov/src/main/java/org/bouncycastle/asn1/ocsp/**/*.java",
    ],

    sdk_version: "core_current",
    java_version: "1.7",
}

// The src files for bouncycastle, used to generate core platform / intra-core
// API stubs.
filegroup {
    name: "bouncycastle_java_files",
    srcs: ["android_bcprov/src/main/java/**/*.java"],
    exclude_srcs: [
        "android_bcprov/src/main/java/org/bouncycastle/asn1/ocsp/**/*.java",
    ],
}

// A bouncycastle library repackaged in com.android.org.bouncycastle for use
// in the Android platform where it is important not to conflict with the
// original org.bouncycastle package.
java_library {
    name: "bouncycastle",
    defaults: ["bouncycastle-defaults"],
    installable: true,

    srcs: [":bouncycastle_java_files"],

    no_standard_libs: true,
    libs: [
        "core-all",
    ],
    system_modules: "core-all-system-modules",
    java_version: "1.7",
}

// A guaranteed unstripped version of bouncycastle.
// The build system may or may not strip the bouncycastle jar, but this one will
// not be stripped. See b/24535627.
java_library {
    name: "bouncycastle-testdex",
    defaults: ["bouncycastle-defaults"],
    installable: true,

    srcs: [":bouncycastle_java_files"],

    no_standard_libs: true,
    libs: [
        "core-all",
    ],
    system_modules: "core-all-system-modules",
    java_version: "1.7",
}

// Bouncycastle PKIX classes in the original org.bouncycastle package for use
// outside of the platform. e.g. for host or in unbundled apps / CTS tests.
java_library_static {
    name: "bouncycastle-bcpkix-unbundled",
    defaults: ["bouncycastle-defaults"],
    host_supported: true,

    srcs: ["bcpkix/src/main/java/**/*.java"],
    exclude_srcs: ["bcpkix/src/main/java/org/bouncycastle/cert/ocsp/**/*.java"],
    libs: ["bouncycastle-unbundled"],

    sdk_version: "core_current",
}

// Bouncycastle OCSP classes in the original org.bouncycastle package for use
// outside of the platform. e.g. for host or in unbundled apps / CTS tests.
java_library_static {
    name: "bouncycastle-ocsp-unbundled",
    defaults: ["bouncycastle-defaults"],
    host_supported: true,

    srcs: [
        "bcpkix/src/main/java/org/bouncycastle/cert/ocsp/**/*.java",
        "bcprov/src/main/java/org/bouncycastle/asn1/ocsp/**/*.java",
    ],
    libs: [ "bouncycastle-unbundled",
            "bouncycastle-bcpkix-unbundled"
    ],

    sdk_version: "core_current",
}

// For compatibility with old bouncycastle-host name.
java_library_host {
    name: "bouncycastle-host",
    static_libs: ["bouncycastle-unbundled"],
}

// For compatibility with old bouncycastle-bcpkix-host name.
java_library_host {
    name: "bouncycastle-bcpkix-host",
    static_libs: ["bouncycastle-bcpkix-unbundled"],
}
