Blame CMakeLists.txt

Packit Service 48484a
# require at least cmake 2.8
Packit Service 48484a
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR )
Packit Service 48484a
Packit Service 48484a
# path for helper modules
Packit Service 48484a
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_SOURCE_DIR}/cmake/modules")
Packit Service 48484a
GET_FILENAME_COMPONENT(SOURCE_BASE_DIR ${CMAKE_SOURCE_DIR} PATH CACHE)
Packit Service 48484a
Packit Service 48484a
#  global setup
Packit Service 48484a
project(lensfun C CXX)
Packit Service 48484a
Packit Service 48484a
# version
Packit Service 48484a
SET(VERSION_MAJOR 0)
Packit Service 48484a
SET(VERSION_MINOR 3)
Packit Service 48484a
SET(VERSION_MICRO 2)
Packit Service 48484a
SET(VERSION_BUGFIX 0)
Packit Service 48484a
SET(VERSION_API 1)
Packit Service 48484a
# This is the version of the *shipped* database, which is not necessarily the
Packit Service 48484a
# highest version number supported
Packit Service 48484a
SET(LENSFUN_DB_VERSION 1)
Packit Service 48484a
Packit Service 48484a
# check if some include are available
Packit Service 48484a
INCLUDE(CheckIncludeFiles)
Packit Service 48484a
CHECK_INCLUDE_FILES(regex.h HAVE_REGEX_H)
Packit Service 48484a
CHECK_INCLUDE_FILES(endian.h HAVE_ENDIAN_H)
Packit Service 48484a
Packit Service 48484a
# set include directories
Packit Service 48484a
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
Packit Service 48484a
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/lensfun)
Packit Service 48484a
IF(NOT HAVE_REGEX_H)
Packit Service 48484a
  INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/regex)
Packit Service 48484a
  INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/libs/regex)
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
# options controlling the build process
Packit Service 48484a
OPTION(BUILD_STATIC "Build static library" OFF)
Packit Service 48484a
OPTION(BUILD_TESTS "Build test suite" OFF)
Packit Service 48484a
OPTION(BUILD_LENSTOOL "Build the lenstool (requires libpng)" OFF)
Packit Service 48484a
OPTION(BUILD_FOR_SSE "Build with support for SSE" ON)
Packit Service 48484a
OPTION(BUILD_FOR_SSE2 "Build with support for SSE2" ON)
Packit Service 48484a
OPTION(BUILD_DOC "Build documentation with doxygen" OFF)
Packit Service 48484a
OPTION(INSTALL_HELPER_SCRIPTS "Install various helper scripts" ON)
Packit Service 48484a
Packit Service 48484a
IF(NOT CMAKE_BUILD_TYPE)
Packit Service 48484a
  set(CMAKE_BUILD_TYPE Debug CACHE STRING
Packit Service 48484a
       "Choose the type of build, options are: Debug, Release"
Packit Service 48484a
       FORCE
Packit Service 48484a
  )
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
# set local install prefix on windows
Packit Service 48484a
IF(WIN32 AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)  
Packit Service 48484a
  SET(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install" CACHE PATH "Install prefix for Lensfun" FORCE)    
Packit Service 48484a
ENDIF()
Packit Service 48484a
# get standard GNU install directories for the current platform
Packit Service 48484a
INCLUDE(GNUInstallDirs)
Packit Service 48484a
IF(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR)
Packit Service 48484a
  SET(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)")
Packit Service 48484a
ENDIF()
Packit Service 48484a
IF (WIN32)
Packit Service 48484a
    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.")
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
IF(BUILD_FOR_SSE)
Packit Service 48484a
  SET(VECTORIZATION_SSE 1)
Packit Service 48484a
  IF(CMAKE_COMPILER_IS_GNUCXX)
Packit Service 48484a
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse")
Packit Service 48484a
  ENDIF()
Packit Service 48484a
ENDIF()
Packit Service 48484a
IF(BUILD_FOR_SSE2)
Packit Service 48484a
  SET(VECTORIZATION_SSE2 1)
Packit Service 48484a
  IF(CMAKE_COMPILER_IS_GNUCXX)
Packit Service 48484a
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
Packit Service 48484a
  ENDIF()
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
IF(WIN32)
Packit Service 48484a
  INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/libs/getopt)
Packit Service 48484a
  # base path for searching for glib on windows
Packit Service 48484a
  IF(NOT GLIB2_BASE_DIR)
Packit Service 48484a
    SET(GLIB2_BASE_DIR "${SOURCE_BASE_DIR}/glib-2.28.1" CACHE STRING "Base path of glib2 dir." FORCE)
Packit Service 48484a
  ENDIF()
Packit Service 48484a
  # install glib dll on windows next to lensfun.dll
Packit Service 48484a
  IF (GLIB2_DLL)
Packit Service 48484a
    INSTALL(FILES ${GLIB2_DLL} DESTINATION ${CMAKE_INSTALL_BINDIR})
Packit Service 48484a
  ENDIF()
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
# find dependencies
Packit Service 48484a
# NOTE: must be one of the macros listed in https://developer.gnome.org/glib/stable/glib-Version-Information.html
Packit Service 48484a
SET(LENSFUN_GLIB_REQUIREMENT_MACRO "GLIB_VERSION_2_40")
Packit Service 48484a
FIND_PACKAGE(GLIB2 REQUIRED 2.40)
Packit Service 48484a
Packit Service 48484a
INCLUDE_DIRECTORIES(SYSTEM ${GLIB2_INCLUDE_DIRS})
Packit Service 48484a
Packit Service 48484a
Packit Service 48484a
IF(BUILD_STATIC)
Packit Service 48484a
  ADD_DEFINITIONS(-DCONF_LENSFUN_STATIC)
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
Packit Service 48484a
# some windows and MSVC specific settings
Packit Service 48484a
IF(WIN32)
Packit Service 48484a
  SET(PLATFORM_WINDOWS 1)  
Packit Service 48484a
  
Packit Service 48484a
  IF (MSVC)
Packit Service 48484a
    IF(BUILD_STATIC)
Packit Service 48484a
      # compile everything for the static C runtime
Packit Service 48484a
      FOREACH(TYPE C CXX)
Packit Service 48484a
        # makefiles use blank configuration
Packit Service 48484a
        FOREACH(CFG "_DEBUG" "_MINSIZEREL" "_RELEASE" "_RELWITHDEBINFO")
Packit Service 48484a
          SET(NEW_FLAGS "${CMAKE_${TYPE}_FLAGS${CFG}}")
Packit Service 48484a
          # fix up static libc flags
Packit Service 48484a
          STRING(REPLACE "/MD" "/MT" NEW_FLAGS "${NEW_FLAGS}")
Packit Service 48484a
          # *FORCE* to override whats already placed into the cache
Packit Service 48484a
          SET(CMAKE_${TYPE}_FLAGS${CFG} "${NEW_FLAGS}" CACHE STRING
Packit Service 48484a
            "CMAKE_${TYPE}_FLAGS${CFG} (overwritten to ensure static build)" FORCE)
Packit Service 48484a
        ENDFOREACH(CFG)
Packit Service 48484a
      ENDFOREACH(TYPE)
Packit Service 48484a
      # link only with the static C runtime !! THIS IS A MUST !!
Packit Service 48484a
      SET(NEW_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
Packit Service 48484a
      # ensure that the flags are not duplicaated on subsequent runs
Packit Service 48484a
      STRING(REPLACE " /NODEFAULTLIB:\"MSVCRT.lib\" /NODEFAULTLIB:\"MSVCRTd.lib\"" "" NEW_FLAGS "${NEW_FLAGS}")
Packit Service 48484a
      # note that flag names (NODEFAULTLIB) etc.) are case sensitive
Packit Service 48484a
      SET(CMAKE_EXE_LINKER_FLAGS
Packit Service 48484a
          "${NEW_FLAGS} /NODEFAULTLIB:\"MSVCRT.lib\" /NODEFAULTLIB:\"MSVCRTd.lib\""
Packit Service 48484a
          CACHE STRING "for MSVC" FORCE
Packit Service 48484a
      )
Packit Service 48484a
    ENDIF()
Packit Service 48484a
  ENDIF(MSVC)
Packit Service 48484a
ENDIF(WIN32)
Packit Service 48484a
Packit Service 48484a
# create config.h file
Packit Service 48484a
CONFIGURE_FILE(include/lensfun/config.h.in.cmake ${CMAKE_BINARY_DIR}/config.h)
Packit Service 48484a
# create lensfun.h file
Packit Service 48484a
CONFIGURE_FILE(include/lensfun/lensfun.h.in ${CMAKE_BINARY_DIR}/lensfun.h @ONLY)
Packit Service 48484a
Packit Service 48484a
# include libs
Packit Service 48484a
ADD_SUBDIRECTORY(libs)
Packit Service 48484a
Packit Service 48484a
# build the test suite
Packit Service 48484a
IF(BUILD_TESTS)
Packit Service 48484a
    enable_testing()
Packit Service 48484a
    ADD_SUBDIRECTORY(tests)
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
# apps subdir
Packit Service 48484a
ADD_SUBDIRECTORY(apps)
Packit Service 48484a
Packit Service 48484a
# install include files
Packit Service 48484a
INSTALL(FILES ${CMAKE_BINARY_DIR}/lensfun.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lensfun)
Packit Service 48484a
IF(NOT HAVE_REGEX_H)
Packit Service 48484a
  INSTALL(FILES include/regex/regex.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/regex)
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
# install db files
Packit Service 48484a
FILE(GLOB DATABASE_FILES data/db/*.xml)
Packit Service 48484a
INSTALL(FILES ${DATABASE_FILES} DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/lensfun/version_${LENSFUN_DB_VERSION})
Packit Service 48484a
INSTALL(FILES data/db/timestamp.txt DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/lensfun/version_${LENSFUN_DB_VERSION})
Packit Service 48484a
Packit Service 48484a
# build documentation
Packit Service 48484a
IF(BUILD_DOC)
Packit Service 48484a
  ADD_SUBDIRECTORY(docs)
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
IF(WIN32 AND NOT BUILD_STATIC)
Packit Service 48484a
  FIND_FILE(GLIB2_DLL 
Packit Service 48484a
            NAMES glib-2.dll glib-2-vs9.dll
Packit Service 48484a
            PATHS "${GLIB2_BASE_DIR}/bin"
Packit Service 48484a
            NO_SYSTEM_ENVIRONMENT_PATH)
Packit Service 48484a
  INSTALL(FILES ${GLIB2_DLL} DESTINATION ${CMAKE_INSTALL_BINDIR})
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
# print some information
Packit Service 48484a
MESSAGE(STATUS "-------------------------------------------------------------------------------------")
Packit Service 48484a
MESSAGE(STATUS "Building Lensfun ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}.${VERSION_BUGFIX}")
Packit Service 48484a
MESSAGE(STATUS "-------------------------------------------------------------------------------------")
Packit Service 48484a
IF(BUILD_STATIC)
Packit Service 48484a
  MESSAGE(STATUS "Build as static library")
Packit Service 48484a
ELSE()
Packit Service 48484a
  MESSAGE(STATUS "Build as dynamic/shared library")
Packit Service 48484a
ENDIF()
Packit Service 48484a
MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
Packit Service 48484a
MESSAGE(STATUS "Build doc: ${BUILD_DOC}")
Packit Service 48484a
MESSAGE(STATUS "Build test suite: ${BUILD_TESTS}")
Packit Service 48484a
MESSAGE(STATUS "Build lenstool: ${BUILD_LENSTOOL}")
Packit Service 48484a
MESSAGE(STATUS "Build with support for SSE: ${BUILD_FOR_SSE}")
Packit Service 48484a
MESSAGE(STATUS "Build with support for SSE2: ${BUILD_FOR_SSE2}")
Packit Service 48484a
MESSAGE(STATUS "Install helper scripts: ${INSTALL_HELPER_SCRIPTS}")
Packit Service 48484a
MESSAGE(STATUS "\nInstall prefix: ${CMAKE_INSTALL_PREFIX}")
Packit Service 48484a
MESSAGE(STATUS "\nUsing: ")
Packit Service 48484a
MESSAGE(STATUS "GLIB2 include dir: ${GLIB2_INCLUDE_DIRS}")
Packit Service 48484a
MESSAGE(STATUS "GLIB2 library: ${GLIB2_LIBRARIES}")
Packit Service 48484a
IF(GLIB2_DLL)
Packit Service 48484a
MESSAGE(STATUS "GLIB2 DLL: ${GLIB2_DLL}")
Packit Service 48484a
ENDIF()
Packit Service 48484a
IF(BUILD_APPS)
Packit Service 48484a
MESSAGE(STATUS "libpng include dir: ${PNG_INCLUDE_DIR}")
Packit Service 48484a
MESSAGE(STATUS "libpng lib: ${PNG_LIBRARY}")
Packit Service 48484a
MESSAGE(STATUS "zlib include dir: ${ZLIB_INCLUDE_DIR}")
Packit Service 48484a
MESSAGE(STATUS "zlib lib: ${ZLIB_LIBRARY}")
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
# Package
Packit Service 48484a
# This needs some testing, in particular for right package naming for different
Packit Service 48484a
# package managers and distributions. Debian works fine.
Packit Service 48484a
SET(CPACK_PACKAGE_NAME "lensfun")
Packit Service 48484a
SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}")
Packit Service 48484a
SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}")
Packit Service 48484a
SET(CPACK_PACKAGE_VERSION_PATCH "${VERSION_MICRO}.${VERSION_BUGFIX}")
Packit Service 48484a
SET(CPACK_PACKAGE_INSTALL_DIRECTORY "CMake ${V_MAJOR}.${V_MINOR}")
Packit Service 48484a
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}.${VERSION_BUGFIX}")
Packit Service 48484a
SET(CPACK_SOURCE_GENERATOR "TGZ;TBZ2")
Packit Service 48484a
SET(CPACK_PACKAGE_CONTACT "zap@homelink.ru")
Packit Service 48484a
SET(CPACK_SET_DESTDIR "ON")
Packit Service 48484a
IF(BUILD_AUXFUN)
Packit Service 48484a
  SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libglib2.0-0 (>=2.0.0), libpng (>=1.0), zlib (>=1.0)")
Packit Service 48484a
ELSE()
Packit Service 48484a
  SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libglib2.0-0 (>=2.0.0)")
Packit Service 48484a
ENDIF()
Packit Service 48484a
Packit Service 48484a
IF(CPACK_BINARY_DEB)
Packit Service 48484a
  # workaround to set correct debian package name
Packit Service 48484a
  SET(CPACK_DEBIAN_PACKAGE_NAME "liblensfun${VERSION_API}")
Packit Service 48484a
  STRING(TOLOWER "${CPACK_DEBIAN_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE)
Packit Service 48484a
  FIND_PROGRAM(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems")
Packit Service 48484a
  if(DPKG_PROGRAM)
Packit Service 48484a
      EXECUTE_PROCESS(
Packit Service 48484a
          COMMAND ${DPKG_PROGRAM} --print-architecture
Packit Service 48484a
          OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
Packit Service 48484a
          OUTPUT_STRIP_TRAILING_WHITESPACE
Packit Service 48484a
      )
Packit Service 48484a
      SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME_LOWERCASE}_${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}.${VERSION_BUGFIX}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
Packit Service 48484a
  else(DPKG_PROGRAM)
Packit Service 48484a
      SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME_LOWERCASE}_${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}.${VERSION_BUGFIX}_${CMAKE_SYSTEM_NAME}")
Packit Service 48484a
  endif(DPKG_PROGRAM)
Packit Service 48484a
ENDIF(CPACK_BINARY_DEB)
Packit Service 48484a
Packit Service 48484a
INCLUDE(CPack)