From 3af402c7e122029cd26f8a97b7ea480472066b9c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ole-Andr=C3=A9=20Rodlie?=
Date: Sun, 2 Dec 2018 21:07:53 +0100
Subject: [PATCH 01/11] mac/build stuff
---
.travis.yml | 24 +++--
CMakeLists.txt | 4 +
cyan.pro | 61 ++++++++++++-
res/travis.sh | 239 +++++++++++++++++++++++++++++--------------------
tests.pro | 12 ++-
5 files changed, 225 insertions(+), 115 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index aefcb6fa..82936e14 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,19 +1,15 @@
-language: cpp
-compiler: g++
-dist: xenial
sudo: required
+language: cpp
+compiler:
+ - g++
+ - clang
+matrix:
+ include:
+ - os: linux
+ dist: xenial
+ - os: osx
+ osx_image: xcode8
-before_install:
- - sudo apt remove --purge imagemagick imagemagick-common
- - sudo apt-get update
-
-install:
- - sudo apt-get install cmake tree qtbase5-dev libpng-dev libjpeg-dev liblcms2-dev libtiff-dev libbz2-dev zlib1g-dev liblzma-dev
- - sudo apt-get install scons autoconf automake autopoint bash bison bzip2 flex g++ g++-multilib gettext git gperf intltool
- - sudo apt-get install libc6-dev-i386 libgdk-pixbuf2.0-dev libltdl-dev libssl-dev libtool-bin libxml-parser-perl make
- - sudo apt-get install openssl p7zip-full patch perl pkg-config python ruby sed unzip wget xz-utils wine
- - sudo apt-get install libfreetype6-dev libfontconfig1-dev
-
script:
- sh res/travis.sh
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9d284fcf..e2c9677f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -57,6 +57,10 @@ set(COMPANY "Cyan")
set(COPYRIGHT "Copyright Ole-Andre Rodlie, INRIA. All rights reserved.")
set(IDENTIFIER "net.fxarena.cyan")
+if(CMAKE_BUILD_TYPE MATCHES RELEASE)
+ add_definitions(-DQT_NO_DEBUG_OUTPUT)
+endif()
+
if(APPLE)
set(ICON_FILE ${RESOURCE_FOLDER}/${PROJECT_NAME}.icns)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.7")
diff --git a/cyan.pro b/cyan.pro
index 355538d3..30fa4e37 100644
--- a/cyan.pro
+++ b/cyan.pro
@@ -59,8 +59,18 @@ TEMPLATE = app
CONFIG += c++11
QT_CONFIG -= no-pkg-config
CONFIG += link_pkgconfig
-PKGCONFIG += lcms2 ImageMagick++
-LIBS += `pkg-config --libs --static ImageMagick++`
+PKGCONFIG += lcms2
+MAGICK_CONFIG = ImageMagick++
+!isEmpty(MAGICK): MAGICK_CONFIG = $${MAGICK}
+PKG_CONFIG_BIN = pkg-config
+!isEmpty(CUSTOM_PKG_CONFIG): PKG_CONFIG_BIN = $${CUSTOM_PKG_CONFIG}
+
+PKGCONFIG += $${MAGICK_CONFIG}
+LIBS += `$${PKG_CONFIG_BIN} --libs --static $${MAGICK_CONFIG}`
+
+isEmpty(PREFIX): PREFIX = /usr/local
+isEmpty(DOCDIR): DOCDIR = $$PREFIX/share/doc
+isEmpty(MANDIR): MANDIR = $$PREFIX/share/man
DEFINES += CYAN_VERSION=\"\\\"$${VERSION}$${VERSION_TYPE}\\\"\"
DEFINES += CYAN_GIT=\"\\\"$${GIT}\\\"\"
@@ -69,10 +79,55 @@ QMAKE_TARGET_PRODUCT = "$${TARGET}"
QMAKE_TARGET_DESCRIPTION = "$${TARGET}"
QMAKE_TARGET_COPYRIGHT = "Copyright Ole-Andre Rodlie, INRIA"
+CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
+
+unix:!mac {
+ target.path = $${PREFIX}/bin
+ target_desktop.path = $${PREFIX}/share/applications
+ target_desktop.files = res/cyan.desktop
+ target_docs.path = $${DOCDIR}/$${TARGET}-$${VERSION}
+ target_docs.files = LICENSE
+ INSTALLS += target target_desktop target_docs
+
+ icon16.files = res/hicolor/16x16/apps/cyan.png
+ icon16.path = $${PREFIX}/share/icons/hicolor/16x16/apps
+ icon20.files = res/hicolor/20x20/apps/cyan.png
+ icon20.path = $${PREFIX}/share/icons/hicolor/20x20/apps
+ icon22.files = res/hicolor/22x22/apps/cyan.png
+ icon22.path = $${PREFIX}/share/icons/hicolor/22x22/apps
+ icon24.files = res/hicolor/24x24/apps/cyan.png
+ icon24.path = $${PREFIX}/share/icons/hicolor/24x24/apps
+ icon32.files = res/hicolor/32x32/apps/cyan.png
+ icon32.path = $${PREFIX}/share/icons/hicolor/32x32/apps
+ icon48.files = res/hicolor/48x48/apps/cyan.png
+ icon48.path = $${PREFIX}/share/icons/hicolor/48x48/apps
+ icon64.files = res/hicolor/64x64/apps/cyan.png
+ icon64.path = $${PREFIX}/share/icons/hicolor/64x64/apps
+ icon72.files = res/hicolor/72x72/apps/cyan.png
+ icon72.path = $${PREFIX}/share/icons/hicolor/72x72/apps
+ icon96.files = res/hicolor/96x96/apps/cyan.png
+ icon96.path = $${PREFIX}/share/icons/hicolor/96x96/apps
+ icon128.files = res/hicolor/128x128/apps/cyan.png
+ icon128.path = $${PREFIX}/share/icons/hicolor/128x128/apps
+ icon160.files = res/hicolor/160x160/apps/cyan.png
+ icon160.path = $${PREFIX}/share/icons/hicolor/160x160/apps
+ icon192.files = res/hicolor/192x192/apps/cyan.png
+ icon192.path = $${PREFIX}/share/icons/hicolor/192x192/apps
+ icon256.files = res/hicolor/256x256/apps/cyan.png
+ icon256.path = $${PREFIX}/share/icons/hicolor/256x256/apps
+ icon512.files = res/hicolor/512x512/apps/cyan.png
+ icon512.path = $${PREFIX}/share/icons/hicolor/512x512/apps
+
+ INSTALLS += icon16 icon20 icon22 \
+ icon24 icon32 icon48 \
+ icon64 icon72 icon96 \
+ icon128 icon160 icon192 \
+ icon256 icon512
+}
mac {
ICON = res/Cyan.icns
QMAKE_INFO_PLIST = res/Info.plist
- QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
+ QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10
QMAKE_CXXFLAGS += -fopenmp
QMAKE_LFLAGS += -fopenmp
}
diff --git a/res/travis.sh b/res/travis.sh
index 29395e81..c8ea9b61 100755
--- a/res/travis.sh
+++ b/res/travis.sh
@@ -7,9 +7,10 @@ if [ "${SETUP}" = 1 ]; then
sudo chmod 777 /opt
fi
+OS=`uname -s`
CWD=`pwd`
MXE=/opt/mxe
-SDK=/opt/`uname -s`
+SDK=/opt/${OS}
DEPLOY=/opt/deploy
COMMIT="${TRAVIS_COMMIT}"
@@ -18,71 +19,102 @@ if [ "${TRAVIS_TAG}" != "" ]; then
fi
if [ "${SETUP}" = 1 ]; then
-
-echo "Extracting win64 sdk ..."
-mkdir -p $MXE
-wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-win64.tar.xz/download && mv download download.tar.xz
-tar xf download.tar.xz -C $MXE/
-rm -f download.tar.xz
-
-echo "Extracting xenial64 sdk ..."
-wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-xenial64.tar.xz/download && mv download download.tar.xz
-sudo tar xf download.tar.xz -C /
-rm -f download.tar.xz
-
-echo "Extracting linux64 sdk ..."
-wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-linux64.tar.xz/download && mv download download.tar.xz
-tar xf download.tar.xz -C /opt
-rm -f download.tar.xz
-
-echo "Extracting sdk legal ..."
-wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-legal.tar.xz/download && mv download download.tar.xz
-tar xf download.tar.xz -C /opt
-rm -f download.tar.xz
-
-echo "Building CI ..."
-mkdir -p $CWD/ci
-cd $CWD/ci
-cmake -DCMAKE_INSTALL_PREFIX=/usr ..
-make
-make test
-make DESTDIR=`pwd`/pkg install
-tree pkg
-
+ if [ "$OS" = "Linux" ]; then
+ echo "Setup ubuntu ..."
+ sudo apt remove --purge imagemagick imagemagick-common
+ sudo apt-get update
+ sudo apt-get install cmake tree qtbase5-dev libpng-dev libjpeg-dev liblcms2-dev libtiff-dev libbz2-dev zlib1g-dev liblzma-dev
+ sudo apt-get install scons autoconf automake autopoint bash bison bzip2 flex g++ g++-multilib gettext git gperf intltool
+ sudo apt-get install libc6-dev-i386 libgdk-pixbuf2.0-dev libltdl-dev libssl-dev libtool-bin libxml-parser-perl make
+ sudo apt-get install openssl p7zip-full patch perl pkg-config python ruby sed unzip wget xz-utils wine
+ sudo apt-get install libfreetype6-dev libfontconfig1-dev
+
+ echo "Extracting win64 sdk ..."
+ mkdir -p $MXE
+ wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-win64.tar.xz/download && mv download download.tar.xz
+ tar xf download.tar.xz -C $MXE/
+ rm -f download.tar.xz
+ echo "Extracting xenial64 sdk ..."
+ wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-xenial64.tar.xz/download && mv download download.tar.xz
+ sudo tar xf download.tar.xz -C /
+ rm -f download.tar.xz
+ echo "Extracting linux64 sdk ..."
+ wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-linux64.tar.xz/download && mv download download.tar.xz
+ tar xf download.tar.xz -C /opt
+ rm -f download.tar.xz
+ echo "Extracting sdk legal ..."
+ wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-legal.tar.xz/download && mv download download.tar.xz
+ tar xf download.tar.xz -C /opt
+ rm -f download.tar.xz
+ elif [ "$OS" = "Darwin" ]; then
+ curl -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11clang6.tar.xz/download --output download.tar.xz
+ tar xf download.tar.xz -C /opt
+ rm -f download.tar.xz
+ curl -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11.tar.xz/download --output download.tar.xz
+ tar xf download.tar.xz -C /opt
+ rm -f download.tar.xz
+ fi
fi
-# I can't get cmake+qt+static to work, so fallback to qmake ...
-cd ${CWD}
-export PATH="${SDK}/bin:/usr/bin:/bin"
-export PKG_CONFIG_PATH="${SDK}/lib/pkgconfig"
-echo "===> Building for Linux64 ..."
-mkdir -p ${CWD}/linux64 && cd ${CWD}/linux64
-qmake GIT=${COMMIT} CONFIG+=release PREFIX=/usr ../cyan.pro
-make
-strip -s build/Cyan
-mv build/Cyan .
-mkdir -p ${CWD}/linux64-test && cd ${CWD}/linux64-test
-qmake ../tests.pro
-make
-
-echo "===> Building win64 ..."
-mkdir -p ${CWD}/win64
-cd ${CWD}/win64
-TARGET=x86_64-w64-mingw32.static
-MINGW="${MXE}/usr/${TARGET}"
-CMAKE="${TARGET}-cmake"
-QT=${MINGW}/qt5
-QMAKE=${QT}/bin/qmake
-STRIP="${MXE}/usr/bin/${TARGET}-strip"
-PATH="${MXE}/usr/bin:/usr/bin:/bin"
-PKG_CONFIG_PATH="${MINGW}/lib/pkgconfig"
-${QMAKE} GIT=${COMMIT} CONFIG+=release ../cyan.pro
-make
-${STRIP} -s build/Cyan.exe
-mv build/Cyan.exe .
-mkdir -p ${CWD}/win64-test && cd ${CWD}/win64-test
-${QMAKE} ../tests.pro
-make
+if [ "$OS" = "Linux" ]; then
+ echo "Building CI ..."
+ mkdir -p $CWD/ci
+ cd $CWD/ci
+ cmake -DCMAKE_INSTALL_PREFIX=/usr ..
+ make
+ make test
+ make DESTDIR=`pwd`/pkg install
+ tree pkg
+
+ cd ${CWD}
+ export PATH="${SDK}/bin:/usr/bin:/bin"
+ export PKG_CONFIG_PATH="${SDK}/lib/pkgconfig"
+ echo "===> Building for Linux64 ..."
+ mkdir -p ${CWD}/linux64 && cd ${CWD}/linux64
+ qmake GIT=${COMMIT} CONFIG+=release PREFIX=/usr ../cyan.pro
+ make
+ strip -s build/Cyan
+ mv build/Cyan .
+ mkdir -p ${CWD}/linux64-test && cd ${CWD}/linux64-test
+ qmake ../tests.pro
+ make
+
+ echo "===> Building win64 ..."
+ mkdir -p ${CWD}/win64
+ cd ${CWD}/win64
+ TARGET=x86_64-w64-mingw32.static
+ MINGW="${MXE}/usr/${TARGET}"
+ CMAKE="${TARGET}-cmake"
+ QT=${MINGW}/qt5
+ QMAKE=${QT}/bin/qmake
+ STRIP="${MXE}/usr/bin/${TARGET}-strip"
+ PATH="${MXE}/usr/bin:/usr/bin:/bin"
+ PKG_CONFIG_PATH="${MINGW}/lib/pkgconfig"
+ ${QMAKE} GIT=${COMMIT} CONFIG+=release ../cyan.pro
+ make
+ ${STRIP} -s build/Cyan.exe
+ mv build/Cyan.exe .
+ mkdir -p ${CWD}/win64-test && cd ${CWD}/win64-test
+ ${QMAKE} ../tests.pro
+ make
+elif [ "$OS" = "Darwin" ]; then
+ echo "===> Building mac64 ..."
+ PKG_CONFIG=$SDK/bin/pkg-config
+ PKG_CONFIG_PATH="$SDK/lib/pkgconfig:$PKG_CONFIG_PATH"
+ PATH=$SDK/bin:/usr/bin:/bin
+ mkdir -p ${CWD}/mac64 && cd ${CWD}/mac64
+ qmake GIT=$COMMIT CONFIG+=release ../cyan.pro
+ make
+ MP=/opt/local/lib/libomp/libomp.dylib
+ cp $MP build/Cyan.app/Contents/MacOS/
+ install_name_tool -change $MP @executable_path/libomp.dylib build/Cyan.app/Contents/MacOS/Cyan
+ install_name_tool -id @executable_path/libomp.dylib build/Cyan.app/Contents/MacOS/libomp.dylib
+ strip -u -r build/Cyan.app/Contents/MacOS/*
+ mv build/Cyan.app .
+ mkdir -p ${CWD}/mac64-test && cd ${CWD}/mac64-test
+ qmake ../tests.pro
+ make
+fi
echo "===> Creating archives ..."
mkdir -p ${CWD}/deploy $DEPLOY && cd ${CWD}/deploy
@@ -92,40 +124,57 @@ if [ "${TRAVIS_TAG}" != "" ]; then
TAG="${TRAVIS_TAG}"
fi
-mkdir -p Cyan-${TAG}-Windows/third-party Cyan-${TAG}-Linux/third-party
-cp ${CWD}/LICENSE Cyan-${TAG}-Windows/
-cp ${CWD}/LICENSE Cyan-${TAG}-Linux/
-
-cp -a /opt/legal/Windows/* Cyan-${TAG}-Windows/third-party/
-cp -a /opt/legal/Linux/* Cyan-${TAG}-Linux/third-party/
-
-cp ${CWD}/win64/Cyan.exe Cyan-${TAG}-Windows/
-cp ${CWD}/linux64/Cyan Cyan-${TAG}-Linux/
-
-cp ${CWD}/res/cyan.desktop Cyan-${TAG}-Linux/
-cp -a ${CWD}/res/hicolor/128x128/apps/cyan.png Cyan-${TAG}-Linux/
-
-7za -mx=9 a -r Cyan-${TAG}-Windows.7z Cyan-${TAG}-Windows
-WIN_CHECKSUM=`sha256sum Cyan-${TAG}-Windows.7z | awk '{print $1}'`
-cp Cyan-${TAG}-Windows.7z $DEPLOY/
-echo "===> Windows checksum ${WIN_CHECKSUM}"
-
-tar cvvf Cyan-${TAG}-Linux.tar Cyan-${TAG}-Linux
-xz -9 Cyan-${TAG}-Linux.tar
-mv Cyan-${TAG}-Linux.tar.xz Cyan-${TAG}-Linux.txz
-cp Cyan-${TAG}-Linux.txz $DEPLOY/
-LIN_CHECKSUM=`sha256sum Cyan-${TAG}-Linux.txz | awk '{print $1}'`
-echo "===> Linux checksum ${LIN_CHECKSUM}"
+if [ "$OS" = "Linux" ]; then
+ mkdir -p Cyan-${TAG}-Windows/third-party Cyan-${TAG}-Linux/third-party
+ cp ${CWD}/LICENSE Cyan-${TAG}-Windows/
+ cp ${CWD}/LICENSE Cyan-${TAG}-Linux/
+ cp -a /opt/legal/Windows/* Cyan-${TAG}-Windows/third-party/
+ cp -a /opt/legal/Linux/* Cyan-${TAG}-Linux/third-party/
+ cp ${CWD}/win64/Cyan.exe Cyan-${TAG}-Windows/
+ cp ${CWD}/linux64/Cyan Cyan-${TAG}-Linux/
+ cp ${CWD}/res/cyan.desktop Cyan-${TAG}-Linux/
+ cp -a ${CWD}/res/hicolor/128x128/apps/cyan.png Cyan-${TAG}-Linux/
+
+ 7za -mx=9 a -r Cyan-${TAG}-Windows.7z Cyan-${TAG}-Windows
+ WIN_CHECKSUM=`sha256sum Cyan-${TAG}-Windows.7z | awk '{print $1}'`
+ cp Cyan-${TAG}-Windows.7z $DEPLOY/
+ echo "===> Windows checksum ${WIN_CHECKSUM}"
+
+ tar cvvf Cyan-${TAG}-Linux.tar Cyan-${TAG}-Linux
+ xz -9 Cyan-${TAG}-Linux.tar
+ mv Cyan-${TAG}-Linux.tar.xz Cyan-${TAG}-Linux.txz
+ cp Cyan-${TAG}-Linux.txz $DEPLOY/
+ LIN_CHECKSUM=`sha256sum Cyan-${TAG}-Linux.txz | awk '{print $1}'`
+ echo "===> Linux checksum ${LIN_CHECKSUM}"
+elif [ "$OS" = "Darwin" ]; then
+ mkdir -p Cyan-${TAG}-Mac/third-party
+ cp ${CWD}/LICENSE Cyan-${TAG}-Mac/
+ cp -a /opt/legal/Mac/* Cyan-${TAG}-Mac/third-party/
+ cp -a ${CWD}/mac64/Cyan.app Cyan-${TAG}-Mac/
+ hdiutil create -volname "Cyan ${TAG}" -srcfolder Cyan-${TAG}-Mac -ov -format UDBZ Cyan-${TAG}-Mac.dmg
+ cp Cyan-${TAG}-Mac.dmg ${DEPLOY}/
+ MAC_CHECKSUM=`shasum -a 256 Cyan-${TAG}-Mac.dmg | awk '{print $1}'`
+ echo "===> Mac checksum ${MAC_CHECKSUM}"
+fi
if [ "${TRAVIS_PULL_REQUEST}" != "false" ] && [ "${TRAVIS_PULL_REQUEST}" != "" ]; then
-echo "===> Uploading archives to transfer.sh ..."
- UPLOAD_WIN=`curl --upload-file ./Cyan-${TAG}-Windows.7z https://transfer.sh/Cyan-${TAG}-Windows.7z`
- UPLOAD_LIN=`curl --upload-file ./Cyan-${TAG}-Linux.txz https://transfer.sh/Cyan-${TAG}-Linux.txz`
- echo "===> Windows snapshot ${UPLOAD_WIN}"
- echo "===> Linux snapshot ${UPLOAD_LIN}"
- if [ "${UPLOAD_WIN}" != "" ] && [ "${UPLOAD_LIN}" != "" ]; then
- COMMENT="**CI for this pull request:** Windows build is available at ${UPLOAD_WIN} with SHA256 checksum ${WIN_CHECKSUM}. Linux build is available at ${UPLOAD_LIN} with SHA256 checksum ${LIN_CHECKSUM}."
+ echo "===> Uploading archives to transfer.sh ..."
+ if [ "$OS" = "Linux" ]; then
+ UPLOAD_WIN=`curl --upload-file ./Cyan-${TAG}-Windows.7z https://transfer.sh/Cyan-${TAG}-Windows.7z`
+ UPLOAD_LIN=`curl --upload-file ./Cyan-${TAG}-Linux.txz https://transfer.sh/Cyan-${TAG}-Linux.txz`
+ echo "===> Windows snapshot ${UPLOAD_WIN}"
+ echo "===> Linux snapshot ${UPLOAD_LIN}"
+ if [ "${UPLOAD_WIN}" != "" ] && [ "${UPLOAD_LIN}" != "" ]; then
+ COMMENT="**CI for this pull request:** Windows build is available at ${UPLOAD_WIN} with SHA256 checksum ${WIN_CHECKSUM}. Linux build is available at ${UPLOAD_LIN} with SHA256 checksum ${LIN_CHECKSUM}."
+ curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST -d "{\"body\": \"${COMMENT}\"}" "https://api.github.com/repos/${TRAVIS_REPO_SLUG}/issues/${TRAVIS_PULL_REQUEST}/comments"
+ fi
+ elif [ "$OS" = "Darwin" ]; then
+ UPLOAD_MAC=`curl --upload-file ./Cyan-${TAG}-Mac.dmg https://transfer.sh/Cyan-${TAG}-Mac.dmg`
+ echo "===> Mac snapshot ${UPLOAD_MAC}"
+ if [ "${UPLOAD_MAC}" != ""]; then
+ COMMENT="**CI for this pull request:** Mac build is available at ${UPLOAD_MAC} with SHA256 checksum ${MAC_CHECKSUM}."
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST -d "{\"body\": \"${COMMENT}\"}" "https://api.github.com/repos/${TRAVIS_REPO_SLUG}/issues/${TRAVIS_PULL_REQUEST}/comments"
+ fi
fi
fi
diff --git a/tests.pro b/tests.pro
index 0d67544a..3d8ed1d4 100644
--- a/tests.pro
+++ b/tests.pro
@@ -48,11 +48,17 @@ win32-g++:QMAKE_POST_LINK = "wine64 build/$${TARGET}.exe"
CONFIG += c++11
QT_CONFIG -= no-pkg-config
CONFIG += link_pkgconfig
-PKGCONFIG += lcms2 ImageMagick++
-LIBS += `pkg-config --libs --static ImageMagick++`
+PKGCONFIG += lcms2
+MAGICK_CONFIG = ImageMagick++
+!isEmpty(MAGICK): MAGICK_CONFIG = $${MAGICK}
+PKG_CONFIG_BIN = pkg-config
+!isEmpty(CUSTOM_PKG_CONFIG): PKG_CONFIG_BIN = $${CUSTOM_PKG_CONFIG}
+
+PKGCONFIG += $${MAGICK_CONFIG}
+LIBS += `$${PKG_CONFIG_BIN} --libs --static $${MAGICK_CONFIG}`
mac {
- QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
+ QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10
QMAKE_CXXFLAGS += -fopenmp
QMAKE_LFLAGS += -fopenmp
}
From 587b1ebdf856e14fa14e85421660ae1541716105 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ole-Andr=C3=A9=20Rodlie?=
Date: Sun, 2 Dec 2018 21:15:37 +0100
Subject: [PATCH 02/11] travis fix
---
.travis.yml | 4 +---
res/travis.sh | 11 +++++------
2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index 82936e14..0cda8740 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,6 @@
sudo: required
language: cpp
-compiler:
- - g++
- - clang
+compiler: g++
matrix:
include:
- os: linux
diff --git a/res/travis.sh b/res/travis.sh
index c8ea9b61..2e9c719e 100755
--- a/res/travis.sh
+++ b/res/travis.sh
@@ -19,16 +19,19 @@ if [ "${TRAVIS_TAG}" != "" ]; then
fi
if [ "${SETUP}" = 1 ]; then
+ echo "Extracting sdk legal ..."
+ wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-legal.tar.xz/download && mv download download.tar.xz
+ tar xf download.tar.xz -C /opt
+ rm -f download.tar.xz
if [ "$OS" = "Linux" ]; then
echo "Setup ubuntu ..."
sudo apt remove --purge imagemagick imagemagick-common
sudo apt-get update
sudo apt-get install cmake tree qtbase5-dev libpng-dev libjpeg-dev liblcms2-dev libtiff-dev libbz2-dev zlib1g-dev liblzma-dev
sudo apt-get install scons autoconf automake autopoint bash bison bzip2 flex g++ g++-multilib gettext git gperf intltool
- sudo apt-get install libc6-dev-i386 libgdk-pixbuf2.0-dev libltdl-dev libssl-dev libtool-bin libxml-parser-perl make
+ sudo apt-get install libc6-dev-i386 libgdk-pixbuf2.0-dev libltdl-dev libssl-dev libtool libxml-parser-perl make
sudo apt-get install openssl p7zip-full patch perl pkg-config python ruby sed unzip wget xz-utils wine
sudo apt-get install libfreetype6-dev libfontconfig1-dev
-
echo "Extracting win64 sdk ..."
mkdir -p $MXE
wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-win64.tar.xz/download && mv download download.tar.xz
@@ -42,10 +45,6 @@ if [ "${SETUP}" = 1 ]; then
wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-linux64.tar.xz/download && mv download download.tar.xz
tar xf download.tar.xz -C /opt
rm -f download.tar.xz
- echo "Extracting sdk legal ..."
- wget https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-legal.tar.xz/download && mv download download.tar.xz
- tar xf download.tar.xz -C /opt
- rm -f download.tar.xz
elif [ "$OS" = "Darwin" ]; then
curl -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11clang6.tar.xz/download --output download.tar.xz
tar xf download.tar.xz -C /opt
From a4ed5855c4b5a792013d3989393e0900544397ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ole-Andr=C3=A9=20Rodlie?=
Date: Sun, 2 Dec 2018 21:31:05 +0100
Subject: [PATCH 03/11] minor
---
res/travis.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/res/travis.sh b/res/travis.sh
index 2e9c719e..a8c2c5c1 100755
--- a/res/travis.sh
+++ b/res/travis.sh
@@ -46,10 +46,10 @@ if [ "${SETUP}" = 1 ]; then
tar xf download.tar.xz -C /opt
rm -f download.tar.xz
elif [ "$OS" = "Darwin" ]; then
- curl -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11clang6.tar.xz/download --output download.tar.xz
+ curl --no-check-certificate -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11clang6.tar.xz/download --output download.tar.xz
tar xf download.tar.xz -C /opt
rm -f download.tar.xz
- curl -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11.tar.xz/download --output download.tar.xz
+ curl --no-check-certificate -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11.tar.xz/download --output download.tar.xz
tar xf download.tar.xz -C /opt
rm -f download.tar.xz
fi
@@ -172,7 +172,7 @@ if [ "${TRAVIS_PULL_REQUEST}" != "false" ] && [ "${TRAVIS_PULL_REQUEST}" != "" ]
echo "===> Mac snapshot ${UPLOAD_MAC}"
if [ "${UPLOAD_MAC}" != ""]; then
COMMENT="**CI for this pull request:** Mac build is available at ${UPLOAD_MAC} with SHA256 checksum ${MAC_CHECKSUM}."
- curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST -d "{\"body\": \"${COMMENT}\"}" "https://api.github.com/repos/${TRAVIS_REPO_SLUG}/issues/${TRAVIS_PULL_REQUEST}/comments"
+ curl --no-check-certificate -H "Authorization: token ${GITHUB_TOKEN}" -X POST -d "{\"body\": \"${COMMENT}\"}" "https://api.github.com/repos/${TRAVIS_REPO_SLUG}/issues/${TRAVIS_PULL_REQUEST}/comments"
fi
fi
fi
From 6194e752dd8aec7526d78ccf434ccedf7adbdfd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ole-Andr=C3=A9=20Rodlie?=
Date: Sun, 2 Dec 2018 21:33:30 +0100
Subject: [PATCH 04/11] Revert "minor"
This reverts commit a4ed5855c4b5a792013d3989393e0900544397ef.
---
res/travis.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/res/travis.sh b/res/travis.sh
index a8c2c5c1..2e9c719e 100755
--- a/res/travis.sh
+++ b/res/travis.sh
@@ -46,10 +46,10 @@ if [ "${SETUP}" = 1 ]; then
tar xf download.tar.xz -C /opt
rm -f download.tar.xz
elif [ "$OS" = "Darwin" ]; then
- curl --no-check-certificate -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11clang6.tar.xz/download --output download.tar.xz
+ curl -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11clang6.tar.xz/download --output download.tar.xz
tar xf download.tar.xz -C /opt
rm -f download.tar.xz
- curl --no-check-certificate -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11.tar.xz/download --output download.tar.xz
+ curl -L https://sourceforge.net/projects/prepress/files/sdk/cyan-1.2-sdk-mac11.tar.xz/download --output download.tar.xz
tar xf download.tar.xz -C /opt
rm -f download.tar.xz
fi
@@ -172,7 +172,7 @@ if [ "${TRAVIS_PULL_REQUEST}" != "false" ] && [ "${TRAVIS_PULL_REQUEST}" != "" ]
echo "===> Mac snapshot ${UPLOAD_MAC}"
if [ "${UPLOAD_MAC}" != ""]; then
COMMENT="**CI for this pull request:** Mac build is available at ${UPLOAD_MAC} with SHA256 checksum ${MAC_CHECKSUM}."
- curl --no-check-certificate -H "Authorization: token ${GITHUB_TOKEN}" -X POST -d "{\"body\": \"${COMMENT}\"}" "https://api.github.com/repos/${TRAVIS_REPO_SLUG}/issues/${TRAVIS_PULL_REQUEST}/comments"
+ curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST -d "{\"body\": \"${COMMENT}\"}" "https://api.github.com/repos/${TRAVIS_REPO_SLUG}/issues/${TRAVIS_PULL_REQUEST}/comments"
fi
fi
fi
From 584ddcba703cd896716e5f446ca8f4fcb7e057f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ole-Andr=C3=A9=20Rodlie?=
Date: Sun, 2 Dec 2018 21:47:11 +0100
Subject: [PATCH 05/11] fix
---
res/travis.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/res/travis.sh b/res/travis.sh
index 2e9c719e..852b688f 100755
--- a/res/travis.sh
+++ b/res/travis.sh
@@ -170,7 +170,7 @@ if [ "${TRAVIS_PULL_REQUEST}" != "false" ] && [ "${TRAVIS_PULL_REQUEST}" != "" ]
elif [ "$OS" = "Darwin" ]; then
UPLOAD_MAC=`curl --upload-file ./Cyan-${TAG}-Mac.dmg https://transfer.sh/Cyan-${TAG}-Mac.dmg`
echo "===> Mac snapshot ${UPLOAD_MAC}"
- if [ "${UPLOAD_MAC}" != ""]; then
+ if [ "${UPLOAD_MAC}" != "" ]; then
COMMENT="**CI for this pull request:** Mac build is available at ${UPLOAD_MAC} with SHA256 checksum ${MAC_CHECKSUM}."
curl -H "Authorization: token ${GITHUB_TOKEN}" -X POST -d "{\"body\": \"${COMMENT}\"}" "https://api.github.com/repos/${TRAVIS_REPO_SLUG}/issues/${TRAVIS_PULL_REQUEST}/comments"
fi
From 502b7f8e145003ce16253ab9c1312b0572113080 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ole-Andr=C3=A9=20Rodlie?=
Date: Mon, 3 Dec 2018 00:43:51 +0100
Subject: [PATCH 06/11] minor
---
docs/ChangeLog | 2 +-
docs/README.md | 11 +++--
docs/cyan.html | 2 +-
docs/images/cyan-promo-01.png | Bin 282451 -> 283999 bytes
res/travis.sh | 78 +++++++++++++++++++++++-----------
src/cyan.cpp | 4 +-
6 files changed, 62 insertions(+), 35 deletions(-)
diff --git a/docs/ChangeLog b/docs/ChangeLog
index c35f4e39..a1941467 100644
--- a/docs/ChangeLog
+++ b/docs/ChangeLog
@@ -1,4 +1,4 @@
-## 1.2.0 - TBA
+## 1.2.0 - 20181203
* Major "behind-the-scene" changes
* Improved performance
diff --git a/docs/README.md b/docs/README.md
index 0c6f9590..53b6a516 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -17,14 +17,13 @@ Cyan is an open source cross-platform image viewer and converter, designed for [
* Change image bit depth
* GIMP integration (import/export)
-# Requirements
+# System requirements
- * 4GB RAM (+)
- * Microsoft Windows 7 x64 (+)
- * Apple Mac OS X Lion 10.7 (+)
- * Linux/FreeBSD (source-only)
+ * Microsoft Windows 7/8/10 x64
+ * Apple Mac OS X 10.10-10.14
+ * GNU/Linux (glibc 2.23+/libgcc 5.4+)
- Recommended requirements and additional files:
+## Recommended
* A bitmap editor
* [GIMP](https://www.gimp.org)
diff --git a/docs/cyan.html b/docs/cyan.html
index 72b3099f..abb5f864 100644
--- a/docs/cyan.html
+++ b/docs/cyan.html
@@ -105,7 +105,7 @@ Open Source
_3RDPARTY_
-The source repository is hosted on Github and the binaries are hosted on Sourceforge. Travis CI is used to build and deploy the binaries.
+Hosted on Github and Sourceforge. Travis CI is used to build and deploy the binaries.
diff --git a/docs/images/cyan-promo-01.png b/docs/images/cyan-promo-01.png
index 612d35c76fa2d699175c6725d2e95efbbd8c3f9e..878f2848240a641f45878a37bb370d5b6264c38c 100644
GIT binary patch
literal 283999
zcmV)~KzhH4P)00B)11^@s6_7j~q00006VoOIv00000
z008+zyMF)x010qNS#tmY3ljhU3ljkVnw%H_000McNliru;tT>8B@`3kgvWFU8GbZ8()Nlj2>E@cM*03ZNKL_t(|+LXObuWebD
z9W>@#AA6s3?!E6jq9QA*^20^hCS4#=C@o6}(V*iN?jX^`Dq4uYV5x*;=+Jb7KY(P>
zKu9HMA>lU2k`Y;wZER;{R%K*GWW0DE_nve1-fOKnY0SCSKCdjGh)^ivy*TflbM{_)
zevCQBn1sLNU;n|6fAn{V^goP5zaN0V!b~p?A;idx6c~{KCI%@G8JGftn2`e`FoQuj
z<_rK3RYU@+Gz21~5I_K82v7h-WIv05IYbZxP3&{10$>6Yfk9{@2m~B+h62bb;2+ZSp&nZF`m~sRY&_qzH
z0A$y!3PDxTh)_#GWCpaNh(c8$3N#f!6vuhO93wtl7Q0RW7{FyKU{Z(zs)DA3z<@MC
z42;?uR29sGNQ6U5IA**5nIo78rB+Olkwe7Owt@U-GZEHOaGED*6EG7Xia7@yQyQNk
z2L?ew#E8t8Qa~cR2TN&SCS(rCDf)W_q?A!bFvoye3l1qGg@CPYIIkO?mJJ~UWG1}5
zTyaPN$B+;s;o)!qQ$&%5V~R*IgJZ(|-91Vzh#aBig6nd{H;+#M2UHcP285JQMe+W8
z1u>!43IMo2Ot@Y*OjAS(gefqlJlpvb1ymrd;<{~!F=0v(qKZt6YuRvrJV8Z}@`Sal
zNNi`QiQwVx9^1Mi#)!xPhrS4Dhd#Rq5kviI`=ry
0bR`Op1H}3^SB=YyLPaR18df59E5d^mQ1+qNT
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