diff --git a/.ci/windows/nheko.nsi b/.ci/windows/nheko.nsi
deleted file mode 100644
index cc674249..00000000
--- a/.ci/windows/nheko.nsi
+++ /dev/null
@@ -1,225 +0,0 @@
-############################################################################################
-# NSIS Installation Script created by NSIS Quick Setup Script Generator v1.09.18
-# Entirely Edited with NullSoft Scriptable Installation System
-# by Vlasis K. Barkas aka Red Wine red_wine@freemail.gr Sep 2006
-############################################################################################
-
-!define APP_NAME "nheko"
-!define COMP_NAME "mujx"
-!define WEB_SITE "https://github.com/mujx/nheko"
-!define VERSION "0.1.0.0"
-!define COPYRIGHT "mujx � 2017"
-!define DESCRIPTION "Desktop client for the Matrix protocol"
-!define LICENSE_TXT "LICENSE.txt"
-!define INSTALLER_NAME "..\..\nheko_setup.exe"
-!define INPUT_DIR "..\..\NhekoRelease"
-!define MAIN_APP_EXE "nheko.exe"
-!define INSTALL_TYPE "SetShellVarContext all"
-!define REG_ROOT "HKLM"
-!define REG_APP_PATH "Software\Microsoft\Windows\CurrentVersion\App Paths\${MAIN_APP_EXE}"
-!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_NAME}"
-
-!define REG_START_MENU "Start Menu Folder"
-
-var SM_Folder
-
-######################################################################
-
-VIProductVersion "${VERSION}"
-VIAddVersionKey "ProductName" "${APP_NAME}"
-VIAddVersionKey "CompanyName" "${COMP_NAME}"
-VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
-VIAddVersionKey "FileDescription" "${DESCRIPTION}"
-VIAddVersionKey "FileVersion" "${VERSION}"
-
-######################################################################
-
-SetCompressor ZLIB
-Name "${APP_NAME}"
-Caption "${APP_NAME}"
-OutFile "${INSTALLER_NAME}"
-BrandingText "${APP_NAME}"
-XPStyle on
-InstallDirRegKey "${REG_ROOT}" "${REG_APP_PATH}" ""
-InstallDir "$PROGRAMFILES\nheko"
-
-######################################################################
-
-!include "MUI.nsh"
-
-!define MUI_ICON "..\..\resources\nheko.ico"
-!define MUI_HEADERIMAGE
-!define MUI_HEADERIMAGE_BITMAP "..\..\resources\nheko.bmp"
-!define MUI_HEADERIMAGE_RIGHT
-
-!define MUI_ABORTWARNING
-!define MUI_UNABORTWARNING
-
-!insertmacro MUI_PAGE_WELCOME
-
-!ifdef LICENSE_TXT
-!insertmacro MUI_PAGE_LICENSE "${LICENSE_TXT}"
-!endif
-
-!insertmacro MUI_PAGE_DIRECTORY
-
-!ifdef REG_START_MENU
-!define MUI_STARTMENUPAGE_DEFAULTFOLDER "nheko"
-!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${REG_ROOT}"
-!define MUI_STARTMENUPAGE_REGISTRY_KEY "${UNINSTALL_PATH}"
-!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${REG_START_MENU}"
-!insertmacro MUI_PAGE_STARTMENU Application $SM_Folder
-!endif
-
-!insertmacro MUI_PAGE_INSTFILES
-
-!define MUI_FINISHPAGE_RUN "$INSTDIR\${MAIN_APP_EXE}"
-!insertmacro MUI_PAGE_FINISH
-
-!insertmacro MUI_UNPAGE_CONFIRM
-
-!insertmacro MUI_UNPAGE_INSTFILES
-
-!insertmacro MUI_UNPAGE_FINISH
-
-!insertmacro MUI_LANGUAGE "English"
-
-######################################################################
-
-Section -MainProgram
-${INSTALL_TYPE}
-SetOverwrite ifnewer
-SetOutPath "$INSTDIR"
-File /r "${INPUT_DIR}\*"
-SectionEnd
-
-######################################################################
-
-Section -Icons_Reg
-SetOutPath "$INSTDIR"
-WriteUninstaller "$INSTDIR\uninstall.exe"
-
-!ifdef REG_START_MENU
-!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
-CreateDirectory "$SMPROGRAMS\$SM_Folder"
-CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
-CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
-CreateShortCut "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
-
-!ifdef WEB_SITE
-WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}"
-CreateShortCut "$SMPROGRAMS\$SM_Folder\${APP_NAME} Website.lnk" "$INSTDIR\${APP_NAME} website.url"
-!endif
-!insertmacro MUI_STARTMENU_WRITE_END
-!endif
-
-!ifndef REG_START_MENU
-CreateDirectory "$SMPROGRAMS\nheko"
-CreateShortCut "$SMPROGRAMS\nheko\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
-CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${MAIN_APP_EXE}"
-CreateShortCut "$SMPROGRAMS\nheko\Uninstall ${APP_NAME}.lnk" "$INSTDIR\uninstall.exe"
-
-!ifdef WEB_SITE
-WriteIniStr "$INSTDIR\${APP_NAME} website.url" "InternetShortcut" "URL" "${WEB_SITE}"
-CreateShortCut "$SMPROGRAMS\nheko\${APP_NAME} Website.lnk" "$INSTDIR\${APP_NAME} website.url"
-!endif
-!endif
-
-WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE}"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE}"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}"
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "Publisher" "${COMP_NAME}"
-
-!ifdef WEB_SITE
-WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "URLInfoAbout" "${WEB_SITE}"
-!endif
-SectionEnd
-
-######################################################################
-
-Section Uninstall
-${INSTALL_TYPE}
-
-########
-
-!macro BadPathsCheck
-StrCpy $R0 $INSTDIR "" -2
-StrCmp $R0 ":\" bad
-StrCpy $R0 $INSTDIR "" -14
-StrCmp $R0 "\Program Files" bad
-StrCpy $R0 $INSTDIR "" -8
-StrCmp $R0 "\Windows" bad
-StrCpy $R0 $INSTDIR "" -6
-StrCmp $R0 "\WinNT" bad
-StrCpy $R0 $INSTDIR "" -9
-StrCmp $R0 "\system32" bad
-StrCpy $R0 $INSTDIR "" -8
-StrCmp $R0 "\Desktop" bad
-StrCpy $R0 $INSTDIR "" -23
-StrCmp $R0 "\Documents and Settings" bad
-StrCpy $R0 $INSTDIR "" -13
-StrCmp $R0 "\My Documents" bad done
-bad:
- MessageBox MB_OK|MB_ICONSTOP "Install path invalid!"
- Abort
-done:
-!macroend
-
-StrCmp $INSTDIR "" 0 +2
- StrCpy $INSTDIR $EXEDIR
-
-# Check that the uninstall isn't dangerous.
-!insertmacro BadPathsCheck
-
-# Does path end with "\nheko"?
-!define CHECK_PATH "\nheko"
-StrLen $R1 "${CHECK_PATH}"
-StrCpy $R0 $INSTDIR "" -$R1
-StrCmp $R0 "${CHECK_PATH}" +3
- MessageBox MB_YESNO|MB_ICONQUESTION "Unrecognised uninstall path. Continue anyway?" IDYES +2
- Abort
-
-IfFileExists "$INSTDIR\*.*" 0 +2
-IfFileExists "$INSTDIR\nheko.exe" +3
- MessageBox MB_OK|MB_ICONSTOP "Install path invalid!"
- Abort
-
-########
-
-RMDir /r /REBOOTOK $INSTDIR
-
-Delete "$INSTDIR\uninstall.exe"
-!ifdef WEB_SITE
-Delete "$INSTDIR\${APP_NAME} website.url"
-!endif
-
-!ifdef REG_START_MENU
-!insertmacro MUI_STARTMENU_GETFOLDER "Application" $SM_Folder
-Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME}.lnk"
-Delete "$SMPROGRAMS\$SM_Folder\Uninstall ${APP_NAME}.lnk"
-!ifdef WEB_SITE
-Delete "$SMPROGRAMS\$SM_Folder\${APP_NAME} Website.lnk"
-!endif
-Delete "$DESKTOP\${APP_NAME}.lnk"
-
-RmDir "$SMPROGRAMS\$SM_Folder"
-!endif
-
-!ifndef REG_START_MENU
-Delete "$SMPROGRAMS\nheko\${APP_NAME}.lnk"
-Delete "$SMPROGRAMS\nheko\Uninstall ${APP_NAME}.lnk"
-!ifdef WEB_SITE
-Delete "$SMPROGRAMS\nheko\${APP_NAME} Website.lnk"
-!endif
-Delete "$DESKTOP\${APP_NAME}.lnk"
-
-RmDir "$SMPROGRAMS\nheko"
-!endif
-
-DeleteRegKey ${REG_ROOT} "${REG_APP_PATH}"
-DeleteRegKey ${REG_ROOT} "${UNINSTALL_PATH}"
-SectionEnd
-
-######################################################################
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a8c1e347..a5a0e28a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,10 +1,25 @@
cmake_minimum_required(VERSION 3.1)
-project(nheko C CXX)
-
option(BUILD_TESTS "Build all tests" OFF)
option(APPVEYOR_BUILD "Build on appveyor" OFF)
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
+
+# Include Qt basic functions
+include(QtCommon)
+
+project(nheko LANGUAGES C CXX VERSION 0.1.0)
+
+# Set PROJECT_VERSION_PATCH and PROJECT_VERSION_TWEAK to 0 if not present, needed by add_project_meta
+fix_project_version()
+
+# Set additional project information
+set(COMPANY "Nheko")
+set(COPYRIGHT "Copyright (c) 2017 Mujx")
+set(IDENTIFIER "com.mujx.nheko")
+
+add_project_meta(META_FILES_TO_INCLUDE)
+
#
# LMDB
#
@@ -296,14 +311,6 @@ qt5_add_resources(QRC resources/res.qrc)
add_library(matrix_events ${MATRIX_EVENTS} src/Deserializable.cc)
target_link_libraries(matrix_events Qt5::Core)
-#
-# Bundle icons.
-#
-if (APPLE)
- set(ICON_FILE resources/nheko.icns)
- set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
-endif()
-
if (BUILD_TESTS)
enable_testing()
@@ -330,15 +337,15 @@ else()
set (NHEKO_LIBS matrix_events Qt5::Widgets Qt5::Network Qt5::Concurrent ${LMDB_LIBRARY})
endif()
-set (NHEKO_DEPS ${OS_BUNDLE} ${SRC_FILES} ${UI_HEADERS} ${MOC_HEADERS} ${QRC} ${LANG_QRC} ${QM_SRC})
+set (NHEKO_DEPS ${SRC_FILES} ${UI_HEADERS} ${MOC_HEADERS} ${QRC} ${LANG_QRC} ${QM_SRC} ${META_FILES_TO_INCLUDE})
if(APPLE)
- add_executable (nheko ${NHEKO_DEPS})
+ add_executable (nheko ${OS_BUNDLE} ${NHEKO_DEPS})
target_link_libraries (nheko ${NHEKO_LIBS} Qt5::MacExtras)
elseif(WIN32)
- add_executable (nheko ${ICON_FILE} ${NHEKO_DEPS})
+ add_executable (nheko ${OS_BUNDLE} ${ICON_FILE} ${NHEKO_DEPS})
target_link_libraries (nheko ${NTDLIB} ${NHEKO_LIBS} Qt5::WinMain)
else()
- add_executable (nheko ${NHEKO_DEPS})
+ add_executable (nheko ${OS_BUNDLE} ${NHEKO_DEPS})
target_link_libraries (nheko ${NHEKO_LIBS})
endif()
diff --git a/appveyor.yml b/appveyor.yml
index 3bd1dcff..31a1df7f 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -15,14 +15,34 @@ build:
install:
- set QT_DIR=C:\Qt\5.8\msvc2015_64
- set PATH=%PATH%;%QT_DIR%\bin;C:\MinGW\bin
- - copy LICENSE .ci\windows\LICENSE.txt
- - cinst nsis --version 3.0 -y -installArgs /D=C:\nsis
build_script:
- - cmake -G "Visual Studio 14 2015 Win64" -H. -Bbuild -DAPPVEYOR_BUILD=ON
+ # VERSION format: branch-master/branch-1.2
+ # INSTVERSION format: x.y.z
+ # WINVERSION format: 9999.0.0.123/1.2.0.234
+ - if "%APPVEYOR_REPO_TAG%"=="false" set INSTVERSION=0.1.0
+ - if "%APPVEYOR_REPO_TAG%"=="false" set VERSION=%INSTVERSION%
+ - if "%APPVEYOR_REPO_TAG%"=="false" if "%APPVEYOR_REPO_BRANCH%"=="master" set INSTVERSION=9999.0
+ - if "%APPVEYOR_REPO_TAG%"=="false" set WINVERSION=%INSTVERSION%.0.%APPVEYOR_BUILD_NUMBER%
+ # VERSION format: v1.2.3/v1.3.4
+ # INSTVERSION format: 1.2.3/1.3.4
+ # WINVERSION format: 1.2.3.123/1.3.4.234
+ - if "%APPVEYOR_REPO_TAG%"=="true" set VERSION=%APPVEYOR_REPO_TAG_NAME%
+ - if "%APPVEYOR_REPO_TAG%"=="true" set INSTVERSION=%VERSION:~1%
+ - if "%APPVEYOR_REPO_TAG%"=="true" set WINVERSION=%VERSION:~1%.%APPVEYOR_BUILD_NUMBER%
+ - set DIST=nheko-%VERSION%-win64
+ - set DATE=%date:~10,4%-%date:~4,2%-%date:~7,2%
+ - echo %VERSION%
+ - echo %INSTVERSION%
+ - echo %DIST%
+ - echo %DATE%
+ - cmake -G "Visual Studio 14 2015 Win64" -H. -Bbuild -DAPPVEYOR_BUILD=ON -DCMAKE_BUILD_TYPE=Release
- cmake --build build --config Release
after_build:
+ # Variables
+ - set BUILD=%APPVEYOR_BUILD_FOLDER%
+ - echo %BUILD%
- mkdir NhekoRelease
- copy build\Release\nheko.exe NhekoRelease\nheko.exe
- windeployqt --qmldir C:\Qt\5.8\msvc2015_64\qml\ --release NhekoRelease\nheko.exe
@@ -31,7 +51,46 @@ after_build:
- copy C:\OpenSSL-Win64\lib\libeay32.lib .\NhekoRelease\libeay32.lib
- copy C:\OpenSSL-Win64\bin\ssleay32.dll .\NhekoRelease\ssleay32.dll
- 7z a nheko_win_64.zip .\NhekoRelease\*
- - C:\nsis\makensis .ci\windows\nheko.nsi
+ - ls -lh build\Release\
+ - ls -lh NhekoRelease\
+ - mkdir %DIST%
+ - xcopy .\NhekoRelease\*.* %DIST%\*.* /s /e /c /y
+ #
+ # Create the Qt Installer Framework version
+ #
+ - mkdir installer
+ - mkdir installer\config
+ - mkdir installer\packages
+ - mkdir installer\packages\com.mujx.nheko
+ - mkdir installer\packages\com.mujx.nheko\data
+ - mkdir installer\packages\com.mujx.nheko\meta
+ - mkdir installer\packages\com.mujx.nheko.cleanup\meta
+ # Copy installer data
+ - copy %BUILD%\resources\nheko.ico installer\config
+ - copy %BUILD%\resources\nheko.png installer\config
+ - copy %BUILD%\LICENSE installer\packages\com.mujx.nheko\meta\license.txt
+ - copy %BUILD%\LICENSE installer\packages\com.mujx.nheko.cleanup\meta\license.txt
+ - copy %BUILD%\deploy\installer\config.xml installer\config
+ - copy %BUILD%\deploy\installer\controlscript.qs installer\config
+ - copy %BUILD%\deploy\installer\uninstall.qs installer\packages\com.mujx.nheko\data
+ - copy %BUILD%\deploy\installer\gui\package.xml installer\packages\com.mujx.nheko\meta
+ - copy %BUILD%\deploy\installer\gui\installscript.qs installer\packages\com.mujx.nheko\meta
+ - copy %BUILD%\deploy\installer\cleanup\package.xml installer\packages\com.mujx.nheko.cleanup\meta
+ - copy %BUILD%\deploy\installer\cleanup\installscript.qs installer\packages\com.mujx.nheko.cleanup\meta
+ # Amend version and date
+ - sed -i "s/__VERSION__/%INSTVERSION%/" installer\config\config.xml
+ - sed -i "s/__VERSION__/%INSTVERSION%/" installer\packages\com.mujx.nheko\meta\package.xml
+ - sed -i "s/__VERSION__/%INSTVERSION%/" installer\packages\com.mujx.nheko.cleanup\meta\package.xml
+ - sed -i "s/__DATE__/%DATE%/" installer\packages\com.mujx.nheko\meta\package.xml
+ - sed -i "s/__DATE__/%DATE%/" installer\packages\com.mujx.nheko.cleanup\meta\package.xml
+ # Copy nheko data
+ - xcopy %DIST%\*.* installer\packages\com.mujx.nheko\data\*.* /s /e /c /y
+ - move NhekoRelease\nheko.exe installer\packages\com.mujx.nheko\data
+ - mkdir tools
+ - curl -L -O https://download.qt.io/official_releases/qt-installer-framework/3.0.1/QtInstallerFramework-win-x86.exe
+ - 7z x QtInstallerFramework-win-x86.exe -otools -aoa
+ - set PATH=%BUILD%\tools\bin;%PATH%
+ - binarycreator.exe -f -c installer\config\config.xml -p installer\packages %DIST%-installer.exe
deploy:
description: "Development builds"
@@ -47,4 +106,4 @@ deploy:
artifacts:
- path: nheko_win_64.zip
- path: NhekoRelease\nheko.exe
- - path: nheko_setup.exe
+ - path: .\%DIST%-installer.exe
diff --git a/cmake/MacOSXBundleInfo.plist.in b/cmake/MacOSXBundleInfo.plist.in
new file mode 100644
index 00000000..7391a6fa
--- /dev/null
+++ b/cmake/MacOSXBundleInfo.plist.in
@@ -0,0 +1,36 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${MACOSX_BUNDLE_EXECUTABLE_NAME}
+ CFBundleGetInfoString
+ ${MACOSX_BUNDLE_INFO_STRING}
+ CFBundleIconFile
+ ${MACOSX_BUNDLE_ICON_FILE}
+ CFBundleIdentifier
+ ${MACOSX_BUNDLE_GUI_IDENTIFIER}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleLongVersionString
+ ${MACOSX_BUNDLE_LONG_VERSION_STRING}
+ CFBundleName
+ ${MACOSX_BUNDLE_BUNDLE_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ ${MACOSX_BUNDLE_SHORT_VERSION_STRING}
+ CFBundleVersion
+ ${MACOSX_BUNDLE_BUNDLE_VERSION}
+ CSResourcesFileMapped
+
+ LSRequiresCarbon
+
+ NSHumanReadableCopyright
+ ${MACOSX_BUNDLE_COPYRIGHT}
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/cmake/QtCommon.cmake b/cmake/QtCommon.cmake
new file mode 100644
index 00000000..2145019e
--- /dev/null
+++ b/cmake/QtCommon.cmake
@@ -0,0 +1,76 @@
+macro(fix_project_version)
+if (NOT PROJECT_VERSION_PATCH)
+ set(PROJECT_VERSION_PATCH 0)
+endif()
+
+if (NOT PROJECT_VERSION_TWEAK)
+ set(PROJECT_VERSION_TWEAK 0)
+endif()
+endmacro()
+
+macro(add_project_meta FILES_TO_INCLUDE)
+if (NOT RESOURCE_FOLDER)
+ set(RESOURCE_FOLDER resources)
+endif()
+
+if (NOT ICON_NAME)
+ set(ICON_NAME nheko)
+endif()
+
+if (APPLE)
+ set(ICON_FILE ${RESOURCE_FOLDER}/${ICON_NAME}.icns)
+elseif (WIN32)
+ set(ICON_FILE ${RESOURCE_FOLDER}/${ICON_NAME}.ico)
+endif()
+
+if (WIN32)
+ configure_file("${PROJECT_SOURCE_DIR}/cmake/windows_metafile.rc.in"
+ "windows_metafile.rc"
+ )
+ set(RES_FILES "windows_metafile.rc")
+ set(CMAKE_RC_COMPILER_INIT windres)
+ ENABLE_LANGUAGE(RC)
+ SET(CMAKE_RC_COMPILE_OBJECT " -O coff -i