|
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)
|