GN: make libwebp an optional dependency

This will be handy for folks who don't have libwebp, like Fuchsia.

I convinced myself that this is done right by:
  - building in all three modes (default and explicitly set both ways);
  - looking at verbose Ninja logs to see the presence/lack of SK_HAS_WEBP_LIBRARY;
  - running dm -m Codec, which passes with libwebp and segfault without it.

If this is viable, I intend to make all third-party dependencies optional
and follow this pattern.  :skia should link and degrade gracefully without
any of //third_party.  It's okay for tools to have hard third-party
dependencies; we just need them to get past the `gn gen` stage without them.

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

Review-Url: https://codereview.chromium.org/2270693004
This commit is contained in:
mtklein 2016-08-23 07:38:09 -07:00 committed by Commit bot
parent 7535f419e2
commit eb3c425f1b

View File

@ -4,6 +4,7 @@
# found in the LICENSE file.
declare_args() {
skia_use_libwebp = !is_fuchsia
}
skia_public_includes = [
@ -64,7 +65,6 @@ config("skia_private") {
"SK_HAS_GIF_LIBRARY",
"SK_HAS_JPEG_LIBRARY",
"SK_HAS_PNG_LIBRARY",
"SK_HAS_WEBP_LIBRARY",
# TODO(halcanary): make this the default; this is the value Android uses.
"SK_SFNTLY_SUBSETTER=\"sample/chromium/font_subsetter.h\"",
@ -183,16 +183,37 @@ if (is_x86) {
}
}
if (skia_use_libwebp) {
config("webp_config") {
defines = [ "SK_HAS_WEBP_LIBRARY" ]
}
source_set("webp") {
configs += skia_library_configs
all_dependent_configs = [ ":webp_config" ]
deps = [
"//third_party/libwebp",
]
sources = [
"src/codec/SkWebpAdapterCodec.cpp",
"src/codec/SkWebpCodec.cpp",
"src/images/SkWEBPImageEncoder.cpp",
]
}
} else {
source_set("webp") {
}
}
component("skia") {
public_configs = [ ":skia_public" ]
configs += skia_library_configs
deps = [
":webp",
"//third_party/expat",
"//third_party/giflib",
"//third_party/libjpeg-turbo:libjpeg",
"//third_party/libpng",
"//third_party/libwebp",
"//third_party/sfntly",
"//third_party/zlib",
]
@ -240,15 +261,12 @@ component("skia") {
"src/codec/SkSampler.cpp",
"src/codec/SkSwizzler.cpp",
"src/codec/SkWbmpCodec.cpp",
"src/codec/SkWebpAdapterCodec.cpp",
"src/codec/SkWebpCodec.cpp",
"src/images/SkImageEncoder.cpp",
"src/images/SkImageEncoder_Factory.cpp",
"src/images/SkJPEGImageEncoder.cpp",
"src/images/SkJPEGWriteUtility.cpp",
"src/images/SkKTXImageEncoder.cpp",
"src/images/SkPNGImageEncoder.cpp",
"src/images/SkWEBPImageEncoder.cpp",
"src/ports/SkDiscardableMemory_none.cpp",
"src/ports/SkGlobalInitialization_default.cpp",
"src/ports/SkImageGenerator_skia.cpp",