Add use_system_libtiff build option

Let embedders use the system libtiff instead of the bundled one if
desired.

Bug: chromium:1429647
Change-Id: I76fd11c4cc9829938066b2928844a5f88811d443
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/105650
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Nigi <nigi@chromium.org>
diff --git a/core/fxcodec/BUILD.gn b/core/fxcodec/BUILD.gn
index c0539b8..28f9915 100644
--- a/core/fxcodec/BUILD.gn
+++ b/core/fxcodec/BUILD.gn
@@ -130,7 +130,7 @@
         "tiff/tiff_decoder.cpp",
         "tiff/tiff_decoder.h",
       ]
-      deps += [ "../../third_party:fx_tiff" ]
+      deps += [ "../../third_party:tiff" ]
     }
   }
 
diff --git a/pdfium.gni b/pdfium.gni
index d8a8955..9c6ae8d 100644
--- a/pdfium.gni
+++ b/pdfium.gni
@@ -58,9 +58,6 @@
   # Enable callgrind for performance profiling
   enable_callgrind = false
 
-  # Don't build against bundled zlib.
-  use_system_zlib = false
-
   # Don't build against bundled lcms2.
   use_system_lcms2 = false
 
@@ -70,6 +67,12 @@
   # Don't build against bundled libpng.
   use_system_libpng = false
 
+  # Don't build against bundled libtiff.
+  use_system_libtiff = false
+
+  # Don't build against bundled zlib.
+  use_system_zlib = false
+
   # Enable SSE2 for MSVC builds. Ignored if it's not a MSVC build.
   msvc_use_sse2 = true
 }
diff --git a/third_party/BUILD.gn b/third_party/BUILD.gn
index 1c6c3d2..534b3b8 100644
--- a/third_party/BUILD.gn
+++ b/third_party/BUILD.gn
@@ -452,60 +452,74 @@
 }
 
 if (pdf_enable_xfa_tiff) {
-  source_set("fx_tiff") {
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [
-      "//build/config/compiler:no_chromium_code",
-      ":pdfium_third_party_config",
-    ]
-    if (is_win) {
-      # Need to undefine the macro since it is redefined in tif_jpeg.c.
-      configs -= [ "//build/config/win:lean_and_mean" ]
+  if (use_system_libtiff) {
+    config("system_tiff_config") {
+      libs = [ "tiff" ]
     }
-    deps = [
-      ":zlib",
-      "../core/fxcrt",
-      "//third_party:jpeg",
-    ]
-    sources = [
-      "libtiff/tif_aux.c",
-      "libtiff/tif_close.c",
-      "libtiff/tif_codec.c",
-      "libtiff/tif_color.c",
-      "libtiff/tif_compress.c",
-      "libtiff/tif_dir.c",
-      "libtiff/tif_dirinfo.c",
-      "libtiff/tif_dirread.c",
-      "libtiff/tif_dirwrite.c",
-      "libtiff/tif_dumpmode.c",
-      "libtiff/tif_error.c",
-      "libtiff/tif_extension.c",
-      "libtiff/tif_fax3.c",
-      "libtiff/tif_fax3sm.c",
-      "libtiff/tif_flush.c",
-      "libtiff/tif_getimage.c",
-      "libtiff/tif_hash_set.c",
-      "libtiff/tif_hash_set.h",
-      "libtiff/tif_jpeg.c",
-      "libtiff/tif_luv.c",
-      "libtiff/tif_lzw.c",
-      "libtiff/tif_next.c",
-      "libtiff/tif_open.c",
-      "libtiff/tif_packbits.c",
-      "libtiff/tif_pixarlog.c",
-      "libtiff/tif_predict.c",
-      "libtiff/tif_print.c",
-      "libtiff/tif_read.c",
-      "libtiff/tif_strip.c",
-      "libtiff/tif_swab.c",
-      "libtiff/tif_thunder.c",
-      "libtiff/tif_tile.c",
-      "libtiff/tif_version.c",
-      "libtiff/tif_warning.c",
-      "libtiff/tif_write.c",
-      "libtiff/tiffiop.h",
-      "libtiff/tiffvers.h",
-    ]
+  } else {
+    source_set("fx_tiff") {
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [
+        "//build/config/compiler:no_chromium_code",
+        ":pdfium_third_party_config",
+      ]
+      if (is_win) {
+        # Need to undefine the macro since it is redefined in tif_jpeg.c.
+        configs -= [ "//build/config/win:lean_and_mean" ]
+      }
+      deps = [
+        ":zlib",
+        "../core/fxcrt",
+        "//third_party:jpeg",
+      ]
+      sources = [
+        "libtiff/tif_aux.c",
+        "libtiff/tif_close.c",
+        "libtiff/tif_codec.c",
+        "libtiff/tif_color.c",
+        "libtiff/tif_compress.c",
+        "libtiff/tif_dir.c",
+        "libtiff/tif_dirinfo.c",
+        "libtiff/tif_dirread.c",
+        "libtiff/tif_dirwrite.c",
+        "libtiff/tif_dumpmode.c",
+        "libtiff/tif_error.c",
+        "libtiff/tif_extension.c",
+        "libtiff/tif_fax3.c",
+        "libtiff/tif_fax3sm.c",
+        "libtiff/tif_flush.c",
+        "libtiff/tif_getimage.c",
+        "libtiff/tif_hash_set.c",
+        "libtiff/tif_hash_set.h",
+        "libtiff/tif_jpeg.c",
+        "libtiff/tif_luv.c",
+        "libtiff/tif_lzw.c",
+        "libtiff/tif_next.c",
+        "libtiff/tif_open.c",
+        "libtiff/tif_packbits.c",
+        "libtiff/tif_pixarlog.c",
+        "libtiff/tif_predict.c",
+        "libtiff/tif_print.c",
+        "libtiff/tif_read.c",
+        "libtiff/tif_strip.c",
+        "libtiff/tif_swab.c",
+        "libtiff/tif_thunder.c",
+        "libtiff/tif_tile.c",
+        "libtiff/tif_version.c",
+        "libtiff/tif_warning.c",
+        "libtiff/tif_write.c",
+        "libtiff/tiffiop.h",
+        "libtiff/tiffvers.h",
+      ]
+    }
+  }
+
+  group("tiff") {
+    if (use_system_libtiff) {
+      public_configs = [ ":system_tiff_config" ]
+    } else {
+      public_deps = [ ":fx_tiff" ]
+    }
   }
 }