Warning, /education/labplot/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 cmake_minimum_required (VERSION 3.17.0 FATAL_ERROR)
0002 project(labplot2)
0003 set(LABPLOT_VERSION 2.10.1)
0004
0005 set(CMAKE_C_STANDARD 99)
0006 set(CMAKE_C_STANDARD_REQUIRED ON)
0007 set(CMAKE_C_EXTENSIONS OFF)
0008 set(CMAKE_CXX_STANDARD 17)
0009 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0010 set(CMAKE_CXX_EXTENSIONS OFF)
0011
0012 find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
0013 MESSAGE (STATUS "Found Qt version ${QT_VERSION_MAJOR}")
0014 # see also -DQT_DISABLE_DEPRECATED_BEFORE in src/CMakeLists.txt
0015 set(QT_MIN_VERSION "5.12.0")
0016 set(KF_MAJOR_VERSION "5")
0017 set(KF_MIN_VERSION "5.32.0")
0018 #set(QT_VERSION_MAJOR "6")
0019 if (QT_VERSION_MAJOR GREATER_EQUAL 6)
0020 set(KF_MIN_VERSION "5.240.0")
0021 find_package(ECM ${KF_MIN_VERSION} NO_MODULE)
0022 if (ECM_FOUND)
0023 set(KF_MAJOR_VERSION "6")
0024 set(QT_MIN_VERSION "6.2.2") # openSUSE 15.4 version
0025 else ()
0026 MESSAGE (STATUS "KF6 not found! Trying Qt5")
0027 find_package(QT NAMES Qt5 REQUIRED COMPONENTS Core)
0028 MESSAGE (STATUS "Found Qt version ${QT_VERSION_MAJOR}")
0029 set(KF_MIN_VERSION "5.32.0")
0030 endif ()
0031 endif ()
0032 set(QT_MAJOR_VERSION ${QT_VERSION_MAJOR})
0033
0034 set(APPLE_SUPPRESS_X11_WARNING ON)
0035
0036 find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)
0037 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ ${ECM_MODULE_PATH})
0038
0039 include(KDEInstallDirs)
0040 include(KDECMakeSettings)
0041 include(KDECompilerSettings NO_POLICY_SCOPE)
0042
0043 include(ECMInstallIcons)
0044 include(ECMSetupVersion)
0045 include(ECMAddAppIcon)
0046 #include(KDEClangFormat)
0047 #include(GenerateExportHeader)
0048 include(FeatureSummary)
0049
0050 # build type: "release", "debug", "debugfull"
0051 string (TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE)
0052
0053 find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS
0054 Concurrent
0055 Gui
0056 # Qml
0057 # Quick
0058 # QuickWidgets
0059 PrintSupport
0060 Sql
0061 Svg
0062 Widgets
0063 Test
0064 )
0065
0066 # building QADS or Xlsx requires Qt${QT_VERSION_MAJOR}GuiPrivate (QADS is required, Xlsx is optional)
0067 find_package(Qt${QT_MAJOR_VERSION}Gui ${QT_MIN_VERSION} CONFIG REQUIRED Private)
0068
0069 find_package(KF${KF_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS
0070 Archive
0071 Completion
0072 Config
0073 ConfigWidgets
0074 CoreAddons
0075 Crash
0076 DocTools
0077 I18n
0078 IconThemes
0079 KIO
0080 TextWidgets
0081 WidgetsAddons
0082 XmlGui
0083 NewStuffCore
0084 NewStuff
0085 OPTIONAL_COMPONENTS
0086 Service
0087 Parts
0088 Purpose
0089 SyntaxHighlighting
0090 )
0091
0092 # TODO: make NewStuff optional?
0093 IF (KF${KF_MAJOR_VERSION}NewStuff_FOUND)
0094 add_definitions (-DHAVE_KF5_NEW_STUFF)
0095 ELSE ()
0096 MESSAGE (STATUS "KF NewStuff not found")
0097 ENDIF ()
0098 # TODO: service not used?
0099 IF (NOT KF${KF_MAJOR_VERSION}Service_FOUND)
0100 MESSAGE (STATUS "KF Service not found")
0101 ENDIF ()
0102 # TODO: parts not used?
0103 IF (NOT KF${KF_MAJOR_VERSION}Parts_FOUND)
0104 MESSAGE (STATUS "KF Parts not found")
0105 ENDIF ()
0106
0107 if (KF${KF_MAJOR_VERSION}Purpose_FOUND)
0108 add_definitions (-DHAVE_PURPOSE)
0109 endif()
0110
0111 IF (KF${KF_MAJOR_VERSION}SyntaxHighlighting_FOUND)
0112 add_definitions (-DHAVE_KF5_SYNTAX_HIGHLIGHTING)
0113 ELSE ()
0114 MESSAGE (STATUS "KF SyntaxHighlighting not found")
0115 ENDIF ()
0116
0117 if (QT_MAJOR_VERSION GREATER_EQUAL 6)
0118 find_package(KUserFeedbackQt6)
0119 else ()
0120 find_package(KUserFeedback)
0121 endif ()
0122 IF (KUserFeedback_FOUND OR KUserFeedbackQt6_FOUND)
0123 MESSAGE (STATUS "Found KUserFeedback")
0124 add_definitions (-DHAVE_KUSERFEEDBACK)
0125 ELSE ()
0126 MESSAGE (STATUS "KUserFeedback not found")
0127 ENDIF ()
0128
0129 find_package(BISON REQUIRED)
0130
0131 ### compiler flags ######################################
0132 option (ENABLE_COMPILER_OPTIMIZATION "Optimization: -OX" true)
0133 if (${ENABLE_COMPILER_OPTIMIZATION})
0134 set(COMPILER_OPTIMIZATION_FLAG "-O2")
0135 else()
0136 set(COMPILER_OPTIMIZATION_FLAG "-O0")
0137 endif()
0138 set (GENERIC_FLAGS "-Wall -Wextra -Wundef -Wpointer-arith -Wunreachable-code -Wunused -Wdeprecated-declarations -fno-omit-frame-pointer -fstack-protector")
0139 set (GENERIC_GNU_FLAGS "${COMPILER_OPTIMIZATION_FLAG} -Wcast-align -Wswitch-enum -fvisibility=default -pedantic")
0140 set (GENERIC_C_FLAGS "${GENERIC_FLAGS} -fno-exceptions")
0141 # liborigin needs exceptions
0142 set (GENERIC_CXX_FLAGS "${GENERIC_FLAGS} -fexceptions -std=c++17")
0143
0144 if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU")
0145 message(STATUS "GNU C compiler ${CMAKE_C_COMPILER_VERSION} detected, adding compile flags")
0146 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GENERIC_C_FLAGS} ${GENERIC_GNU_FLAGS}")
0147 if (CMAKE_C_COMPILER_VERSION VERSION_GREATER 10.99 AND CMAKE_C_COMPILER_VERSION VERSION_LESS 12) # GCC 11 fails building readstat 1.1.8
0148 message(STATUS "Building ReadStat disabled due to GNU C compiler version 11")
0149 set(DONT_BUILD_READSTAT TRUE)
0150 endif ()
0151 elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
0152 message(STATUS "Clang C compiler ${CMAKE_C_COMPILER_VERSION} detected, adding compile flags")
0153 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE ${GENERIC_C_FLAGS} ${GENERIC_GNU_FLAGS}")
0154 elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "Intel")
0155 message(STATUS "Intel C compiler detected, adding compile flags")
0156 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -O3 ${GENERIC_C_FLAGS}")
0157 elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "PGI")
0158 message(STATUS "PGI C compiler detected, adding compile flags")
0159 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -O3 -D__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 -Minform=inform -Mbounds -Mchkstk")
0160 # " x" postfix to work around a bug in CMake that causes "MSVC" to translate to something completely different
0161 elseif (("${CMAKE_C_COMPILER_ID} x" MATCHES "MSVC") OR MSVC)
0162 message(STATUS "MSVC C compiler detected, adding compile flags")
0163 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W3")
0164 if (CMAKE_BUILD_TYPE STREQUAL Debug)
0165 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Od")
0166 else ()
0167 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
0168 endif ()
0169 set(MSVC_FOUND TRUE)
0170 else ()
0171 message(STATUS "UNKNOWN C compiler, adding compile flags")
0172 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GENERIC_C_FLAGS}")
0173 endif()
0174
0175 if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
0176 message(STATUS "GNU C++ compiler ${CMAKE_CXX_COMPILER_VERSION} detected, adding compile flags")
0177 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GENERIC_CXX_FLAGS} ${GENERIC_GNU_FLAGS} -Wzero-as-null-pointer-constant") # -Wzero-as-null-pointer-constant since version 5
0178 elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
0179 message(STATUS "Clang C++ compiler ${CMAKE_CXX_COMPILER_VERSION} detected, adding compile flags")
0180 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE ${GENERIC_CXX_FLAGS} ${GENERIC_GNU_FLAGS} -Wzero-as-null-pointer-constant") # -Wzero-as-null-pointer-constant since version 5
0181 elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel")
0182 message(STATUS "Intel C++ compiler detected, adding compile flags")
0183 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE ${GENERIC_CXX_FLAGS}")
0184 #-std=c++0x comes with cmake's general flags, deprecated in icc, remove it
0185 string(REPLACE "-std=c++0x" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
0186 elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "PGI")
0187 message(STATUS "PGI C++ compiler detected, adding compile flags")
0188 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -O3 -D__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 -Minform=inform -Mbounds -Mchkstk")
0189 # " x" postfix to work around a bug in CMake that causes "MSVC" to translate to something completely different
0190 elseif (("${CMAKE_CXX_COMPILER_ID} x" MATCHES "MSVC") OR MSVC)
0191 message(STATUS "MSVC C++ compiler detected, adding compile flags")
0192 # -D_ALLOW_KEYWORD_MACROS for "#define private public" in MultiRangeTest.cpp
0193 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W3 -DPSAPI_VERSION=1 /Zc:externC-")
0194 if(CMAKE_BUILD_TYPE STREQUAL Debug)
0195 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Od")
0196 else()
0197 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
0198 endif()
0199 set(MSVC_FOUND TRUE)
0200 else ()
0201 message(STATUS "UNKNOWN C++ compiler, adding compile flags")
0202 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GENERIC_CXX_FLAGS}")
0203 endif ()
0204
0205 ##########################################################
0206
0207 # see also https://wiki.qt.io/Using_QString_Effectively
0208 set(LABPLOT_COMPILE_DEFINITIONS
0209 -DQT_NO_CAST_TO_ASCII
0210 -DQT_NO_CAST_FROM_ASCII
0211 -DQT_NO_CAST_FROM_BYTEARRAY
0212 -DQT_NO_URL_CAST_FROM_STRING
0213 -DQT_USE_FAST_CONCATENATION
0214 -DQT_USE_FAST_OPERATOR_PLUS
0215 -DQT_USE_QSTRINGBUILDER
0216 -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT
0217 -DQT_NO_SIGNALS_SLOTS_KEYWORDS
0218 -DQT_DEPRECATED_WARNINGS_SINCE=0x060000
0219 -DKF_DEPRECATED_WARNINGS_SINCE=0x060000
0220 )
0221 if (NOT WIN32)
0222 # Strict iterators can't be used on Windows, they lead to a link error
0223 # when application code iterates over a QVector<QPoint> for instance, unless
0224 # Qt itself was also built with strict iterators.
0225 # See example at https://bugreports.qt.io/browse/AUTOSUITE-946
0226 add_definitions(-DQT_STRICT_ITERATORS)
0227 endif()
0228
0229 include_directories (${QDBUS_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
0230 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
0231 add_definitions (-DLVERSION=\"${LABPLOT_VERSION}\")
0232 add_definitions (-DCXX_COMPILER=\"${CMAKE_CXX_COMPILER_ID}\ ${CMAKE_CXX_COMPILER_VERSION}\")
0233 add_definitions (-DCXX_COMPILER_FLAGS=\"${CMAKE_CXX_FLAGS}\")
0234 set(BUILD_SHARED_LIBS true)
0235
0236 #cmake_policy(SET CMP0002 OLD)
0237 IF (CMAKE_VERSION VERSION_EQUAL "3.3" OR CMAKE_VERSION VERSION_GREATER "3.3")
0238 cmake_policy(SET CMP0063 NEW)
0239 ENDIF()
0240
0241 if (CMAKE_VERSION VERSION_GREATER "3.5")
0242 set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Add clang-tidy automatically to builds")
0243 if (ENABLE_CLANG_TIDY)
0244 find_program (CLANG_TIDY_EXE NAMES "clang-tidy" PATHS /usr/bin)
0245 if (CLANG_TIDY_EXE)
0246 message(STATUS "Clang-tidy supported, found and enabled: ${CLANG_TIDY_EXE}")
0247 set(CLANG_TIDY_CHECKS "modernize-*,-modernize-use-trailing-return-type,clang-analyzer-*,-clang-analyzer-cplusplus*")
0248 #set(CLANG_TIDY_CHECKS "-*,modernize-*,clang-analyzer-*")
0249 # -extra-arg=--std=c++17
0250 set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-checks=${CLANG_TIDY_CHECKS};-header-filter='${CMAKE_SOURCE_DIR}/*'"
0251 CACHE STRING "" FORCE)
0252 else()
0253 message(AUTHOR_WARNING "clang-tidy not found!")
0254 set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) # delete it
0255 endif()
0256 else()
0257 message(STATUS "Clang-tidy supported but disabled")
0258 endif()
0259 endif()
0260
0261 # get git commit hash
0262 execute_process(
0263 COMMAND git describe --always --tags
0264 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
0265 OUTPUT_VARIABLE GIT_COMMIT
0266 OUTPUT_STRIP_TRAILING_WHITESPACE
0267 )
0268 add_definitions (-DGIT_COMMIT=\"${GIT_COMMIT}\")
0269
0270
0271 ### Options ######################################
0272 # Cantor does not support Qt6 yet
0273 if (QT_MAJOR_VERSION GREATER_EQUAL 6)
0274 option(ENABLE_CANTOR "Build with Cantor support" OFF)
0275 else ()
0276 option(ENABLE_CANTOR "Build with Cantor support" ON)
0277 endif ()
0278 option(ENABLE_FFTW "Build with FFTW support" ON)
0279 option(ENABLE_HDF5 "Build with HDF5 support" ON)
0280 option(ENABLE_NETCDF "Build with NetCDF support" ON)
0281 option(ENABLE_FITS "Build with FITS support" ON)
0282 option(ENABLE_LIBCERF "Build with libcerf support" ON)
0283 option(ENABLE_LIBORIGIN "Build with liborigin support" ON)
0284 option(ENABLE_ROOT "Build with ROOT (CERN) support" ON)
0285 # PENDING: latest stable 1.1.9 fails with GCC 13
0286 if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 12)
0287 option(ENABLE_READSTAT "Build with ReadStat support" OFF)
0288 else ()
0289 option(ENABLE_READSTAT "Build with ReadStat support" ON)
0290 endif ()
0291 option(ENABLE_MATIO "Build with Matio support" ON)
0292 option(ENABLE_TESTS "Build with tests" ON)
0293 option(ENABLE_MQTT "Build with MQTT support" ON)
0294 option(ENABLE_QTSERIALPORT "Build with QtSerialPort support" ON)
0295 option(ENABLE_DISCOUNT "Build with Discount support" ON)
0296 option(ENABLE_REPRODUCIBLE "Enable reproducible builds" OFF)
0297 option(ENABLE_XLSX "Build with XLSX (Excel) support" ON)
0298 IF (WIN32) # C++17 needed by Orcus not working with MSVC
0299 option(ENABLE_ORCUS "Build with Orcus support" OFF)
0300 ELSE ()
0301 option(ENABLE_ORCUS "Build with Orcus support" ON)
0302 ENDIF ()
0303 option(ENABLE_VECTOR_BLF "Build with Vector BLF file format support" ON)
0304 option(ENABLE_EIGEN3 "Build with Eigen3 support" ON)
0305 IF (APPLE)
0306 option(ENABLE_TOUCHBAR "Enable touch bar support on macOS" ON)
0307 ENDIF ()
0308
0309 ### OS macros ####################################
0310 IF (WIN32)
0311 add_definitions (-DHAVE_WINDOWS)
0312 find_library (PSAPI Psapi)
0313 if (PSAPI)
0314 message (STATUS "Found PSAPI: ${PSAPI}")
0315 else ()
0316 message (STATUS "PSAPI not found")
0317 endif ()
0318 ENDIF ()
0319
0320 ### GSL (required) ###############################
0321 FIND_PACKAGE(GSL REQUIRED)
0322
0323 FIND_PACKAGE(Poppler "0.62.0" COMPONENTS Qt${QT_MAJOR_VERSION})
0324 # TODO: support Poppler-Qt6
0325 IF (Poppler_FOUND AND (QT_MAJOR_VERSION LESS 6))
0326 include_directories(${Poppler_INCLUDE_DIRS})
0327 # MESSAGE (STATUS "Poppler libraries: ${Poppler_LIBRARIES}")
0328 add_definitions (-DHAVE_POPPLER)
0329 ENDIF ()
0330
0331 ### liborigin (included) ###############################
0332 IF (ENABLE_LIBORIGIN)
0333 FIND_PACKAGE (LibOrigin)
0334 IF (NOT LIBORIGIN_FOUND) # use own version
0335 IF (CMAKE_BUILD_TYPE STREQUAL "debug" OR CMAKE_BUILD_TYPE STREQUAL "debugfull")
0336 MESSAGE (STATUS "Origin project import (through internal liborigin) enabled (parser logging enabled)")
0337 SET (ENABLE_ORIGIN_PARSER_LOG TRUE)
0338 ELSE ()
0339 MESSAGE (STATUS "Origin project import (through internal liborigin) enabled (parser logging disabled)")
0340 ENDIF ()
0341 ENDIF ()
0342
0343 add_definitions (-DHAVE_LIBORIGIN)
0344 ELSE ()
0345 MESSAGE (STATUS "Origin project import DISABLED")
0346 ENDIF ()
0347
0348 ### Cantorlibs (optional) ###############################
0349 IF (ENABLE_CANTOR)
0350 FIND_PACKAGE (Cantor)
0351
0352 IF (Cantor_FOUND)
0353 MESSAGE (STATUS "Found Cantor Library ${Cantor_VERSION}")
0354
0355 IF (${Cantor_VERSION} VERSION_GREATER "19.11")
0356 add_definitions (-DHAVE_CANTOR_LIBS)
0357 set(RECENT_CANTOR TRUE)
0358 ELSE ()
0359 MESSAGE (STATUS "Cantor Library ${Cantor_VERSION} TOO OLD. Minimum usable version is 19.12")
0360 ENDIF ()
0361 IF (${Cantor_VERSION} VERSION_GREATER "20.08.9")
0362 add_definitions (-DHAVE_NEW_CANTOR_LIBS)
0363 ENDIF ()
0364 ELSE ()
0365 MESSAGE (STATUS "Cantor Library NOT FOUND")
0366 ENDIF ()
0367 ELSE ()
0368 add_definitions (-DCANTOR_DISABLED)
0369 MESSAGE (STATUS "Cantor Library DISABLED")
0370 ENDIF ()
0371
0372 ### FFTW (optional) #####################################
0373 IF (ENABLE_FFTW)
0374 FIND_PACKAGE (FFTW3)
0375 IF (FFTW3_FOUND)
0376 add_definitions (-DHAVE_FFTW3)
0377 ELSE ()
0378 MESSAGE (STATUS "FFTW 3 Library NOT FOUND")
0379 ENDIF ()
0380 ELSE ()
0381 MESSAGE (STATUS "FFTW 3 Library DISABLED")
0382 ENDIF ()
0383
0384 ### HDF5 (optional) ##############################
0385 IF (ENABLE_HDF5)
0386 FIND_PACKAGE(HDF5 COMPONENTS C)
0387 SET_PACKAGE_PROPERTIES (HDF5 PROPERTIES
0388 DESCRIPTION "Reading and writing self describing array data"
0389 URL "https://www.hdfgroup.org/solutions/hdf5/"
0390 )
0391 IF (HDF5_FOUND)
0392 add_definitions (-DHAVE_HDF5)
0393 IF (MSVC_FOUND)
0394 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DH5_BUILT_AS_DYNAMIC_LIB")
0395 ENDIF ()
0396 IF (HDF5_VERSION VERSION_GREATER "1.9")
0397 add_definitions (-DHAVE_AT_LEAST_HDF5_1_10_0)
0398 ENDIF ()
0399 IF (HDF5_VERSION VERSION_GREATER "1.10.0.1")
0400 add_definitions (-DHAVE_AT_LEAST_HDF5_1_10_0)
0401 add_definitions (-DHAVE_AT_LEAST_HDF5_1_10_1)
0402 ENDIF ()
0403 include_directories (${HDF5_INCLUDE_DIRS})
0404 ELSE ()
0405 MESSAGE (STATUS "Hierarchical Data Format (HDF5) Library NOT FOUND")
0406 SET(HDF5_LIBRARIES "")
0407 ENDIF ()
0408 ELSE ()
0409 add_definitions (-DHDF5_DISABLED)
0410 MESSAGE (STATUS "Hierarchical Data Format (HDF5) Library DISABLED")
0411 ENDIF ()
0412
0413 ### NETCDF (optional) #############################
0414 IF (ENABLE_NETCDF)
0415 FIND_PACKAGE(netCDF)
0416 SET_PACKAGE_PROPERTIES(netCDF PROPERTIES
0417 DESCRIPTION "Interfaces for array-oriented data access"
0418 URL "https://www.unidata.ucar.edu/software/netcdf/"
0419 )
0420 IF (netCDF_FOUND)
0421 add_definitions (-DHAVE_NETCDF)
0422 # netCDF on Windows may link to zip.dll
0423 find_library(Zip_LIBRARIES NAMES zip)
0424 if (Zip_LIBRARIES)
0425 MESSAGE (STATUS "Found Zip Library ${Zip_LIBRARIES}")
0426 endif ()
0427 ELSE ()
0428 MESSAGE (STATUS "Network Common Data Format (NetCDF) Library NOT FOUND")
0429 ENDIF ()
0430 ELSE ()
0431 add_definitions (-DNETCDF_DISABLED)
0432 MESSAGE (STATUS "Network Common Data Format (NetCDF) Library DISABLED")
0433 ENDIF ()
0434
0435 ### MQTT (optional) ###############################
0436 IF (ENABLE_MQTT)
0437 # ATTENTION: unit test uses qWaitFor() which needs Qt >= 5.10
0438 # avoid warning for the moment using QUIET
0439 find_package(Qt${QT_VERSION_MAJOR}Mqtt ${QT_MIN_VERSION} NO_MODULE)
0440 SET_PACKAGE_PROPERTIES (Qt${QT_VERSION_MAJOR}Mqtt PROPERTIES
0441 DESCRIPTION "Qt Module to implement MQTT protocol version 3.1 and 3.1.1"
0442 URL "https://github.com/qt/qtmqtt")
0443 IF (Qt${QT_VERSION_MAJOR}Mqtt_FOUND)
0444 MESSAGE (STATUS "Found MQTT Library")
0445 add_definitions (-DHAVE_MQTT)
0446 ELSE ()
0447 MESSAGE (STATUS "MQTT Library NOT FOUND")
0448 ENDIF ()
0449 ELSE ()
0450 MESSAGE (STATUS "MQTT Library DISABLED")
0451 ENDIF ()
0452
0453 ### QtSerialPort (optional) ###############################
0454 IF (ENABLE_QTSERIALPORT)
0455 find_package(Qt${QT_MAJOR_VERSION}SerialPort ${QT_MIN_VERSION} NO_MODULE)
0456 SET_PACKAGE_PROPERTIES (Qt{QT_MAJOR_VERSION}SerialPort PROPERTIES
0457 DESCRIPTION "Qt Serial Port library"
0458 URL "https://doc.qt.io/qt-5/qtserialport-index.html"
0459 PURPOSE "Support basic functionality of serial ports.")
0460 IF (Qt${QT_MAJOR_VERSION}SerialPort_FOUND)
0461 MESSAGE (STATUS "Found Qt${QT_MAJOR_VERSION}SerialPort Library")
0462 add_definitions (-DHAVE_QTSERIALPORT)
0463 ELSE ()
0464 MESSAGE (STATUS "Qt${QT_MAJOR_VERSION}SerialPort Library NOT FOUND")
0465 ENDIF ()
0466 ELSE ()
0467 MESSAGE (STATUS "Qt${QT_MAJOR_VERSION}SerialPort Library DISABLED")
0468 ENDIF ()
0469
0470 ### FITS (optional) ###############################
0471 IF (ENABLE_FITS)
0472 FIND_PACKAGE (CFitsio)
0473 SET_PACKAGE_PROPERTIES (CFitsio PROPERTIES
0474 DESCRIPTION "FITS IO Library"
0475 URL "https://heasarc.gsfc.nasa.gov/fitsio/fitsio.html"
0476 PURPOSE "Support for the FITS (Flexible Image Transport System) data format.")
0477 IF (CFITSIO_FOUND)
0478 add_definitions (-DHAVE_FITS)
0479 include_directories (${CFITSIO_INCLUDE_DIR})
0480 ELSE ()
0481 MESSAGE (STATUS "Flexible Image Transport System Data Format (FITS) Library NOT FOUND")
0482 ENDIF ()
0483 ELSE ()
0484 add_definitions (-FITS_DISABLED)
0485 MESSAGE (STATUS "Flexible Image Transport System Data Format (FITS) Library DISABLED")
0486 ENDIF ()
0487
0488 ### LIBCERF (optional) #############################
0489 IF (ENABLE_LIBCERF)
0490 FIND_PACKAGE (LIBCERF)
0491 IF (LIBCERF_FOUND)
0492 add_definitions (-DHAVE_LIBCERF)
0493 include_directories (${LIBCERF_INCLUDE_DIR})
0494 ELSE ()
0495 MESSAGE (STATUS "libcerf library NOT FOUND")
0496 ENDIF ()
0497 ELSE ()
0498 MESSAGE (STATUS "libcerf library DISABLED")
0499 ENDIF ()
0500
0501 ### ZLIB for ROOT and READSTAT #################
0502
0503 FIND_PACKAGE(ZLIB)
0504 SET_PACKAGE_PROPERTIES (ZLIB PROPERTIES
0505 DESCRIPTION "General purpose compression library"
0506 URL "https://www.zlib.net/"
0507 )
0508 IF (NOT ZLIB_FOUND)
0509 SET(ZLIB_LIBRARIES "")
0510 ENDIF ()
0511
0512 ### ROOT (optional) #############################
0513 IF (ENABLE_ROOT)
0514 FIND_PACKAGE(LZ4)
0515 IF (ZLIB_FOUND AND LZ4_FOUND)
0516 MESSAGE (STATUS "Found ZIP libraries ZLIB and LZ4 (needed for ROOT importer)")
0517 add_definitions (-DHAVE_ZIP)
0518 ELSE ()
0519 MESSAGE (STATUS "ZIP libraries ZLIB or LZ4 (needed for ROOT importer) NOT FOUND")
0520 ENDIF ()
0521 ELSE ()
0522 add_definitions (-DROOT_DISABLED)
0523 MESSAGE (STATUS "ROOT (CERN) importer DISABLED")
0524 ENDIF ()
0525
0526 ### ReadStat (optional) #############################
0527 IF (ENABLE_READSTAT)
0528 FIND_PACKAGE (ReadStat)
0529 IF (NOT READSTAT_FOUND AND NOT WIN32 AND NOT DONT_BUILD_READSTAT) # own version not on Windows and not when forbidden
0530 MESSAGE (STATUS "ReadStat library NOT FOUND. Building own version")
0531 set(BUILD_READSTAT TRUE)
0532
0533 # link own readstat with iconv
0534 FIND_LIBRARY (ICONV_LIBRARIES NAMES iconv libiconv libiconv-2)
0535 IF (ICONV_LIBRARIES) # non-glibc
0536 MESSAGE (STATUS "Iconv library FOUND (${ICONV_LIBRARIES})")
0537 set(READSTAT_LIBRARIES ${CMAKE_BINARY_DIR}/src/3rdparty/install/lib/libreadstat.a ${ICONV_LIBRARIES})
0538 ELSE ()
0539 MESSAGE (STATUS "Iconv library NOT FOUND")
0540 set(READSTAT_LIBRARIES ${CMAKE_BINARY_DIR}/src/3rdparty/install/lib/libreadstat.a)
0541 ENDIF ()
0542 include_directories (${CMAKE_BINARY_DIR}/src/3rdparty/install/include)
0543 # in case the target is not installed yet: use source dir
0544 include_directories (${CMAKE_BINARY_DIR}/src/3rdparty/readstat/src/readstat/src)
0545 ENDIF ()
0546 IF (READSTAT_FOUND OR BUILD_READSTAT) # found or build
0547 add_definitions (-DHAVE_READSTAT)
0548 ELSE ()
0549 SET(READSTAT_LIBRARIES "")
0550 ENDIF ()
0551 ELSE ()
0552 add_definitions (-DREADSTAT_DISABLED)
0553 MESSAGE (STATUS "ReadStat support DISABLED")
0554 ENDIF ()
0555
0556 ### XLSX (Excel) (optional) #############################
0557 IF (ENABLE_XLSX)
0558 FIND_PACKAGE (QXlsx)
0559 IF (QXLSX_FOUND)
0560 MESSAGE (STATUS "QXlsx library FOUND.")
0561 add_definitions (-DHAVE_QXLSX)
0562 ELSE ()
0563 if (TARGET Qt${QT_VERSION_MAJOR}::GuiPrivate)
0564 set(BUILD_QXLSX TRUE)
0565
0566 MESSAGE (STATUS "QXlsx library NOT FOUND. Building own version.")
0567 add_definitions (-DHAVE_QXLSX)
0568 else ()
0569 MESSAGE (STATUS "Missing Qt${QT_VERSION_MAJOR}::GuiPrivate to build own QXlsx.")
0570 endif ()
0571 ENDIF ()
0572 ELSE ()
0573 add_definitions (-DXLSX_DISABLED)
0574 MESSAGE (STATUS "XLSX support DISABLED")
0575 ENDIF ()
0576
0577 ### Matio (optional) ##############################################
0578 IF (ENABLE_MATIO)
0579 FIND_PACKAGE (Matio)
0580 IF (MATIO_FOUND)
0581 add_definitions (-DHAVE_MATIO)
0582 ELSE ()
0583 MESSAGE (STATUS "Matio library NOT FOUND.")
0584 ENDIF ()
0585 ELSE ()
0586 add_definitions (-DMATIO_DISABLED)
0587 MESSAGE (STATUS "Matio support DISABLED")
0588 ENDIF ()
0589
0590 ### Discount (optional) #############################
0591 IF (ENABLE_DISCOUNT)
0592 FIND_PACKAGE(Discount)
0593 SET_PACKAGE_PROPERTIES (Discount PROPERTIES
0594 DESCRIPTION "A C implementation of the Markdown markup language"
0595 URL "https://www.pell.portland.or.us/~orc/Code/discount/"
0596 TYPE OPTIONAL)
0597 IF (Discount_FOUND)
0598 add_definitions (-DHAVE_DISCOUNT)
0599 MESSAGE (STATUS "Found Markdown Library Discount ${Discount_VERSION}")
0600 IF (DEFINED Discount_VERSION AND ${Discount_VERSION} VERSION_GREATER "2.99")
0601 add_definitions (-DHAVE_DISCOUNT3)
0602 ENDIF ()
0603 ELSE ()
0604 MESSAGE (STATUS "Discount library NOT FOUND.")
0605 ENDIF ()
0606 ELSE ()
0607 MESSAGE (STATUS "Discount DISABLED")
0608 ENDIF ()
0609
0610 ### Orcus (optional) #############################
0611 IF (ENABLE_ORCUS)
0612 FIND_PACKAGE(Orcus)
0613 SET_PACKAGE_PROPERTIES (Orcus PROPERTIES
0614 DESCRIPTION "a library that provides a collection of standalone file processing filters"
0615 URL "https://gitlab.com/orcus/orcus"
0616 TYPE OPTIONAL)
0617 IF (Orcus_FOUND)
0618 add_definitions (-DHAVE_ORCUS)
0619 include_directories(${Orcus_INCLUDE_DIR} ${Ixion_INCLUDE_DIR})
0620 MESSAGE (STATUS "Found Orcus/Ixion: ${Orcus_INCLUDE_DIR} ${Ixion_INCLUDE_DIR}, ${Orcus_LIBRARIES} ${Ixion_LIBRARY}")
0621 ELSE ()
0622 MESSAGE (STATUS "Orcus library NOT FOUND.")
0623 ENDIF ()
0624 ELSE ()
0625 MESSAGE (STATUS "Orcus (ODS) DISABLED")
0626 ENDIF ()
0627
0628 ### Eigen (optional) #############################
0629 IF (ENABLE_EIGEN3)
0630 FIND_PACKAGE (Eigen3)
0631 IF (EIGEN3_FOUND)
0632 MESSAGE (STATUS "Found Eigen3 library version ${EIGEN3_VERSION_STRING}")
0633 add_definitions (-DHAVE_EIGEN3)
0634 include_directories (${EIGEN3_INCLUDE_DIR})
0635 ELSE ()
0636 MESSAGE (STATUS "Eigen3 library NOT FOUND.")
0637 ENDIF ()
0638 ELSE ()
0639 MESSAGE (STATUS "Eigen3 support DISABLED")
0640 ENDIF ()
0641
0642 ### Touch bar on macOS (optional) #############################
0643 IF (APPLE AND ENABLE_TOUCHBAR)
0644 add_definitions (-DHAVE_TOUCHBAR)
0645 ENDIF ()
0646
0647 #################################################
0648 IF (ENABLE_REPRODUCIBLE)
0649 add_definitions (-DREPRODUCIBLE_BUILD)
0650 message(STATUS "Reproducable build ENABLED")
0651 ELSE ()
0652 message(STATUS "Reproducable build DISABLED")
0653 ENDIF ()
0654 #################################################
0655 #################################################
0656 include(CheckFunctionExists)
0657
0658 CHECK_FUNCTION_EXISTS(random HAVE_RANDOM_FUNCTION)
0659 #################################################
0660 FIND_PATH (XLOCALE_INCLUDE_DIR xlocale.h
0661 /usr/include
0662 /usr/local/include
0663 )
0664 IF (XLOCALE_INCLUDE_DIR)
0665 add_definitions (-DHAVE_XLOCALE)
0666 include_directories (${XLOCALE_INCLUDE_DIR})
0667 ENDIF()
0668
0669 add_subdirectory(data)
0670 add_subdirectory(icons)
0671 add_subdirectory(src)
0672 add_subdirectory(doc)
0673 #add_subdirectory(lib)
0674
0675 if (ENABLE_TESTS)
0676 enable_testing(true)
0677 add_subdirectory(tests)
0678 endif()
0679
0680 install(FILES org.kde.labplot2.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
0681
0682 # clang format
0683 #file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h *.c)
0684 #kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
0685
0686 feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
0687
0688 find_package(KF${KF_MAJOR_VERSION}I18n CONFIG REQUIRED)
0689
0690 IF (KF${KF_MAJOR_VERSION}I18n_FOUND)
0691 ki18n_install(po)
0692 ENDIF()
0693 if (KF${KF_MAJOR_VERSION}DocTools_FOUND)
0694 kdoctools_install(po)
0695 ENDIF()