Warning, /education/labplot/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 project(labplot2)
0002 
0003 # minimum 3.2.0 for FindGSL.cmake
0004 cmake_minimum_required (VERSION 3.2.0 FATAL_ERROR)
0005 set(CMAKE_C_STANDARD 99)
0006 set(CMAKE_C_STANDARD_REQUIRED ON)
0007 set(CMAKE_CXX_STANDARD 11)
0008 set(CMAKE_CXX_STANDARD_REQUIRED ON)
0009 set(CMAKE_CXX_EXTENSIONS OFF)
0010 
0011 set(QT_MINIMUM_VERSION 5.6.0)
0012 set(KF5_MIN_VERSION "5.16.0")
0013 
0014 set(APPLE_SUPPRESS_X11_WARNING ON)
0015 
0016 find_package(ECM REQUIRED NO_MODULE)
0017 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
0018 # build type: "release", "debug", "debugfull"
0019 string (TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE)
0020 find_package(Qt5 ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS
0021         Concurrent
0022         Gui
0023 #       Qml
0024 #       Quick
0025 #       QuickWidgets
0026         PrintSupport
0027         Sql
0028         Svg
0029         Widgets
0030         Test
0031 )
0032 
0033 find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
0034         Archive
0035         Completion
0036         Config
0037         ConfigWidgets
0038         CoreAddons
0039         Crash
0040         DocTools
0041         I18n
0042         IconThemes
0043         KIO
0044         TextWidgets
0045         WidgetsAddons
0046         XmlGui
0047         NewStuffCore
0048         NewStuff
0049 OPTIONAL_COMPONENTS
0050         Service
0051         Parts
0052         SyntaxHighlighting
0053 )
0054 # TODO: make NewStuff optional?
0055 IF (KF5NewStuff_FOUND)
0056         add_definitions (-DHAVE_KF5_NEW_STUFF)
0057 ELSE ()
0058         MESSAGE (STATUS "KF5 new stuff not found")
0059 ENDIF ()
0060 # TODO: service not used?
0061 IF (NOT KF5Service_FOUND)
0062         MESSAGE (STATUS "KF5 service not found")
0063 ENDIF ()
0064 # TODO: parts not used?
0065 IF (NOT KF5Parts_FOUND)
0066         MESSAGE (STATUS "KF5 parts not found")
0067 ENDIF ()
0068 IF (KF5SyntaxHighlighting_FOUND)
0069         add_definitions (-DHAVE_KF5_SYNTAX_HIGHLIGHTING)
0070 ELSE ()
0071         MESSAGE (STATUS "KF5 syntax highlighting not found")
0072 ENDIF ()
0073 
0074 find_package(KUserFeedback)
0075 IF (KUserFeedback_FOUND)
0076         MESSAGE (STATUS "Found KUserFeedback")
0077         add_definitions (-DHAVE_KUSERFEEDBACK)
0078 ELSE ()
0079         MESSAGE (STATUS "KUserFeedback not found")
0080 ENDIF ()
0081 
0082 find_package(BISON REQUIRED)
0083 
0084 include(FeatureSummary)
0085 include(ECMAddAppIcon)
0086 include(ECMInstallIcons)
0087 include(KDEInstallDirs)
0088 include(KDECompilerSettings)
0089 include(KDECMakeSettings)
0090 
0091 ### compiler flags ######################################
0092 set (GENERIC_FLAGS "-Wall -Wextra -Wundef -Wpointer-arith -Wunreachable-code -Wunused -Wdeprecated-declarations -fno-omit-frame-pointer -fstack-protector")
0093 set (GENERIC_GNU_FLAGS "-O2 -Wcast-align -Wswitch-enum -fvisibility=default")
0094 set (GENERIC_C_FLAGS "${GENERIC_FLAGS} -fno-exceptions")
0095 # liborigin needs exceptions
0096 set (GENERIC_CXX_FLAGS "${GENERIC_FLAGS} -fexceptions")
0097 
0098 if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU")
0099         message(STATUS "GNU C compiler detected, adding compile flags")
0100         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GENERIC_C_FLAGS} ${GENERIC_GNU_FLAGS}")
0101 elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
0102         message(STATUS "Clang C compiler detected, adding compile flags")
0103         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE ${GENERIC_C_FLAGS} ${GENERIC_GNU_FLAGS}")
0104 elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "Intel")
0105         message(STATUS "Intel C compiler detected, adding compile flags")
0106         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -O3 ${GENERIC_C_FLAGS}")
0107 elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "PGI")
0108         message(STATUS "PGI C compiler detected, adding compile flags")
0109         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -O3 -D__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 -Minform=inform -Mbounds -Mchkstk")
0110 # " x" postfix to work around a bug in CMake that causes "MSVC" to translate to something completely different
0111 elseif (("${CMAKE_C_COMPILER_ID} x" MATCHES "MSVC") OR MSVC)
0112         message(STATUS "MSVC C compiler detected, adding compile flags")
0113         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -W3")
0114         set(MSVC_FOUND TRUE)
0115 else ()
0116         message(STATUS "UNKNOWN C compiler, adding compile flags")
0117         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GENERIC_C_FLAGS}")
0118 endif()
0119 
0120 if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
0121         message(STATUS "GNU C++ compiler detected, adding compile flags")
0122         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GENERIC_CXX_FLAGS} ${GENERIC_GNU_FLAGS}")
0123 elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
0124         message(STATUS "Clang C++ compiler detected, adding compile flags")
0125         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE ${GENERIC_CXX_FLAGS} ${GENERIC_GNU_FLAGS}")
0126 elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel")
0127         message(STATUS "Intel C++ compiler detected, adding compile flags")
0128         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -std=c++11 ${GENERIC_CXX_FLAGS}")
0129         #-std=c++0x comes with cmake's general flags, deprecated in icc, remove it
0130         string(REPLACE "-std=c++0x" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
0131 elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "PGI")
0132         message(STATUS "PGI C++ compiler detected, adding compile flags")
0133         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -O3 -std=c++11 -D__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 -Minform=inform -Mbounds -Mchkstk")
0134 # " x" postfix to work around a bug in CMake that causes "MSVC" to translate to something completely different
0135 elseif (("${CMAKE_CXX_COMPILER_ID} x" MATCHES "MSVC") OR MSVC)
0136         message(STATUS "MSVC C++ compiler detected, adding compile flags")
0137         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -W3 -DPSAPI_VERSION=1")
0138         set(MSVC_FOUND TRUE)
0139 else ()
0140         message(STATUS "UNKNOWN C++ compiler, adding compile flags")
0141         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GENERIC_CXX_FLAGS}")
0142 endif ()
0143 
0144 ##########################################################ESC[m
0145 
0146 
0147 add_definitions (${QT_DEFINITIONS} ${QT_QTDBUS_DEFINITIONS})
0148 include_directories (${QDBUS_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR})
0149 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
0150 add_definitions (-DLVERSION=\"2.8.2\")
0151 add_definitions (-DCXX_COMPILER=\"${CMAKE_CXX_COMPILER_ID}\ ${CMAKE_CXX_COMPILER_VERSION}\")
0152 add_definitions (-DCXX_COMPILER_FLAGS=\"${CMAKE_CXX_FLAGS}\")
0153 add_definitions (-DQT_NO_URL_CAST_FROM_STRING)
0154 set(BUILD_SHARED_LIBS true)
0155 
0156 #cmake_policy(SET CMP0002 OLD)
0157 IF (CMAKE_VERSION VERSION_EQUAL "3.3" OR CMAKE_VERSION VERSION_GREATER "3.3")
0158         cmake_policy(SET CMP0063 NEW)
0159 ENDIF()
0160 
0161 if (CMAKE_VERSION VERSION_GREATER "3.5")
0162   set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Add clang-tidy automatically to builds")
0163   if (ENABLE_CLANG_TIDY)
0164     find_program (CLANG_TIDY_EXE NAMES "clang-tidy" PATHS /usr/bin)
0165     if (CLANG_TIDY_EXE)
0166       message(STATUS "Clang-tidy supported, found and enabled: ${CLANG_TIDY_EXE}")
0167       set(CLANG_TIDY_CHECKS "modernize-*,-modernize-use-trailing-return-type,clang-analyzer-*,-clang-analyzer-cplusplus*")
0168       #set(CLANG_TIDY_CHECKS "-*,modernize-*,clang-analyzer-*")
0169       # -extra-arg=--std=c++11
0170       set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-checks=${CLANG_TIDY_CHECKS};-header-filter='${CMAKE_SOURCE_DIR}/*'"
0171         CACHE STRING "" FORCE)
0172     else()
0173       message(AUTHOR_WARNING "clang-tidy not found!")
0174       set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) # delete it
0175     endif()
0176    else()
0177     message(STATUS "Clang-tidy supported but disabled")
0178   endif()
0179 endif()
0180 
0181 ### Options ######################################
0182 option(ENABLE_CANTOR "Build with Cantor support" ON)
0183 option(ENABLE_FFTW "Build with FFTW support" ON)
0184 option(ENABLE_HDF5 "Build with HDF5 support" ON)
0185 option(ENABLE_NETCDF "Build with NetCDF support" ON)
0186 option(ENABLE_FITS "Build with FITS support" ON)
0187 option(ENABLE_LIBCERF "Build with libcerf support" ON)
0188 option(ENABLE_LIBORIGIN "Build with liborigin support" ON)
0189 option(ENABLE_ROOT "Build with ROOT (CERN) support" ON)
0190 option(ENABLE_READSTAT "Build with ReadStat support" OFF)
0191 option(ENABLE_TESTS "Build with tests" ON)
0192 option(ENABLE_MQTT "Build with MQTT support" ON)
0193 option(ENABLE_QTSERIALPORT "Build with QtSerialPort support" ON)
0194 option(ENABLE_REPRODUCIBLE "Enable reproducible builds" OFF)
0195 
0196 ### OS macros ####################################
0197 IF (WIN32)
0198         add_definitions (-DHAVE_WINDOWS)
0199         find_library (PSAPI Psapi)
0200         message (STATUS "PSAPI: ${PSAPI}")
0201 ENDIF ()
0202 
0203 ### GSL (required) ###############################
0204 FIND_PACKAGE(GSL REQUIRED)
0205 
0206 ### liborigin (included) ###############################
0207 IF (ENABLE_LIBORIGIN)
0208         add_definitions (-DHAVE_LIBORIGIN)
0209 
0210         IF (CMAKE_BUILD_TYPE STREQUAL "debug" OR CMAKE_BUILD_TYPE STREQUAL "debugfull")
0211                 MESSAGE (STATUS "Origin project import (through internal liborigin) enabled (parser logging enabled)")
0212                 SET (ENABLE_ORIGIN_PARSER_LOG TRUE)
0213         ELSE ()
0214                 MESSAGE (STATUS "Origin project import (through internal liborigin) enabled (parser logging disabled)")
0215         ENDIF ()
0216 ELSE ()
0217         MESSAGE (STATUS "Origin project import DISABLED")
0218 ENDIF ()
0219 
0220 ### Cantorlibs (optional) ###############################
0221 IF (ENABLE_CANTOR)
0222 FIND_PACKAGE (Cantor)
0223 SET_PACKAGE_PROPERTIES(Cantor PROPERTIES
0224         URL "https://edu.kde.org/cantor/"
0225 )
0226 IF (Cantor_FOUND)
0227         MESSAGE (STATUS "Found Cantor Library ${Cantor_VERSION}")
0228 
0229         IF (${Cantor_VERSION} VERSION_GREATER "19.11")
0230                 add_definitions (-DHAVE_CANTOR_LIBS)
0231                 set(RECENT_CANTOR TRUE)
0232                 FIND_PACKAGE(Poppler "0.62.0" REQUIRED COMPONENTS Qt5)
0233         ELSE ()
0234                 MESSAGE (STATUS "Cantor Library ${Cantor_VERSION} TOO OLD. Minimum usable version is 19.12")
0235         ENDIF ()
0236         IF (${Cantor_VERSION} VERSION_GREATER "20.08.9")
0237                 add_definitions (-DHAVE_NEW_CANTOR_LIBS)
0238         ENDIF ()
0239 ELSE ()
0240         MESSAGE (STATUS "Cantor Library NOT FOUND")
0241 ENDIF ()
0242 ELSE ()
0243         MESSAGE (STATUS "Cantor Library DISABLED")
0244 ENDIF ()
0245 
0246 ### FFTW (optional) #####################################
0247 IF (ENABLE_FFTW)
0248         FIND_PACKAGE (FFTW3)
0249         IF (FFTW3_FOUND)
0250                 add_definitions (-DHAVE_FFTW3)
0251         ELSE ()
0252                 MESSAGE (STATUS "FFTW 3 Library NOT FOUND")
0253         ENDIF ()
0254 ELSE ()
0255         MESSAGE (STATUS "FFTW 3 Library DISABLED")
0256 ENDIF ()
0257 
0258 ### HDF5 (optional) ##############################
0259 IF (ENABLE_HDF5)
0260 FIND_PACKAGE(HDF5 COMPONENTS C)
0261 SET_PACKAGE_PROPERTIES (HDF5 PROPERTIES
0262         DESCRIPTION "Reading and writing self describing array data"
0263         URL "https://www.hdfgroup.org/solutions/hdf5/"
0264 )
0265 IF (HDF5_FOUND)
0266         add_definitions (-DHAVE_HDF5)
0267         IF (MSVC_FOUND)
0268                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DH5_BUILT_AS_DYNAMIC_LIB")
0269         ENDIF ()
0270         IF (HDF5_VERSION VERSION_GREATER "1.9")
0271                 add_definitions (-DHAVE_AT_LEAST_HDF5_1_10_0)
0272         ENDIF ()
0273         IF (HDF5_VERSION VERSION_GREATER "1.10.0.1")
0274                 add_definitions (-DHAVE_AT_LEAST_HDF5_1_10_0)
0275                 add_definitions (-DHAVE_AT_LEAST_HDF5_1_10_1)
0276         ENDIF ()
0277         include_directories (${HDF5_INCLUDE_DIRS})
0278 ELSE ()
0279         MESSAGE (STATUS "Hierarchical Data Format (HDF5) Library NOT FOUND")
0280 ENDIF ()
0281 ELSE ()
0282         MESSAGE (STATUS "Hierarchical Data Format (HDF5) Library DISABLED")
0283 ENDIF ()
0284 
0285 ### NETCDF (optional) #############################
0286 IF (ENABLE_NETCDF)
0287         FIND_PACKAGE(netCDF)
0288         SET_PACKAGE_PROPERTIES(netCDF PROPERTIES
0289             DESCRIPTION "Interfaces for array-oriented data access"
0290             URL "https://www.unidata.ucar.edu/software/netcdf/"
0291         )
0292         IF (netCDF_FOUND)
0293                 add_definitions (-DHAVE_NETCDF)
0294         ELSE ()
0295                 MESSAGE (STATUS "Network Common Data Format (NetCDF) Library NOT FOUND")
0296         ENDIF ()
0297 ELSE ()
0298         MESSAGE (STATUS "Network Common Data Format (NetCDF) Library DISABLED")
0299 ENDIF ()
0300 
0301 ### MQTT (optional) ###############################
0302 IF (ENABLE_MQTT)
0303 # ATTENTION: unit test uses qWaitFor() which needs Qt >= 5.10
0304 # avoid warning for the moment using QUIET
0305         find_package(Qt5Mqtt ${QT_MIN_VERSION} NO_MODULE)
0306         IF (Qt5Mqtt_FOUND)
0307                 MESSAGE (STATUS "Found MQTT Library")
0308                 add_definitions (-DHAVE_MQTT)
0309         ELSE ()
0310                 MESSAGE (STATUS "MQTT Library NOT FOUND")
0311         ENDIF ()
0312 ELSE ()
0313         MESSAGE (STATUS "MQTT Library DISABLED")
0314 ENDIF ()
0315 
0316 ### QtSerialPort (optional) ###############################
0317 IF (ENABLE_QTSERIALPORT)
0318         find_package(Qt5SerialPort ${QT_MIN_VERSION} NO_MODULE)
0319         SET_PACKAGE_PROPERTIES (Qt5SerialPort PROPERTIES
0320                 DESCRIPTION "Qt Serial Port library"
0321                 URL "https://doc.qt.io/qt-5/qtserialport-index.html"
0322                 PURPOSE "Support basic functionality of serial ports.")
0323         IF (Qt5SerialPort_FOUND)
0324                 MESSAGE (STATUS "Found Qt5SerialPort Library")
0325                 add_definitions (-DHAVE_QTSERIALPORT)
0326         ELSE ()
0327                 MESSAGE (STATUS "Qt5SerialPort Library NOT FOUND")
0328         ENDIF ()
0329 ELSE ()
0330         MESSAGE (STATUS "Qt5SerialPort Library DISABLED")
0331 ENDIF ()
0332 
0333 ### FITS (optional) ###############################
0334 IF (ENABLE_FITS)
0335         FIND_PACKAGE (CFitsio)
0336         SET_PACKAGE_PROPERTIES (CFitsio PROPERTIES
0337                 DESCRIPTION "FITS IO Library"
0338                 URL "https://heasarc.gsfc.nasa.gov/fitsio/fitsio.html"
0339                 PURPOSE "Support for the FITS (Flexible Image Transport System) data format.")
0340         IF (CFITSIO_FOUND)
0341                 add_definitions (-DHAVE_FITS)
0342                 include_directories (${CFITSIO_INCLUDE_DIR})
0343         ELSE ()
0344                 MESSAGE (STATUS "Flexible Image Transport System Data Format (FITS) Library NOT FOUND")
0345         ENDIF ()
0346 ELSE ()
0347         MESSAGE (STATUS "Flexible Image Transport System Data Format (FITS) Library DISABLED")
0348 ENDIF ()
0349 
0350 ### LIBCERF (optional) #############################
0351 IF (ENABLE_LIBCERF)
0352         FIND_PACKAGE (LIBCERF)
0353         IF (LIBCERF_FOUND)
0354                 add_definitions (-DHAVE_LIBCERF)
0355         ELSE ()
0356                 MESSAGE (STATUS "libcerf library NOT FOUND")
0357         ENDIF ()
0358 ELSE ()
0359         MESSAGE (STATUS "libcerf library DISABLED")
0360 ENDIF ()
0361 
0362 ### ROOT (optional) #############################
0363 IF (ENABLE_ROOT)
0364         FIND_PACKAGE(ZLIB)
0365         SET_PACKAGE_PROPERTIES (ZLIB PROPERTIES
0366                 DESCRIPTION "General purpose compression library"
0367                 URL "https://www.zlib.net/"
0368         )
0369         FIND_PACKAGE(LZ4)
0370         IF (ZLIB_FOUND AND LZ4_FOUND)
0371                 MESSAGE (STATUS "Found ZIP libraries ZLIB and LZ4 (needed for ROOT importer)")
0372                 add_definitions (-DHAVE_ZIP)
0373         ELSE ()
0374                 MESSAGE (STATUS "ZIP libraries ZLIB and LZ4 (needed for ROOT importer) NOT FOUND")
0375         ENDIF ()
0376 ELSE ()
0377         MESSAGE (STATUS "ROOT (CERN) importer DISABLED")
0378 ENDIF ()
0379 
0380 ### ReadStat (optional) #############################
0381 # TODO: disabled on Windows until tested
0382 IF (ENABLE_READSTAT AND NOT WIN32)
0383         FIND_PACKAGE (ReadStat)
0384         IF (NOT READSTAT_FOUND)
0385                 MESSAGE (STATUS "ReadStat library NOT FOUND. Building own version")
0386                 set(BUILD_READSTAT TRUE)
0387                 set(READSTAT_LIBRARY ${CMAKE_BINARY_DIR}/src/3rdparty/install/lib/libreadstat.a)
0388         ENDIF ()
0389         add_definitions (-DHAVE_READSTAT)
0390 ELSE ()
0391         MESSAGE (STATUS "ReadStat support DISABLED")
0392 ENDIF ()
0393 #################################################
0394 IF (ENABLE_REPRODUCIBLE)
0395         add_definitions (-DREPRODUCIBLE_BUILD)
0396         message(STATUS "Reproducable build ENABLED")
0397 ELSE ()
0398         message(STATUS "Reproducable build DISABLED")
0399 ENDIF ()
0400 #################################################
0401 #################################################
0402 include(CheckFunctionExists)
0403 
0404 CHECK_FUNCTION_EXISTS(random HAVE_RANDOM_FUNCTION)
0405 #################################################
0406 FIND_PATH (XLOCALE_INCLUDE_DIR xlocale.h
0407         /usr/include
0408         /usr/local/include
0409 )
0410 IF (XLOCALE_INCLUDE_DIR)
0411         add_definitions (-DHAVE_XLOCALE)
0412         include_directories (${XLOCALE_INCLUDE_DIR})
0413 ENDIF()
0414 
0415 add_subdirectory(data)
0416 add_subdirectory(icons)
0417 add_subdirectory(src)
0418 add_subdirectory(doc)
0419 
0420 IF (ENABLE_LIBORIGIN)
0421         add_subdirectory(liborigin)
0422 ENDIF ()
0423 
0424 if (ENABLE_TESTS)
0425     enable_testing(true)
0426     add_subdirectory(tests)
0427 endif()
0428 
0429 install(FILES org.kde.labplot2.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR})
0430 feature_summary(WHAT ALL)
0431 
0432 find_package(KF5I18n CONFIG REQUIRED)
0433 ki18n_install(po)
0434 find_package(KF5DocTools CONFIG REQUIRED)
0435 kdoctools_install(po)