TEMPLATE = lib
TARGET  = qtvirtualkeyboardplugin
DATAPATH = $$[QT_INSTALL_DATA]/qtvirtualkeyboard

QMAKE_DOCS = $$PWD/doc/qtvirtualkeyboard.qdocconf
include(doc/doc.pri)

QT += qml quick gui gui-private core-private

CONFIG += plugin
win32 {
    CONFIG += no-pkg-config skip_target_version_ext
    VERSION = $$QT_VERSION
    QMAKE_TARGET_PRODUCT = "Qt Virtual Keyboard (Qt $$QT_VERSION)"
    QMAKE_TARGET_DESCRIPTION = "Virtual Keyboard for Qt."
}

!no-pkg-config: CONFIG += link_pkgconfig

include(../config.pri)

SOURCES += platforminputcontext.cpp \
    inputcontext.cpp \
    abstractinputmethod.cpp \
    plaininputmethod.cpp \
    inputengine.cpp \
    shifthandler.cpp \
    plugin.cpp \
    inputmethod.cpp \
    selectionlistmodel.cpp \
    defaultinputmethod.cpp \
    abstractinputpanel.cpp \
    enterkeyaction.cpp \
    enterkeyactionattachedtype.cpp \
    settings.cpp \
    virtualkeyboardsettings.cpp \
    trace.cpp \

HEADERS += platforminputcontext.h \
    inputcontext.h \
    abstractinputmethod.h \
    plaininputmethod.h \
    inputengine.h \
    shifthandler.h \
    inputmethod.h \
    selectionlistmodel.h \
    defaultinputmethod.h \
    abstractinputpanel.h \
    virtualkeyboarddebug.h \
    enterkeyaction.h \
    enterkeyactionattachedtype.h \
    settings.h \
    virtualkeyboardsettings.h \
    plugin.h \
    trace.h \

RESOURCES += \
    content/styles/default/default_style.qrc \
    content/styles/retro/retro_style.qrc \
    content/content.qrc

LAYOUT_FILES += \
    content/layouts/en_GB/dialpad.qml \
    content/layouts/en_GB/digits.qml \
    content/layouts/en_GB/handwriting.qml \
    content/layouts/en_GB/numbers.qml \
    content/layouts/en_GB/symbols.qml

contains(CONFIG, lang-en.*) {
    LAYOUT_FILES += \
        content/layouts/en_GB/main.qml
}
contains(CONFIG, lang-ar.*) {
    LAYOUT_FILES += \
        content/layouts/ar_AR/digits.qml \
        content/layouts/ar_AR/main.qml \
        content/layouts/ar_AR/numbers.qml \
        content/layouts/ar_AR/symbols.qml
}
contains(CONFIG, lang-da.*) {
    LAYOUT_FILES += \
        content/layouts/da_DK/main.qml \
        content/layouts/da_DK/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/da_DK/handwriting.qml
}
contains(CONFIG, lang-de.*) {
    LAYOUT_FILES += \
        content/layouts/de_DE/main.qml \
        content/layouts/de_DE/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/de_DE/handwriting.qml
}
contains(CONFIG, lang-es.*) {
    LAYOUT_FILES += \
        content/layouts/es_ES/main.qml \
        content/layouts/es_ES/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/es_ES/handwriting.qml
}
contains(CONFIG, lang-fa.*) {
    LAYOUT_FILES += \
        content/layouts/fa_FA/digits.qml \
        content/layouts/fa_FA/main.qml \
        content/layouts/fa_FA/numbers.qml \
        content/layouts/fa_FA/symbols.qml
}
contains(CONFIG, lang-fi.*) {
    LAYOUT_FILES += \
        content/layouts/fi_FI/main.qml \
        content/layouts/fi_FI/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/fi_FI/handwriting.qml
}
contains(CONFIG, lang-fr.*) {
    LAYOUT_FILES += \
        content/layouts/fr_FR/main.qml \
        content/layouts/fr_FR/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/fr_FR/handwriting.qml
}
contains(CONFIG, lang-hi.*) {
    LAYOUT_FILES += \
        content/layouts/hi_IN/main.qml \
        content/layouts/hi_IN/symbols.qml
}
contains(CONFIG, lang-it.*) {
    LAYOUT_FILES += \
        content/layouts/it_IT/main.qml \
        content/layouts/it_IT/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/it_IT/handwriting.qml
}
contains(CONFIG, lang-ja.*) {
    LAYOUT_FILES += \
        content/layouts/ja_JP/main.qml \
        content/layouts/ja_JP/symbols.qml
}
contains(CONFIG, lang-ko.*) {
    LAYOUT_FILES += \
        content/layouts/ko_KR/main.qml \
        content/layouts/ko_KR/symbols.qml
}
contains(CONFIG, lang-nb.*) {
    LAYOUT_FILES += \
        content/layouts/nb_NO/main.qml \
        content/layouts/nb_NO/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/nb_NO/handwriting.qml
}
contains(CONFIG, lang-pl.*) {
    LAYOUT_FILES += \
        content/layouts/pl_PL/main.qml \
        content/layouts/pl_PL/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/pl_PL/handwriting.qml
}
contains(CONFIG, lang-pt.*) {
    LAYOUT_FILES += \
        content/layouts/pt_PT/main.qml \
        content/layouts/pt_PT/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/pt_PT/handwriting.qml
}
contains(CONFIG, lang-ru.*) {
    LAYOUT_FILES += \
        content/layouts/ru_RU/main.qml \
        content/layouts/ru_RU/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/ru_RU/handwriting.qml
}
contains(CONFIG, lang-sv.*) {
    LAYOUT_FILES += \
        content/layouts/sv_SE/main.qml \
        content/layouts/sv_SE/symbols.qml
t9write: LAYOUT_FILES += \
        content/layouts/sv_SE/handwriting.qml
}
contains(CONFIG, lang-zh(_CN)?) {
    LAYOUT_FILES += \
        content/layouts/zh_CN/main.qml \
        content/layouts/zh_CN/symbols.qml
}
contains(CONFIG, lang-zh(_TW)?) {
    LAYOUT_FILES += \
        content/layouts/zh_TW/main.qml \
        content/layouts/zh_TW/symbols.qml
}

retro-style {
    DEFINES += QT_VIRTUALKEYBOARD_DEFAULT_STYLE=\\\"retro\\\"
} else {
    DEFINES += QT_VIRTUALKEYBOARD_DEFAULT_STYLE=\\\"default\\\"
}

OTHER_FILES += \
    content/styles/default/*.qml \
    content/styles/retro/*.qml \
    content/*.qml \
    content/components/*.qml \
    qtvirtualkeyboard.json

!disable-desktop:isEmpty(CROSS_COMPILE):!android-no-sdk:!qnx {
    SOURCES += desktopinputpanel.cpp inputview.cpp
    HEADERS += desktopinputpanel.h inputview.h
    DEFINES += QT_VIRTUALKEYBOARD_DESKTOP
    !no-pkg-config:packagesExist(xcb) {
        PKGCONFIG += xcb xcb-xfixes
        DEFINES += QT_VIRTUALKEYBOARD_HAVE_XCB
    }
}
SOURCES += appinputpanel.cpp
HEADERS += appinputpanel.h

qtquickcompiler: DEFINES += COMPILING_QML

build_pass {
    CONFIG(debug, debug|release) {
        SUBPATH = debug
        win32: TARGET_SUFFIX = d
    } else {
        SUBPATH = release
    }
} else {
    !debug_and_release:win32:CONFIG(debug, debug|release): TARGET_SUFFIX = d
}

static {
    LIBS += \
        -L$$[QT_INSTALL_QML]/QtQuick.2 -lqtquick2plugin$$TARGET_SUFFIX \
        -L$$[QT_INSTALL_QML]/QtQuick/Window.2 -lwindowplugin$$TARGET_SUFFIX \
        -L$$[QT_INSTALL_QML]/QtQuick/Layouts -lqquicklayoutsplugin$$TARGET_SUFFIX \
        -L$$[QT_INSTALL_QML]/QtQuick/Enterprise/VirtualKeyboard/Styles -lqtvirtualkeyboardstylesplugin$$TARGET_SUFFIX \
        -L$$[QT_INSTALL_QML]/Qt/labs/folderlistmodel -lqmlfolderlistmodelplugin$$TARGET_SUFFIX
}

!disable-hunspell {
    exists(3rdparty/hunspell/src/hunspell/hunspell.h) {
        SOURCES += hunspellinputmethod.cpp hunspellinputmethod_p.cpp hunspellworker.cpp
        HEADERS += hunspellinputmethod.h hunspellinputmethod_p.h hunspellworker.h
        DEFINES += HAVE_HUNSPELL
        INCLUDEPATH += 3rdparty/hunspell/src
        LIBS += -L$$OUT_PWD/3rdparty/hunspell/$$SUBPATH -lhunspell$$TARGET_SUFFIX
        exists(3rdparty/hunspell/data) {
            hunspell_data.files = 3rdparty/hunspell/data/*.dic 3rdparty/hunspell/data/*.aff
            hunspell_data.path = $$DATAPATH/hunspell
            INSTALLS += hunspell_data
            !prefix_build: COPIES += hunspell_data
        } else {
            error("Hunspell dictionaries are missing! Please copy .dic and .aff" \
                  "files to src/virtualkeyboard/3rdparty/hunspell/data directory.")
        }
    } else:!no-pkg-config:packagesExist(hunspell) {
        SOURCES += hunspellinputmethod.cpp hunspellinputmethod_p.cpp hunspellworker.cpp
        HEADERS += hunspellinputmethod.h hunspellinputmethod_p.h hunspellworker.h
        DEFINES += HAVE_HUNSPELL
        PKGCONFIG += hunspell
    } else {
        message("Hunspell not found! Spell correction will not be available.")
    }
}

pinyin {
    SOURCES += \
        pinyininputmethod.cpp \
        pinyindecoderservice.cpp
    HEADERS += \
        pinyininputmethod.h \
        pinyindecoderservice.h
    DEFINES += HAVE_PINYIN
    INCLUDEPATH += 3rdparty/pinyin/include
    LIBS += -L$$OUT_PWD/3rdparty/pinyin/$$SUBPATH -lpinyin
    pinyin_data.files = $$PWD/3rdparty/pinyin/data/dict_pinyin.dat
    pinyin_data.path = $$DATAPATH/pinyin
    INSTALLS += pinyin_data
    !prefix_build: COPIES += pinyin_data
}

tcime {
    SOURCES += \
        tcinputmethod.cpp
    HEADERS += \
        tcinputmethod.h
    DEFINES += HAVE_TCIME
    cangjie: DEFINES += HAVE_TCIME_CANGJIE
    zhuyin: DEFINES += HAVE_TCIME_ZHUYIN
    INCLUDEPATH += 3rdparty/tcime
    LIBS += -L$$OUT_PWD/3rdparty/tcime/$$SUBPATH -ltcime
    tcime_data.files = \
        $$PWD/3rdparty/tcime/data/qt/dict_phrases.dat
    cangjie: tcime_data.files += \
        $$PWD/3rdparty/tcime/data/qt/dict_cangjie.dat
    zhuyin: tcime_data.files += \
        $$PWD/3rdparty/tcime/data/qt/dict_zhuyin.dat
    tcime_data.path = $$DATAPATH/tcime
    INSTALLS += tcime_data
    !prefix_build: COPIES += tcime_data
}

hangul {
    SOURCES += \
        hangulinputmethod.cpp \
        hangul.cpp
    HEADERS += \
        hangulinputmethod.h \
        hangul.h
    DEFINES += HAVE_HANGUL
}

openwnn {
    SOURCES += openwnninputmethod.cpp
    HEADERS += openwnninputmethod.h
    DEFINES += HAVE_OPENWNN
    INCLUDEPATH += 3rdparty/openwnn/wnnEngine/include
    # OpenWNN engine
    LIBS += -L$$OUT_PWD/3rdparty/openwnn/$$SUBPATH -lopenwnn
}

lipi-toolkit:t9write: \
    error("Conflicting configuration flags: lipi-toolkit and t9write." \
          "Please use either one, but not both at the same time.")

lipi-toolkit {
    CONFIG += exceptions
    SOURCES += \
        lipiinputmethod.cpp \
        lipisharedrecognizer.cpp \
        lipiworker.cpp
    HEADERS += \
        lipiinputmethod.h \
        lipisharedrecognizer.h \
        lipiworker.h
    DEFINES += HAVE_LIPI_TOOLKIT
    INCLUDEPATH += \
        3rdparty/lipi-toolkit/src/include \
        3rdparty/lipi-toolkit/src/util/lib
    LIBS += -L$$OUT_PWD/../../lib \
        -lshaperecommon$$qtPlatformTargetSuffix() \
        -lltkcommon$$qtPlatformTargetSuffix() \
        -lltkutil$$qtPlatformTargetSuffix()
    win32: LIBS += Advapi32.lib
    else: LIBS += -ldl
    record-trace-input: DEFINES += QT_VIRTUALKEYBOARD_LIPI_RECORD_TRACE_INPUT
}

t9write {
    include(3rdparty/t9write/t9write-build.pri)
    equals(T9WRITE_FOUND, 0): \
        error("T9Write SDK could not be found. Please make sure you have extracted" \
              "the contents of the T9Write SDK to $$PWD/3rdparty/t9write")
    SOURCES += \
        t9writeinputmethod.cpp \
        t9writeworker.cpp
    HEADERS += \
        t9writeinputmethod.h \
        t9writeworker.h
    DEFINES += HAVE_T9WRITE
    INCLUDEPATH += $$T9WRITE_INCLUDE_DIRS
    LIBS += -L$$OUT_PWD/3rdparty/t9write/$$SUBPATH -lt9write_db
    LIBS += $$T9WRITE_ALPHABETIC_LIBS
}

arrow-key-navigation: DEFINES += QT_VIRTUALKEYBOARD_ARROW_KEY_NAVIGATION

include(generateresource.pri)

RESOURCES += $$generate_resource(layouts.qrc, $$LAYOUT_FILES, /QtQuick/Enterprise/VirtualKeyboard)

PLUGIN_TYPE = platforminputcontexts
PLUGIN_EXTENDS = -
PLUGIN_CLASS_NAME = QVirtualKeyboardPlugin
load(qt_plugin)
