diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b05bf82ae84b6582f7d9a33f6a991f66dbca6876..c348d4ccf4fa39e8c5b729f7883c9df68413f3bd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -91,6 +91,16 @@ android: - "kaidan_build_apk-debug.apk" expire_in: 1 week +mac-osxcross: + stage: deploy + image: kaidan/mac-osxcross + script: + - utils/build-mac-osxcross.sh + - tar -cf kaidan.tar -C build/bin/ kaidan.app + artifacts: + paths: + - "kaidan.tar" + expire_in: 1 week variables: GIT_SUBMODULE_STRATEGY: recursive diff --git a/3rdparty/qxmpp b/3rdparty/qxmpp index 754cc5a70479a54659dbc93ccb5bf28e1da77ef4..e6eb0b78d0cb17fccd5ddb60966ba2a0a2d2b593 160000 --- a/3rdparty/qxmpp +++ b/3rdparty/qxmpp @@ -1 +1 @@ -Subproject commit 754cc5a70479a54659dbc93ccb5bf28e1da77ef4 +Subproject commit e6eb0b78d0cb17fccd5ddb60966ba2a0a2d2b593 diff --git a/CMakeLists.txt b/CMakeLists.txt index 0713227353e5f43819c13304652dd34e5a21856d..6e097620c3e6ccb7994b05c49f3bed1b16c0e356 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.3) find_package(ECM 5.40.0 REQUIRED NO_MODULE) set(CMAKE_CXX_STANDARD 14) set(QT_MIN_VERSION "5.8.0") @@ -314,7 +314,7 @@ endif() if(UBUNTU_TOUCH) set(KAIDAN_COMPILE_DEFINITIONS UBUNTU_TOUCH=True) -elseif(NOT ANDROID AND NOT IOS AND NOT WIN32) +elseif(NOT ANDROID AND NOT IOS AND NOT WIN32 AND NOT APPLE) set(KAIDAN_COMPILE_DEFINITIONS NOTIFICATIONS_LIBNOTIFY=True) endif() diff --git a/utils/build-mac-osxcross.sh b/utils/build-mac-osxcross.sh new file mode 100755 index 0000000000000000000000000000000000000000..edf14419d398d4193e4b05524d72f910d053f151 --- /dev/null +++ b/utils/build-mac-osxcross.sh @@ -0,0 +1,146 @@ +#!/bin/bash + +# NOTE: To use this script, you need to set $QT_MACOS to your Qt for MacOS installation + +if [ -z "$QT_MACOS" ]; then + echo "QT_MACOS has to be set" + exit 1 +fi + +# Build type is one of: +# Debug, Release, RelWithDebInfo and MinSizeRel +BUILD_TYPE="${BUILD_TYPE:-Debug}" + +KAIDAN_SOURCES=$(dirname "$(readlink -f "${0}")")/.. +KIRIGAMI_BUILD=/tmp/kirigami-mac-build +QXMPP_BUILD=/tmp/qxmpp-mac-build +OSXCROSS_TARGET="x86_64-apple-darwin15" + +echo "-- Starting $BUILD_TYPE build of Kaidan --" + +echo "*****************************************" +echo "Fetching dependencies if required" +echo "*****************************************" + +if [ ! -f "$KAIDAN_SOURCES/3rdparty/kirigami/.git" ] || [ ! -f "$KAIDAN_SOURCES/3rdparty/breeze-icons/.git" ]; then + echo "Cloning Kirigami and Breeze icons" + git submodule update --init +fi + +if [ ! -e "$KAIDAN_SOURCES/3rdparty/qxmpp/" ]; then + echo "Cloning QXmpp" + git clone https://github.com/qxmpp-project/qxmpp.git 3rdparty/qxmpp +fi + +cdnew() { + if [ -d "$1" ]; then + rm -rf "$1" + fi + mkdir $1 + cd $1 +} + +export QT_SELECT=qt5 + +if [ ! -f "$QXMPP_BUILD/lib/pkgconfig/qxmpp.pc" ]; then +echo "*****************************************" +echo "Building QXmpp" +echo "*****************************************" +{ + cdnew $KAIDAN_SOURCES/3rdparty/qxmpp/build + ${OSXCROSS_TARGET}-cmake .. \ + -DCMAKE_PREFIX_PATH=$QT_MACOS \ + -DBUILD_EXAMPLES=OFF \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=$QXMPP_BUILD \ + -DBUILD_TESTS=OFF + make -j$(nproc) + make install + rm -rf $KAIDAN_SOURCES/3rdparty/qxmpp/build +} +fi + +if [ ! -f "$KIRIGAMI_BUILD/lib/libKF5Kirigami2.dylib" ]; then +echo "*****************************************" +echo "Building Kirigami" +echo "*****************************************" +{ + cdnew $KAIDAN_SOURCES/3rdparty/kirigami/build + ${OSXCROSS_TARGET}-cmake .. \ + -DECM_DIR=/usr/local/share/ECM/cmake \ + -DCMAKE_PREFIX_PATH=$QT_MACOS \ + -DECM_ADDITIONAL_FIND_ROOT_PATH=$QT_MACOS \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_INSTALL_PREFIX=$KIRIGAMI_BUILD + + make -j$(nproc) + make install + rm -rf $KAIDAN_SOURCES/3rdparty/kirigami/build +} +fi + +if [ ! -f "$KAIDAN_SOURCES/misc/macos/kaidan.icns" ]; then +echo "*****************************************" +echo "Rendering logos" +echo "*****************************************" +if [ ! $(command -v inkscape) ] || [ ! $(command -v optipng) ]; then +echo "Icons can'be generated" +exit 1 +fi + +rendersvg() { + inkscape -z -e $2 -w $3 -h $3 -d $4 $1 + optipng -quiet $2 +} + +macoslogo() { + rendersvg $KAIDAN_SOURCES/misc/kaidan-small-margin.svg "$KAIDAN_SOURCES/misc/macos/kaidan.iconset/icon_$1x$1.png" $1 72 +} + +mkdir -p $KAIDAN_SOURCES/misc/macos/kaidan.iconset + +macoslogo 16 +macoslogo 32 +macoslogo 128 +macoslogo 256 +macoslogo 512 + +png2icns $KAIDAN_SOURCES/misc/macos/kaidan.icns $KAIDAN_SOURCES/misc/macos/kaidan.iconset/* +fi + +export PKG_CONFIG_PATH=$QXMPP_BUILD/lib/pkgconfig +export CXXFLAGS=-I$QXMPP_BUILD/include/qxmpp/ + +if [ ! -d "$KAIDAN_SOURCES/build/bin/kaidan.app" ]; then +echo "*****************************************" +echo "Building Kaidan" +echo "*****************************************" +{ + cdnew $KAIDAN_SOURCES/build + + ${OSXCROSS_TARGET}-cmake .. \ + -DECM_DIR=/usr/local/share/ECM/cmake \ + -DCMAKE_PREFIX_PATH=$QT_MACOS\;$KIRIGAMI_BUILD\;$QXMPP_BUILD \ + -DKF5Kirigami2_DIR=$KIRIGAMI_BUILD/lib/cmake/KF5Kirigami2 -DI18N=1 \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ + -DQUICK_COMPILER=OFF + + make -j$(nproc) +} +fi + +echo "*****************************************" +echo "Macdeployqt" +echo "*****************************************" +{ + cd $KAIDAN_SOURCES/build + export LD_LIBRARY_PATH=$QT_MACOS/lib/:$KIRIGAMI_BUILD/lib:$LD_LIBRARY_PATH + export PATH=$QT_MACOS/bin/:$PATH + + # FIXME: Use `macdeployqt -qmlimport` when QTBUG-70977 is fixed + if [ ! -d "$QT_MACOS/qml/org/kde/kirigami.2" ]; then + mkdir -p $QT_MACOS/qml/org/kde + ln -s $KIRIGAMI_BUILD/lib/qml/org/kde/kirigami.2 $QT_MACOS/qml/org/kde/kirigami.2 + fi + + macdeployqt bin/kaidan.app -qmlimport=$QT_MACOS/qml -qmlimport=$KIRIGAMI_BUILD/lib/qml/ -qmldir=$KAIDAN_SOURCES/src/qml/ -libpath=$KIRIGAMI_BUILD/lib/ -libpath=$QXMPP_BUILD/lib -libpath=$QT_MACOS/lib/ -appstore-compliant -verbose=3 + ${OSXCROSS_TARGET}-install_name_tool -add_rpath @executable_path/../Frameworks bin/kaidan.app/Contents/MacOS/kaidan +} diff --git a/utils/build-mac.sh b/utils/build-mac.sh index 7a4937b68c4d2fe1889c9348ce5610c0b74f769a..c943afb6202c41956137f9b58e782ab297220318 100755 --- a/utils/build-mac.sh +++ b/utils/build-mac.sh @@ -26,7 +26,7 @@ if [ ! -f "$KAIDAN_SOURCES/3rdparty/kirigami/.git" ] || [ ! -f "$KAIDAN_SOURCES/ git submodule update --init fi -if [ ! -d "$KAIDAN_SOURCES/3rdparty/qxmpp/.git" ]; then +if [ ! -e "$KAIDAN_SOURCES/3rdparty/qxmpp/.git" ]; then echo "Cloning QXmpp" git clone https://github.com/qxmpp-project/qxmpp.git 3rdparty/qxmpp fi