# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

declare_args() {
}

import("../third_party.gni")

third_party("libmicrohttpd") {
  public_include_dirs = [ "../externals/microhttpd/src/include" ]

  include_dirs = [ "." ]
  sources = [
    "../externals/microhttpd/src/microhttpd/base64.c",
    "../externals/microhttpd/src/microhttpd/connection.c",
    "../externals/microhttpd/src/microhttpd/daemon.c",
    "../externals/microhttpd/src/microhttpd/internal.c",
    "../externals/microhttpd/src/microhttpd/memorypool.c",
    "../externals/microhttpd/src/microhttpd/postprocessor.c",
    "../externals/microhttpd/src/microhttpd/reason_phrase.c",
    "../externals/microhttpd/src/microhttpd/response.c",
    "../externals/microhttpd/src/microhttpd/tsearch.c",
  ]

  defines = [ "DAUTH_SUPPORT=1" ]
  libs = []
  if (is_clang) {
    cflags = [ "-Wno-implicit-function-declaration" ]
  }

  if (is_win) {
    sources += [ "../externals/microhttpd/src/platform/w32functions.c" ]
    defines += [
      "HAVE_SYS_TYPES_H=1",
      "HAVE_TIME_H=1",
      "MHD_USE_W32_THREADS=1",
      "WINDOWS",
    ]
    libs += [ "Ws2_32.lib" ]
  } else {
    defines += [
      "HAVE_NETINET_IN_H=1",
      "HAVE_PTHREAD_H=1",
      "HAVE_SYS_SOCKET_H=1",
      "MHD_USE_POSIX_THREADS=1",
    ]
  }
}
