# 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() {
  # TODO: build from source all the time for testing?
  skia_use_system_freetype2 =
      (is_official_build || !(is_android || sanitize == "MSAN")) &&
      !is_fuchsia && !is_wasm
  skia_system_freetype2_include_path = "/usr/include/freetype2"
  skia_system_freetype2_lib = "freetype"
  skia_use_freetype_woff2 = is_wasm
  skia_use_freetype_svg = true
}

import("../third_party.gni")

if (skia_use_system_freetype2) {
  system("freetype2") {
    include_dirs = [ skia_system_freetype2_include_path ]
    libs = [ skia_system_freetype2_lib ]
  }
} else {
  third_party("freetype2") {
    public_defines = [ "SK_FREETYPE_MINIMUM_RUNTIME_VERSION=(((FREETYPE_MAJOR) << 24) | ((FREETYPE_MINOR) << 16) | ((FREETYPE_PATCH) << 8))" ]
    public_include_dirs = [
      ".",
      "../externals/freetype/include",
    ]

    deps = [ "//third_party/libpng" ]

    defines = [ "FT2_BUILD_LIBRARY" ]
    if (target_cpu == "wasm") {
      public_defines += [
        "FT_CONFIG_MODULES_H=<include/freetype-no-type1/ftmodule.h>",
        "FT_CONFIG_OPTIONS_H=<include/freetype-no-type1/ftoption.h>",
      ]
    } else {
      public_defines += [
        "FT_CONFIG_MODULES_H=<include/freetype-android/ftmodule.h>",
        "FT_CONFIG_OPTIONS_H=<include/freetype-android/ftoption.h>",
      ]
    }

    if (skia_use_freetype_woff2) {
      deps += [ "//third_party/brotli" ]
      public_defines += [ "FT_CONFIG_OPTION_USE_BROTLI" ]
    }

    sources = [
      "../externals/freetype/src/autofit/autofit.c",
      "../externals/freetype/src/base/ftbase.c",
      "../externals/freetype/src/base/ftbbox.c",
      "../externals/freetype/src/base/ftbitmap.c",
      "../externals/freetype/src/base/ftdebug.c",
      "../externals/freetype/src/base/ftfstype.c",
      "../externals/freetype/src/base/ftgasp.c",
      "../externals/freetype/src/base/ftglyph.c",
      "../externals/freetype/src/base/ftinit.c",
      "../externals/freetype/src/base/ftmm.c",
      "../externals/freetype/src/base/ftpatent.c",
      "../externals/freetype/src/base/ftstroke.c",
      "../externals/freetype/src/base/ftsynth.c",
      "../externals/freetype/src/base/ftsystem.c",
      "../externals/freetype/src/base/fttype1.c",
      "../externals/freetype/src/base/ftwinfnt.c",
      "../externals/freetype/src/cff/cff.c",
      "../externals/freetype/src/cid/type1cid.c",
      "../externals/freetype/src/gzip/ftgzip.c",
      "../externals/freetype/src/psaux/psaux.c",
      "../externals/freetype/src/pshinter/pshinter.c",
      "../externals/freetype/src/psnames/psnames.c",
      "../externals/freetype/src/raster/raster.c",
      "../externals/freetype/src/sfnt/sfnt.c",
      "../externals/freetype/src/smooth/smooth.c",
      "../externals/freetype/src/truetype/truetype.c",
      "../externals/freetype/src/type1/type1.c",
    ]

    if (skia_use_freetype_svg) {
      public_defines += [ "FT_CONFIG_OPTION_SVG" ]
      sources += [ "../externals/freetype/src/svg/svg.c" ]
    }
  }
}
