# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

config("ssl_config") {
  include_dirs = [ "." ]

  if (is_mac || is_win) {
    defines = [ "NSS_PLATFORM_CLIENT_AUTH" ]
  }
}

component("libssl") {
  output_name = "crssl"

  sources = [
    "SSLerrs.h",
    "authcert.c",
    "bodge/secitem_array.c",
    "cmpcert.c",
    "derive.c",
    "dtlscon.c",
    "preenc.h",
    "prelib.c",
    "ssl.h",
    "ssl3con.c",
    "ssl3ecc.c",
    "ssl3ext.c",
    "ssl3gthr.c",
    "ssl3prot.h",
    "sslauth.c",
    "sslcon.c",
    "ssldef.c",
    "sslenum.c",
    "sslerr.c",
    "sslerr.h",
    "sslerrstrs.c",
    "sslgathr.c",
    "sslimpl.h",
    "sslinfo.c",
    "sslinit.c",
    "sslmutex.c",
    "sslmutex.h",
    "sslnonce.c",
    "sslplatf.c",
    "sslproto.h",
    "sslreveal.c",
    "sslsecur.c",
    "sslsnce.c",
    "sslsock.c",
    "sslt.h",
    "ssltrace.c",
    "sslver.c",
    "unix_err.c",
    "unix_err.h",
    "win32err.c",
    "win32err.h",
  ]

  public_configs = [ ":ssl_config" ]

  cflags = []
  defines = [
    "NO_PKCS11_BYPASS",
    "NSS_ENABLE_ECC",
    "USE_UTIL_DIRECTLY",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  if (is_win) {
    sources -= [
      "unix_err.c",
      "unix_err.h",
    ]
    if (is_component_build) {
      ldflags = [ "/DEF:" + rebase_path("exports_win.def", root_build_dir) ]
    }
  } else if (is_linux) {
    if (is_component_build) {
      configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
    }

    libs = [ "dl" ]

    include_dirs = [ "bodge" ]

    # Must be after ssl_config since we want our SSL headers to take
    # precedence.
    public_configs += [ "//third_party/nss:system_nss_no_ssl_config" ]
  } else if (is_mac) {
    libs = [ "Security.framework" ]
  }

  if (is_clang) {
    # SSL triggers some of these Clang warnings.
    configs -= [ "//build/config/clang:extra_warnings" ]

    # There is a broken header guard in /usr/include/nss/secmod.h:
    # https://bugzilla.mozilla.org/show_bug.cgi?id=884072
    cflags = [ "-Wno-header-guard" ]

    if (is_ios) {
      # libssl uses routines deprecated on iOS (sem_init/sem_destroy).
      # https://bugzilla.mozilla.org/show_bug.cgi?id=1192500
      cflags += [ "-Wno-deprecated-declarations" ]
    }
  }

  if (is_posix) {
    sources -= [
      "win32err.c",
      "win32err.h",
    ]
  }

  if (is_mac || is_ios) {
    defines += [
      "XP_UNIX",
      "DARWIN",
      "XP_MACOSX",
    ]
  }

  if (is_mac || is_ios || is_win) {
    sources -= [ "bodge/secitem_array.c" ]
    public_deps = [
      "//third_party/nss:nspr",
      "//third_party/nss:nss",
    ]
  }

  if (is_debug) {
    defines += [ "DEBUG" ]
  }
}
