summaryrefslogtreecommitdiff
path: root/www/iridium/files/patch-base_test_fontconfig__util__linux.cc
diff options
context:
space:
mode:
authorAntoine Brodin <antoine@FreeBSD.org>2021-01-01 10:11:34 +0000
committerAntoine Brodin <antoine@FreeBSD.org>2021-01-01 10:11:34 +0000
commit26b4c8f71f91d22e081b27814782686edde0c90a (patch)
tree1c321c39372c25d8634e75b5c8e08edc676b296d /www/iridium/files/patch-base_test_fontconfig__util__linux.cc
parentNew port: math/py-optuna: A hyperparameter optimization framework (diff)
Revert r559792 to unbreak INDEX and bulk -a
It seems a lot of reverse dependencies were missed With hat: portmgr
Diffstat (limited to 'www/iridium/files/patch-base_test_fontconfig__util__linux.cc')
-rw-r--r--www/iridium/files/patch-base_test_fontconfig__util__linux.cc406
1 files changed, 406 insertions, 0 deletions
diff --git a/www/iridium/files/patch-base_test_fontconfig__util__linux.cc b/www/iridium/files/patch-base_test_fontconfig__util__linux.cc
new file mode 100644
index 000000000000..eb6ff5024c46
--- /dev/null
+++ b/www/iridium/files/patch-base_test_fontconfig__util__linux.cc
@@ -0,0 +1,406 @@
+--- base/test/fontconfig_util_linux.cc.orig 2020-02-03 21:52:37 UTC
++++ base/test/fontconfig_util_linux.cc
+@@ -6,22 +6,397 @@
+
+ #include <fontconfig/fontconfig.h>
+
+-#include <memory>
+-
+ #include "base/base_paths.h"
+ #include "base/environment.h"
+ #include "base/files/file_path.h"
++#include "base/files/file_util.h"
+ #include "base/logging.h"
++#include "base/macros.h"
+ #include "base/path_service.h"
++#include "base/strings/string_util.h"
+
+ namespace base {
+
++namespace {
++
++const char kFontsConfTemplate[] = R"(<?xml version="1.0"?>
++<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
++<fontconfig>
++
++ <!-- Cache location. -->
++ <cachedir>$1</cachedir>
++
++ <!-- GCS-synced fonts. -->
++ <dir>$2</dir>
++
++ <!-- Default properties. -->
++ <match target="font">
++ <edit name="embeddedbitmap" mode="append_last">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Times</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>DejaVu Sans</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <!-- Some layout tests specify Helvetica as a family and we need to make sure
++ that we don't fallback to Tinos for them -->
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Helvetica</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>sans-serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>serif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>mono</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>monospace</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Courier</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>cursive</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Comic Sans MS</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>fantasy</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Impact</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Monaco</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Arial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Courier New</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Cousine</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Georgia</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Gelasio</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Times New Roman</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test qual="any" name="family">
++ <string>Verdana</string>
++ </test>
++ <!-- NOT metrically compatible! -->
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ </match>
++
++ <!-- TODO(thomasanderson): Move these configs to be test-specific. -->
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>NonAntiAliasedSans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="antialias" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SlightHintedGeorgia</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Gelasio</string>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintslight</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>NonHintedSans</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <!-- These deliberately contradict each other. The 'hinting' preference
++ should take priority -->
++ <edit name="hintstyle" mode="assign">
++ <const>hintfull</const>
++ </edit>
++ <edit name="hinting" mode="assign">
++ <bool>false</bool>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>AutohintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>true</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintmedium</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>HintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>false</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintmedium</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>FullAndAutoHintedSerif</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="autohint" mode="assign">
++ <bool>true</bool>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintfull</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SubpixelEnabledArial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="rgba" mode="assign">
++ <const>rgb</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SubpixelDisabledArial</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Arimo</string>
++ </edit>
++ <edit name="rgba" mode="assign">
++ <const>none</const>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <!-- FontConfig doesn't currently provide a well-defined way to turn on
++ subpixel positioning. This is just an arbitrary pattern to use after
++ turning subpixel positioning on globally to ensure that we don't have
++ issues with our style getting cached for other tests. -->
++ <test name="family" compare="eq">
++ <string>SubpixelPositioning</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <!-- See comments above -->
++ <test name="family" compare="eq">
++ <string>SubpixelPositioningAhem</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>ahem</string>
++ </edit>
++ </match>
++
++ <match target="pattern">
++ <test name="family" compare="eq">
++ <string>SlightHintedTimesNewRoman</string>
++ </test>
++ <edit name="family" mode="assign">
++ <string>Tinos</string>
++ </edit>
++ <edit name="hintstyle" mode="assign">
++ <const>hintslight</const>
++ </edit>
++ </match>
++
++ <!-- When we encounter a character that the current font doesn't
++ support, gfx::GetFallbackFontForChar() returns the first font
++ that does have a glyph for the character. The list of fonts is
++ sorted by a pattern that includes the current locale, but doesn't
++ include a font family (which means that the fallback font depends
++ on the locale but not on the current font).
++
++ DejaVu Sans is commonly the only font that supports some
++ characters, such as "⇧", and even when other candidates are
++ available, DejaVu Sans is commonly first among them, because of
++ the way Fontconfig is ordinarily configured. For example, the
++ configuration in the Fonconfig source lists DejaVu Sans under the
++ sans-serif generic family, and appends sans-serif to patterns
++ that don't already include a generic family (such as the pattern
++ in gfx::GetFallbackFontForChar()).
++
++ To get the same fallback font in the layout tests, we could
++ duplicate this configuration here, or more directly, simply
++ append DejaVu Sans to all patterns. -->
++ <match target="pattern">
++ <edit name="family" mode="append_last">
++ <string>DejaVu Sans</string>
++ </edit>
++ </match>
++
++</fontconfig>
++)";
++
++} // namespace
++
+ void SetUpFontconfig() {
+- FilePath dir_module;
+- CHECK(PathService::Get(DIR_MODULE, &dir_module));
++ std::unique_ptr<Environment> env = Environment::Create();
++ if (!env->HasVar("FONTCONFIG_FILE")) {
++ // fonts.conf must be generated on-the-fly since it contains absolute paths
++ // which may be different if
++ // 1. The user moves/renames their build directory (or any parent dirs).
++ // 2. The build directory is mapped on a swarming bot at a location
++ // different from the one the buildbot used.
++ FilePath dir_module;
++ PathService::Get(DIR_MODULE, &dir_module);
++ FilePath font_cache = dir_module.Append("fontconfig_caches");
++ FilePath test_fonts = dir_module.Append("test_fonts");
++ std::string fonts_conf = ReplaceStringPlaceholders(
++ kFontsConfTemplate, {font_cache.value(), test_fonts.value()}, nullptr);
+
+- std::unique_ptr<Environment> env(Environment::Create());
+- CHECK(env->SetVar("FONTCONFIG_SYSROOT", dir_module.value().c_str()));
++ // Write the data to a different file and then atomically rename it to
++ // fonts.conf. This avoids the file being in a bad state when different
++ // parallel tests call this function at the same time.
++ FilePath fonts_conf_file_temp;
++ if(!CreateTemporaryFileInDir(dir_module, &fonts_conf_file_temp))
++ CHECK(CreateTemporaryFile(&fonts_conf_file_temp));
++ CHECK(
++ WriteFile(fonts_conf_file_temp, fonts_conf.c_str(), fonts_conf.size()));
++ FilePath fonts_conf_file = dir_module.Append("fonts.conf");
++ if (ReplaceFile(fonts_conf_file_temp, fonts_conf_file, nullptr))
++ env->SetVar("FONTCONFIG_FILE", fonts_conf_file.value());
++ else
++ env->SetVar("FONTCONFIG_FILE", fonts_conf_file_temp.value());
++ }
+ }
+
+ } // namespace base