cmake_policy(SET CMP0048 NEW)

project (fotokopierer VERSION 0.1 LANGUAGES CXX)

cmake_minimum_required(VERSION 3.0)

set(CMAKE_CXX_STANDARD 14)

find_package(Qt5 COMPONENTS Quick)

include(FindPkgConfig)
pkg_search_module(SAILFISH sailfishapp)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

if (POLICY CMP0071)
  cmake_policy(SET CMP0071 NEW)
endif()

find_package(OpenCV COMPONENTS imgproc)

include(ExternalProject)

if (NOT OpenCV_FOUND)
  message("Use internal OpenCV")
  set(OpenCV_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/opencv-3.4.0)
  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}
	 UPDATE_COMMAND ""
	 INSTALL_COMMAND ""
	 CMAKE_ARGS
	 -DBUILD_CUDA=OFF
	 -DBUILD_DOCS=OFF
	 -DBUILD_EXAMPLES=OFF
	 -DBUILD_FAT_JAVA_LIB=OFF
	 -DBUILD_IPP_IW=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)

  set(OpenCV_INCLUDE_DIRS
	 ${OpenCV_PREFIX}/src/opencv-build
	 ${OpenCV_SOURCE_DIR}/include
	 ${OpenCV_SOURCE_DIR}/modules/core/include
	 ${OpenCV_SOURCE_DIR}/modules/imgproc/include)
  link_directories(${OpenCV_PREFIX}/src/opencv-build/lib)
  set(OpenCV_LIBS
	 opencv_imgproc
	 opencv_core
	 tegra_hal
	 dl)
  set(JPEG_LIBRARY libjpeg)
  set(PNG_LIBRARY libpng)
  set(TIFF_LIBRARY libtiff)
  set(PODOFO_3RDPARTY_INCLUDE_PATH
	 ${OpenCV_SOURCE_DIR}/3rdparty/libjpeg
	 ${OpenCV_SOURCE_DIR}/3rdparty/libpng
	 ${OpenCV_SOURCE_DIR}/3rdparty/libtiff)
  link_directories(${OpenCV_PREFIX}/src/opencv-build/3rdparty/lib)
else()
  find_package(JPEG REQUIRED)
  find_package(TIFF REQUIRED)
  find_package(PNG REQUIRED)
endif()

find_package(Threads REQUIRED)
find_package(ZLIB REQUIRED)
find_package(Freetype REQUIRED)

set(PODOFO_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/podofo-0.9.5)
set(PODOFO_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/podofo)
ExternalProject_Add(podofo-3rdparty
  SOURCE_DIR ${PODOFO_SOURCE_DIR}
  PREFIX ${PODOFO_PREFIX}
  UPDATE_COMMAND ""
  INSTALL_COMMAND ""
  CMAKE_ARGS
  -DPODOFO_BUILD_LIB_ONLY:BOOL=true
  -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true
  -DCMAKE_INCLUDE_PATH=${PODOFO_3RDPARTY_INCLUDE_PATH}
  -DCMAKE_LIBRARY_PATH=${OpenCV_PREFIX}/src/opencv-build/3rdparty/lib)

set(PODOFO_INCLUDE_DIRS ${PODOFO_SOURCE_DIR} ${PODOFO_SOURCE_DIR}/src ${PODOFO_PREFIX}/src/podofo-3rdparty-build)
link_directories(${PODOFO_PREFIX}/src/podofo-3rdparty-build/src)
set(PODOFO_LIBS
  podofo
  Threads::Threads
  ZLIB::ZLIB
  ${FREETYPE_LIBRARIES}
  ${JPEG_LIBRARY}
  ${TIFF_LIBRARY}
  ${PNG_LIBRARY})

set(SOURCES
  src/Convert.cxx
  src/ScannedImage.cxx
  src/ScannedImageProvider.cxx
  src/Util.cxx
  src/init.cxx)

if (SAILFISH_FOUND)
  qt5_add_resources(RESOURCES sfos.qrc common.qrc translations.qrc)
  set(TARGET harbour-fotokopierer)
  add_executable(${TARGET} src/main-sfos.cxx ${SOURCES} ${RESOURCES})
else ()
  qt5_add_resources(RESOURCES desktop.qrc common.qrc translations.qrc)
  set(TARGET fotokopierer)
  add_executable(${TARGET} src/main-desktop.cxx ${SOURCES} ${RESOURCES})
endif()

qt5_use_modules(${TARGET} Quick)

if (NOT OpenCV_FOUND)
  add_dependencies(podofo-3rdparty opencv)
  add_dependencies(${TARGET} opencv)
endif ()
add_dependencies(${TARGET} podofo-3rdparty)

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
  )

target_link_libraries(${TARGET}
  ${OpenCV_LIBS}
  ${SAILFISH_LDFLAGS}
  ${PODOFO_LIBS})

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)