licenses(['notice'])

load('/tools/build_rules/select', 'compiler_select', 'address_size_select', 'cpu_select')

cc_library(
  name = 'libevent',
  visibility = ['//visibility:public'],
  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',
  ]),
  textual_hdrs = [
    'arc4random.c',
  ],
  hdrs = [
    'event.h',
    'evhttp.h',
    'evdns.h',
    'evrpc.h',
    'evutil.h',
  ],
  includes = ['.', 'include'],
  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',
    ],
  }) + cpu_select({
    'amd64': [
      '_EVENT_HAVE_TAILQFOREACH=1',
    ],
    'roborio': [],
  }),

  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']
  }),
 )
