Artifact bb5d5b504b664cae9d384c388a8467c09a4a72f0:

  • File CMakeLists.txt — part of check-in [6fbac88f79] at 2021-06-07 08:01:35 on branch trunk — CMakeLists.txt: add opencv lib path to link directories. This seems to be required to find libjpeg. (user: fifr size: 8408) [more...]

cmake_policy(SET CMP0048 NEW)

cmake_minimum_required(VERSION 3.0)

set(FOTOKOPIERER_VERSION 0.3.1)
set(PODOFO_VERSION 0.9.7)
set(OPENCV_VERSION 3.4.14)
set(FREETYPE_VERSION 2.10.4)

project(fotokopierer VERSION ${FOTOKOPIERER_VERSION} LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

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/DocumentList.cxx
  src/Document.cxx
  src/Page.cxx

  src/Scanner.cxx
  src/ScanImage.cxx
  src/ScanImageView.cxx
  src/CutView.cxx
  src/ColorizeView.cxx
  src/ZoomImage.cxx

  src/Fotokopierer.cxx
  src/Convert.cxx
  src/EdgeDetection.cxx

  src/init.cxx)

set_property(SOURCE src/Fotokopierer.cxx APPEND PROPERTY COMPILE_DEFINITIONS
  FOTOKOPIERER_AUTHOR="Frank Fischer"
  FOTOKOPIERER_VERSION="${FOTOKOPIERER_VERSION}"
  PODOFO_VERSION="${PODOFO_VERSION}"
  OPENCV_VERSION="${OPENCV_VERSION}"
  FREETYPE_VERSION="${FREETYPE_VERSION}"
  )

if (SAILFISH_FOUND)
  set(OpenCV_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/opencv-${OPENCV_VERSION}-${CMAKE_SYSTEM_PROCESSOR})
  set(PODOFO_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/podofo-${PODOFO_VERSION}-${CMAKE_SYSTEM_PROCESSOR})

  include(ExternalProject)

  # configure OpenCV
  set(OpenCV_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/opencv)

  if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL i486)
    # we disable this flag because otherwise OpenCV will complain about some undefined
    # _mm_pause function (a compiler intrinsic?)
    set(OPENCV_EXTRA_CXX_FLAGS "-U__SSE2__")
  endif()

  ExternalProject_Add(opencv
    SOURCE_DIR ${OpenCV_SOURCE_DIR}
    DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/3rdparty
    URL "https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
    URL_HASH SHA256=302d3fe23b09d608d14b10212ed25649d9b6c7a2f817ccb1c8005172a479dedb
    PREFIX ${OpenCV_PREFIX}
    CMAKE_ARGS
    -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
    -DCMAKE_BUILD_TYPE=Release
    -DOPENCV_EXTRA_CXX_FLAGS=${OPENCV_EXTRA_CXX_FLAGS}
    -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
    # we must disable libjpeg-turbo because of a version clash
    -DBUILD_JPEG_TURBO_DISABLE=ON
    -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
    -DENABLE_PRECOMPILED_HEADERS=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(opencv-3rdparty ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} DEPENDS opencv)
  else()
    add_custom_target(opencv-3rdparty)
  endif ()

  link_directories(${OpenCV_PREFIX}/src/opencv-build/3rdparty/lib)

  # We must use our own freetype library
  set(FREETYPE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/3rdparty/freetype-${FREETYPE_VERSION}-${CMAKE_SYSTEM_PROCESSOR})
  set(FREETYPE_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/freetype)
  ExternalProject_Add(freetype-3rdparty
    DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/3rdparty
    URL "https://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VERSION}.tar.gz"
    URL_HASH SHA256=5eab795ebb23ac77001cfb68b7d4d50b5d6c7469247b0b01b2c953269f658dac
    SOURCE_DIR ${FREETYPE_SOURCE_DIR}
    PREFIX ${FREETYPE_PREFIX}
    LIST_SEPARATOR ,
    CMAKE_ARGS
    -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
    -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
    -DBUILD_SHARED_LIBS:BOOL=false
    -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true)

  link_directories(${FREETYPE_PREFIX}/lib64 ${FREETYPE_PREFIX}/lib)

  # configure PoDoFo
  find_package(PNG REQUIRED)
  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/freetype2)
  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
    DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/3rdparty
    URL "https://downloads.sourceforge.net/project/podofo/podofo/${PODOFO_VERSION}/podofo-${PODOFO_VERSION}.tar.gz"
    URL_HASH SHA256=7cf2e716daaef89647c54ffcd08940492fd40c385ef040ce7529396bfadc1eb8
    SOURCE_DIR ${PODOFO_SOURCE_DIR}
    PREFIX ${PODOFO_PREFIX}
    DEPENDS freetype-3rdparty opencv
    LIST_SEPARATOR ,
    CMAKE_ARGS
    -DPODOFO_BUILD_LIB_ONLY:BOOL=true
    -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
    -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=${FREETYPE_PREFIX}/lib,${OpenCV_PREFIX}/src/opencv-build/3rdparty/lib
    # the following should be libjpeg-turbo in case that would work ...
    -DLIBJPEG_LIBRARY_NAMES=jpeg)

  link_directories(${PODOFO_PREFIX}/lib)

  set(PODOFO_INCLUDE_DIRS ${PODOFO_PREFIX}/include)
  # use libjpeg-turbo in case that would work ...
  set(PODOFO_LIBRARIES podofo ${FONTCONFIG_LIBRARIES} OpenSSL::Crypto libtiff libjpeg PNG::PNG freetype)
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 Concurrent Gui Multimedia Quick)

# We need to set these directories here ... luckily we know exactly where it goes.

qt5_add_resources(RESOURCES common.qrc translations.qrc)
if (SAILFISH_FOUND)
  qt5_add_resources(RESOURCES sfos.qrc)
  add_executable(${TARGET} src/main-sfos.cxx ${SOURCES} ${RESOURCES})
  add_dependencies(${TARGET} opencv-3rdparty podofo-3rdparty)
else()
  qt5_add_resources(RESOURCES desktop.qrc)
  add_executable(${TARGET} src/main-desktop.cxx ${SOURCES} ${RESOURCES})

  add_executable(edgedetect src/main-edgedetect.cxx src/Convert.cxx src/EdgeDetection.cxx)
  qt5_use_modules(edgedetect Core Gui Multimedia Quick Widgets)
  target_link_libraries(edgedetect ${SAILFISH_LDFLAGS} ${OpenCV_LIBS} ${PODOFO_LIBRARIES})
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 Multimedia 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 icons/86x86/${TARGET}.png DESTINATION share/icons/hicolor/86x86/apps)
install(FILES icons/108x108/${TARGET}.png DESTINATION share/icons/hicolor/108x108/apps)
install(FILES icons/128x128/${TARGET}.png DESTINATION share/icons/hicolor/128x128/apps)
install(FILES icons/172x172/${TARGET}.png DESTINATION share/icons/hicolor/172x172/apps)