# Copyright (C) 2015 Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.

licenses(["notice"])  # BSD license

exports_files(["LICENSE"])

genrule(
    name = "ngx_modules_c",
    srcs = [
        "//nginx:modules",
    ],
    outs = [
        "ngx_modules.c",
    ],
    cmd = "cp -p $(<) $(@)",
)

cc_library(
    name = "http_brotli_filter",
    srcs = [
        "src/ngx_http_brotli_filter_module.cc",
    ],
    defines = [
        "NGX_HTTP_BROTLI_FILTER",
    ],
    visibility = [
        "//visibility:public",
    ],
    deps = [
        "//external:brotli_enc",
        "//nginx:http",
    ],
)

cc_library(
    name = "http_brotli_static",
    srcs = [
        "src/ngx_http_brotli_static_module.c",
    ],
    defines = [
        "NGX_HTTP_BROTLI_STATIC",
    ],
    visibility = [
        "//visibility:public",
    ],
    deps = [
        "//nginx:http",
    ],
)

cc_binary(
    name = "nginx",
    srcs = [
        "ngx_modules.c",
    ],
    deps = [
        ":http_brotli_filter",
        ":http_brotli_static",
    ],
)
