#
#  W A R N I N G
#  -------------
#
# This file is not part of the Qt API.  It exists purely as an
# implementation detail.  It may change from version to version
# without notice, or even be removed.
#
# We mean it.
#

equals(TEMPLATE, app): TEMPLATE = aux

isEmpty(TARGETPATH): error("Must set TARGETPATH (QML import name)")

!isEmpty(DYNAMIC_QMLDIR) {
    qmldir_path = $$OUT_PWD
    write_file($${qmldir_path}/qmldir, DYNAMIC_QMLDIR)|error("Aborting.")
} else {
    qmldir_path = $$_PRO_FILE_PWD_
}

qmldir_file = $${qmldir_path}/qmldir

fq_qml_files =
for(qmlf, QML_FILES): fq_qml_files += $$absolute_path($$qmlf, $$_PRO_FILE_PWD_)

fq_aux_qml_files =
for(qmlf, AUX_QML_FILES): fq_aux_qml_files += $$absolute_path($$qmlf, $$_PRO_FILE_PWD_)

load(qt_build_paths)

DESTDIR = $$MODULE_BASE_OUTDIR/qml/$$TARGETPATH

static: \
    CONFIG += builtin_resources
else: \
    CONFIG += install_qml_files

builtin_resources {
    URITARGET = $$replace(URI, "\\.", "_")
    # In static builds, the QML engine reads also the qmldir file from the resources.
    static: $${URITARGET}.files = $$qmldir_file
    # Ensure the QML files are included in the resources.
    $${URITARGET}.files += $$fq_qml_files
    # qt-project.org/imports is the path used for locating imports inside the resources
    $${URITARGET}.prefix = /qt-project.org/imports/$$TARGETPATH
    RESOURCES += $${URITARGET}
}

# Install rules
qmldir.base = $$qmldir_path
qmldir.files = $$qmldir_file
qmldir.path = $$[QT_INSTALL_QML]/$$TARGETPATH

qmlfiles.base = $$_PRO_FILE_PWD_
qmlfiles.files = $$fq_aux_qml_files
install_qml_files: qmlfiles.files += $$fq_qml_files
qmlfiles.path = $${qmldir.path}

INSTALL_QML_FILES = false

android {
    single_android_abi|build_pass {
        isEmpty(ANDROID_ABIS): ANDROID_ABIS = $$ALL_ANDROID_ABIS
        ABI = $$first(ANDROID_ABIS)
        equals(ABI,  $$QT_ARCH): INSTALL_QML_FILES = true
    }
} else: !debug_and_release|!build_all|CONFIG(release, debug|release): INSTALL_QML_FILES = true

equals(INSTALL_QML_FILES, true) {
    INSTALLS += qmldir
    INSTALLS += qmlfiles

    !prefix_build {
        COPIES += qmldir qmlfiles
    } else {
        # For non-installed static builds, tools need qmldir and plugins.qmltypes
        # files in the build dir
        qml2build.files = $$qmldir_file $$fq_aux_qml_files
        qml2build.path = $$DESTDIR
        COPIES += qml2build
    }
}
