Build LSAN suppressions into the test binaries.

This way you don't need to set LSAN_SUPPRESSIONS in your environment...
sort of foolproof this way.

I _think_ the strdup() business from skia:2916 is actually rooted in
libfontconfig, so one suppression should cover both old ones.

I'll leave the file empty until I clean up mention of it in bot recipes.

BUG=skia:2916
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2295153003

CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Debug-ASAN-Trybot

Review-Url: https://codereview.chromium.org/2295153003
diff --git a/BUILD.gn b/BUILD.gn
index c86315d..6cb5516 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -653,6 +653,7 @@
       "src/images/SkForceLinking.cpp",
       "src/utils/SkMultiPictureDocumentReader.cpp",  # TODO(halcanary): move to tools?
       "tools/CrashHandler.cpp",
+      "tools/LsanSuppressions.cpp",
       "tools/ProcStats.cpp",
       "tools/Resources.cpp",
       "tools/ThermalManager.cpp",
diff --git a/gyp/bench.gyp b/gyp/bench.gyp
index 551af14..3d5c329 100644
--- a/gyp/bench.gyp
+++ b/gyp/bench.gyp
@@ -14,6 +14,7 @@
       'type': 'executable',
       'sources': [
         '../gm/gm.cpp',
+        '../tools/LsanSuppressions.cpp',
       ],
       'includes': [
         'bench.gypi',
diff --git a/gyp/dm.gypi b/gyp/dm.gypi
index fab2f91..bc19ee4 100644
--- a/gyp/dm.gypi
+++ b/gyp/dm.gypi
@@ -46,12 +46,13 @@
     '../gm/gm.cpp',
 
     '../src/utils/SkMultiPictureDocumentReader.cpp',
+    '../tools/LsanSuppressions.cpp',
     '../tools/debugger/SkDebugCanvas.cpp',
     '../tools/debugger/SkDrawCommand.cpp',
     '../tools/debugger/SkJsonWriteBuffer.cpp',
     '../tools/debugger/SkObjectParser.cpp',
-    '../tools/debugger/SkOverdrawMode.h',
     '../tools/debugger/SkOverdrawMode.cpp',
+    '../tools/debugger/SkOverdrawMode.h',
   ],
   'conditions': [
     [ 'skia_gpu == 1', {
diff --git a/tools/LsanSuppressions.cpp b/tools/LsanSuppressions.cpp
new file mode 100644
index 0000000..c81184f
--- /dev/null
+++ b/tools/LsanSuppressions.cpp
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkTypes.h"
+
+#if !defined(__has_feature)
+    #define __has_feature(x) 0
+#endif
+
+#if __has_feature(address_sanitizer)
+
+extern "C" {
+
+    const char* __lsan_default_suppressions();
+    const char* __lsan_default_suppressions() {
+        return "leak:libfontconfig\n"    // FontConfig looks like it leaks, but it doesn't.
+               "leak:libGL.so\n"         // For NVidia driver.
+               "leak:__strdup\n"         // An eternal mystery, skia:2916.
+               ;
+    }
+
+}
+
+#endif
diff --git a/tools/lsan.supp b/tools/lsan.supp
index 8d46f5b..b993fa5 100644
--- a/tools/lsan.supp
+++ b/tools/lsan.supp
@@ -1,12 +1 @@
 # Supressions for LSAN.
-#   tools/xsan_build address -C out/Debug
-#   ASAN_OPTIONS=detect_leaks=1 LSAN_OPTIONS=suppressions=tools/lsan.supp out/Debug/$FOO
-
-# Fontconfig
-leak:libfontconfig
-
-# Nvidia driver
-leak:libGL.so
-
-# Not clear what this is.  skia:2916
-leak:__strdup