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

// Build and use the "wayland_protocol_codegen" extension.
bootstrap_go_package {
    name: "soong-wayland-protocol-codegen",
    pkgPath: "android/soong/external/wayland-protocol",
    deps: [
        "blueprint",
        "blueprint-proptools",
        "soong-android",
        "soong-genrule",
    ],
    srcs: [
        "wayland_protocol_codegen.go",
    ],
    pluginFor: ["soong_build"],
}

filegroup {
    name: "wayland_extension_protocols",
    srcs: [
        "freedesktop.org/**/*.xml",
        "chromium.org/**/*.xml",
    ],
}

// Generate protocol source files used by both client and server
wayland_protocol_codegen {
    name: "wayland_extension_protocol_sources",
    cmd: "$(location wayland_scanner) code < $(in) > $(out)",
    suffix: ".c",
    srcs: [":wayland_extension_protocols"],
    tools: ["wayland_scanner"],
}

// Generate protocol header files used by the client
wayland_protocol_codegen {
    name: "wayland_extension_client_protocol_headers",
    cmd: "$(location wayland_scanner) client-header < $(in) > $(out)",
    suffix: "-client-protocol.h",
    srcs: [":wayland_extension_protocols"],
    tools: ["wayland_scanner"],
}

// Generate protocol header files used by the server
wayland_protocol_codegen {
    name: "wayland_extension_server_protocol_headers",
    cmd: "$(location wayland_scanner) server-header < $(in) > $(out)",
    suffix: "-server-protocol.h",
    srcs: [":wayland_extension_protocols"],
    tools: ["wayland_scanner"],
}

// Generate a library with the protocol files, configured to export the client
// header files
cc_library_static {
    name: "libwayland_extension_client_protocols",
    vendor_available: true,
    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-g",
        "-fvisibility=hidden"
    ],
    static_libs: ["libwayland_client"],
    generated_sources: ["wayland_extension_protocol_sources"],
    generated_headers: ["wayland_extension_client_protocol_headers"],
    export_generated_headers: ["wayland_extension_client_protocol_headers"],
}

// Generate a library with the protocol files, configured to export the server
// header files
cc_library_static {
    name: "libwayland_extension_server_protocols",
    vendor_available: true,
    host_supported: true,
    cflags: [
        "-Wall",
        "-Wextra",
        "-Werror",
        "-g",
        "-fvisibility=hidden"
    ],
    static_libs: ["libwayland_server"],
    generated_sources: ["wayland_extension_protocol_sources"],
    generated_headers: ["wayland_extension_server_protocol_headers"],
    export_generated_headers: ["wayland_extension_server_protocol_headers"],
}

subdirs = ["flinger_headers"]
