Blame CMakeLists.txt.0001

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