if(qtc_run|lupdate_run): return()

!contains(QT, qml) {
    qt_modules = \
        $$replace(QT, -private$, _private) \
        $$replace(QT_PRIVATE, -private$, _private)
    qt_modules = $$resolve_depends(qt_modules, "QT.", ".depends" ".run_depends")
    !contains(qt_modules, qml): \
        return()
    unset(qt_modules)
}

qtPrepareTool(QML_CACHEGEN, qmlcachegen, _FILTER)
qtPrepareTool(QMAKE_RCC, rcc, _DEP)

isEmpty(QMLCACHE_DIR): QMLCACHE_DIR = .

defineReplace(qmlCacheResourceFileOutputName) {
    name = $$relative_path($$1, $$_PRO_FILE_PWD_)
    contains(name, ^\\.\\..*): name = $$relative_path($$1, $$OUT_PWD)
    name = $$replace(name, \\.qrc$, _qmlcache.qrc)
    name = $$replace(name,\.\.,)
    name = $$replace(name,[/\-:],_)
    name = $$absolute_path($$name, $$OUT_PWD)
    return($${name})
}

defineTest(qtQuickSkippedResourceFile) {
    for(skippedRes, QTQUICK_COMPILER_SKIPPED_RESOURCES) {
        equals(1, $$skippedRes): return(true)
    }
    return(false)
}

# Flatten RESOURCES that may contain individual files or objects
load(resources_functions)
qtFlattenResources()
qtEnsurePluginResourcesCpp()

NEWRESOURCES =
QMLCACHE_RESOURCE_FILES =

for(res, RESOURCES) {
    qtQuickSkippedResourceFile($$res) {
        NEWRESOURCES += $$res
        next()
    }

    absRes = $$absolute_path($$res, $$_PRO_FILE_PWD_)
    rccContents = $$system($$QMAKE_RCC_DEP -list $$system_quote($$absRes),lines)
    contains(rccContents,.*\\.js$)|contains(rccContents,.*\\.qml$)|contains(rccContents,.*\\.mjs$) {
        new_resource = $$qmlCacheResourceFileOutputName($$res)
        mkpath($$dirname(new_resource))
        dummy = $$system($$QML_CACHEGEN_FILTER --filter-resource-file -o $$system_quote($$new_resource) $$system_quote($$absRes))
        NEWRESOURCES += $$new_resource
        QMLCACHE_LOADER_FLAGS += --resource-file-mapping=$$shell_quote($$absRes=$$new_resource)

        QMLCACHE_RESOURCE_FILES += $$absRes

        for(candidate, rccContents) {
            contains(candidate,.*\\.js$)|contains(candidate,.*\\.qml$)|contains(candidate,.*\\.mjs$) {
                QMLCACHE_FILES += $$candidate
            }
        }
    } else {
        NEWRESOURCES += $$res
    }
}

RESOURCES = $$NEWRESOURCES

QMLCACHE_RESOURCE_FLAGS =
for(res, QMLCACHE_RESOURCE_FILES) {
    QMLCACHE_RESOURCE_FLAGS += --resource=$$shell_quote($$res)
}

defineReplace(qmlCacheOutputName) {
    name = $$absolute_path($$1, $$OUT_PWD)
    name = $$relative_path($$name, $$_PRO_FILE_PWD_)
    name = $$replace(name, \\.qml$, _qml)
    name = $$replace(name, \\.js$, _js)
    name = $$replace(name, \\.mjs$, _mjs)
    name = $$replace(name,/,_)
    name = $$QMLCACHE_DIR/$${name}
    return($${name})
}

qmlcache.input = QMLCACHE_FILES
qmlcache.output = ${QMAKE_FUNC_FILE_IN_qmlCacheOutputName}$${first(QMAKE_EXT_CPP)}
qmlcache.commands = $$QML_CACHEGEN $$QMLCACHE_RESOURCE_FLAGS $$QMLCACHE_FLAGS -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
qmlcache.name = qmlcachegen ${QMAKE_FILE_IN}
qmlcache.variable_out = GENERATED_SOURCES
qmlcache.dependency_type = TYPE_C

qmlcache_loader.input = QMLCACHE_RESOURCE_FILES
qmlcache_loader.output = $$QMLCACHE_DIR/qmlcache_loader.cpp
qmlcache_loader.commands = $$QML_CACHEGEN $$QMLCACHE_LOADER_FLAGS $$QMLCACHE_FLAGS -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
qmlcache_loader.name = qmlcachengen_loader ${QMAKE_FILE_IN}
qmlcache_loader.variable_out = SOURCES
qmlcache_loader.dependency_type = TYPE_C
qmlcache_loader.CONFIG = combine

unix:!no_qmlcache_depend {
    qmlcache.depends += $$QML_CACHEGEN
    qmlcache_loader.depends += $$QML_CACHEGEN
}

QMAKE_EXTRA_COMPILERS += qmlcache qmlcache_loader
