# Sis file creation
GENERATE_SIS_TARGETS = false

contains(TEMPLATE, app): GENERATE_SIS_TARGETS = true
else:!equals(DEPLOYMENT, default_deployment) {
    for(dep_item, $$list($$DEPLOYMENT)) {
        ### Qt 5: remove .sources, inconsistent with INSTALLS
        dep_item_sources = $$eval($${dep_item}.files) $$eval($${dep_item}.sources)
        !isEmpty(dep_item_sources): GENERATE_SIS_TARGETS = true
    }
}

equals(GENERATE_SIS_TARGETS, true) {

    baseTarget = $$symbianRemoveSpecialCharacters($$basename(TARGET))
    template_pkg_target.target = $${baseTarget}_template.pkg
    template_pkg_target.depends += $$_PRO_FILE_
    template_pkg_target.commands = $(MAKE) -f $(MAKEFILE) qmake
    installer_pkg_target.target = $${baseTarget}_installer.pkg
    installer_pkg_target.depends += $$_PRO_FILE_
    installer_pkg_target.commands = $(MAKE) -f $(MAKEFILE) qmake
    stub_pkg_target.target = $${baseTarget}_stub.pkg
    stub_pkg_target.depends += $$_PRO_FILE_
    stub_pkg_target.commands = $(MAKE) -f $(MAKEFILE) qmake
    QMAKE_EXTRA_TARGETS += template_pkg_target installer_pkg_target stub_pkg_target

    qtPrepareTool(QMAKE_CREATEPACKAGE, createpackage)

    sis_objects_dir = $$OBJECTS_DIR
    isEmpty(sis_objects_dir):sis_objects_dir = .

    CREATEPACKAGE_DIR = $$sis_objects_dir/createpackage_tmp

    QMAKE_CLEAN += $$CREATEPACKAGE_DIR/*

    symbian-abld|symbian-sbsv2 {
        symbian-sbsv2 {
            CONVERT_GCCE_PARAM = -g
        } else {
            CONVERT_GCCE_PARAM =
        }
        
        make_cache_name = .make.cache
        sis_target.target = sis
        sis_target.commands = $(if $(wildcard $$make_cache_name), \
                                  $(MAKE) -f $(MAKEFILE) ok_sis MAKEFILES=$$make_cache_name \
                              , \
                                  $(if $(QT_SIS_TARGET), \
                                      $(MAKE) -f $(MAKEFILE) ok_sis \
                                  , \
                                      $(MAKE) -f $(MAKEFILE) fail_sis_nocache \
                                  ) \
                              )

        sis_target.depends += $${baseTarget}_template.pkg

        ok_sis_target.target = ok_sis
        ok_sis_target.commands = $$QMAKE_CREATEPACKAGE $$CONVERT_GCCE_PARAM -t $$CREATEPACKAGE_DIR $(QT_SIS_OPTIONS) $${baseTarget}_template.pkg \
                                     $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)

        unsigned_sis_target.target = unsigned_sis
        unsigned_sis_target.commands = $(if $(wildcard $$make_cache_name), \
                                          $(MAKE) -f $(MAKEFILE) ok_unsigned_sis MAKEFILES=$$make_cache_name \
                                      , \
                                          $(if $(QT_SIS_TARGET), \
                                              $(MAKE) -f $(MAKEFILE) ok_unsigned_sis \
                                          , \
                                              $(MAKE) -f $(MAKEFILE) fail_sis_nocache \
                                          ) \
                                      )

        unsigned_sis_target.depends += $${baseTarget}_template.pkg

        ok_unsigned_sis_target.target = ok_unsigned_sis
        ok_unsigned_sis_target.commands = $$QMAKE_CREATEPACKAGE $$CONVERT_GCCE_PARAM -t $$CREATEPACKAGE_DIR $(QT_SIS_OPTIONS) -o $${baseTarget}_template.pkg $(QT_SIS_TARGET)

        target_sis_target.target = $${baseTarget}.sis
        target_sis_target.commands = $(MAKE) -f $(MAKEFILE) sis

        # The installer_sis target has dependency to sis target, so it will regenerate sis package.
        # To create smart installer wrapper for for an existing sis package, use ok_installer_sis target directly.
        installer_sis_target.target = installer_sis
        installer_sis_target.commands = $(MAKE) -f $(MAKEFILE) ok_installer_sis
        installer_sis_target.depends = $${baseTarget}_installer.pkg sis

        ok_installer_sis_target.target = ok_installer_sis
        ok_installer_sis_target.commands = $$QMAKE_CREATEPACKAGE -t $$CREATEPACKAGE_DIR $(QT_SIS_OPTIONS) $${baseTarget}_installer.pkg - \
                                               $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
        ok_installer_sis_target.depends = $${baseTarget}_installer.pkg

        unsigned_installer_sis_target.target = unsigned_installer_sis
        unsigned_installer_sis_target.commands = $(MAKE) -f $(MAKEFILE) ok_unsigned_installer_sis
        unsigned_installer_sis_target.depends = $${baseTarget}_installer.pkg unsigned_sis

        ok_unsigned_installer_sis_target.target = ok_unsigned_installer_sis
        ok_unsigned_installer_sis_target.commands = $$QMAKE_CREATEPACKAGE -t $$CREATEPACKAGE_DIR $(QT_SIS_OPTIONS) -o $${baseTarget}_installer.pkg
        ok_unsigned_installer_sis_target.depends = $${baseTarget}_installer.pkg

        fail_sis_nocache_target.target = fail_sis_nocache
        fail_sis_nocache_target.commands = "$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)"

        stub_sis_target.target = stub_sis
        stub_sis_target.commands = $(if $(wildcard $$make_cache_name), \
                                       $(MAKE) -f $(MAKEFILE) ok_stub_sis MAKEFILES=$$make_cache_name \
                                   , \
                                       $(if $(QT_SIS_TARGET), \
                                           $(MAKE) -f $(MAKEFILE) ok_stub_sis \
                                       , \
                                           $(MAKE) -f $(MAKEFILE) fail_sis_nocache \
                                       ) \
                                   )

        stub_sis_target.depends += $${baseTarget}_stub.pkg

        ok_stub_sis_target.target = ok_stub_sis
        ok_stub_sis_target.commands = $$QMAKE_CREATEPACKAGE -t $$CREATEPACKAGE_DIR -s $(QT_SIS_OPTIONS) $${baseTarget}_stub.pkg \
                                          $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)

        QMAKE_EXTRA_TARGETS += sis_target \
                               ok_sis_target \
                               unsigned_sis_target \
                               ok_unsigned_sis_target \
                               target_sis_target \
                               installer_sis_target \
                               ok_installer_sis_target \
                               unsigned_installer_sis_target \
                               ok_unsigned_installer_sis_target \
                               fail_sis_nocache_target \
                               stub_sis_target \
                               ok_stub_sis_target
        # Sbsv2 has its own store_build target which is using flms.
        !symbian-sbsv2 {
            contains(QMAKE_HOST.os, "Windows") {
                shellFixedHash = $${LITERAL_HASH}
            } else {
                shellFixedHash = \\$${LITERAL_HASH}
            }
            store_build_target.target = store_build
            store_build_target.commands = \
                  @echo $${shellFixedHash} ============================================================================== > $$make_cache_name \
                && echo $${shellFixedHash}   This file is generated by make and should not be modified by the user >> $$make_cache_name \
                && echo $${shellFixedHash}  Name        : $$make_cache_name >> $$make_cache_name \
                && echo $${shellFixedHash}  Part of     : lineedits >> $$make_cache_name \
                && echo $${shellFixedHash}  Description : This file is used to cache last build target for >> $$make_cache_name \
                && echo $${shellFixedHash}                make sis target. >> $$make_cache_name \
                && echo $${shellFixedHash}  Version     :  >> $$make_cache_name \
                && echo $${shellFixedHash} >> $$make_cache_name \
                && echo $${shellFixedHash} ============================================================================== >> $$make_cache_name \
                && echo QT_SIS_TARGET ?= $(QT_SIS_TARGET) >> $$make_cache_name

            QMAKE_EXTRA_TARGETS += store_build_target
            QMAKE_CLEAN += $$make_cache_name
        }
    } else {
        sis_destdir = $$DESTDIR
        isEmpty(sis_destdir):sis_destdir = .
        !equals(TARGET, "$$baseTarget"):sis_destdir = $$sis_destdir/$$dirname(TARGET)

        sis_target.target = sis
        sis_target.commands = $$QMAKE_CREATEPACKAGE -t $$CREATEPACKAGE_DIR $(QT_SIS_OPTIONS) $${baseTarget}_template.pkg \
                                  - $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
        sis_target.depends = first $${baseTarget}_template.pkg

        unsigned_sis_target.target = unsigned_sis
        unsigned_sis_target.commands = $$QMAKE_CREATEPACKAGE -t $$CREATEPACKAGE_DIR $(QT_SIS_OPTIONS) -o $${baseTarget}_template.pkg
        unsigned_sis_target.depends = first $${baseTarget}_template.pkg

        target_sis_target.target = $${sis_destdir}/$${baseTarget}.sis
        target_sis_target.commands = $(MAKE) -f $(MAKEFILE) sis

        installer_sis_target.target = installer_sis
        installer_sis_target.commands = $(MAKE) -f $(MAKEFILE) ok_installer_sis
        installer_sis_target.depends = $${baseTarget}_installer.pkg sis

        ok_installer_sis_target.target = ok_installer_sis
        ok_installer_sis_target.commands = $$QMAKE_CREATEPACKAGE -t $$CREATEPACKAGE_DIR $(QT_SIS_OPTIONS) $${baseTarget}_installer.pkg - \
                                            $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
        ok_installer_sis_target.depends = $${baseTarget}_installer.pkg

        unsigned_installer_sis_target.target = unsigned_installer_sis
        unsigned_installer_sis_target.commands = $$QMAKE_CREATEPACKAGE -t $$CREATEPACKAGE_DIR $(QT_SIS_OPTIONS) -o $${baseTarget}_installer.pkg
        unsigned_installer_sis_target.depends = $${baseTarget}_installer.pkg unsigned_sis

        !isEmpty(sis_destdir):!equals(sis_destdir, "."):!equals(sis_destdir, "./") {
            sis_target.commands += && $$QMAKE_MOVE $${baseTarget}.sis $$sis_destdir
            unsigned_sis_target.commands += && $$QMAKE_MOVE $${baseTarget}_unsigned.sis $$sis_destdir
            installer_sis_target.commands += && $$QMAKE_MOVE $${baseTarget}_installer.sis $$sis_destdir
            unsigned_installer_sis_target.commands += && $$QMAKE_MOVE $${baseTarget}_unsigned_installer.sis $$sis_destdir
        }

        QMAKE_EXTRA_TARGETS += sis_target \
                               unsigned_sis_target \
                               target_sis_target \
                               installer_sis_target \
                               ok_installer_sis_target \
                               unsigned_installer_sis_target

        QMAKE_DISTCLEAN += $${sis_destdir}/$${baseTarget}.sis
    }

    deploy_target.target = deploy
    contains(QMAKE_HOST.os, "Windows") {
        deploy_target.depends = sis
        deploy_target.commands = call $$target_sis_target.target
    } else {
        deploy_target.commands = @echo Deployment not supported in this environment
    }
    QMAKE_EXTRA_TARGETS += deploy_target

} else {
    contains(TEMPLATE, subdirs) {
        # Enable recursive sis target.
        sis_target.CONFIG = recursive
        sis_target.recurse = $$SUBDIRS
    } else {
        # Make sure we build everything, since other sis targets in a recursive invocation
        # may depend on them, even if this one is empty.
        # In abld/sbsv2, we assume that subdir has been built already, as all builds are recursive.
        !symbian-abld:!symbian-sbsv2: sis_target.depends = first
    }
    sis_target.commands =
    sis_target.target = sis
    QMAKE_EXTRA_TARGETS += sis_target

    symbian-abld {
        # Create dummy store_build target to avoid errors from .mk callbacks during build
        store_build_target.target = store_build
        QMAKE_EXTRA_TARGETS += store_build_target
    }
}
