Make SkFontConfigInterface_direct and sysroot-aware
CL [1] adds support for setting the fontconfig sysroot with an environment
variable. Chromium plans on using this in tests.
The string returned when getting the FC_FILE property is relative to the
sysroot, so to get the full path, the sysroot must be prepended.
[1] https://cgit.freedesktop.org/fontconfig/commit/?id=730deada8cf609157d07b7c2bf2985672614c4c0
Bug: chromium:822737,chromium:908463
R=bungeman
Change-Id: I6d9dfbb3bdc6bdcd2aab73e757dcef46ae9229e4
Reviewed-on: https://skia-review.googlesource.com/c/127108
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
diff --git a/src/ports/SkFontConfigInterface_direct.cpp b/src/ports/SkFontConfigInterface_direct.cpp
index 56c8466..bbfcfdf 100644
--- a/src/ports/SkFontConfigInterface_direct.cpp
+++ b/src/ports/SkFontConfigInterface_direct.cpp
@@ -539,6 +539,13 @@
if (!c_filename) {
return false;
}
+ const char* sysroot = (const char*)FcConfigGetSysRoot(nullptr);
+ SkString resolvedFilename;
+ if (sysroot) {
+ resolvedFilename = sysroot;
+ resolvedFilename += c_filename;
+ c_filename = resolvedFilename.c_str();
+ }
return this->isAccessible(c_filename);
}
@@ -670,6 +677,13 @@
FcFontSetDestroy(font_set);
return false;
}
+ const char* sysroot = (const char*)FcConfigGetSysRoot(nullptr);
+ SkString resolvedFilename;
+ if (sysroot) {
+ resolvedFilename = sysroot;
+ resolvedFilename += c_filename;
+ c_filename = resolvedFilename.c_str();
+ }
int face_index = get_int(match, FC_INDEX, 0);