| # Copyright 2014 The Chromium Authors |
| # 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 || is_chromeos) |
| |
| 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", |
| ] |
| |
| # 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" ] |
| } |
| } |