# 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) {
    cflags += [ "/wd4267" ]  # Disable warning: Conversion from size_t to 'type'.

    sources -= [
      "unix_err.c",
      "unix_err.h",
    ]
    if (component_mode == "shared_library") {
      ldflags = [ "/DEF:" + rebase_path("exports_win.def", root_build_dir) ]
    }
  } else if (is_linux) {
    if (component_mode == "shared_library") {
      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" ]
  }

  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" ]
  }
}
