#
# qmake configuration for all symbian mkspecs
#

TEMPLATE		= app
CONFIG			+= qt warn_on release incremental link_prl sis_targets run_on_phone
QT			+= core gui
QMAKE_INCREMENTAL_STYLE = sublib

DEFINES			+= UNICODE QT_KEYPAD_NAVIGATION QT_SOFTKEYS_ENABLED QT_USE_MATH_H_FLOATS

QMAKE_COMPILER_DEFINES  += SYMBIAN

QMAKE_EXT_OBJ           = .o
QMAKE_EXT_RES           = _res.o

QMAKE_LEX		= flex
QMAKE_LEXFLAGS		=
QMAKE_YACC		= byacc
QMAKE_YACCFLAGS		= -d
QMAKE_CFLAGS		=
QMAKE_CFLAGS_DEPS	=
QMAKE_CFLAGS_WARN_ON	=
QMAKE_CFLAGS_WARN_OFF	=
QMAKE_CFLAGS_RELEASE	=
QMAKE_CFLAGS_DEBUG	=
QMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses

MMP_OPTION_KEYWORDS = CW ARMCC GCCE
VERSION_FLAGS.ARMCC = ARMCC_4_0
QMAKE_CXXFLAGS		= $$QMAKE_CFLAGS
# Symbian build system applies -cwd source on the MWCC command line.
# this causes problems with include paths, -cwd include uses the same
# rules for include paths as ARMCC
# This should really be fixed in raptor, as using CXXFLAGS means we pass
# both on the command line and rely on the compiler using the last specified
QMAKE_CXXFLAGS.CW	= -cwd include
QMAKE_CXXFLAGS.ARMCC      = --visibility_inlines_hidden
QMAKE_CXXFLAGS.ARMCC_4_0  = --import_all_vtbl
QMAKE_CXXFLAGS.GCCE	= -fvisibility-inlines-hidden
QMAKE_CXXFLAGS_DEPS	= $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON	= $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF	= $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE	= $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG	= $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC	= $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD	= $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON	=
QMAKE_CXXFLAGS_RTTI_OFF	=
QMAKE_CXXFLAGS_EXCEPTIONS_ON =
QMAKE_CXXFLAGS_EXCEPTIONS_OFF =

QMAKE_INCDIR		=
QMAKE_INCDIR_QT		= $$[QT_INSTALL_HEADERS]

QMAKE_LFLAGS            =
QMAKE_LFLAGS.ARMCC      = 
QMAKE_LFLAGS_EXCEPTIONS_ON =
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE    =
QMAKE_LFLAGS_DEBUG      =
QMAKE_LFLAGS_CONSOLE    =
QMAKE_LFLAGS_WINDOWS    =
QMAKE_LFLAGS_DLL        =
QMAKE_LINK_OBJECT_MAX   =
QMAKE_LINK_OBJECT_SCRIPT=

QMAKE_LIBS		= -llibc -llibm -leuser -llibdl
QMAKE_LIBS_CORE         = $$QMAKE_LIBS -lefsrv -lhal -lbafl
QMAKE_LIBS_GUI          = $$QMAKE_LIBS_CORE -lfbscli -lbitgdi -lgdi -lws32 -lapgrfx -lcone -leikcore -lmediaclientaudio -lapparc -lcentralrepository
QMAKE_LIBS_NETWORK      = 
QMAKE_LIBS_EGL          = -llibEGL
QMAKE_LIBS_OPENGL       = -llibGLESv2
QMAKE_LIBS_OPENGL_ES1   = -llibGLESv1_CM
QMAKE_LIBS_OPENGL_ES2   = -llibGLESv2
QMAKE_LIBS_OPENGL_QT     = -llibGLESv2 -lcone -lws32
QMAKE_LIBS_OPENGL_ES1_QT = -llibGLESv1_CM -lcone -lws32
QMAKE_LIBS_OPENGL_ES2_QT = -llibGLESv2 -lcone -lws32
QMAKE_LIBS_OPENVG       = -llibOpenVG -lfbscli -lbitgdi -lgdi
QMAKE_LIBS_THREAD       = -llibpthread
QMAKE_LIBS_COMPAT       = 
QMAKE_LIBS_S60          = -lavkon -leikcoctl

exists($${EPOCROOT}epoc32/include/platform/sgresource/sgimage.h) {
    QMAKE_LIBS_OPENVG += -lsgresource
}

contains(QMAKE_HOST.os,Windows) {
    QMAKE_COPY           = copy /y
    QMAKE_COPY_DIR       = xcopy /s /q /y /i
    QMAKE_MOVE           = move
    QMAKE_DEL_FILE       = del 2> NUL
    QMAKE_MKDIR          = mkdir
    QMAKE_DEL_DIR        = rmdir
    QMAKE_DEL_TREE       = rmdir /s /q
    QMAKE_CHK_DIR_EXISTS = if not exist

    QMAKE_MOC            = $$[QT_INSTALL_BINS]\\moc.exe
    QMAKE_UIC            = $$[QT_INSTALL_BINS]\\uic.exe
    QMAKE_IDC            = $$[QT_INSTALL_BINS]\\idc.exe
} else {
    QMAKE_COPY           = cp
    QMAKE_COPY_DIR       = cp -r
    QMAKE_MOVE           = mv
    QMAKE_DEL_FILE       = rm -f
    QMAKE_MKDIR          = mkdir -p
    QMAKE_DEL_DIR        = rmdir
    QMAKE_DEL_TREE       = rm -rf
    QMAKE_CHK_DIR_EXISTS = test -d

    QMAKE_MOC            = $$[QT_INSTALL_BINS]/moc
    QMAKE_UIC            = $$[QT_INSTALL_BINS]/uic
    QMAKE_IDC            = $$[QT_INSTALL_BINS]/idc
}

QMAKE_IDL		  = midl
QMAKE_LIB		  = ar -ru
QMAKE_RC		  = windres
QMAKE_ZIP		  = zip -r -9
QMAKE_UNZIP               = unzip -o

QMAKE_TAR                 = tar -cf
QMAKE_GZIP                = gzip -9f

QT_ARCH               = symbian

load(qt_config)

QMAKE_LIBS_QT_ENTRY     = -lqtmain$${QT_LIBINFIX}.lib
QMAKE_LIBS_NO_QT_ENTRY  = -llibcrt0.lib
QMAKE_LIBS_NO_QT_ENTRY_GCCE  = -llibcrt0_gcce.lib

# List of languages that have a Symbian language code mapping provided in localize_deployment.prf
SYMBIAN_SUPPORTED_LANGUAGES = \
    af sq am ar hy bn bg my be ca \
    hr cs da nl en et fi fr gd ka \
    de el gu he hi hu is id ga it \
    ja kn kk ko lo lv lt mk ms ml \
    mr mo mn nb pl pt pa ro ru sr \
    si sk sl so es sw sv tl ta te \
    th bo ti tr tk uk ur vi cy zu \
    nn eu zh gl fa st en_US fr_BE \
    pt_BR en_CA fr_CA el_CY tr_CY \
    en_TW en_HK en_CN en_JP en_TH \
    sv_FI zh_HK es_419 en_ZA fr_CH \
    de_CH it_CH zh_TW

# These directories must match what configure uses for QT_INSTALL_PLUGINS and QT_INSTALL_IMPORTS
QT_PLUGINS_BASE_DIR = /resource/qt$${QT_LIBINFIX}/plugins
QT_IMPORTS_BASE_DIR = /resource/qt$${QT_LIBINFIX}/imports

load(symbian/platform_paths)

# If environment.prf is provided by platform, load that.
# It is used for platform specific variable settings, such as SYMBIAN_VERSION.
exists($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf) {
    load($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf)
}

# Try to detect SDK version if it wasn't set by environment.prf
isEmpty(SYMBIAN_VERSION) {
    exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/Symbianv4.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/Symbianv4.sis) {
        SYMBIAN_VERSION = Symbian4
    } else {
        # The Symbian^3 PDK does not necessarily contain the required sis files.
        # However, libstdcppv5 first appeared in Symbian^3 (S60 5.2), so check for that too.
        exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/release/armv5/lib/libstdcppv5.dso) {
            SYMBIAN_VERSION = Symbian3
        } else {
            exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) {
                SYMBIAN_VERSION = Symbian2
            } else {
                exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) {
                    SYMBIAN_VERSION = 9.4
                } else {
                    exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) {
                        SYMBIAN_VERSION = 9.3
                    } else {
                        exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.1.sis) {
                            SYMBIAN_VERSION = 9.2
                        } else {
                            SYMBIAN_VERSION = Unknown
                        }
                    }
                }
            }
        }
    }
}

isEmpty(S60_VERSION) {
    contains(SYMBIAN_VERSION, "9\\.2") {
        S60_VERSION = 3.1
    } else:contains(SYMBIAN_VERSION, "9\\.3") {
        S60_VERSION = 3.2
    } else:contains(SYMBIAN_VERSION, "9\\.4") {
        S60_VERSION = 5.0
    } else:contains(SYMBIAN_VERSION, "Symbian2") {
        S60_VERSION = 5.1
    } else:contains(SYMBIAN_VERSION, "Symbian3") {
        S60_VERSION = 5.2
    } else {
        S60_VERSION = Unknown
    }
}

# pkg_depends_webkit, pkg_depends_core, and pkg_platform_dependencies can be removed by developer
# if multiple languages need to be supported by pkg file. In that case the developer should declare
# multiple language compatible dependency statements him/herself.

default_deployment.pkg_prerules += pkg_depends_webkit pkg_depends_qt pkg_platform_dependencies
DEPLOYMENT += default_deployment default_bin_deployment default_resource_deployment default_reg_deployment

defineReplace(symbianRemoveSpecialCharacters) {
    # Produce identical string to what SymbianCommonGenerator::removeSpecialCharacters

    fixedStr = $$1

    fixedStr = $$replace(fixedStr, /,_)
    fixedStr = $$replace(fixedStr, \\\\,_)
    fixedStr = $$replace(fixedStr, " ",_)
    fixedStr = $$replace(fixedStr, :,_)

    return ($$fixedStr)
}

# Determines translations that are Symbian supported
defineTest(matchSymbianLanguages) {
    SYMBIAN_MATCHED_LANGUAGES =
    SYMBIAN_MATCHED_TRANSLATIONS =

    # Cannot parse .ts file for language here, so detect it from filename.
    # Allow two and three character language and country codes.
    for(translation, TRANSLATIONS) {
        language = $$replace(translation, "^(.*/)?[^/]+_(([^_]{2,3}_)?[^_]{2,3})\\.ts$", \\2)
        contains(SYMBIAN_SUPPORTED_LANGUAGES, $$language) {
            SYMBIAN_MATCHED_LANGUAGES += $$language
            SYMBIAN_MATCHED_TRANSLATIONS += $$translation
        }
    }

    isEmpty(SYMBIAN_MATCHED_LANGUAGES): SYMBIAN_MATCHED_LANGUAGES = en

    export(SYMBIAN_MATCHED_LANGUAGES)
    export(SYMBIAN_MATCHED_TRANSLATIONS)
}

# Symbian pkg files that define multiple languages require a language specific string to be
# defined for various items, even though the string often needs to be same for all languages.
# This replacement method will generate correct string for such cases based on TRANSLATIONS
# variable.
defineReplace(addLanguageDependentPkgItem) {
    localize_deployment:!isEmpty(TRANSLATIONS):isEmpty(SYMBIAN_MATCHED_LANGUAGES) {
        matchSymbianLanguages()
    }

    pkgItem = $$eval($$1)
    pkgLanguageList =

    for(dummyItem, SYMBIAN_MATCHED_LANGUAGES) {
        pkgLanguageList += "\"$$pkgItem\""
    }

    isEmpty(pkgLanguageList): pkgLanguageList = "\"$$pkgItem\""

    return($$join(pkgLanguageList,",",,))
}
