From 76eac0aab016be8997124a88067dcfd90cd8177f Mon Sep 17 00:00:00 2001 From: Packit Date: Sep 14 2020 10:33:24 +0000 Subject: Apply patch 0060-Various-CMake-patches-from-the-mailing-list.patch patch_name: 0060-Various-CMake-patches-from-the-mailing-list.patch present_in_specfile: true --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 21f082b..b85656c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,12 +31,18 @@ IF(NOT HAVE_REGEX_H) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/libs/regex) ENDIF() +IF(CMAKE_SYSTEM_PROCESSOR MATCHES "[XxIi][0-9]?86|[Aa][Mm][Dd]64") + SET(X86_ON ON) +else() + SET(X86_ON OFF) +ENDIF() + # options controlling the build process OPTION(BUILD_STATIC "Build static library" OFF) OPTION(BUILD_TESTS "Build test suite" OFF) OPTION(BUILD_LENSTOOL "Build the lenstool (requires libpng)" OFF) -OPTION(BUILD_FOR_SSE "Build with support for SSE" ON) -OPTION(BUILD_FOR_SSE2 "Build with support for SSE2" ON) +OPTION(BUILD_FOR_SSE "Build with support for SSE" ${X86_ON}) +OPTION(BUILD_FOR_SSE2 "Build with support for SSE2" ${X86_ON}) OPTION(BUILD_DOC "Build documentation with doxygen" OFF) OPTION(INSTALL_HELPER_SCRIPTS "Install various helper scripts" ON) @@ -62,14 +68,14 @@ ENDIF() IF(BUILD_FOR_SSE) SET(VECTORIZATION_SSE 1) - IF(CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse") + IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + SET(VECTORIZATION_SSE_FLAGS "-msse") ENDIF() ENDIF() IF(BUILD_FOR_SSE2) SET(VECTORIZATION_SSE2 1) - IF(CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2") + IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + SET(VECTORIZATION_SSE2_FLAGS "-msse2") ENDIF() ENDIF() @@ -97,6 +103,7 @@ ELSE() ENDIF() INCLUDE_DIRECTORIES(SYSTEM ${GLIB2_INCLUDE_DIRS}) +LINK_DIRECTORIES(${GLIB2_LIBRARY_DIRS}) IF(BUILD_STATIC) diff --git a/CMakeLists.txt.0060 b/CMakeLists.txt.0060 new file mode 100644 index 0000000..21f082b --- /dev/null +++ b/CMakeLists.txt.0060 @@ -0,0 +1,244 @@ +# require at least cmake 2.8 +CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR ) + +# path for helper modules +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_SOURCE_DIR}/cmake/modules") +GET_FILENAME_COMPONENT(SOURCE_BASE_DIR ${CMAKE_SOURCE_DIR} PATH CACHE) + +# global setup +project(lensfun C CXX) + +# version +SET(VERSION_MAJOR 0) +SET(VERSION_MINOR 3) +SET(VERSION_MICRO 2) +SET(VERSION_BUGFIX 0) +SET(VERSION_API 1) +# This is the version of the *shipped* database, which is not necessarily the +# highest version number supported +SET(LENSFUN_DB_VERSION 1) + +# check if some include are available +INCLUDE(CheckIncludeFiles) +CHECK_INCLUDE_FILES(regex.h HAVE_REGEX_H) +CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H) + +# set include directories +INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/lensfun) +IF(NOT HAVE_REGEX_H) + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/regex) + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/libs/regex) +ENDIF() + +# options controlling the build process +OPTION(BUILD_STATIC "Build static library" OFF) +OPTION(BUILD_TESTS "Build test suite" OFF) +OPTION(BUILD_LENSTOOL "Build the lenstool (requires libpng)" OFF) +OPTION(BUILD_FOR_SSE "Build with support for SSE" ON) +OPTION(BUILD_FOR_SSE2 "Build with support for SSE2" ON) +OPTION(BUILD_DOC "Build documentation with doxygen" OFF) +OPTION(INSTALL_HELPER_SCRIPTS "Install various helper scripts" ON) + +IF(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Debug CACHE STRING + "Choose the type of build, options are: Debug, Release" + FORCE + ) +ENDIF() + +# set local install prefix on windows +IF(WIN32 AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + SET(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install" CACHE PATH "Install prefix for Lensfun" FORCE) +ENDIF() +# get standard GNU install directories for the current platform +INCLUDE(GNUInstallDirs) +IF(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR) + SET(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)") +ENDIF() +IF (WIN32) + SET(LENSFUN_WINDOWS_DATADIR ${CMAKE_INSTALL_DATAROOTDIR}/lensfun CACHE PATH "Directory for library data files. This should be relative to the location where the lensfun.dll will be installed.") +ENDIF() + +IF(BUILD_FOR_SSE) + SET(VECTORIZATION_SSE 1) + IF(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse") + ENDIF() +ENDIF() +IF(BUILD_FOR_SSE2) + SET(VECTORIZATION_SSE2 1) + IF(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2") + ENDIF() +ENDIF() + +IF(WIN32) + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/libs/getopt) + # base path for searching for glib on windows + IF(NOT GLIB2_BASE_DIR) + SET(GLIB2_BASE_DIR "${SOURCE_BASE_DIR}/glib-2.28.1" CACHE STRING "Base path of glib2 dir." FORCE) + ENDIF() + # install glib dll on windows next to lensfun.dll + IF (GLIB2_DLL) + INSTALL(FILES ${GLIB2_DLL} DESTINATION ${CMAKE_INSTALL_BINDIR}) + ENDIF() +ENDIF() + + +IF (BUILD_TESTS) + # automatic tests need at least glib version 2.40 + # NOTE: must be one of the macros listed in https://developer.gnome.org/glib/stable/glib-Version-Information.html + SET(LENSFUN_GLIB_REQUIREMENT_MACRO "GLIB_VERSION_2_40") + FIND_PACKAGE(GLIB2 REQUIRED) +ELSE() + SET(LENSFUN_GLIB_REQUIREMENT_MACRO "GLIB_VERSION_2_26") + FIND_PACKAGE(GLIB2 REQUIRED) +ENDIF() + +INCLUDE_DIRECTORIES(SYSTEM ${GLIB2_INCLUDE_DIRS}) + + +IF(BUILD_STATIC) + ADD_DEFINITIONS(-DCONF_LENSFUN_STATIC) +ENDIF() + + +# some windows and MSVC specific settings +IF(WIN32) + SET(PLATFORM_WINDOWS 1) + + IF (MSVC) + IF(BUILD_STATIC) + # compile everything for the static C runtime + FOREACH(TYPE C CXX) + # makefiles use blank configuration + FOREACH(CFG "_DEBUG" "_MINSIZEREL" "_RELEASE" "_RELWITHDEBINFO") + SET(NEW_FLAGS "${CMAKE_${TYPE}_FLAGS${CFG}}") + # fix up static libc flags + STRING(REPLACE "/MD" "/MT" NEW_FLAGS "${NEW_FLAGS}") + # *FORCE* to override whats already placed into the cache + SET(CMAKE_${TYPE}_FLAGS${CFG} "${NEW_FLAGS}" CACHE STRING + "CMAKE_${TYPE}_FLAGS${CFG} (overwritten to ensure static build)" FORCE) + ENDFOREACH(CFG) + ENDFOREACH(TYPE) + # link only with the static C runtime !! THIS IS A MUST !! + SET(NEW_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") + # ensure that the flags are not duplicaated on subsequent runs + STRING(REPLACE " /NODEFAULTLIB:\"MSVCRT.lib\" /NODEFAULTLIB:\"MSVCRTd.lib\"" "" NEW_FLAGS "${NEW_FLAGS}") + # note that flag names (NODEFAULTLIB) etc.) are case sensitive + SET(CMAKE_EXE_LINKER_FLAGS + "${NEW_FLAGS} /NODEFAULTLIB:\"MSVCRT.lib\" /NODEFAULTLIB:\"MSVCRTd.lib\"" + CACHE STRING "for MSVC" FORCE + ) + ENDIF() + ENDIF(MSVC) +ENDIF(WIN32) + +# create config.h file +CONFIGURE_FILE(include/lensfun/config.h.in.cmake ${CMAKE_BINARY_DIR}/config.h) +# create lensfun.h file +CONFIGURE_FILE(include/lensfun/lensfun.h.in ${CMAKE_BINARY_DIR}/lensfun.h @ONLY) + +# include libs +ADD_SUBDIRECTORY(libs) + +# build the test suite +IF(BUILD_TESTS) + enable_testing() + ADD_SUBDIRECTORY(tests) +ENDIF() + +# apps subdir +ADD_SUBDIRECTORY(apps) + +# install include files +INSTALL(FILES ${CMAKE_BINARY_DIR}/lensfun.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lensfun) +IF(NOT HAVE_REGEX_H) + INSTALL(FILES include/regex/regex.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/regex) +ENDIF() + +# install db files +FILE(GLOB DATABASE_FILES data/db/*.xml) +INSTALL(FILES ${DATABASE_FILES} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/lensfun/version_${LENSFUN_DB_VERSION}) +INSTALL(FILES data/db/timestamp.txt DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/lensfun/version_${LENSFUN_DB_VERSION}) + +# build documentation +IF(BUILD_DOC) + ADD_SUBDIRECTORY(docs) +ENDIF() + +IF(WIN32 AND NOT BUILD_STATIC) + FIND_FILE(GLIB2_DLL + NAMES glib-2.dll glib-2-vs9.dll + PATHS "${GLIB2_BASE_DIR}/bin" + NO_SYSTEM_ENVIRONMENT_PATH) + INSTALL(FILES ${GLIB2_DLL} DESTINATION ${CMAKE_INSTALL_BINDIR}) +ENDIF() + +# print some information +MESSAGE(STATUS "-------------------------------------------------------------------------------------") +MESSAGE(STATUS "Building Lensfun ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}.${VERSION_BUGFIX}") +MESSAGE(STATUS "-------------------------------------------------------------------------------------") +IF(BUILD_STATIC) + MESSAGE(STATUS "Build as static library") +ELSE() + MESSAGE(STATUS "Build as dynamic/shared library") +ENDIF() +MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}") +MESSAGE(STATUS "Build doc: ${BUILD_DOC}") +MESSAGE(STATUS "Build test suite: ${BUILD_TESTS}") +MESSAGE(STATUS "Build lenstool: ${BUILD_LENSTOOL}") +MESSAGE(STATUS "Build with support for SSE: ${BUILD_FOR_SSE}") +MESSAGE(STATUS "Build with support for SSE2: ${BUILD_FOR_SSE2}") +MESSAGE(STATUS "Install helper scripts: ${INSTALL_HELPER_SCRIPTS}") +MESSAGE(STATUS "\nInstall prefix: ${CMAKE_INSTALL_PREFIX}") +MESSAGE(STATUS "\nUsing: ") +MESSAGE(STATUS "GLIB2 include dir: ${GLIB2_INCLUDE_DIRS}") +MESSAGE(STATUS "GLIB2 library: ${GLIB2_LIBRARIES}") +IF(GLIB2_DLL) +MESSAGE(STATUS "GLIB2 DLL: ${GLIB2_DLL}") +ENDIF() +IF(BUILD_APPS) +MESSAGE(STATUS "libpng include dir: ${PNG_INCLUDE_DIR}") +MESSAGE(STATUS "libpng lib: ${PNG_LIBRARY}") +MESSAGE(STATUS "zlib include dir: ${ZLIB_INCLUDE_DIR}") +MESSAGE(STATUS "zlib lib: ${ZLIB_LIBRARY}") +ENDIF() + +# Package +# This needs some testing, in particular for right package naming for different +# package managers and distributions. Debian works fine. +SET(CPACK_PACKAGE_NAME "lensfun") +SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}") +SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}") +SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_MICRO}.${VERSION_BUGFIX}") +SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${V_MAJOR}.${V_MINOR}") +SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}.${VERSION_BUGFIX}") +SET(CPACK_SOURCE_GENERATOR "TGZ;TBZ2") +SET(CPACK_PACKAGE_CONTACT "zap@homelink.ru") +SET(CPACK_SET_DESTDIR "ON") +IF(BUILD_AUXFUN) + SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libglib2.0-0 (>=2.0.0), libpng (>=1.0), zlib (>=1.0)") +ELSE() + SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libglib2.0-0 (>=2.0.0)") +ENDIF() + +IF(CPACK_BINARY_DEB) + # workaround to set correct debian package name + SET(CPACK_DEBIAN_PACKAGE_NAME "liblensfun${VERSION_API}") + STRING(TOLOWER "${CPACK_DEBIAN_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE) + FIND_PROGRAM(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems") + if(DPKG_PROGRAM) + EXECUTE_PROCESS( + COMMAND ${DPKG_PROGRAM} --print-architecture + OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME_LOWERCASE}_${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}.${VERSION_BUGFIX}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") + else(DPKG_PROGRAM) + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME_LOWERCASE}_${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}.${VERSION_BUGFIX}_${CMAKE_SYSTEM_NAME}") + endif(DPKG_PROGRAM) +ENDIF(CPACK_BINARY_DEB) + +INCLUDE(CPack) diff --git a/libs/lensfun/CMakeLists.txt b/libs/lensfun/CMakeLists.txt index 6beadec..b0ca638 100644 --- a/libs/lensfun/CMakeLists.txt +++ b/libs/lensfun/CMakeLists.txt @@ -9,6 +9,11 @@ IF(WIN32) LIST(APPEND LENSFUN_SRC windows/auxfun.cpp) ENDIF() +SET_SOURCE_FILES_PROPERTIES(mod-color-sse.cpp mod-coord-sse.cpp + PROPERTIES COMPILE_FLAGS "${VECTORIZATION_SSE_FLAGS}") +SET_SOURCE_FILES_PROPERTIES(mod-color-sse2.cpp + PROPERTIES COMPILE_FLAGS "${VECTORIZATION_SSE2_FLAGS}") + IF(BUILD_STATIC) ADD_LIBRARY(lensfun STATIC ${LENSFUN_SRC}) ELSE() diff --git a/libs/lensfun/CMakeLists.txt.0060 b/libs/lensfun/CMakeLists.txt.0060 new file mode 100644 index 0000000..6beadec --- /dev/null +++ b/libs/lensfun/CMakeLists.txt.0060 @@ -0,0 +1,33 @@ +# build Lensfun library +SET(LENSFUN_SRC camera.cpp database.cpp lens.cpp + mount.cpp lensfunprv.h cpuid.cpp + mod-color-sse.cpp mod-color-sse2.cpp mod-color.cpp + mod-coord-sse.cpp mod-coord.cpp + mod-subpix.cpp modifier.cpp auxfun.cpp + ../../include/lensfun/lensfun.h.in) +IF(WIN32) + LIST(APPEND LENSFUN_SRC windows/auxfun.cpp) +ENDIF() + +IF(BUILD_STATIC) + ADD_LIBRARY(lensfun STATIC ${LENSFUN_SRC}) +ELSE() + ADD_LIBRARY(lensfun SHARED ${LENSFUN_SRC}) + SET_TARGET_PROPERTIES(lensfun PROPERTIES COMPILE_FLAGS -DCONF_SYMBOL_VISIBILITY) +ENDIF() +SET_TARGET_PROPERTIES(lensfun PROPERTIES SOVERSION "${VERSION_API}" VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}") + +IF(NOT HAVE_REGEX_H) + TARGET_LINK_LIBRARIES(lensfun tre_regex) +ENDIF() +TARGET_LINK_LIBRARIES(lensfun ${GLIB2_LIBRARIES}) + +INSTALL(TARGETS lensfun + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +# pkgconfig support +CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/lensfun.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/lensfun.pc @ONLY) +INSTALL( FILES ${CMAKE_CURRENT_BINARY_DIR}/lensfun.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ) +