diff --git a/CMakeLists.txt b/CMakeLists.txt index 99b38c449..4aac68cd8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,365 +1,373 @@ project(labplot2) # minimum 3.2.0 for FindGSL.cmake cmake_minimum_required (VERSION 3.2.0 FATAL_ERROR) set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(QT_MINIMUM_VERSION 5.6.0) set(KF5_MIN_VERSION "5.16.0") set(APPLE_SUPPRESS_X11_WARNING ON) find_package(ECM 1.3.0 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) # build type: "release", "debug", "debugfull" string (TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE) find_package(Qt5 ${QT_MIN_VERSION} NO_MODULE REQUIRED COMPONENTS Concurrent Gui PrintSupport Sql Svg Widgets Test SerialPort ) find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Archive Completion Config ConfigWidgets CoreAddons Crash DocTools I18n IconThemes TextWidgets WidgetsAddons XmlGui OPTIONAL_COMPONENTS NewStuff Service Parts SyntaxHighlighting ) IF (Qt5SerialPort_FOUND) MESSAGE (STATUS "Found Qt5 SerialPort") ELSE () MESSAGE (STATUS "Qt5 SerialPort not found") ENDIF () IF (KF5NewStuff_FOUND) MESSAGE (STATUS "Found KF5 new stuff") add_definitions (-DHAVE_KF5_NEW_STUFF) ELSE () MESSAGE (STATUS "KF5 new stuff not found") ENDIF () IF (KF5SyntaxHighlighting_FOUND) MESSAGE (STATUS "Found KF5 syntax highlighting") add_definitions (-DHAVE_KF5_SYNTAX_HIGHLIGHTING) ELSE () MESSAGE (STATUS "KF5 syntax highlighting not found") ENDIF () find_package(BISON REQUIRED) include(FeatureSummary) include(ECMAddAppIcon) include(ECMInstallIcons) include(KDEInstallDirs) include(KDECompilerSettings) include(KDECMakeSettings) ### compiler flags ###################################### set (GENERIC_FLAGS "-Wall -Wextra -Wundef -Wpointer-arith -Wunreachable-code -Wunused -Wdeprecated-declarations -fno-omit-frame-pointer -fstack-protector") set (GENERIC_GNU_FLAGS "-O2 -Wcast-align -Wswitch-enum -fvisibility=default") set (GENERIC_C_FLAGS "${GENERIC_FLAGS} -fno-exceptions") # liborigin needs exceptions set (GENERIC_CXX_FLAGS "${GENERIC_FLAGS} -fexceptions") if ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU") message(STATUS "GNU C compiler detected, adding compile flags") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GENERIC_C_FLAGS} ${GENERIC_GNU_FLAGS}") elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") message(STATUS "Clang C compiler detected, adding compile flags") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE ${GENERIC_C_FLAGS} ${GENERIC_GNU_FLAGS}") elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "Intel") message(STATUS "Intel C compiler detected, adding compile flags") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -O3 ${GENERIC_C_FLAGS}") elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "PGI") message(STATUS "PGI C compiler detected, adding compile flags") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -O3 -D__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 -Minform=inform -Mbounds -Mchkstk") # " x" postfix to work around a bug in CMake that causes "MSVC" to translate to something completely different elseif (("${CMAKE_C_COMPILER_ID} x" MATCHES "MSVC") OR MSVC) message(STATUS "MSVC C compiler detected, adding compile flags") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -W3") set(MSVC_FOUND TRUE) else () message(STATUS "UNKNOWN C compiler, adding compile flags") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GENERIC_C_FLAGS}") endif() if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") message(STATUS "GNU C++ compiler detected, adding compile flags") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GENERIC_CXX_FLAGS} ${GENERIC_GNU_FLAGS}") elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") message(STATUS "Clang C++ compiler detected, adding compile flags") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE ${GENERIC_CXX_FLAGS} ${GENERIC_GNU_FLAGS}") elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel") message(STATUS "Intel C++ compiler detected, adding compile flags") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GNU_SOURCE -std=c++11 ${GENERIC_CXX_FLAGS}") #-std=c++0x comes with cmake's general flags, deprecated in icc, remove it string(REPLACE "-std=c++0x" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "PGI") message(STATUS "PGI C++ compiler detected, adding compile flags") 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") # " x" postfix to work around a bug in CMake that causes "MSVC" to translate to something completely different elseif (("${CMAKE_CXX_COMPILER_ID} x" MATCHES "MSVC") OR MSVC) message(STATUS "MSVC C++ compiler detected, adding compile flags") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -W3 -DPSAPI_VERSION=1") set(MSVC_FOUND TRUE) else () message(STATUS "UNKNOWN C++ compiler, adding compile flags") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GENERIC_CXX_FLAGS}") endif () ##########################################################ESC[m add_definitions (${QT_DEFINITIONS} ${QT_QTDBUS_DEFINITIONS}) include_directories (${QDBUS_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) add_definitions (-DLVERSION=\"2.6.0\") # add_definitions (-DLDEBUG='1') set(BUILD_SHARED_LIBS true) #cmake_policy(SET CMP0002 OLD) IF (CMAKE_VERSION VERSION_EQUAL "3.3" OR CMAKE_VERSION VERSION_GREATER "3.3") cmake_policy(SET CMP0063 NEW) ENDIF() if (CMAKE_VERSION VERSION_GREATER "3.5") set(ENABLE_CLANG_TIDY OFF CACHE BOOL "Add clang-tidy automatically to builds") if (ENABLE_CLANG_TIDY) find_program (CLANG_TIDY_EXE NAMES "clang-tidy" PATHS /usr/bin) if (CLANG_TIDY_EXE) message(STATUS "Clang-tidy supported, found and enabled: ${CLANG_TIDY_EXE}") set(CLANG_TIDY_CHECKS "-*,modernize-*") # -extra-arg=--std=c++11 set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};-checks=${CLANG_TIDY_CHECKS};-header-filter='${CMAKE_SOURCE_DIR}/*'" CACHE STRING "" FORCE) else() message(AUTHOR_WARNING "clang-tidy not found!") set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) # delete it endif() else() message(STATUS "Clang-tidy supported but disabled") endif() endif() ### Options ###################################### option(ENABLE_CANTOR "Build with Cantor support" ON) option(ENABLE_FFTW "Build with FFTW support" ON) option(ENABLE_HDF5 "Build with HDF5 support" ON) option(ENABLE_NETCDF "Build with NetCDF support" ON) option(ENABLE_FITS "Build with FITS support" ON) option(ENABLE_LIBCERF "Build with libcerf support" ON) option(ENABLE_LIBORIGIN "Build with liborigin support" ON) option(ENABLE_ROOT "Build with ROOT (CERN) support" ON) option(ENABLE_TESTS "Build with tests" ON) option(ENABLE_MQTT "Build with MQTT support" ON) ### OS macros #################################### IF (WIN32) add_definitions (-DHAVE_WINDOWS) find_library (PSAPI Psapi) message (STATUS "PSAPI: ${PSAPI}") ENDIF () ### GSL (required) ############################### FIND_PACKAGE(GSL REQUIRED) ### liborigin (included) ############################### IF (ENABLE_LIBORIGIN) add_definitions (-DHAVE_LIBORIGIN) IF (CMAKE_BUILD_TYPE STREQUAL "debug" OR CMAKE_BUILD_TYPE STREQUAL "debugfull") MESSAGE (STATUS "Origin project import (through internal liborigin) enabled (parser logging enabled)") SET (ENABLE_ORIGIN_PARSER_LOG TRUE) ELSE () MESSAGE (STATUS "Origin project import (through internal liborigin) enabled (parser logging disabled)") ENDIF () ELSE () MESSAGE (STATUS "Origin project import DISABLED") ENDIF () ### Cantorlibs (optional) ############################### IF (ENABLE_CANTOR) FIND_LIBRARY (CANTOR_LIBS cantorlibs) FIND_PATH (CANTOR_INCLUDE_DIR cantor/worksheetaccess.h /usr/include /usr/local/include ) IF (CANTOR_LIBS AND CANTOR_INCLUDE_DIR AND KF5Service_FOUND AND KF5Parts_FOUND) SET (CANTOR_LIBS_FOUND TRUE) FIND_PATH (CANTOR_VERSION_FILE cantor/cantorlibs_version.h /usr/include /usr/local/include ) IF (NOT CANTOR_VERSION_FILE) add_definitions (-DOLD_CANTORLIBS_VERSION) ENDIF() ELSE () SET (CANTOR_LIBS_FOUND FALSE) SET (CANTOR_LIBS "") ENDIF() IF (CANTOR_LIBS_FOUND) MESSAGE (STATUS "Found Cantor Library: ${CANTOR_INCLUDE_DIR} ${CANTOR_LIBS}") add_definitions (-DHAVE_CANTOR_LIBS) ELSE () MESSAGE (STATUS "Cantor Library NOT FOUND") ENDIF () ELSE () MESSAGE (STATUS "Cantor Library DISABLED") ENDIF () ### FFTW (optional) ##################################### IF (ENABLE_FFTW) FIND_PACKAGE (FFTW3) IF (FFTW3_FOUND) add_definitions (-DHAVE_FFTW3) ELSE () MESSAGE (STATUS "FFTW 3 Library NOT FOUND") ENDIF () ELSE () MESSAGE (STATUS "FFTW 3 Library DISABLED") ENDIF () ### HDF5 (optional) ############################## IF (ENABLE_HDF5) FIND_PACKAGE(HDF5 COMPONENTS C) +SET_PACKAGE_PROPERTIES (HDF5 PROPERTIES + DESCRIPTION "Reading and writing self describing array data" + URL "https://www.hdfgroup.org/solutions/hdf5/" +) IF (HDF5_FOUND) add_definitions (-DHAVE_HDF5) IF (HDF5_VERSION VERSION_GREATER "1.9") add_definitions (-DHAVE_AT_LEAST_HDF5_1_10_0) ENDIF () IF (HDF5_VERSION VERSION_GREATER "1.10.0.1") add_definitions (-DHAVE_AT_LEAST_HDF5_1_10_0) add_definitions (-DHAVE_AT_LEAST_HDF5_1_10_1) ENDIF () include_directories (${HDF5_INCLUDE_DIRS}) ELSE () MESSAGE (STATUS "Hierarchical Data Format (HDF5) Library NOT FOUND") ENDIF () ELSE () MESSAGE (STATUS "Hierarchical Data Format (HDF5) Library DISABLED") ENDIF () ### NETCDF (optional) ############################# IF (ENABLE_NETCDF) FIND_PACKAGE(netCDF) SET_PACKAGE_PROPERTIES(netCDF PROPERTIES DESCRIPTION "Interfaces for array-oriented data access" URL "https://www.unidata.ucar.edu/software/netcdf/" ) IF (netCDF_FOUND) add_definitions (-DHAVE_NETCDF) ELSE () MESSAGE (STATUS "Network Common Data Format (NetCDF) Library NOT FOUND") ENDIF () ELSE () MESSAGE (STATUS "Network Common Data Format (NetCDF) Library DISABLED") ENDIF () ### MQTT (optional) ############################### IF (ENABLE_MQTT) # ATTENTION: unit test uses qWaitFor() which needs Qt >= 5.10 # avoid warning for the moment using QUIET find_package(Qt5Mqtt ${QT_MIN_VERSION} QUIET NO_MODULE) IF (Qt5Mqtt_FOUND) MESSAGE (STATUS "Found MQTT Library") add_definitions (-DHAVE_MQTT) ELSE () MESSAGE (STATUS "MQTT Library NOT FOUND") ENDIF () ELSE () MESSAGE (STATUS "MQTT Library DISABLED") ENDIF () ### FITS (optional) ############################### IF (ENABLE_FITS) FIND_PACKAGE (CFitsio) SET_PACKAGE_PROPERTIES (CFitsio PROPERTIES DESCRIPTION "FITS IO Library" URL "http://heasarc.gsfc.nasa.gov/fitsio/fitsio.html" PURPOSE "Support for the FITS (Flexible Image Transport System) data format.") IF (CFITSIO_FOUND) add_definitions (-DHAVE_FITS) include_directories (${CFITSIO_INCLUDE_DIR}) ELSE () MESSAGE (STATUS "Flexible Image Transport System Data Format (FITS) Library NOT FOUND") ENDIF () ELSE () MESSAGE (STATUS "Flexible Image Transport System Data Format (FITS) Library DISABLED") ENDIF () ### LIBCERF (optional) ############################# IF (ENABLE_LIBCERF) FIND_PACKAGE (LIBCERF) IF (LIBCERF_FOUND) add_definitions (-DHAVE_LIBCERF) ELSE () MESSAGE (STATUS "libcerf library NOT FOUND") ENDIF () ELSE () MESSAGE (STATUS "libcerf library DISABLED") ENDIF () IF (ENABLE_ROOT) FIND_PACKAGE(ZLIB) +SET_PACKAGE_PROPERTIES (ZLIB PROPERTIES + DESCRIPTION "General purpose compression library" + URL "https://www.zlib.net/" +) FIND_PACKAGE(LZ4) IF (ZLIB_FOUND AND LZ4_FOUND) MESSAGE (STATUS "Found ZIP libraries ZLIB and LZ4 (needed for ROOT importer)") add_definitions (-DHAVE_ZIP) ELSE () MESSAGE (STATUS "ZIP libraries ZLIB and LZ4 (needed for ROOT importer) NOT FOUND") ENDIF () ELSE () MESSAGE (STATUS "ROOT (CERN) importer DISABLED") ENDIF () ################################################# include(CheckFunctionExists) CHECK_FUNCTION_EXISTS(random HAVE_RANDOM_FUNCTION) ################################################# FIND_PATH (XLOCALE_INCLUDE_DIR xlocale.h /usr/include /usr/local/include ) IF (XLOCALE_INCLUDE_DIR) add_definitions (-DHAVE_XLOCALE) include_directories (${XLOCALE_INCLUDE_DIR}) ENDIF() add_subdirectory(data) add_subdirectory(icons) add_subdirectory(src) add_subdirectory(doc) IF (ENABLE_LIBORIGIN) add_subdirectory(liborigin) ENDIF () if (ENABLE_TESTS) enable_testing(true) add_subdirectory(tests) endif() install(FILES org.kde.labplot2.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) feature_summary(WHAT ALL) diff --git a/cmake/FindFFTW3.cmake b/cmake/FindFFTW3.cmake index d43e316ce..b1e5f35e2 100644 --- a/cmake/FindFFTW3.cmake +++ b/cmake/FindFFTW3.cmake @@ -1,68 +1,68 @@ #============================================================================= # Copyright (c) 2019 Harald Sitter # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= find_package(PkgConfig QUIET) pkg_check_modules(PC_FFTW3 fftw3 QUIET) find_library(FFTW3_LIBRARIES NAMES fftw3 HINTS ${PC_FFTW3_LIBRARY_DIRS} ) find_path(FFTW3_INCLUDE_DIR NAMES fftw3.h HINTS ${PC_FFTW3_INCLUDE_DIRS} PATH_SUFFIXES fftw3 ) set(FFTW3_VERSION ${PC_FFTW3_VERSION}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(FFTW3 REQUIRED_VARS FFTW3_LIBRARIES FFTW3_INCLUDE_DIR VERSION_VAR FFTW3_VERSION ) if(FFTW3_FOUND AND NOT TARGET FFTW3::FFTW3) add_library(FFTW3::FFTW3 UNKNOWN IMPORTED) set_target_properties(FFTW3::FFTW3 PROPERTIES IMPORTED_LOCATION "${FFTW3_LIBRARIES}" INTERFACE_COMPILE_OPTIONS "${PC_FFTW3_CFLAGS}" INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIR}" ) endif() mark_as_advanced(FFTW3_LIBRARIES FFTW3_INCLUDE_DIR FFTW3_VERSUON) include(FeatureSummary) set_package_properties(FFTW3 PROPERTIES - DESCRIPTION "FFT library" + DESCRIPTION "Computing the Discrete Fourier Transform in one or more dimensions" URL "http://fftw.org/" ) diff --git a/cmake/FindLIBCERF.cmake b/cmake/FindLIBCERF.cmake index 490f3c283..bd1c40826 100644 --- a/cmake/FindLIBCERF.cmake +++ b/cmake/FindLIBCERF.cmake @@ -1,67 +1,67 @@ #============================================================================= # Copyright (c) 2019 Harald Sitter # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= find_package(PkgConfig QUIET) pkg_check_modules(PC_LIBCERF libcerf QUIET) find_library(LIBCERF_LIBRARY NAMES cerf HINTS ${PC_LIBCERF_LIBRARY_DIRS} ) find_path(LIBCERF_INCLUDE_DIR NAMES cerf.h HINTS ${PC_LIBCERF_INCLUDE_DIRS} ) set(LIBCERF_VERSION ${PC_LIBCERF_VERSION}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LIBCERF REQUIRED_VARS LIBCERF_LIBRARY LIBCERF_INCLUDE_DIR VERSION_VAR LIBCERF_VERSION ) if(LIBCERF_FOUND AND NOT TARGET libcerf::libcerf) add_library(libcerf::libcerf UNKNOWN IMPORTED) set_target_properties(libcerf::libcerf PROPERTIES IMPORTED_LOCATION "${LIBCERF_LIBRARY}" INTERFACE_COMPILE_OPTIONS "${PC_LIBCERF_CFLAGS}" INTERFACE_INCLUDE_DIRECTORIES "${LIBCERF_INCLUDE_DIR}" ) endif() mark_as_advanced(LIBCERF_LIBRARIES LIBCERF_INCLUDE_DIR LIBCERF_VERSION) include(FeatureSummary) set_package_properties(LIBCERF PROPERTIES - DESCRIPTION "efficient and accurate implementation of complex error functions, along with Dawson, Faddeeva, and Voigt functions" + DESCRIPTION "Efficient and accurate implementation of complex error functions, along with Dawson, Faddeeva, and Voigt functions" URL "https://jugit.fz-juelich.de/mlz/libcerf" ) diff --git a/cmake/FindLZ4.cmake b/cmake/FindLZ4.cmake index 9c96fafd8..1a8b96ab2 100644 --- a/cmake/FindLZ4.cmake +++ b/cmake/FindLZ4.cmake @@ -1,85 +1,85 @@ #============================================================================= # Copyright (c) 2019 Harald Sitter # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= find_package(PkgConfig QUIET) pkg_check_modules(PC_LZ4 lz4 QUIET) find_library(LZ4_LIBRARY NAMES lz4 HINTS ${PC_LZ4_LIBRARY_DIRS} ) find_path(LZ4_INCLUDE_DIR NAMES lz4.h HINTS ${PC_LZ4_INCLUDE_DIRS} ) set(LZ4_VERSION "${PC_LZ4_VERSION}") if(NOT LZ4_VERSION) if(EXISTS "${LZ4_INCLUDE_DIR}/lz4.h") file(READ "${LZ4_INCLUDE_DIR}/lz4.h" LZ4_H_CONTENT) string(REGEX MATCH "#define LZ4_VERSION_MAJOR[ ]+[0-9]+" LZ4_VERSION_MAJOR_MATCH ${LZ4_H_CONTENT}) string(REGEX MATCH "#define LZ4_VERSION_MINOR[ ]+[0-9]+" LZ4_VERSION_MINOR_MATCH ${LZ4_H_CONTENT}) string(REGEX MATCH "#define LZ4_VERSION_RELEASE[ ]+[0-9]+" LZ4_VERSION_RELEASE_MATCH ${LZ4_H_CONTENT}) string(REGEX REPLACE ".*_MAJOR[ ]+(.*)" "\\1" LZ4_VERSION_MAJOR ${LZ4_VERSION_MAJOR_MATCH}) string(REGEX REPLACE ".*_MINOR[ ]+(.*)" "\\1" LZ4_VERSION_MINOR ${LZ4_VERSION_MINOR_MATCH}) string(REGEX REPLACE ".*_RELEASE[ ]+(.*)" "\\1" LZ4_VERSION_RELEASE ${LZ4_VERSION_RELEASE_MATCH}) set(LZ4_VERSION "${LZ4_VERSION_MAJOR}.${LZ4_VERSION_MINOR}.${LZ4_VERSION_RELEASE}") else() set(LZ4_VERSION "0.0.0") endif() endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LZ4 REQUIRED_VARS LZ4_LIBRARY LZ4_INCLUDE_DIR VERSION_VAR LZ4_VERSION ) if(LZ4_FOUND AND NOT TARGET lz4::lz4) add_library(lz4::lz4 UNKNOWN IMPORTED) set_target_properties(lz4::lz4 PROPERTIES IMPORTED_LOCATION "${LZ4_LIBRARY}" INTERFACE_COMPILE_OPTIONS "${PC_LZ4_CFLAGS}" INTERFACE_INCLUDE_DIRECTORIES "${LZ4_INCLUDE_DIR}" ) endif() mark_as_advanced(LZ4_LIBRARY LZ4_INCLUDE_DIR LZ4_VERSION) include(FeatureSummary) set_package_properties(LZ4 PROPERTIES - DESCRIPTION "lossless compression algorithm" + DESCRIPTION "Lossless compression algorithm" URL "https://lz4.github.io/lz4/" )