{
    "module": "imageformats",
    "depends": [
            "gui"
    ],
    "condition": "module.gui",

    "commandline": {
        "options": {
            "jasper": { "type": "boolean" },
            "mng": { "type": "boolean" },
            "tiff": { "type": "enum", "values": [ "no", "qt", "system" ] },
            "webp": { "type": "enum", "values": [ "no", "qt", "system" ] }
        }
    },

    "libraries": {
        "jasper": {
            "headers": "jasper/jasper.h",
            "test": {
                "include": [
                    "string.h",
                    "jasper/jasper.h"
                ],
                "head": [
                    "constexpr bool streq(const char *a, const char *b)",
                    "{",
                    "    return a[0] == b[0] && (!a[0] || streq(a + 1, b + 1));",
                    "}"
                ],
                "main": [
                    "static_assert(!streq(JAS_VERSION, \"1.900.0\"),",
                    "              \"JasPer version 1.900.0 is considered broken.\");"
                ]
            },
            "sources": [
                { "type": "pkgConfig", "args": "jasper" },
                { "libs": "-ljasper" }
            ]
        },
        "mng": {
            "headers": "libmng.h",
            "test": {
                "include": [
                    "stdio.h",
                    "libmng.h"
                ],
                "main": [
                    "mng_handle hMNG;",
                    "mng_cleanup(&hMNG);",
                    "#if defined(MNG_VERSION_MAJOR)",
                    "#if MNG_VERSION_MAJOR < 1 || (MNG_VERSION_MAJOR == 1 && MNG_VERSION_MINOR == 0 && MNG_VERSION_RELEASE < 9)",
                    "#error System libmng version is less than 1.0.9",
                    "#endif",
                    "#endif"
                ]
            },
            "sources": [
                { "type": "pkgConfig", "args": "libmng" },
                { "libs": "-lmng" }
            ]
        },
        "tiff": {
            "headers": "tiffio.h",
            "test": {
                "main": [
                    "#if !defined(TIFF_VERSION) && defined(TIFF_VERSION_CLASSIC)",
                    "// libtiff 4.0 splits it into TIFF_VERSION_CLASSIC and TIFF_VERSION_BIG",
                    "#    define TIFF_VERSION TIFF_VERSION_CLASSIC",
                    "#endif",

                    "#if !defined(TIFF_VERSION)",
                    "#    error \"Required libtiff not found\"",
                    "#elif TIFF_VERSION < 42",
                    "#    error \"unsupported tiff version\"",
                    "#endif",

                    "tdata_t buffer = _TIFFmalloc(128);",
                    "_TIFFfree(buffer);",

                    "// some libtiff implementations where TIFF_VERSION >= 42 do not",
                    "// have TIFFReadRGBAImageOriented(), so let's check for it",
                    "TIFFReadRGBAImageOriented(0, 0, 0, 0, 0, 0);"
                ]
            },
            "sources": [
                { "type": "pkgConfig", "args": "libtiff-4" },
                { "libs": "-ltiff" }
            ]
        },
        "webp": {
            "headers": [
                "webp/decode.h",
                "webp/encode.h",
                "webp/demux.h",
                "webp/mux.h"
            ],
            "test": {
                "main": [
                    "#if WEBP_ABI_IS_INCOMPATIBLE(WEBP_DECODER_ABI_VERSION, 0x0203) || WEBP_ABI_IS_INCOMPATIBLE(WEBP_ENCODER_ABI_VERSION, 0x0202)",
                    "#error \"Incompatible libwebp version\"",
                    "#endif",

                    "WebPDecoderConfig config;",
                    "WebPDecBuffer *output_buffer = &config.output;",
                    "WebPBitstreamFeatures *bitstream = &config.input;",
                    "WebPPicture picture;",
                    "picture.use_argb = 0;",
                    "WebPConfig config2;",
                    "config2.lossless = 0;",
                    "WebPData data = {};",
                    "WebPDemuxer *demuxer = WebPDemux(&data);",
                    "WebPIterator iter;",
                    "iter.frame_num = 0;"
                ]
            },
            "sources": [
                { "type": "pkgConfig", "args": "libwebp libwebpmux libwebpdemux" },
                { "libs": "-lwebp -lwebpdemux -lwebpmux" }
            ]
        }
    },

    "features": {
        "jasper": {
            "label": "JasPer",
            "disable": "input.jasper == 'no'",
            "condition": "features.imageformatplugin && libs.jasper",
            "output": [
                "privateFeature",
                { "type": "define", "negative": true, "name": "QT_NO_IMAGEFORMAT_JASPER" }
            ]
        },
        "mng": {
            "label": "MNG",
            "disable": "input.mng == 'no'",
            "condition": "libs.mng",
            "output": [ "privateFeature" ]
        },
        "tiff": {
            "label": "TIFF",
            "disable": "input.tiff == 'no'",
            "condition": "features.imageformatplugin",
            "output": [
                "privateFeature"
            ]
        },
        "system-tiff": {
            "label": "  Using system libtiff",
            "disable": "input.tiff == 'qt'",
            "enable": "input.tiff == 'system'",
            "condition": "features.tiff && libs.tiff",
            "output": [ "privateFeature" ]
        },
        "webp": {
            "label": "WEBP",
            "disable": "input.webp == 'no'",
            "condition": "features.imageformatplugin",
            "output": [
                "privateFeature"
            ]
        },
        "system-webp": {
            "label": "  Using system libwebp",
            "disable": "input.webp == 'qt'",
            "enable": "input.webp == 'system'",
            "condition": "features.webp && libs.webp",
            "output": [ "privateFeature" ]
        }
    },

    "summary": [
        {
            "section": "Further Image Formats",
            "entries": [
                "jasper",
                "mng",
                "tiff", "system-tiff",
                "webp", "system-webp"
            ]
        }
    ]
}
