Commit 99babfc3 authored by Martin Höher's avatar Martin Höher

CMake support: Linux and Windows

This contributes to #86 - CMake can now be used for Linux and Windows
builds.
parent 7d8d1470
Pipeline #3572468 failed with stage
set(REPOSITORY_URL ${INSTALLER_ONLINE_REPOSITORY_ROOT}/OpenTodoList-linux-x86_64)
set(PACKAGE_DIR ${INSTALLER_DIR}/packages/net.rpdev.OpenTodoList)
set(INSTALLER_CONFIG_DIR ${CMAKE_CURRENT_BINARY_DIR}/installer)
configure_file(templates/installer/config/config.xml.in
${CMAKE_CURRENT_BINARY_DIR}/installer/config.xml)
configure_file(
templates/installer/packages/net.rpdev.OpenTodoList/meta/package.xml.in
${CMAKE_CURRENT_BINARY_DIR}/installer/package.xml
)
find_package(Qt5Core)
add_custom_target(LinuxInstaller)
add_custom_command(
TARGET
LinuxInstaller
POST_BUILD
COMMAND
which patchelf
COMMAND
${CMAKE_COMMAND} -E remove_directory ${INSTALLER_DIR}
COMMAND
${CMAKE_COMMAND} -E make_directory ${PACKAGE_DIR}/meta
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/installer/package.xml ${PACKAGE_DIR}/meta
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/templates/installer/packages/net.rpdev.OpenTodoList/meta/script.js
${PACKAGE_DIR}/meta
COMMAND
${CMAKE_COMMAND} -E make_directory ${INSTALLER_DIR}/config
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/app/res/OpenTodoList80.png ${INSTALLER_DIR}/config
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/installer/config.xml ${INSTALLER_DIR}/config
COMMAND
${CMAKE_COMMAND} -E make_directory
${PACKAGE_DIR}/data
COMMAND
${CMAKE_COMMAND} -E make_directory ${INSTALLER_DIR}/dist/bin
COMMAND
${CMAKE_COMMAND} -E copy $<TARGET_FILE:OpenTodoList> ${INSTALLER_DIR}/dist/bin
COMMAND
perl ${CMAKE_CURRENT_SOURCE_DIR}/bin/linux-deploy-qt.pl
--qt ${QT_INSTALL_PREFIX} --exe ${INSTALLER_DIR}/dist/bin/OpenTodoList
COMMAND
${CMAKE_COMMAND} -E make_directory ${INSTALLER_DIR}/dist/share/OpenTodoList/icons
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/app/res/OpenTodoList80.png
${INSTALLER_DIR}/dist/share/OpenTodoList/icons/
COMMAND
archivegen
${PACKAGE_DIR}/data/OpenTodoList.7z
${INSTALLER_DIR}/dist/bin
${INSTALLER_DIR}/dist/lib
${INSTALLER_DIR}/dist/plugins
${INSTALLER_DIR}/dist/qml
${INSTALLER_DIR}/dist/share
${INSTALLER_DIR}/dist/translations
COMMAND
repogen -r -p ${INSTALLER_DIR}/packages ${INSTALLER_DIR}/OpenTodoList-linux-x86_64/
COMMAND
binarycreator -c ${INSTALLER_DIR}/config/config.xml
-p ${INSTALLER_DIR}/packages/ --online-only
${INSTALLER_DIR}/OpenTodoList-online-linux-x86_64-${OPENTODOLIST_VERSION}
)
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
set(ARCH x86_64)
else()
set(ARCH i386)
endif()
set(REPOSITORY_URL ${INSTALLER_ONLINE_REPOSITORY_ROOT}/OpenTodoList-windows-${ARCH})
set(PACKAGE_DIR ${INSTALLER_DIR}/packages/net.rpdev.OpenTodoList)
set(INSTALLER_CONFIG_DIR ${CMAKE_CURRENT_BINARY_DIR}/installer)
# Needs to be relative for Wine to work:
file(RELATIVE_PATH INSTALLER_CONTROLLER_SCRIPT
${INSTALLER_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/templates/installer/config/controller.js
)
configure_file(templates/installer/config/config.xml.in
${CMAKE_CURRENT_BINARY_DIR}/installer/config.xml)
configure_file(
templates/installer/packages/net.rpdev.OpenTodoList/meta/package.xml.in
${CMAKE_CURRENT_BINARY_DIR}/installer/package.xml
)
find_package(Qt5Core)
set(DIST_FILES
../bin/libgcc_s_seh-1.dll
../bin/libstdc++-6.dll
../bin/zlib1.dll
../bin/libpcre16-0.dll
../bin/libpcre-1.dll
../bin/libharfbuzz-0.dll
../bin/libpng16-16.dll
../bin/libglib-2.0-0.dll
../bin/libfreetype-6.dll
../bin/libintl-8.dll
../bin/libeay32.dll
../bin/ssleay32.dll
../bin/libiconv-2.dll
../bin/libbz2.dll
../bin/libjasper-1.dll
../bin/libjpeg-9.dll
../bin/libmng-2.dll
../bin/libtiff-5.dll
../bin/libwebp-5.dll
../bin/liblzma-5.dll
../bin/liblcms2-2.dll
bin/Qt5Core.dll
bin/Qt5Gui.dll
bin/Qt5Network.dll
bin/Qt5Svg.dll
bin/Qt5Qml.dll
bin/Qt5Quick.dll
bin/Qt5Widgets.dll
bin/Qt5Xml.dll
)
set(DIST_DIRS
translations
plugins/bearer:bearer
plugins/iconengines:iconengines
plugins/imageformats:imageformats
plugins/platforms:platforms
plugins/qmltooling:qmltooling
qml/Qt:Qt
qml/QtGraphicalEffects:QtGraphicalEffects
qml/QtQuick:QtQuick
qml/QtQuick.2:QtQuick.2
qml/QtQml:QtQml
)
add_custom_target(WindowsInstaller)
add_custom_command(
TARGET
WindowsInstaller
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E remove_directory ${INSTALLER_DIR}
COMMAND
${CMAKE_COMMAND} -E make_directory ${PACKAGE_DIR}/meta
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/installer/package.xml ${PACKAGE_DIR}/meta
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/templates/installer/packages/net.rpdev.OpenTodoList/meta/script.js
${PACKAGE_DIR}/meta
COMMAND
${CMAKE_COMMAND} -E make_directory ${INSTALLER_DIR}/config
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/app/res/OpenTodoList80.png ${INSTALLER_DIR}/config
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/installer/config.xml ${INSTALLER_DIR}/config
COMMAND
${CMAKE_COMMAND} -E make_directory
${PACKAGE_DIR}/data
COMMAND
${CMAKE_COMMAND} -E make_directory ${INSTALLER_DIR}/dist/bin
COMMAND
${CMAKE_COMMAND} -E copy $<TARGET_FILE:OpenTodoList> ${INSTALLER_DIR}/dist/bin
)
foreach(file ${DIST_FILES})
add_custom_command(
TARGET
WindowsInstaller
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E copy ${QT_INSTALL_PREFIX}/${file} ${INSTALLER_DIR}/dist/bin
)
endforeach()
foreach(dir ${DIST_DIRS})
string(REPLACE ":" ";" dir ${dir})
list(GET dir 0 from)
list(GET dir -1 to)
add_custom_command(
TARGET
WindowsInstaller
POST_BUILD
COMMAND
${CMAKE_COMMAND} -E copy_directory ${QT_INSTALL_PREFIX}/${from} ${INSTALLER_DIR}/dist/bin/${to}
)
endforeach()
# Commands require relative paths to work from within Wine:
add_custom_command(
TARGET
WindowsInstaller
WORKING_DIRECTORY
${INSTALLER_DIR}
COMMAND
${CMAKE_COMMAND} -E make_directory ${INSTALLER_DIR}/dist/share/OpenTodoList/icons
COMMAND
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/app/res/OpenTodoList.ico
${INSTALLER_DIR}/dist/share/OpenTodoList/icons/
)
add_custom_command(
TARGET
WindowsInstaller
WORKING_DIRECTORY
${INSTALLER_DIR}/dist
COMMAND
archivegen.exe
../packages/net.rpdev.OpenTodoList/data/OpenTodoList.7z
./bin
./share
)
add_custom_command(
TARGET
WindowsInstaller
WORKING_DIRECTORY
${INSTALLER_DIR}
COMMAND
repogen.exe -r -p ./packages ./OpenTodoList-windows-${ARCH}/
COMMAND
binarycreator.exe -c ./config/config.xml
-p ./packages/ --online-only
./OpenTodoList-online-windows-${ARCH}-${OPENTODOLIST_VERSION}
)
cmake_minimum_required(VERSION 3.4.1)
project(OpenTodoList)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(OPENTODOLIST_MAJOR_VERSION 2)
set(OPENTODOLIST_MINOR_VERSION 8)
set(OPENTODOLIST_PATCH_VERSION 0)
set(OPENTODOLIST_VERSION
${OPENTODOLIST_MAJOR_VERSION}.${OPENTODOLIST_MINOR_VERSION}.${OPENTODOLIST_PATCH_VERSION})
add_subdirectory(lib)
add_subdirectory(app)
# Enable testing:
enable_testing()
add_subdirectory(test)
# Get QT_INSTALL_PREFIX:
find_package(Qt5Core REQUIRED)
get_target_property(QT_INSTALL_PREFIX Qt5::Core LOCATION)
get_filename_component(QT_INSTALL_PREFIX ${QT_INSTALL_PREFIX} DIRECTORY)
get_filename_component(QT_INSTALL_PREFIX ${QT_INSTALL_PREFIX} DIRECTORY)
# Build installers:
set(INSTALLER_DIR ${CMAKE_CURRENT_BINARY_DIR}/installer_build)
set(INSTALLER_REPO http://www.rpdev.net/public/repositories/qtifw)
string(TIMESTAMP INSTALLER_DATE "%Y-%m-%d")
set(INSTALLER_APPLICATIONS_DIR @ApplicationsDir@)
set(INSTALLER_TARGET_DIR @TargetDir@)
set(INSTALLER_CONTROLLER_SCRIPT
${CMAKE_CURRENT_SOURCE_DIR}/templates/installer/config/controller.js
)
set(INSTALLER_ONLINE_REPOSITORY_ROOT http://rpdev.net/public/repositories/qtifw/)
if (UNIX)
include(BuildLinuxInstaller.cmake)
endif(UNIX)
if (WIN32)
include(BuildWindowsInstaller.cmake)
endif(WIN32)
/**
@mainpage
OpenTodoList is a todo and task manager. It is based on an internal, abstract data model that
provide the basic primitives required to describe such an application. These classes are used
to provide a user interface which is targeted at mobile as well as classic devices.
Via a set of plugins, OpenTodoList can access various "services" to store its data. These could
be web services, allowing to store todo lists as well as well as different formats for storing
the data locally. That way, it is completely up to the user on how and where to store his data.
In particular, one can create in one application instance different todo lists using different
backens. That way, e.g. sensitive data could be stored only locally, whereas personal data could
be synched to the usual web services that a user might already use privately.
*/
TARGET = OpenTodoList
TEMPLATE = app
include(../config.pri)
setupApplication()
debug {
qml.source = qml
DEPLOYMENTFOLDERS += qml
}
CONFIG(debug,debug|release):DEFINES += OPENTODOLIST_DEBUG_BUILD
# Install Application Icons on UNIX:
!android|!macx|!ios {
icons.source = icons
icons.target = $${assets_prefix}OpenTodoList
DEPLOYMENTFOLDERS += icons
}
qtcAddDeployment()
# Additional import path used to resolve QML modules in Creator's code model
QML_IMPORT_PATH = $$PWD/qml
# Icons for various platforms
mac:ICON = OpenTodoList.icns
win32:RC_FILE = OpenTodoList.rc
# Qt dependencies
QT += network
# On Android, pull in extra stuff:
android:QT += androidextras
# Handling of status notifiers / system tray icons
qtHaveModule(KNotifications) {
QT += KNotifications
DEFINES += HAS_KNOTIFICATIONS HAS_QT_WIDGETS
} else {
win32|macx|unix {
QT += widgets
DEFINES += HAS_QSYSTEM_TRAY_ICON HAS_QT_WIDGETS
}
}
# Android special handling: Needs to depend also on all used Qt modules
QT += core qml quick sql xml
INCLUDEPATH += \
inc \
src
DEPENDPATH += \
inc/core \
src \
src/core \
src/database \
src/database/queries \
src/database/queries/private \
src/datamodel \
src/models \
src/models/private \
src/systemintegration
HEADERS += \
inc/core/opentodolistinterfaces.h \
src/pluginsloader.h \
src/core/documentformatter.h \
src/core/settings.h \
src/database/backendwrapper.h \
src/datamodel/todo.h \
src/datamodel/todolist.h \
src/models/todolistmodel.h \
src/models/todomodel.h \
src/systemintegration/shortcut.h \
src/systemintegration/applicationinstance.h \
src/systemintegration/commandhandler.h \
src/systemintegration/statusnotifiericon.h \
src/core/coreplugin.h \
src/database/databaseplugin.h \
src/datamodel/datamodelplugin.h \
src/models/modelsplugin.h \
src/systemintegration/systemintegrationplugin.h \
src/database/databaseworker.h \
src/database/database.h \
src/database/storagequery.h \
src/datamodel/account.h \
src/datamodel/task.h \
src/datamodel/backend.h \
src/database/queries/insertbackend.h \
src/database/queries/insertaccount.h \
src/database/queries/readbackend.h \
src/database/queries/readaccount.h \
src/systemintegration/application.h \
src/models/backendmodel.h \
src/models/accountmodel.h \
src/database/queries/inserttodolist.h \
src/database/queries/readtodolist.h \
src/database/queries/inserttodo.h \
src/database/queries/readtodo.h \
src/database/queries/inserttask.h \
src/database/queries/readtask.h \
src/models/taskmodel.h \
src/database/queries/private/insertobject.h \
src/database/queries/private/readobject.h \
src/datamodel/objectinfo.h \
src/database/queries/deleteaccount.h \
src/database/queries/private/deleteobject.h \
src/database/queries/deletetodolist.h \
src/database/queries/deletetodo.h \
src/database/queries/deletetask.h \
src/database/queries/private/saveobject.h \
src/database/queries/saveaccount.h \
src/database/queries/savetodolist.h \
src/database/queries/savetodo.h \
src/database/queries/savetask.h \
src/database/queries/private/disposeobject.h \
src/database/queries/disposeaccount.h \
src/database/queries/disposetodolist.h \
src/database/queries/disposetodo.h \
src/database/queries/disposetask.h \
src/database/databaseconnection.h \
src/models/private/objectmodel.h
SOURCES += \
src/main.cpp \
src/core/documentformatter.cpp \
src/core/settings.cpp \
src/database/backendwrapper.cpp \
src/datamodel/todo.cpp \
src/datamodel/todolist.cpp \
src/models/todolistmodel.cpp \
src/models/todomodel.cpp \
src/systemintegration/shortcut.cpp \
src/systemintegration/applicationinstance.cpp \
src/systemintegration/commandhandler.cpp \
src/systemintegration/statusnotifiericon.cpp \
src/core/coreplugin.cpp \
src/database/databaseplugin.cpp \
src/datamodel/datamodelplugin.cpp \
src/models/modelsplugin.cpp \
src/systemintegration/systemintegrationplugin.cpp \
src/database/databaseworker.cpp \
src/database/database.cpp \
src/database/storagequery.cpp \
src/datamodel/account.cpp \
src/datamodel/task.cpp \
src/datamodel/backend.cpp \
src/database/queries/insertbackend.cpp \
src/database/queries/insertaccount.cpp \
src/database/queries/readbackend.cpp \
src/database/queries/readaccount.cpp \
src/systemintegration/application.cpp \
src/models/backendmodel.cpp \
src/models/accountmodel.cpp \
src/database/queries/inserttodolist.cpp \
src/database/queries/readtodolist.cpp \
src/database/queries/inserttodo.cpp \
src/database/queries/readtodo.cpp \
src/database/queries/inserttask.cpp \
src/database/queries/readtask.cpp \
src/models/taskmodel.cpp \
src/database/queries/deleteaccount.cpp \
src/database/queries/deletetodolist.cpp \
src/database/queries/deletetodo.cpp \
src/database/queries/deletetask.cpp \
src/database/queries/saveaccount.cpp \
src/database/queries/savetodolist.cpp \
src/database/queries/savetodo.cpp \
src/database/queries/savetask.cpp \
src/database/queries/disposeaccount.cpp \
src/database/queries/disposetodolist.cpp \
src/database/queries/disposetodo.cpp \
src/database/queries/disposetask.cpp \
src/database/databaseconnection.cpp \
src/models/private/objectmodel.cpp
RESOURCES += OpenTodoList.qrc
# To let QML files appear in project browser in Qt Creator
OTHER_FILES += \
../bin/mk-qrc.pl \
OpenTodoList.dox \
doc/databaseproto.dox \
doc/doxygen-opentodolist.css \
../Doxyfile
# Android specific:
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
ANDROID_PACKAGE = net.rpdev.opentodolist
ANDROID_APP_NAME = Open Todo List
OTHER_FILES += \
android/AndroidManifest.xml \
../bin/linux-deploy-qt.pl \
../bin/mk-installer.pl \
../templates/installer/config/config.xml \
../templates/installer/packages/net.rpdev.OpenTodoList/meta/package.xml \
../templates/installer/packages/net.rpdev.OpenTodoList/meta/script.js
DISTFILES += \
android/src/net/rpdev/OpenTodoList/Activity.java \
android/src/net/rpdev/OpenTodoList/Service.java \
qml/OpenTodoList/style/qmldir \
qml/OpenTodoList/components/qmldir \
qml/OpenTodoList/pages/qmldir \
qml/OpenTodoList/app/qmldir \
qml/OpenTodoList/app/qmldir \
android/gradle/wrapper/gradle-wrapper.jar \
android/res/values/libs.xml \
android/build.gradle \
android/gradle/wrapper/gradle-wrapper.properties \
android/gradlew \
android/gradlew.bat
<?xml version="1.0"?>
<RCC>
<qresource prefix="/qml/net/rpdev/OpenTodoList/Components">
<file alias="ContextMenu.qml">qml/net/rpdev/OpenTodoList/Components/ContextMenu.qml</file>
<file alias="HeaderBar.qml">qml/net/rpdev/OpenTodoList/Components/HeaderBar.qml</file>
<file alias="ContextMenuEntry.qml">qml/net/rpdev/OpenTodoList/Components/ContextMenuEntry.qml</file>
<file alias="LineEditDialog.qml">qml/net/rpdev/OpenTodoList/Components/LineEditDialog.qml</file>
<file alias="SymbolLink.qml">qml/net/rpdev/OpenTodoList/Components/SymbolLink.qml</file>
<file alias="DateSelectionDialog.qml">qml/net/rpdev/OpenTodoList/Components/DateSelectionDialog.qml</file>
<file alias="SymbolLabel.qml">qml/net/rpdev/OpenTodoList/Components/SymbolLabel.qml</file>
<file alias="Shadow.qml">qml/net/rpdev/OpenTodoList/Components/Shadow.qml</file>
<file alias="Tab.qml">qml/net/rpdev/OpenTodoList/Components/Tab.qml</file>
<file alias="Label.qml">qml/net/rpdev/OpenTodoList/Components/Label.qml</file>
<file alias="Symbol.qml">qml/net/rpdev/OpenTodoList/Components/Symbol.qml</file>
<file alias="ContextMenuModel.qml">qml/net/rpdev/OpenTodoList/Components/ContextMenuModel.qml</file>
<file alias="qmldir">qml/net/rpdev/OpenTodoList/Components/qmldir</file>
<file alias="TabView.qml">qml/net/rpdev/OpenTodoList/Components/TabView.qml</file>
<file alias="Button.qml">qml/net/rpdev/OpenTodoList/Components/Button.qml</file>
<file alias="SymbolButton.qml">qml/net/rpdev/OpenTodoList/Components/SymbolButton.qml</file>
<file alias="TextEditor.qml">qml/net/rpdev/OpenTodoList/Components/TextEditor.qml</file>
<file alias="RichTextEditor.qml">qml/net/rpdev/OpenTodoList/Components/RichTextEditor.qml</file>
<file alias="SingleLineTextInput.qml">qml/net/rpdev/OpenTodoList/Components/SingleLineTextInput.qml</file>
<file alias="ScrollBar.qml">qml/net/rpdev/OpenTodoList/Components/ScrollBar.qml</file>
<file alias="Overlay.qml">qml/net/rpdev/OpenTodoList/Components/Overlay.qml</file>
<file alias="PageStack.qml">qml/net/rpdev/OpenTodoList/Components/PageStack.qml</file>
<file alias="AutoHide.qml">qml/net/rpdev/OpenTodoList/Components/AutoHide.qml</file>
<file alias="RichTextEditDialog.qml">qml/net/rpdev/OpenTodoList/Components/RichTextEditDialog.qml</file>
<file alias="Page.qml">qml/net/rpdev/OpenTodoList/Components/Page.qml</file>
<file alias="Calendar.qml">qml/net/rpdev/OpenTodoList/Components/Calendar.qml</file>
<file alias="Slider.qml">qml/net/rpdev/OpenTodoList/Components/Slider.qml</file>
<file alias="HeaderBarItem.qml">qml/net/rpdev/OpenTodoList/Components/HeaderBarItem.qml</file>
</qresource>
<qresource prefix="/qml/net/rpdev/OpenTodoList/Views">
<file alias="TodoViewHeader.qml">qml/net/rpdev/OpenTodoList/Views/TodoViewHeader.qml</file>
<file alias="TodoView.qml">qml/net/rpdev/OpenTodoList/Views/TodoView.qml</file>
<file alias="TodoViewDelegate.qml">qml/net/rpdev/OpenTodoList/Views/TodoViewDelegate.qml</file>
<file alias="qmldir">qml/net/rpdev/OpenTodoList/Views/qmldir</file>
<file alias="TodoListViewDelegate.qml">qml/net/rpdev/OpenTodoList/Views/TodoListViewDelegate.qml</file>
<file alias="ViewSettings.qml">qml/net/rpdev/OpenTodoList/Views/ViewSettings.qml</file>
<file alias="AnimatedListView.qml">qml/net/rpdev/OpenTodoList/Views/AnimatedListView.qml</file>
<file alias="TodoListView.qml">qml/net/rpdev/OpenTodoList/Views/TodoListView.qml</file>
<file alias="TaskView.qml">qml/net/rpdev/OpenTodoList/Views/TaskView.qml</file>
<file alias="TaskViewDelegate.qml">qml/net/rpdev/OpenTodoList/Views/TaskViewDelegate.qml</file>
</qresource>
<qresource prefix="/qml/net/rpdev/OpenTodoList/Theme">
<file alias="qmldir">qml/net/rpdev/OpenTodoList/Theme/qmldir</file>
</qresource>
<qresource prefix="/qml/OpenTodoList">
<file alias="TodoPage.qml">qml/OpenTodoList/TodoPage.qml</file>
<file alias="OpenTodoList.png">qml/OpenTodoList/OpenTodoList.png</file>
<file alias="TodoListsPage.qml">qml/OpenTodoList/TodoListsPage.qml</file>
<file alias="main.qml">qml/OpenTodoList/main.qml</file>
</qresource>
<qresource prefix="/qml/OpenTodoList/app">
<file alias="qmldir">qml/OpenTodoList/app/qmldir</file>
<file alias="GlobalSettings.qml">qml/OpenTodoList/app/GlobalSettings.qml</file>
</qresource>
<qresource prefix="/qml/OpenTodoList/style">
<file alias="fontawesome-webfont.license.txt">qml/OpenTodoList/style/fontawesome-webfont.license.txt</file>
<file alias="H2.qml">qml/OpenTodoList/style/H2.qml</file>
<file alias="Symbols.qml">qml/OpenTodoList/style/Symbols.qml</file>
<file alias="Measures.qml">qml/OpenTodoList/style/Measures.qml</file>
<file alias="qmldir">qml/OpenTodoList/style/qmldir</file>
<file alias="H5.qml">qml/OpenTodoList/style/H5.qml</file>
<file alias="H6.qml">qml/OpenTodoList/style/H6.qml</file>
<file alias="H3.qml">qml/OpenTodoList/style/H3.qml</file>
<file alias="H4.qml">qml/OpenTodoList/style/H4.qml</file>
<file alias="Colors.qml">qml/OpenTodoList/style/Colors.qml</file>
<file alias="H1.qml">qml/OpenTodoList/style/H1.qml</file>
<file alias="P.qml">qml/OpenTodoList/style/P.qml</file>
<file alias="fontawesome-webfont.ttf">qml/OpenTodoList/style/fontawesome-webfont.ttf</file>
<file alias="Fonts.qml">qml/OpenTodoList/style/Fonts.qml</file>
</qresource>
<qresource prefix="/qml/OpenTodoList/utils">
<file alias="DateUtils.js">qml/OpenTodoList/utils/DateUtils.js</file>
</qresource>
<qresource prefix="/qml/OpenTodoList/components">
<file alias="OverlayedSymbol.qml">qml/OpenTodoList/components/OverlayedSymbol.qml</file>
<file alias="NavigationBar.qml">qml/OpenTodoList/components/NavigationBar.qml</file>
<file alias="Symbol.qml">qml/OpenTodoList/components/Symbol.qml</file>
<file alias="qmldir">qml/OpenTodoList/components/qmldir</file>
<file alias="ItemBox.qml">qml/OpenTodoList/components/ItemBox.qml</file>
<file alias="Page.qml">qml/OpenTodoList/components/Page.qml</file>
<file alias="TextAreaToolBar.qml">qml/OpenTodoList/components/TextAreaToolBar.qml</file>
</qresource>
<qresource prefix="/qml/OpenTodoList/views">
<file alias="qmldir.txt">qml/OpenTodoList/views/qmldir.txt</file>
<file alias="TasksView.qml">qml/OpenTodoList/views/TasksView.qml</file>