licenses(["notice"])

load("//tools/build_rules:select.bzl", "address_size_select", "compiler_select")

cc_library(
    name = "libevent",
    srcs = [
        "select.c",
        "poll.c",
        "epoll.c",
        "signal.c",
        "event.c",
        "evthread.c",
        "buffer.c",
        "bufferevent.c",
        "bufferevent_sock.c",
        "bufferevent_filter.c",
        "bufferevent_pair.c",
        "listener.c",
        "bufferevent_ratelim.c",
        "evmap.c",
        "log.c",
        "evutil.c",
        "evutil_rand.c",
        "strlcpy.c",
        "event_tagging.c",
        "http.c",
        "evdns.c",
        "evrpc.c",
        "evthread_pthread.c",

        #'compat/sys/queue.h',
    ] + glob([
        "*-internal.h",
        "include/event2/*.h",
    ]),
    hdrs = [
        "evdns.h",
        "event.h",
        "evhttp.h",
        "evrpc.h",
        "evutil.h",
    ],
    copts = [
        "-Ithird_party/libevent/compat",
        "-Ithird_party/libevent/include",

        # TODO(Brian): Fix the places in the code it uses char* as an intermediate
        # type while doing offsetof stuff.
        "-Wno-cast-align",
        "-Wno-unused-parameter",
        "-Wno-format-nonliteral",
        "-Wno-cast-qual",
        "-Wno-unused-function",
    ] + compiler_select({
        "gcc": [],
        "clang": ["-Wno-incompatible-pointer-types-discards-qualifiers"],
    }),
    defines = [
        "_EVENT_HAVE_ARPA_INET_H=1",
        "_EVENT_HAVE_CLOCK_GETTIME=1",
        "_EVENT_HAVE_DECL_CTL_KERN=1",
        "_EVENT_HAVE_DECL_KERN_ARND=0",
        "_EVENT_HAVE_DECL_KERN_RANDOM=1",
        "_EVENT_HAVE_DECL_RANDOM_UUID=1",
        "_EVENT_HAVE_DLFCN_H=1",
        "_EVENT_HAVE_EPOLL=1",
        "_EVENT_HAVE_EPOLL_CTL=1",
        "_EVENT_HAVE_EVENTFD=1",
        "_EVENT_HAVE_FCNTL=1",
        "_EVENT_HAVE_FCNTL_H=1",
        "_EVENT_HAVE_FD_MASK=1",
        "_EVENT_HAVE_GETADDRINFO=1",
        "_EVENT_HAVE_GETEGID=1",
        "_EVENT_HAVE_GETEUID=1",
        "_EVENT_HAVE_GETNAMEINFO=1",
        "_EVENT_HAVE_GETPROTOBYNUMBER=1",
        "_EVENT_HAVE_GETTIMEOFDAY=1",
        "_EVENT_HAVE_INET_ATON=1",
        "_EVENT_HAVE_INET_NTOP=1",
        "_EVENT_HAVE_INET_PTON=1",
        "_EVENT_HAVE_INTTYPES_H=1",
        "_EVENT_HAVE_MEMORY_H=1",
        "_EVENT_HAVE_MMAP=1",
        "_EVENT_HAVE_NETDB_H=1",
        "_EVENT_HAVE_NETINET_IN_H=1",
        "_EVENT_HAVE_PIPE=1",
        "_EVENT_HAVE_POLL=1",
        "_EVENT_HAVE_POLL_H=1",
        "_EVENT_HAVE_PTHREADS=1",
        "_EVENT_HAVE_PUTENV=1",
        "_EVENT_HAVE_SA_FAMILY_T=1",
        "_EVENT_HAVE_SELECT=1",
        "_EVENT_HAVE_SENDFILE=1",
        "_EVENT_HAVE_SETENV=1",
        "_EVENT_HAVE_SETFD=1",
        "_EVENT_HAVE_SIGACTION=1",
        "_EVENT_HAVE_SIGNAL=1",
        "_EVENT_HAVE_SPLICE=1",
        "_EVENT_HAVE_STDARG_H=1",
        "_EVENT_HAVE_STDDEF_H=1",
        "_EVENT_HAVE_STDINT_H=1",
        "_EVENT_HAVE_STDLIB_H=1",
        "_EVENT_HAVE_STRINGS_H=1",
        "_EVENT_HAVE_STRING_H=1",
        "_EVENT_HAVE_STRSEP=1",
        "_EVENT_HAVE_STRTOK_R=1",
        "_EVENT_HAVE_STRTOLL=1",
        "_EVENT_HAVE_STRUCT_ADDRINFO=1",
        "_EVENT_HAVE_STRUCT_IN6_ADDR=1",
        "_EVENT_HAVE_STRUCT_IN6_ADDR_S6_ADDR16=1",
        "_EVENT_HAVE_STRUCT_IN6_ADDR_S6_ADDR32=1",
        "_EVENT_HAVE_STRUCT_SOCKADDR_IN6=1",
        "_EVENT_HAVE_STRUCT_SOCKADDR_STORAGE=1",
        "_EVENT_HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1",
        "_EVENT_HAVE_SYSCTL=1",
        "_EVENT_HAVE_SYS_EPOLL_H=1",
        "_EVENT_HAVE_SYS_EVENTFD_H=1",
        "_EVENT_HAVE_SYS_IOCTL_H=1",
        "_EVENT_HAVE_SYS_MMAN_H=1",
        "_EVENT_HAVE_SYS_PARAM_H=1",
        "_EVENT_HAVE_SYS_QUEUE_H=1",
        "_EVENT_HAVE_SYS_SELECT_H=1",
        "_EVENT_HAVE_SYS_SENDFILE_H=1",
        "_EVENT_HAVE_SYS_SOCKET_H=1",
        "_EVENT_HAVE_SYS_STAT_H=1",
        "_EVENT_HAVE_SYS_SYSCTL_H=1",
        "_EVENT_HAVE_SYS_TIME_H=1",
        "_EVENT_HAVE_SYS_TYPES_H=1",
        "_EVENT_HAVE_SYS_UIO_H=1",
        "_EVENT_HAVE_SYS_WAIT_H=1",
        "_EVENT_HAVE_TIMERADD=1",
        "_EVENT_HAVE_TIMERCLEAR=1",
        "_EVENT_HAVE_TIMERCMP=1",
        "_EVENT_HAVE_TIMERISSET=1",
        "_EVENT_HAVE_UINT16_T=1",
        "_EVENT_HAVE_UINT32_T=1",
        "_EVENT_HAVE_UINT64_T=1",
        "_EVENT_HAVE_UINT8_T=1",
        "_EVENT_HAVE_UINTPTR_T=1",
        "_EVENT_HAVE_UMASK=1",
        "_EVENT_HAVE_UNISTD_H=1",
        "_EVENT_HAVE_UNSETENV=1",
        "_EVENT_HAVE_VASPRINTF=1",
        "_EVENT_SIZEOF_INT=4",
        "_EVENT_SIZEOF_LONG=8",
        "_EVENT_SIZEOF_SHORT=2",
        "_EVENT_STDC_HEADERS=1",
        "_EVENT_TIME_WITH_SYS_TIME=1",
        "_EVENT_NUMERIC_VERSION=0x02001600",
        "_EVENT_VERSION=\\\"2.0.22-stable\\\"",
    ] + address_size_select({
        "32": [
            "_EVENT_SIZEOF_LONG_LONG=4",
            "_EVENT_SIZEOF_OFF_T=4",
            "_EVENT_SIZEOF_PTHREAD_T=4",
            "_EVENT_SIZEOF_SIZE_T=4",
            "_EVENT_SIZEOF_VOID_P=4",
        ],
        "64": [
            "_EVENT_SIZEOF_LONG_LONG=8",
            "_EVENT_SIZEOF_OFF_T=8",
            "_EVENT_SIZEOF_PTHREAD_T=8",
            "_EVENT_SIZEOF_SIZE_T=8",
            "_EVENT_SIZEOF_VOID_P=8",
        ],
    }),
    includes = [
        ".",
        "include",
    ],
    textual_hdrs = [
        "arc4random.c",
    ],
    visibility = ["//visibility:public"],
)
