# Copyright 2014 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 for us and everybody else depending on openssl.
config("openssl_config") {
  include_dirs = []
  if (cpu_arch == "x64") {
    # Ensure the 64-bit opensslconf.h header is used in preference to the one
    # in openssl/include.
    include_dirs += [ "config/x64" ]
  }

  include_dirs += [ "openssl/include" ]
}

# Config internal to this build file.
config("openssl_internal_config") {
  visibility = ":*"  # Only targets in this file can depend on this.
}

# The list of OpenSSL files is kept in openssl.gypi. Read it.
gypi_values = exec_script(
    "//build/gypi_to_gn.py",
    [ rebase_path("//third_party/openssl/openssl.gypi") ],
    "scope",
    [ "//third_party/openssl/openssl.gypi" ])

component("openssl") {
  sources = gypi_values.openssl_common_sources

  defines = gypi_values.openssl_common_defines
  defines += [
    "PURIFY",
    "MONOLITH",
  ]

  direct_dependent_configs = [ ":openssl_config" ]

  cflags = []

  # Also gets the include dirs from :openssl_config
  include_dirs = [
    ".",
    "openssl",
    "openssl/crypto",
    "openssl/crypto/asn1",
    "openssl/crypto/evp",
    "openssl/crypto/modes",
  ]

  if (is_posix && !is_android) {
    defines += [
      # ENGINESDIR must be defined if OPENSSLDIR is.
      "ENGINESDIR=\"/dev/null\"",
      # Set to ubuntu default path for convenience. If necessary, override
      # this at runtime with the SSL_CERT_DIR environment variable.
      "OPENSSLDIR=\"/etc/ssl\"",
    ]
  }

  if (cpu_arch == "x64") {
    sources += gypi_values.openssl_x86_64_sources
    sources -= gypi_values.openssl_x86_64_source_excludes
    defines += gypi_values.openssl_x86_64_defines
  } else if (cpu_arch == "x86") {
    sources += gypi_values.openssl_x86_sources
    sources -= gypi_values.openssl_x86_source_excludes
    defines += gypi_values.openssl_x86_defines
  } else if (cpu_arch == "arm") {
    sources += gypi_values.openssl_arm_sources
    sources -= gypi_values.openssl_arm_source_excludes
    defines += gypi_values.openssl_arm_defines
  } else if (cpu_arch == "mips") {
    sources += gypi_values.openssl_mips_sources
    sources -= gypi_values.openssl_mips_source_excludes
    defines += gypi_values.openssl_mips_defines
  }

  if (is_clang) {
    cflags += [
      # OpenSSL has a few |if ((foo == NULL))| checks.
      "-Wno-parentheses-equality",
      # OpenSSL uses several function-style macros and then ignores the
      # returned value.
      "-Wno-unused-value",
    ]
  } else {
    cflags += [
      "-Wno-unused-variable",
    ]
  }
}
