Allow fontmgr factory to depend on fontmgrs.

In 75626e4b1a "Regularize selection of fontmgr." a clever change was
made which allowed the skia_fontmgr_factory to be specified as a source
file to allow the user to specify which factory to use. Unfortunately
this implies that the Skia target which uses this source does not know
which other targets (like fontmgr targets) to depend on. A factory
target must generally depend on the target which provides the widget the
factory makes.

This change puts all the current factories into targets of their own so
that they can depend on whatever they need. The skia_fontmgr_factory is
now the name of a target which is the sole public member of the
:fontmgr_factory target. Users can now specify a particular fontmgr
target to build into Skia as the default instead of simply specifying a
source file.

The fontmgr_fontconfig target now also properly publicly depends on the
fontconfig target since it has a public header which includes
fontconfig.h.

Bug: b/160133836
Change-Id: I212d842b8e07c4e99ab53e32310642d18eeb7cb2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/299677
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
diff --git a/BUILD.gn b/BUILD.gn
index b24bac8..50edcdb 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -298,9 +298,13 @@
   ]
 }
 
-source_set("fontmgr_factory") {
-  configs += skia_library_configs
-  sources = [ skia_fontmgr_factory ]
+group("fontmgr_factory") {
+  public_deps = [ skia_fontmgr_factory ]
+}
+
+optional("fontmgr_empty_factory") {
+  enabled = true
+  sources = [ "src/ports/SkFontMgr_empty_factory.cpp" ]
 }
 
 optional("fontmgr_android") {
@@ -317,6 +321,11 @@
     "src/ports/SkFontMgr_android_parser.h",
   ]
 }
+optional("fontmgr_android_factory") {
+  enabled = skia_enable_fontmgr_android
+  deps = [ ":fontmgr_android" ]
+  sources = [ "src/ports/SkFontMgr_android_factory.cpp" ]
+}
 
 optional("fontmgr_custom") {
   enabled =
@@ -338,6 +347,11 @@
   public = [ "include/ports/SkFontMgr_directory.h" ]
   sources = [ "src/ports/SkFontMgr_custom_directory.cpp" ]
 }
+optional("fontmgr_custom_directory_factory") {
+  enabled = skia_enable_fontmgr_custom_directory
+  deps = [ ":fontmgr_custom_directory" ]
+  sources = [ "src/ports/SkFontMgr_custom_directory_factory.cpp" ]
+}
 
 optional("fontmgr_custom_embedded") {
   enabled = skia_enable_fontmgr_custom_embedded
@@ -348,6 +362,11 @@
   ]
   sources = [ "src/ports/SkFontMgr_custom_embedded.cpp" ]
 }
+optional("fontmgr_custom_embedded_factory") {
+  enabled = skia_enable_fontmgr_custom_embedded
+  deps = [ ":fontmgr_custom_embedded" ]
+  sources = [ "src/ports/SkFontMgr_custom_embedded_factory.cpp" ]
+}
 
 optional("fontmgr_custom_empty") {
   enabled = skia_enable_fontmgr_custom_empty
@@ -359,17 +378,26 @@
   public = [ "include/ports/SkFontMgr_empty.h" ]
   sources = [ "src/ports/SkFontMgr_custom_empty.cpp" ]
 }
+optional("fontmgr_custom_empty_factory") {
+  enabled = skia_enable_fontmgr_custom_empty
+  deps = [ ":fontmgr_custom_empty" ]
+  sources = [ "src/ports/SkFontMgr_custom_empty_factory.cpp" ]
+}
 
 optional("fontmgr_fontconfig") {
   enabled = skia_enable_fontmgr_fontconfig
 
-  deps = [
-    ":typeface_freetype",
-    "//third_party:fontconfig",
-  ]
+  # The public header includes fontconfig.h and uses FcConfig*
+  public_deps = [ "//third_party:fontconfig" ]
   public = [ "include/ports/SkFontMgr_fontconfig.h" ]
+  deps = [ ":typeface_freetype" ]
   sources = [ "src/ports/SkFontMgr_fontconfig.cpp" ]
 }
+optional("fontmgr_fontconfig_factory") {
+  enabled = skia_enable_fontmgr_fontconfig
+  deps = [ ":fontmgr_fontconfig" ]
+  sources = [ "src/ports/SkFontMgr_fontconfig_factory.cpp" ]
+}
 
 optional("fontmgr_FontConfigInterface") {
   enabled = skia_enable_fontmgr_FontConfigInterface
@@ -390,6 +418,11 @@
     "src/ports/SkFontMgr_FontConfigInterface.cpp",
   ]
 }
+optional("fontmgr_FontConfigInterface_factory") {
+  enabled = skia_enable_fontmgr_FontConfigInterface
+  deps = [ ":fontmgr_FontConfigInterface" ]
+  sources = [ "src/ports/SkFontMgr_FontConfigInterface_factory.cpp" ]
+}
 
 optional("fontmgr_fuchsia") {
   enabled = skia_enable_fontmgr_fuchsia
@@ -439,6 +472,11 @@
     ]
   }
 }
+optional("fontmgr_mac_ct_factory") {
+  enabled = skia_use_fonthost_mac
+  deps = [ ":fontmgr_mac_ct" ]
+  sources = [ "src/ports/SkFontMgr_mac_ct_factory.cpp" ]
+}
 
 optional("fontmgr_win") {
   enabled = skia_enable_fontmgr_win
@@ -451,6 +489,11 @@
     "src/ports/SkTypeface_win_dw.cpp",
   ]
 }
+optional("fontmgr_win_factory") {
+  enabled = skia_enable_fontmgr_win
+  deps = [ ":fontmgr_win" ]
+  sources = [ "src/ports/SkFontMgr_win_dw_factory.cpp" ]
+}
 
 optional("fontmgr_win_gdi") {
   enabled = skia_enable_fontmgr_win_gdi
diff --git a/gn/skia.gni b/gn/skia.gni
index f4b35e8..1e4f81a 100644
--- a/gn/skia.gni
+++ b/gn/skia.gni
@@ -114,25 +114,25 @@
 declare_args() {
   # skia_fontmgr_factory should define SkFontMgr::Factory()
   if (skia_enable_fontmgr_empty) {
-    skia_fontmgr_factory = "src/ports/SkFontMgr_empty_factory.cpp"
+    skia_fontmgr_factory = ":fontmgr_empty_factory"
   } else if (is_android && skia_enable_fontmgr_android) {
-    skia_fontmgr_factory = "src/ports/SkFontMgr_android_factory.cpp"
+    skia_fontmgr_factory = ":fontmgr_android_factory"
   } else if (is_win && skia_enable_fontmgr_win) {
-    skia_fontmgr_factory = "src/ports/SkFontMgr_win_dw_factory.cpp"
+    skia_fontmgr_factory = ":fontmgr_win_factory"
   } else if ((is_mac || is_ios) && skia_use_fonthost_mac) {
-    skia_fontmgr_factory = "src/ports/SkFontMgr_mac_ct_factory.cpp"
+    skia_fontmgr_factory = ":fontmgr_mac_ct_factory"
   } else if (skia_enable_fontmgr_fontconfig) {
-    skia_fontmgr_factory = "src/ports/SkFontMgr_fontconfig_factory.cpp"
+    skia_fontmgr_factory = ":fontmgr_fontconfig_factory"
   } else if (skia_enable_fontmgr_custom_directory) {
-    skia_fontmgr_factory = "src/ports/SkFontMgr_custom_directory_factory.cpp"
+    skia_fontmgr_factory = ":fontmgr_custom_directory_factory"
   } else if (skia_enable_fontmgr_custom_embedded) {
-    skia_fontmgr_factory = "src/ports/SkFontMgr_custom_embedded_factory.cpp"
+    skia_fontmgr_factory = ":fontmgr_custom_embedded_factory"
   } else if (skia_enable_fontmgr_custom_empty) {
-    skia_fontmgr_factory = "src/ports/SkFontMgr_custom_empty_factory.cpp"
+    skia_fontmgr_factory = ":fontmgr_custom_empty_factory"
   } else {
     #"src/ports/SkFontMgr_FontConfigInterface_factory.cpp" #WontFix
     #"src/ports/SkFontMgr_win_gdi_factory.cpp" # WontFix
-    skia_fontmgr_factory = "src/ports/SkFontMgr_empty_factory.cpp"
+    skia_fontmgr_factory = ":fontmgr_empty_factory"
   }
 }