cmake_policy(SET CMP0048 NEW)
project (fotokopierer VERSION 0.1 LANGUAGES CXX)
cmake_minimum_required(VERSION 3.0)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
if (POLICY CMP0071)
cmake_policy(SET CMP0071 NEW)
endif()
include(FindPkgConfig)
pkg_search_module(SAILFISH sailfishapp)
if (SAILFISH_FOUND)
set(TARGET harbour-fotokopierer)
else()
set(TARGET fotokopierer)
endif()
set(SOURCES
src/AsyncImage.cxx
src/BaseImage.cxx
src/ColorizeImage.cxx
src/Convert.cxx
src/CutImage.cxx
src/PlainImage.cxx
src/RotImage.cxx
src/TransformWorker.cxx
src/Util.cxx
src/ZoomImage.cxx
src/init.cxx)
# We need to set this directory here ... luckily we know exactly where it goes.
link_directories(${CMAKE_CURRENT_BINARY_DIR}/podofo/lib)
add_executable(${TARGET} ${SOURCES})
if (SAILFISH_FOUND)
set(OpenCV_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/opencv-3.4.0)
set(PODOFO_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/podofo-0.9.6)
include(ExternalProject)
# configure OpenCV
set(OpenCV_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/opencv)
ExternalProject_Add(opencv
SOURCE_DIR ${OpenCV_SOURCE_DIR}
# URL "https://github.com/opencv/opencv/archive/3.4.0.zip"
PREFIX ${OpenCV_PREFIX}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DBUILD_DOCS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_FAT_JAVA_LIB=OFF
-DBUILD_ITT=OFF
-DBUILD_JAVA=OFF
-DBUILD_PACKAGE=OFF
-DBUILD_PERF_TESTS=OFF
-DBUILD_SHARED_LIBS=OFF
-DBUILD_TESTS=OFF
-DBUILD_opencv_apps=OFF
-DBUILD_opencv_calib3d=OFF
-DBUILD_opencv_dnn=OFF
-DBUILD_opencv_features2d=OFF
-DBUILD_opencv_flann=OFF
-DBUILD_opencv_highgui=OFF
-DBUILD_opencv_imgcodecs=OFF
-DBUILD_opencv_ml=OFF
-DBUILD_opencv_objdetect=OFF
-DBUILD_opencv_photo=OFF
-DBUILD_opencv_python2=OFF
-DBUILD_opencv_python_bindings_generator=OFF
-DBUILD_opencv_shape=OFF
-DBUILD_opencv_stitching=OFF
-DBUILD_opencv_superres=OFF
-DBUILD_opencv_ts=OFF
-DBUILD_opencv_video=OFF
-DBUILD_opencv_videoio=OFF
-DBUILD_opencv_videostab=OFF
-DBUILD_opencv_world=OFF
-DWITH_JASPER=OFF
-DWITH_OPENEXR=OFF
-DWITH_WEBP=OFF)
list(INSERT CMAKE_PREFIX_PATH 0 ${OpenCV_PREFIX})
find_package(OpenCV QUIET COMPONENTS core imgproc)
if (NOT OpenCV_FOUND)
add_custom_target(Rescan ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} DEPENDS opencv)
else()
add_custom_target(Rescan)
endif ()
# We must use our own freetype library
set(FREETYPE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/freetype-2.9.1)
set(FREETYPE_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/freetype)
ExternalProject_Add(freetype-3rdparty
SOURCE_DIR ${FREETYPE_SOURCE_DIR}
PREFIX ${FREETYPE_PREFIX}
LIST_SEPARATOR ,
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DBUILD_SHARED_LIBS:BOOL=false
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true)
# configure PoDoFo
find_package(OpenSSL REQUIRED)
pkg_search_module(FONTCONFIG REQUIRED fontconfig)
set(PODOFO_3RDPARTY_INCLUDE_PATH ${OpenCV_SOURCE_DIR}/3rdparty/libjpeg,${OpenCV_SOURCE_DIR}/3rdparty/libtiff,${FREETYPE_PREFIX}/include)
set(PODOFO_3RDPARTY_CMAKE_CXX_FLAGS "-isystem ${OpenCV_PREFIX}/src/opencv-build/3rdparty/libtiff")
set(PODOFO_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/podofo)
ExternalProject_Add(podofo-3rdparty
SOURCE_DIR ${PODOFO_SOURCE_DIR}
PREFIX ${PODOFO_PREFIX}
DEPENDS freetype-3rdparty opencv
LIST_SEPARATOR ,
CMAKE_ARGS
-DPODOFO_BUILD_LIB_ONLY:BOOL=true
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true
-DCMAKE_CXX_FLAGS=${PODOFO_3RDPARTY_CMAKE_CXX_FLAGS}
-DCMAKE_INCLUDE_PATH=${PODOFO_3RDPARTY_INCLUDE_PATH}
-DCMAKE_LIBRARY_PATH=${OpenCV_PREFIX}/src/opencv-build/3rdparty/lib)
set(PODOFO_INCLUDE_DIRS ${PODOFO_PREFIX}/include)
set(PODOFO_LIBRARIES podofo ${FONTCONFIG_LIBRARIES} libjpeg OpenSSL::Crypto freetype)
add_dependencies(${TARGET} Rescan podofo-3rdparty)
else()
set(TARGET fotokopierer)
find_package(OpenCV REQUIRED core imgproc)
find_path(PODOFO_INCLUDE_DIRS NAMES podofo/podofo.h)
if (NOT PODOFO_INCLUDE_DIRS)
message(FATAL_ERROR "Could not find the PoDoFo include directory")
endif ()
find_library(PODOFO_LIBRARIES NAMES podofo)
if (NOT PODOFO_LIBRARIES)
message(FATAL_ERROR "Could not find the PoDoFo library")
endif ()
message(STATUS "Found PoDoFo: ${PODOFO_LIBRARIES}")
endif()
find_package(Qt5 COMPONENTS Core Gui Quick)
qt5_add_resources(RESOURCES common.qrc translations.qrc)
if (SAILFISH_FOUND)
qt5_add_resources(RESOURCES sfos.qrc)
set_property(TARGET ${TARGET} APPEND PROPERTY SOURCES src/main-sfos.cxx ${RESOURCES})
else()
qt5_add_resources(RESOURCES desktop.qrc)
set_property(TARGET ${TARGET} APPEND PROPERTY SOURCES src/main-desktop.cxx ${RESOURCES})
endif()
set_property(TARGET ${TARGET} PROPERTY
INCLUDE_DIRECTORIES
"${SAILFISH_INCLUDE_DIRS}"
"${OpenCV_INCLUDE_DIRS}"
"${PODOFO_INCLUDE_DIRS}")
set_property(TARGET ${TARGET} APPEND PROPERTY COMPILE_DEFINITIONS
QT_DEPRECATED_WARNINGS
QT_NO_URL_CAST_FROM_STRING
QT_NO_CAST_TO_ASCII
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_FROM_BYTEARRAY
QT_STRICT_ITERATORS
QT_USE_FAST_CONCATENATION
QT_USE_FAST_OPERATOR_PLUS
)
qt5_use_modules(${TARGET} Core Gui Quick)
target_link_libraries(${TARGET} ${SAILFISH_LDFLAGS} ${OpenCV_LIBS} ${PODOFO_LIBRARIES})
install(TARGETS ${TARGET} RUNTIME DESTINATION bin)
# install(DIRECTORY qml DESTINATION share/${TARGET})
# install(DIRECTORY translations DESTINATION share/${TARGET} FILES_MATCHING PATTERN "*.qm")
install(FILES ${TARGET}.desktop DESTINATION share/applications)
install(FILES ${TARGET}.png DESTINATION share/icons/hicolor/86x86/apps)