# Copyright (C) 2015-2016 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"])

load("//:build.bzl", "nginx_copts", "nginx_cxxopts")

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",
    ],
    copts = nginx_cxxopts,
    defines = [
        "NGX_HAVE_BROTLI_ENC_COMPRESSOR_H",
        "NGX_HTTP_BROTLI_FILTER",
    ],
    visibility = [
        "//visibility:public",
    ],
    deps = [
        "//external:brotli_enc",
        "//nginx:core",
        "//nginx:http",
    ],
)

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

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