# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

DIRS += ["build", "decoders", "encoders"]
if CONFIG["ENABLE_TESTS"]:
    DIRS += ["test/gtest"]

if CONFIG["FUZZING_INTERFACES"]:
    DIRS += ["test/fuzzing"]

with Files("**"):
    BUG_COMPONENT = ("Core", "Graphics: ImageLib")

BROWSER_CHROME_MANIFESTS += [
    "test/browser/browser.toml",
    "test/browser/browser_sandbox_headless.toml",
]

MOCHITEST_MANIFESTS += ["test/mochitest/mochitest.toml"]

MOCHITEST_CHROME_MANIFESTS += ["test/mochitest/chrome.toml"]

XPCSHELL_TESTS_MANIFESTS += ["test/unit/xpcshell.toml"]

XPIDL_SOURCES += [
    "imgICache.idl",
    "imgIContainer.idl",
    "imgIContainerDebug.idl",
    "imgIEncoder.idl",
    "imgILoader.idl",
    "imgINotificationObserver.idl",
    "imgIRequest.idl",
    "imgIScriptedNotificationObserver.idl",
    "imgITools.idl",
    "nsIIconURI.idl",
]

XPIDL_MODULE = "imglib2"

EXPORTS += [
    "FrameTimeout.h",
    "ImageBlocker.h",
    "ImageCacheKey.h",
    "ImageLogging.h",
    "ImageMetadata.h",
    "ImageOps.h",
    "ImageRegion.h",
    "ImgDrawResult.h",
    "imgLoader.h",
    "imgRequest.h",
    "imgRequestProxy.h",
    "IProgressObserver.h",
    "Orientation.h",
    "SurfaceCacheUtils.h",
]

EXPORTS.mozilla.image += [
    "encoders/bmp/nsBMPEncoder.h",
    "encoders/ico/nsICOEncoder.h",
    "encoders/jpeg/nsJPEGEncoder.h",
    "encoders/png/nsPNGEncoder.h",
    "ICOFileHeaders.h",
    "ImageMemoryReporter.h",
    "Resolution.h",
    "WebRenderImageProvider.h",
]

UNIFIED_SOURCES += [
    "AnimationFrameBuffer.cpp",
    "AnimationSurfaceProvider.cpp",
    "BlobSurfaceProvider.cpp",
    "ClippedImage.cpp",
    "DecodedSurfaceProvider.cpp",
    "Decoder.cpp",
    "DecoderFactory.cpp",
    "DynamicImage.cpp",
    "FrameAnimator.cpp",
    "FrozenImage.cpp",
    "IDecodingTask.cpp",
    "Image.cpp",
    "ImageBlocker.cpp",
    "ImageCacheKey.cpp",
    "ImageFactory.cpp",
    "ImageMemoryReporter.cpp",
    "ImageOps.cpp",
    "ImageWrapper.cpp",
    "imgFrame.cpp",
    "imgLoader.cpp",
    "imgRequest.cpp",
    "imgRequestProxy.cpp",
    "imgTools.cpp",
    "MultipartImage.cpp",
    "OrientedImage.cpp",
    "ProgressTracker.cpp",
    "RasterImage.cpp",
    "ScriptedNotificationObserver.cpp",
    "ShutdownTracker.cpp",
    "SourceBuffer.cpp",
    "SurfaceCache.cpp",
    "SurfaceCacheUtils.cpp",
    "SurfacePipe.cpp",
    "SVGDocumentWrapper.cpp",
    "VectorImage.cpp",
]

UNIFIED_SOURCES += ["Downscaler.cpp"]

if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
    SOURCES += ["DecodePool.cpp"]
else:
    UNIFIED_SOURCES += ["DecodePool.cpp"]

include("/ipc/chromium/chromium-config.mozbuild")

FINAL_LIBRARY = "xul"

LOCAL_INCLUDES += [
    # Because SVGDocumentWrapper.cpp includes "mozilla/dom/SVGSVGElement.h"
    "/dom/base",
    "/dom/svg",
    # Because imgFrame.cpp includes "cairo.h"
    "/gfx/cairo/cairo/src",
    # We need to instantiate the decoders
    "/image/decoders",
    # For URI-related functionality
    "/netwerk/base",
    # For nsHttpChannel.h
    "/netwerk/protocol/http",
    # DecodePool uses thread-related facilities.
    "/xpcom/threads",
]

LOCAL_INCLUDES += CONFIG["SKIA_INCLUDES"]

# Add libFuzzer configuration directives
include("/tools/fuzzing/libfuzzer-config.mozbuild")