Merge to XFA: (Reland) Switch builds to clang by default for Linux and OS X.

Also adds support for ASan and sanitizer coverage.

BUG=pdfium:1,pdfium:171
R=thestig@chromium.org

Committed: https://pdfium.googlesource.com/pdfium/+/5478df43a8970257e9644ae6f57a6fe7513029c6

Review URL: https://codereview.chromium.org/1406843002 .

(cherry picked from commit 3b2ab45f0a883046a7c457e8435b5a9b2c1c4156)

Review URL: https://codereview.chromium.org/1412193010 .
diff --git a/.gitignore b/.gitignore
index 3014ed6..cbd1e7d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,9 @@
 /testing/corpus
 /testing/gmock
 /testing/gtest
+/third_party/llvm
+/third_party/llvm-build
+/tools/clang
 /v8
 /xcodebuild
 Makefile
diff --git a/DEPS b/DEPS
index 59335ab..f02ac68 100644
--- a/DEPS
+++ b/DEPS
@@ -14,6 +14,9 @@
   "testing/gtest":
      "https://chromium.googlesource.com/external/googletest.git@8245545b6dc9c4703e6496d1efd19e975ad2b038",
 
+  "tools/clang":
+    "https://chromium.googlesource.com/chromium/src/tools/clang",
+
   "v8":
     "https://chromium.googlesource.com/v8/v8.git@4d03c3aabad6517ff058124bb799ca6a4156e570",
 
@@ -74,4 +77,10 @@
                 '-s', 'pdfium/buildtools/linux64/clang-format.sha1',
     ],
   },
+  {
+    # Pull clang if needed or requested via GYP_DEFINES.
+    'name': 'clang',
+    'pattern': '.',
+    'action': ['python', 'pdfium/tools/clang/scripts/update.py', '--if-needed'],
+  },
 ]
diff --git a/build/standalone.gypi b/build/standalone.gypi
index 507368d..a70b442 100644
--- a/build/standalone.gypi
+++ b/build/standalone.gypi
@@ -8,6 +8,8 @@
   'variables': {
     'component%': 'static_library',
     'clang%': 0,
+    'asan%': 0,
+    'sanitizer_coverage%': 0,
     'msvs_multi_core_compile%': '1',
     'variables': {
       'variables': {
@@ -37,6 +39,7 @@
       'host_arch%': '<(host_arch)',
       'target_arch%': '<(target_arch)',
     },
+    'clang_dir%': 'third_party/llvm-build/Release+Asserts',
     # These two are needed by V8.
     'host_arch%': '<(host_arch)',
     'target_arch%': '<(target_arch)',
@@ -50,6 +53,11 @@
       }, {
         'os_posix%': 1,
       }],
+      ['OS=="linux" or OS=="mac"', {
+        'clang%': 1,
+      }, {
+        'clang%': 0,
+      }],
     ],
   },
   'target_defaults': {
@@ -249,6 +257,20 @@
           '-fPIC',
         ],
       }],
+      ['asan==1', {
+        'cflags': [
+          '-fsanitize=address',
+          '-gline-tables-only',
+        ],
+        'ldflags': [
+          '-fsanitize=address',
+        ],
+      }],
+      ['sanitizer_coverage!=0', {
+        'cflags': [
+          '-fsanitize-coverage=<(sanitizer_coverage)',
+        ],
+      }],
       ['OS=="win"', {
         'defines': [
           'NOMINMAX',
@@ -280,5 +302,17 @@
   'xcode_settings': {
     # See comment in Chromium's common.gypi for why this is needed.
     'SYMROOT': '<(DEPTH)/xcodebuild',
-  }
+  },
+  'conditions': [
+    ['OS=="linux" or OS=="mac"', {
+      'conditions': [
+        ['clang==1', {
+          'make_global_settings': [
+            ['CC', '<(clang_dir)/bin/clang'],
+            ['CXX', '<(clang_dir)/bin/clang++'],
+          ],
+        }],
+      ],
+    }],  # OS=="linux" or OS=="mac"
+  ],
 }