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

// *** THIS PACKAGE HAS SPECIAL LICENSING CONDITIONS.  PLEASE
//     CONSULT THE OWNERS AND opensource-licensing@google.com BEFORE
//     DEPENDING ON IT IN YOUR PROJECT. ***
package {
    default_applicable_licenses: ["external_libcups_license"],
}

// Added automatically by a large-scale-change that took the approach of
// 'apply every license found to every target'. While this makes sure we respect
// every license restriction, it may not be entirely correct.
//
// e.g. GPL in an MIT project might only apply to the contrib/ directory.
//
// Please consider splitting the single license below into multiple licenses,
// taking care not to lose any license_kind information, and overriding the
// default license using the 'licenses: [...]' property on targets as needed.
//
// For unused files, consider creating a 'fileGroup' with "//visibility:private"
// to attach the license to, and including a comment whether the files may be
// used in the current project.
//
// large-scale-change included anything that looked like it might be a license
// text as a license_text. e.g. LICENSE, NOTICE, COPYING etc.
//
// Please consider removing redundant or irrelevant files from 'license_text:'.
// See: http://go/android-license-faq
license {
    name: "external_libcups_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-BSD",
        "SPDX-license-identifier-GPL",
        "SPDX-license-identifier-GPL-2.0",
        "SPDX-license-identifier-ISC",
        "SPDX-license-identifier-LGPL",
        "SPDX-license-identifier-MIT",
        "SPDX-license-identifier-Zlib",
        "legacy_by_exception_only", // by exception only
    ],
    license_text: [
        "LICENSE",
        "NOTICE",
    ],
}

cc_library_shared {
    name: "libcups",

    sdk_version: "current",

    srcs: [
        "cups/array.c",
        "cups/auth.c",
        "cups/backchannel.c",
        "cups/debug.c",
        "cups/dest.c",
        "cups/dest-job.c",
        "cups/dest-localization.c",
        "cups/dest-options.c",
        "cups/dir.c",
        "cups/encode.c",
        "cups/file.c",
        "cups/getdevices.c",
        "cups/getputfile.c",
        "cups/globals.c",
        "cups/hash.c",
        "cups/http.c",
        "cups/http-addr.c",
        "cups/http-addrlist.c",
        "cups/http-support.c",
        "cups/ipp.c",
        "cups/ipp-support.c",
        "cups/langprintf.c",
        "cups/language.c",
        "cups/md5.c",
        "cups/md5passwd.c",
        "cups/notify.c",
        "cups/options.c",
        "cups/pwg-media.c",
        "cups/raster-error.c",
        "cups/raster-stream.c",
        "cups/raster-stubs.c",
        "cups/request.c",
        "cups/sidechannel.c",
        "cups/snmp.c",
        "cups/string.c",
        "cups/tempfile.c",
        "cups/thread.c",
        "cups/tls-boringssl.c",
        "cups/transcode.c",
        "cups/usersys.c",
        "cups/util.c",
    ],

    cflags: [
        "-D_PPD_DEPRECATED=",

        "-Wextra",
        "-Wall",
        "-Wno-unused-parameter",
        "-Wno-unused-function",
        "-Wno-unused-variable",
        "-Wno-unused-value",
        "-Wno-sign-compare",
        "-Wno-missing-field-initializers",
        "-Wno-implicit-function-declaration",
        "-Wno-deprecated-declarations",
        "-Werror",
    ],

    export_include_dirs: [
        "cups",
        "filter",
        "."
    ],

    arch: {
        arm: {
            instruction_set: "arm",
        },
    },

    shared_libs: [
        "libz",
        "liblog",
        "libcrypto",
        "libssl",
    ],
}
