//#
//# Copyright (C) 2012 The Android Open Source Project
//#
//# Licensed under the Apache License, Version 2.0 (the "License");
//# you may not use this file except in compliance with the License.
//# You may obtain a copy of the License at
//#
//#      http://www.apache.org/licenses/LICENSE-2.0
//#
//# Unless required by applicable law or agreed to in writing, software
//# distributed under the License is distributed on an "AS IS" BASIS,
//# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//# See the License for the specific language governing permissions and
//# limitations under the License.
//#

//############################################################
//   Note:
//
//   This file is used to build HarfBuzz within the Android
//   platform itself.  If you need to compile HarfBuzz to
//   ship with your Android NDK app, you can use the autotools
//   build system to do so.  To do that you need to install a
//   "standalone" toolchain with the NDK, eg:
//
//       ndk/build/tools/make-standalone-toolchain.sh
//           --platform=android-18
//           --install-dir=/prefix
//
//   Set PLATFORM_PREFIX eng var to that prefix and make sure
//   the cross-compile tools from PLATFORM_PREFIX are in path.
//   Configure and install HarfBuzz:
//
//       ./configure --host=arm-linux-androideabi
//           --prefix=$PLATFORM_PREFIX
//           --enable-static
//           --with-freetype
//           PKG_CONFIG_LIBDIR=$PLATFORM_PREFIX/lib/pkgconfig
//       make install
//
//   You can first build FreeType the same way:
//
//       ./configure --host=arm-linux-androideabi
//           --prefix=$PLATFORM_PREFIX
//           --enable-stati
//           --without-png
//           PKG_CONFIG_LIBDIR=$PLATFORM_PREFIX/lib/pkgconfig
//       make install
//

//############################################################
//   build the harfbuzz shared library
//
// *** THIS PACKAGE HAS SPECIAL LICENSING CONDITIONS.  PLEASE
//     CONSULT THE OWNERS AND opensource-licensing@google.com BEFORE
//     DEPENDING ON IT IN YOUR PROJECT. ***
package {
    default_applicable_licenses: ["external_harfbuzz_ng_license"],
}

// Added automatically by a large-scale-change that took the approach of
// 'apply every license found to every target'. While this makes sure we respect
// every license restriction, it may not be entirely correct.
//
// e.g. GPL in an MIT project might only apply to the contrib/ directory.
//
// Please consider splitting the single license below into multiple licenses,
// taking care not to lose any license_kind information, and overriding the
// default license using the 'licenses: [...]' property on targets as needed.
//
// For unused files, consider creating a 'fileGroup' with "//visibility:private"
// to attach the license to, and including a comment whether the files may be
// used in the current project.
//
// large-scale-change included anything that looked like it might be a license
// text as a license_text. e.g. LICENSE, NOTICE, COPYING etc.
//
// Please consider removing redundant or irrelevant files from 'license_text:'.
// See: http://go/android-license-faq
license {
    name: "external_harfbuzz_ng_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-ISC",
        "SPDX-license-identifier-MIT",
        "SPDX-license-identifier-OFL", // by exception only
        "SPDX-license-identifier-WTFPL",
        "legacy_unencumbered",
    ],
    license_text: [
        "COPYING",
        "NOTICE",
    ],
}

cc_library {
    name: "libharfbuzz_ng",
    host_supported: true,
    arch: {
        arm: {
            instruction_set: "arm",
        },
    },
    srcs: [
        "src/hb-aat-layout.cc",
        "src/hb-aat-map.cc",
        "src/hb-blob.cc",
        "src/hb-buffer-serialize.cc",
        "src/hb-buffer.cc",
        "src/hb-common.cc",
        "src/hb-face.cc",
        "src/hb-fallback-shape.cc",
        "src/hb-font.cc",
        "src/hb-icu.cc",
        "src/hb-number.cc",
        "src/hb-ot-cff1-table.cc",
        "src/hb-ot-cff2-table.cc",
        "src/hb-ot-face.cc",
        "src/hb-ot-font.cc",
        "src/hb-ot-layout.cc",
        "src/hb-ot-map.cc",
        "src/hb-ot-math.cc",
        "src/hb-ot-metrics.cc",
        "src/hb-ot-name.cc",
        "src/hb-ot-shape-complex-arabic.cc",
        "src/hb-ot-shape-complex-default.cc",
        "src/hb-ot-shape-complex-hangul.cc",
        "src/hb-ot-shape-complex-hebrew.cc",
        "src/hb-ot-shape-complex-indic-table.cc",
        "src/hb-ot-shape-complex-indic.cc",
        "src/hb-ot-shape-complex-khmer.cc",
        "src/hb-ot-shape-complex-myanmar.cc",
        "src/hb-ot-shape-complex-thai.cc",
        "src/hb-ot-shape-complex-use-table.cc",
        "src/hb-ot-shape-complex-use.cc",
        "src/hb-ot-shape-complex-vowel-constraints.cc",
        "src/hb-ot-shape-fallback.cc",
        "src/hb-ot-shape-normalize.cc",
        "src/hb-ot-shape.cc",
        "src/hb-ot-tag.cc",
        "src/hb-ot-var.cc",
        "src/hb-set.cc",
        "src/hb-shape-plan.cc",
        "src/hb-shape.cc",
        "src/hb-shaper.cc",
        "src/hb-static.cc",
        "src/hb-ucd.cc",
        "src/hb-unicode.cc",
        "src/hb-subset-cff-common.cc",
        "src/hb-subset-cff1.cc",
        "src/hb-subset-cff2.cc",
        "src/hb-subset-input.cc",
        "src/hb-subset-plan.cc",
        "src/hb-subset.cc",
        "src/hb-map.cc",
    ],

    target: {
        android: {
            shared_libs: [
                "libcutils",
                "libutils",
            ],
        },
        host: {
            static_libs: [
                "libcutils",
                "libutils",
            ],
        },
        windows: {
            enabled: true,
        },
    },

    shared_libs: [
        "libicu",
        "liblog",
    ],

    export_include_dirs: ["src"],
    cflags: [
        "-DHAVE_INTEL_ATOMIC_PRIMITIVES",
        "-DHAVE_OT",
        "-DHAVE_ICU",
        "-DHAVE_ICU_BUILTIN",
        "-Werror",
        "-Wno-unused-parameter",
        "-Wno-missing-field-initializers",
    ],
}
