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

package {
    default_applicable_licenses: ["external_ppp_pppd_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.
// See: http://go/android-license-faq
license {
    name: "external_ppp_pppd_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-0BSD",
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-BSD",
        "SPDX-license-identifier-GPL",
        "SPDX-license-identifier-GPL-2.0",
        "SPDX-license-identifier-LGPL",
        "SPDX-license-identifier-MIT",
        "legacy_notice",
        "legacy_unencumbered",
    ],
    license_text: [
        "NOTICE",
    ],
}

cc_defaults {
    name: "ppp_defaults",
    cflags: [
        "-DCHAPMS=1",
        "-DMPPE=1",
        "-DINET6=1",
        "-DUSE_OPENSSL=1",
        "-Wno-missing-field-initializers",
        "-Wno-unused-parameter",
        "-Werror",
        "-Wno-pointer-sign",
        "-DPLUGIN",
    ],
    local_include_dirs: ["include"],
}

filegroup {
    name: "pppd-sources",
    srcs: [
        "auth.c",
        "ccp.c",
        "chap-md5.c",
        "chap-new.c",
        "chap_ms.c",
        "demand.c",
        "eap.c",
        "ecp.c",
        "eui64.c",
        "fsm.c",
        "ipcp.c",
        "ipv6cp.c",
        "lcp.c",
        "magic.c",
        "main.c",
        "options.c",
        "pppcrypt.c",
        "pppox.c",
        "session.c",
        "sys-linux.c",
        "tty.c",
        "upap.c",
        "utils.c",
    ]
}

cc_library_static {
    name: "libpppd",
    defaults: ["ppp_defaults"],

    srcs: [
        ":pppd-sources"
    ],
    export_include_dirs:[".", "include"],

    // options.c:623:21: error: passing 'const char *' to parameter of
    // type 'char *' discards qualifiers.
    // [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
    clang_cflags: ["-Wno-incompatible-pointer-types-discards-qualifiers"],

    shared_libs: [
        "libdl",
        "liblog",
        "libcutils",
        "libcrypto",
    ],

    cflags: [
        "-Dmain=main_loop",
        "-Wno-empty-body",
        "-Wno-attributes",
        "-Wno-sign-compare",
    ],

    ldflags: ["-rdynamic"],
    required: [
        "pppol2tp-android",
        "pppopptp-android",
    ],
}

cc_binary {
    name: "pppd",
    defaults: ["ppp_defaults"],

    srcs: [
        ":pppd-sources"
    ],

    shared_libs: [
        "libdl",
        "liblog",
        "libcutils",
        "libcrypto",
    ],

    ldflags: ["-rdynamic"],

    clang_cflags: ["-Wno-incompatible-pointer-types-discards-qualifiers"],

    required: [
        "pppol2tp-android",
        "pppopptp-android",
    ],

    sanitize: {
        memtag_heap: true,
    },
}

cc_library_shared {
    name: "pppol2tp-android",
    defaults: ["ppp_defaults"],
    srcs: ["plugins/pppol2tp-android/pppol2tp-android.c"],
    allow_undefined_symbols: true,
}

cc_library_shared {
    name: "pppopptp-android",
    defaults: ["ppp_defaults"],
    srcs: ["plugins/pppopptp-android/pppopptp-android.c"],
    allow_undefined_symbols: true,
}