# Copyright 2017 The Fuchsia Authors. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#    * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#    * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import("JavaScriptCore.gni")
import("JavaScriptCoreDerivedSources.gni")
import("JavaScriptCore_inspectorDerivedSources.gni")
import("MiniBrowser.gni")
import("WebCore.gni")
import("WebCoreDerivedSources.gni")
import("WebKit.gni")
import("wtf.gni")

config("webkit_config") {
  include_dirs = [ "Source/WebKit/fuchsia" ]
}

# The default toolchain is the non-shared toolchain.
if (current_toolchain == default_toolchain) {
  group("webkit") {
    public_deps = [
      ":webkit_shared(//build/toolchain/fuchsia:${target_cpu}-shared)",
    ]
    public_configs = [ ":webkit_config" ]
  }
} else {
  shared_library("webkit_shared") {
    output_name = "libwebkit"

    deps = [
      ":WebKit",
    ]
    public_configs = [ ":webkit_config" ]
  }

  config("features") {
    # Target configuration - what OS we are building for, what libraries we use.
    defines = [
      "OS_FUCHSIA=1",
      "USE_CAIRO=1",
      "USE_CURL=1",
      "USE_HARFBUZZ=1",
      "BUILDING_WITH_CMAKE", # A lie, but we are using cmakeconfig.h
    ]

    # Features of our build.
    defines += [
      "HAVE_ACCESSIBILITY=1",
      "HAVE_CONFIG_H=1",
      "HAVE_FEATURES_H=1",
#"NDEBUG",
    ]

    # Where we put cmakeconfig.h
    include_dirs = [ "Source/config" ]
  }

  config("flags") {
    cflags = [
      "-Wall",
      "-Wcast-align",
      "-Wextra",
      "-Wformat-security",
      "-Wmissing-format-attribute",
      "-Wno-format",
      "-Wno-expansion-to-defined",
      "-Wno-max-unsigned-zero",
      "-Wno-parentheses-equality",
      "-Wno-unused-function",
      "-Wno-unused-label",
      "-Wno-unused-lambda-capture",
      "-Wno-unused-parameter",
      "-Wno-unused-variable",
      "-Wno-pessimizing-move",
      "-Wno-tautological-compare",
      "-Wpointer-arith",
      "-Wundef",
      "-Wwrite-strings",
    ]
  }

  source_set("WebKit") {
    sources = WebKit_sources

    deps = [
      ":JavaScriptCore",
      ":WebCore",
      ":wtf",
    ]

    configs += [ ":features", ":flags" ]
    configs -= [
      "//build/config/fuchsia:safestack",
      "//build/config:symbol_visibility_hidden",
    ]

    defines = [
       "BUILDING_WebKit",
    ]

    include_dirs = [
      ".",
      "DerivedSources",
      "DerivedSources/ForwardingHeaders",
      "DerivedSources/ForwardingHeaders/JavaScriptCore",
      "DerivedSources/ForwardingHeaders/WebCore",
      "DerivedSources/ForwardingHeaders/WebKitLegacy",
      "DerivedSources/JavaScriptCore",
      "DerivedSources/WebCore",
      "DerivedSources/WebKitLegacy",
      "Source",
      "Source/WebKit/Storage",
      "Source/WebKit/WebCoreSupport",
      "Source/WebKit/fuchsia",
      "Source/WebKit/fuchsia/WebCoreSupport",
    ]
    cflags = [
      "-includeWebKitPrefix.h"
    ]

  }


  config("WebCore_config") {
    include_dirs = [
      ".",
      "DerivedSources",
      "DerivedSources/WebCore",
      "Source/ThirdParty/ANGLE",
      "Source/ThirdParty/ANGLE/include/KHR",
      "Source/WebCore/Modules/airplay",
      "Source/WebCore/Modules/applepay",
      "Source/WebCore/Modules/battery",
      "Source/WebCore/Modules/encryptedmedia",
      "Source/WebCore/Modules/fetch",
      "Source/WebCore/Modules/geolocation",
      "Source/WebCore/Modules/indexeddb",
      "Source/WebCore/Modules/indexeddb/client",
      "Source/WebCore/Modules/indexeddb/server",
      "Source/WebCore/Modules/indexeddb/shared",
      "Source/WebCore/Modules/indieui",
      "Source/WebCore/Modules/mediacontrols",
      "Source/WebCore/Modules/mediasession",
      "Source/WebCore/Modules/mediasource",
      "Source/WebCore/Modules/mediastream",
      "Source/WebCore/Modules/navigatorcontentutils",
      "Source/WebCore/Modules/notifications",
      "Source/WebCore/Modules/plugins",
      "Source/WebCore/Modules/proximity",
      "Source/WebCore/Modules/quota",
      "Source/WebCore/Modules/speech",
      "Source/WebCore/Modules/streams",
      "Source/WebCore/Modules/vibration",
      "Source/WebCore/Modules/webaudio",
      "Source/WebCore/Modules/webdatabase",
      "Source/WebCore/Modules/websockets",
      "Source/WebCore/accessibility",
      "Source/WebCore/animation",
      "Source/WebCore/bindings",
      "Source/WebCore/bindings/generic",
      "Source/WebCore/bindings/js",
      "Source/WebCore/bridge",
      "Source/WebCore/bridge/c",
      "Source/WebCore/bridge/jsc",
      "Source/WebCore/contentextensions",
      "Source/WebCore/crypto",
      "Source/WebCore/crypto/algorithms",
      "Source/WebCore/crypto/keys",
      "Source/WebCore/crypto/parameters",
      "Source/WebCore/css",
      "Source/WebCore/css/parser",
      "Source/WebCore/cssjit",
      "Source/WebCore/dom",
      "Source/WebCore/dom/default",
      "Source/WebCore/editing",
      "Source/WebCore/fileapi",
      "Source/WebCore/history",
      "Source/WebCore/html",
      "Source/WebCore/html/canvas",
      "Source/WebCore/html/forms",
      "Source/WebCore/html/parser",
      "Source/WebCore/html/shadow",
      "Source/WebCore/html/track",
      "Source/WebCore/inspector",
      "Source/WebCore/loader",
      "Source/WebCore/loader/appcache",
      "Source/WebCore/loader/archive",
      "Source/WebCore/loader/archive/mhtml",
      "Source/WebCore/loader/cache",
      "Source/WebCore/loader/icon",
      "Source/WebCore/mathml",
      "Source/WebCore/page",
      "Source/WebCore/page/animation",
      "Source/WebCore/page/csp",
      "Source/WebCore/page/scrolling",
      "Source/WebCore/platform",
      "Source/WebCore/platform/animation",
      "Source/WebCore/platform/audio",
      "Source/WebCore/platform/cairo",
      "Source/WebCore/platform/crypto",
      "Source/WebCore/platform/gamepad",
      "Source/WebCore/platform/gamepad/deprecated",
      "Source/WebCore/platform/gamepad/linux",
      "Source/WebCore/platform/graphics",
      "Source/WebCore/platform/graphics/cairo",
      "Source/WebCore/platform/graphics/cpu/arm",
      "Source/WebCore/platform/graphics/cpu/arm/filters",
      "Source/WebCore/platform/graphics/displaylists",
      "Source/WebCore/platform/graphics/filters",
      "Source/WebCore/platform/graphics/freetype",
      "Source/WebCore/platform/graphics/harfbuzz",
      "Source/WebCore/platform/graphics/harfbuzz/ng",
      "Source/WebCore/platform/graphics/opengl",
      "Source/WebCore/platform/graphics/opentype",
      "Source/WebCore/platform/graphics/transforms",
      "Source/WebCore/platform/image-decoders",
      "Source/WebCore/platform/image-decoders/bmp",
      "Source/WebCore/platform/image-decoders/gif",
      "Source/WebCore/platform/image-decoders/ico",
      "Source/WebCore/platform/image-decoders/jpeg",
      "Source/WebCore/platform/image-decoders/png",
      "Source/WebCore/platform/image-decoders/webp",
      "Source/WebCore/platform/mediastream",
      "Source/WebCore/platform/mock",
      "Source/WebCore/platform/mock/mediasource",
      "Source/WebCore/platform/network",
      "Source/WebCore/platform/network/curl",
      "Source/WebCore/platform/sql",
      "Source/WebCore/platform/text",
      "Source/WebCore/platform/text/icu",
      "Source/WebCore/plugins",
      "Source/WebCore/rendering",
      "Source/WebCore/rendering/line",
      "Source/WebCore/rendering/mathml",
      "Source/WebCore/rendering/shapes",
      "Source/WebCore/rendering/style",
      "Source/WebCore/rendering/svg",
      "Source/WebCore/replay",
      "Source/WebCore/storage",
      "Source/WebCore/style",
      "Source/WebCore/svg",
      "Source/WebCore/svg/animation",
      "Source/WebCore/svg/graphics",
      "Source/WebCore/svg/graphics/filters",
      "Source/WebCore/svg/properties",
      "Source/WebCore/testing",
      "Source/WebCore/websockets",
      "Source/WebCore/workers",
      "Source/WebCore/xml",
      "Source/WebCore/xml/parser",
      "Source/WebCore",
    ]
    defines = []
  }

  static_library("WebCore") {
    sources = WebCore_sources + WebCoreDerivedSources_sources

    public_deps = [
      "//third_party/boringssl",
      "//third_party/cairo",
      "//third_party/curl:libcurl",
      "//third_party/freetype2",
      "//third_party/harfbuzz",
      "//third_party/icu:icui18n",
      "//third_party/icu:icuuc",
      "//third_party/libjpeg-turbo:libjpeg",
      "//third_party/libpng",
      "//third_party/libxml2",
      "//third_party/sqlite",
      "//third_party/zlib",
      ":JavaScriptCore",
      ":wtf",
    ]

    public_configs = [ ":WebCore_config" ]

    configs += [
      ":features",
      ":flags",
    ]
    configs -= [
      "//build/config/fuchsia:safestack",
    ]
  }

  config("JavaScriptCore_config") {
    include_dirs = [
      "Source/JavaScriptCore",
      "Source/JavaScriptCore/..",
      "Source/JavaScriptCore/API",
      "Source/JavaScriptCore/ForwardingHeaders",
      "Source/JavaScriptCore/assembler",
      "Source/JavaScriptCore/b3",
      "Source/JavaScriptCore/b3/air",
      "Source/JavaScriptCore/bindings",
      "Source/JavaScriptCore/builtins",
      "Source/JavaScriptCore/bytecode",
      "Source/JavaScriptCore/bytecompiler",
      "Source/JavaScriptCore/dfg",
      "Source/JavaScriptCore/disassembler",
      "Source/JavaScriptCore/disassembler/udis86",
      "Source/JavaScriptCore/ftl",
      "Source/JavaScriptCore/heap",
      "Source/JavaScriptCore/debugger",
      "Source/JavaScriptCore/inspector",
      "Source/JavaScriptCore/inspector/agents",
      "Source/JavaScriptCore/inspector/augmentable",
      "Source/JavaScriptCore/inspector/remote",
      "Source/JavaScriptCore/interpreter",
      "Source/JavaScriptCore/jit",
      "Source/JavaScriptCore/llint",
      "Source/JavaScriptCore/parser",
      "Source/JavaScriptCore/profiler",
      "Source/JavaScriptCore/replay",
      "Source/JavaScriptCore/runtime",
      "Source/JavaScriptCore/tools",
      "Source/JavaScriptCore/wasm",
      "Source/JavaScriptCore/yarr",
      "DerivedSources/JavaScriptCore",
      "DerivedSources/JavaScriptCore/inspector",
      "DerivedSources/ForwardingHeaders",
    ]
    if (is_debug) {
      include_dirs += [
          "DerivedSources/JavaScriptCore/Debug",
      ]
    } else {
      include_dirs += [
          "DerivedSources/JavaScriptCore/Release",
      ]
    }
  }

  static_library("JavaScriptCore") {
    sources = JavaScriptCore_sources + JavaScriptCoreDerivedSources_sources +
              JavaScriptCore_inspectorDerivedSources_sources

    public_configs = [ ":JavaScriptCore_config" ]
    configs += [
      ":features",
      ":flags",
    ]
    configs -= [
      "//build/config/fuchsia:safestack",
    ]

    public_deps = [
      ":wtf",
    ]

    defines = [
      "BUILDING_JavaScriptCore",
      "STATICALLY_LINKED_WITH_WTF",
    ]
  }

  config("wtf_config") {
    include_dirs = [
      "Source/WTF",
    ]
  }

  config("wtf_private_config") {
    # WTF has Source/WTF/wtf/unicode/UTF8.h and Source/WTF/wtf on the include
    # path. The ICU library, which WTF depends on, has <unicode/utf8.h> in its
    # include path. This means on case-insensitive filesystems, #includes for
    # <unicode/utf8.h> will match Soruce/WTF/wtf/unicode/UTF8.h, which will
    # internally include ICU's <unicode/utf8.h>.

    # To get around all this, we manually add ICU's include path to our
    # include_dirs before adding the WTF headers so includes for
    # <unicode/utf8.h> match ICU regardless of the case sensitivity of the
    # filesystem. As it turns out, all of the includes of UTF8.h (uppercase) are
    # written <wtf/unicode/UTF8.h> so they will unambiguously resolve to
    # Source/WTF/wtf/unicode/UTF8.h even with this include path first.
    include_dirs = [ "//third_party/icu/source/common"]

    include_dirs += [
      "Source/WTF/wtf",
      "Source/WTF/wtf/dtoa",
      "Source/WTF/wtf/text",
      "Source/WTF/wtf/text/icu",
      "Source/WTF/wtf/threads",
      "Source/WTF/wtf/unicode",
    ]
  }

  static_library("wtf") {
    sources = wtf_sources

    public_configs = [ ":wtf_config" ]
    public_deps = [
      "//third_party/icu:icui18n",
      "//third_party/icu:icuuc",
    ]
    configs += [
      ":features",
      ":flags",
      ":wtf_private_config",
    ]
    configs -= [
      "//build/config/fuchsia:safestack",
    ]

    defines = [ "BUILDING_WTF" ]
  }
}
