blob: 2f93387102bc0fd76905a0ec81a3f68f57a4a5fd [file] [log] [blame]
# 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.
import("//build/config/sanitizers/sanitizers.gni")
import("//third_party/fontconfig/fontconfig.gni")
assert(is_linux)
if (use_bundled_fontconfig) {
config("fontconfig_config") {
include_dirs = [ "src" ]
}
component("fontconfig") {
sources = [
"src/src/fcarch.h",
"src/src/fcatomic.c",
"src/src/fccache.c",
"src/src/fccfg.c",
"src/src/fccharset.c",
"src/src/fccompat.c",
"src/src/fcdbg.c",
"src/src/fcdefault.c",
"src/src/fcdir.c",
"src/src/fcformat.c",
"src/src/fcfreetype.c",
"src/src/fcfs.c",
"src/src/fchash.c",
"src/src/fcinit.c",
"src/src/fclang.c",
"src/src/fclist.c",
"src/src/fcmatch.c",
"src/src/fcmatrix.c",
"src/src/fcname.c",
"src/src/fcobjs.c",
"src/src/fcpat.c",
"src/src/fcptrlist.c",
"src/src/fcrange.c",
"src/src/fcserialize.c",
"src/src/fcstat.c",
"src/src/fcstr.c",
"src/src/fcweight.c",
"src/src/fcxml.c",
"src/src/ftglue.c",
"src/src/ftglue.h",
]
include_dirs = [
"include",
"include/src",
]
defines = [
"HAVE_CONFIG_H",
"FC_CACHEDIR=\"/var/cache/fontconfig\"",
"FC_TEMPLATEDIR=\"/usr/share/fontconfig/conf.avail\"",
"FONTCONFIG_PATH=\"/etc/fonts\"",
]
# Fontconfig symbols should not be exported from chrome, nacl_helper, or
# anything else. However, if using the instrumented libraries, we do want to
# export fontconfig symbols: in this configuration, there are 3 different
# fontconfigs: this one, the one from instrumented_libraries, and the one
# from the system. Only the first two get loaded: this one from Chrome, and
# the one in instrumented_libraries indirectly through eg. gtk -> cairo ->
# fontconfig. The latter is a different version of fontconfig with a
# different cache file format. Therefore, the caches would have to get
# regenerated every time Chrome runs for this other version. Depending on
# how many fonts the user has installed, this could take several minutes,
# especially for msan builds. Exporting the newer fontconfig symbols here
# will ensure that cairo uses this fontconfig, and so avoids the caching
# issue. In non-instrumented builds, it is ok that the real system
# fontconfig is used by cairo instead of chromium's because caches for that
# are warm. We don't *always* export fontconfig because in a rare case, it's
# possible for the system fontconfig to be newer and have some Foo() that's
# not in ours. Then eg. cairo would call init functions from our fontconfig
# and then Foo() from the system fontconfig and crash.
if (!is_component_build && !(use_prebuilt_instrumented_libraries ||
use_locally_built_instrumented_libraries)) {
defines += [
"FC_ATTRIBUTE_VISIBILITY_HIDDEN=__attribute((visibility(\"hidden\")))",
"FC_ATTRIBUTE_VISIBILITY_EXPORT=__attribute((visibility(\"hidden\")))",
]
}
deps = [
"//build/config/freetype",
"//third_party/libxml",
"//third_party/zlib",
]
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
public_configs = [ ":fontconfig_config" ]
if (is_clang) {
cflags = [
# Work around a null-conversion warning. See crbug.com/358852.
"-Wno-non-literal-null-conversion",
# Work around a pointer-to-bool conversion.
"-Wno-pointer-bool-conversion",
]
}
if (!is_win) {
libs = [ "uuid" ]
}
}
} else {
config("fontconfig_config") {
libs = [ "fontconfig" ]
}
group("fontconfig") {
public_configs = [ ":fontconfig_config" ]
}
}