cmake_minimum_required(VERSION 3.20.0)
project(qdmr VERSION 0.13.1)

set(RELEASE_SUFFIX "")

cmake_policy(SET CMP0100 NEW)
cmake_policy(SET CMP0140 NEW)

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)


set(DOCBOOK2MAN_XSLT_DEFAULT "docbook_man.debian.xsl")
if(UNIX AND APPLE)
  set(DOCBOOK2MAN_XSLT_DEFAULT "docbook_man.macports.xsl")
endif(UNIX AND APPLE)

option(BUILD_TESTS "Build test programs" OFF)
option(BUILD_DOCS  "Build API documentation" OFF)
option(BUILD_MAN   "Build man page for dmrconf" OFF)
option(INSTALL_UDEV_RULES "Install udev rules file." ON)
option(INSTALL_UDEV_PATH "Install path of udev rules file." "/etc/udev/rules.d")
option(INSTALL_APPSTREAM_DATA "Install AppStream metainfo file." ON)
option(INSTALL_BUNDLE "Installs QDMR as an AppBundle under MacOS X" OFF)
option(BUNDLE_PATH "Where to install the MacOS X application bundle." "~/Applications")
option(DOCBOOK2MAN_XSLT "Man page style sheet." ${DOCBOOK2MAN_XSLT_DEFAULT})

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)

include(GNUInstallDirs)
include(GenerateIcons)

find_package(Qt6 REQUIRED COMPONENTS Core Widgets UiTools Network SerialPort Positioning LinguistTools)
qt6_standard_project_setup()

find_package(LIBUSB_1 REQUIRED)
find_package(YAMLCPP REQUIRED)
find_program(CONVERT_CMD rsvg-convert DOC "SVG conversion tool (librsvg)." REQUIRED)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(USE_FOLDERS ON)


if (BUILD_MAN)
  find_program(XSLTPROC_EXECUTABLE NAMES xsltproc)
endif()

if (BUILD_DOCS)
  find_package(Doxygen REQUIRED dot)
endif()

if (${BUILD_TESTS})
  find_package(Qt6 REQUIRED COMPONENTS Test)
endif(${BUILD_TESTS})

IF (UNIX AND APPLE)
  SET(ADDITIONAL_LIBS ${ADDITIONAL_LIBS} "-framework IOKit -framework CoreFoundation")
ENDIF(UNIX AND APPLE)

INCLUDE_DIRECTORIES(${LIBUSB_1_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${YAMLCPP_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src)
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)
INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/lib)

LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/src)


set(PROJECT_VERSION_STRING "\"${PROJECT_VERSION}\"")
message(STATUS "Build version ${PROJECT_VERSION}")

# Set compiler flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wsign-compare")
set(CMAKE_CXX_FLAGS_DEBUG   "${CMAKE_CXX_FLAGS_DEBUG}  -O0 -ggdb -fstack-protector -Wextra")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -Wextra")


# Get default install directories under Linux
IF(UNIX AND NOT APPLE)
 INCLUDE(GNUInstallDirs)
ENDIF(UNIX AND NOT APPLE)
IF(UNIX AND APPLE)
 SET(CMAKE_INSTALL_LIBDIR "lib")
 SET(CMAKE_INSTALL_FULL_LIBDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
 SET(CMAKE_INSTALL_INCLUDEDIR "include")
 SET(CMAKE_INSTALL_FULL_INCLUDEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
 # Set RPATH under MacOS
 SET(CMAKE_SKIP_RPATH FALSE)
 SET(CMAKE_SKIP_BUILD_RPATH  FALSE)
 SET(CMAKE_SKIP_INSTALL_RPATH FALSE)
 SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
 SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
 SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 message(STATUS "RPATH: ${CMAKE_INSTALL_RPATH}")
ENDIF(UNIX AND APPLE)


# Sources...
add_subdirectory(lib)
add_subdirectory(cli)
add_subdirectory(src)
add_subdirectory(doc)
add_subdirectory(dist)

if(BUILD_TESTS)
 enable_testing()
 add_subdirectory(test)
endif(BUILD_TESTS)

# Source distribution packages:
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_PACKAGE_FILE_NAME
  "${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}${RELEASE_SUFFIX}")
set(CPACK_SOURCE_IGNORE_FILES
  "/build/;/doc/html;/doc/latex;/doc/reveng;/doc/dmr-intro;/examples/*.dfu;/.git/;~$;.qm;*.user$;${CPACK_SOURCE_IGNORE_FILES}")

include(CPack)
