# ===========================================================
#
# This file is a part of Libraw project
# http://www.libraw.org
#
# @date 2013-09-07
# @brief Library for reading and processing of RAW images
#
# @author Copyright (C) 2013 by Gilles Caulier
# caulier dot gilles at gmail dot com
#
# This program is free software; you can redistribute it
# and/or modify it under the terms of the GNU General
# Public License as published by the Free Software Foundation;
# either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# ============================================================
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3)
PROJECT(libraw)
# ==================================================================================================
# Library version info extraction
FILE(READ ${CMAKE_CURRENT_SOURCE_DIR}/libraw/libraw_version.h _libraw_version_content)
# API version strings
STRING(REGEX MATCH "#define LIBRAW_MAJOR_VERSION[ \t]*([0-9]*)\n" _version_major_match ${_libraw_version_content})
SET(RAW_LIB_MAJOR_VERSION "${CMAKE_MATCH_1}")
STRING(REGEX MATCH "#define LIBRAW_MINOR_VERSION[ \t]*([0-9]*)\n" _version_minor_match ${_libraw_version_content})
SET(RAW_LIB_MINOR_VERSION "${CMAKE_MATCH_1}")
STRING(REGEX MATCH "#define LIBRAW_PATCH_VERSION[ \t]*([0-9]*)\n" _version_patch_match ${_libraw_version_content})
SET(RAW_LIB_PATCH_VERSION "${CMAKE_MATCH_1}")
# ABI version strings
STRING(REGEX MATCH "#define LIBRAW_SHLIB_CURRENT[ \t]*([0-9]*)\n" _version_socur_match ${_libraw_version_content})
SET(RAW_LIB_SO_CUR_VERSION "${CMAKE_MATCH_1}")
STRING(REGEX MATCH "#define LIBRAW_SHLIB_REVISION[ \t]*([0-9]*)\n" _version_sorev_match ${_libraw_version_content})
SET(RAW_LIB_SO_REV_VERSION "${CMAKE_MATCH_1}")
STRING(REGEX MATCH "#define LIBRAW_SHLIB_AGE[ \t]*([0-9]*)\n" _version_soage_match ${_libraw_version_content})
SET(RAW_LIB_SO_AGE_VERSION "${CMAKE_MATCH_1}")
# Set env. variables accordinly.
SET(RAW_LIB_VERSION_STRING "${RAW_LIB_MAJOR_VERSION}.${RAW_LIB_MINOR_VERSION}.${RAW_LIB_PATCH_VERSION}")
SET(RAW_LIB_VERSION_ID "0x${RAW_LIB_MAJOR_VERSION}${RAW_LIB_MINOR_VERSION}${RAW_LIB_PATCH_VERSION}")
SET(RAW_LIB_SO_VERSION_STRING "${RAW_LIB_SO_CUR_VERSION}.${RAW_LIB_SO_REV_VERSION}.${RAW_LIB_SO_AGE_VERSION}")
MESSAGE(STATUS "LibRaw string version: ${RAW_LIB_VERSION_STRING}")
MESSAGE(STATUS "LibRaw ID version: ${RAW_LIB_VERSION_ID}")
MESSAGE(STATUS "LibRaw SO version: ${RAW_LIB_SO_VERSION_STRING}")
# ==================================================================================================
# Project Options
OPTION(ENABLE_OPENMP "Build library with OpenMP support (default=ON)" ON)
OPTION(ENABLE_LCMS "Build library with LCMS support (default=ON)" ON)
OPTION(ENABLE_EXAMPLES "Build library with sample command-line programs (default=ON)" ON)
OPTION(ENABLE_RAWSPEED "Build library with extra RawSpeed codec support (default=OFF)" OFF)
OPTION(ENABLE_DEMOSAIC_PACK_GPL2 "Build library with extra Demosaic pack GPL2 (default=OFF)" OFF)
OPTION(ENABLE_DEMOSAIC_PACK_GPL3 "Build library with extra Demosaic pack GPL3 (default=OFF)" OFF)
OPTION(ENABLE_DCRAW_DEBUG "Build library with debug message from dcraw (default=OFF)" OFF)
SET(DEMOSAIC_PACK_GPL2_RPATH "LibRaw-demosaic-pack-GPL2" CACHE STRING
"Relavive path to extra Demosaic pack GPL2 (default=LibRaw-demosaic-pack-GPL2)")
SET(DEMOSAIC_PACK_GPL3_RPATH "LibRaw-demosaic-pack-GPL3" CACHE STRING
"Relavive path to extra Demosaic pack GPL3 (default=LibRaw-demosaic-pack-GPL3)")
SET(RAWSPEED_RPATH "RawSpeed" CACHE STRING
"Relavive path to extra RawSpeed codec (default=RawSpeed)")
SET(DEMOSAIC_PACK_GPL2_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${DEMOSAIC_PACK_GPL2_RPATH}")
SET(DEMOSAIC_PACK_GPL3_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${DEMOSAIC_PACK_GPL3_RPATH}")
SET(RAWSPEED_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${RAWSPEED_RPATH}")
# ==================================================================================================
# General definitions rules
SET(LIB_SUFFIX "" CACHE STRING "Define suffix of lib directory name (32/64)" )
# To prevent warnings from M$ compiler
IF(WIN32 AND MSVC)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
ADD_DEFINITIONS(-D_ATL_SECURE_NO_WARNINGS)
ADD_DEFINITIONS(-D_AFX_SECURE_NO_WARNINGS)
ENDIF()
# Under Windows, use specific flag to compile.
IF(WIN32)
ADD_DEFINITIONS(-DDJGPP)
ENDIF()
# -- Check dependencies --------------------------------------------------------------------------------
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH} )
INCLUDE(MacroBoolTo01)
INCLUDE(MacroLogFeature)
INCLUDE(MacroOptionalFindPackage)
# Math library check
IF(NOT WIN32)
FIND_LIBRARY(MATH_LIBRARY m)
ENDIF()
# LCMS version 1 and 2 library check
SET(LCMS_SUPPORT_CAN_BE_COMPILED false)
IF (ENABLE_LCMS)
MESSAGE(STATUS "Check for LCMS1 availability...")
FIND_PACKAGE(LCMS)
IF (LCMS_FOUND)
MESSAGE(STATUS "Found LCMS1: ${LCMS_LIBRARIES} ${LCMS_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(${LCMS_INCLUDE_DIR})
MACRO_LOG_FEATURE(LCMS_FOUND "LCMS1" "A small-footprint color management engine" "http://www.littlecms.com" TRUE "" "Needed by libkdcraw")
# Flag to compile Little CMS version 1 with LibRaw
ADD_DEFINITIONS(-DUSE_LCMS)
# For compatibility
SET(LCMS2_LIBRARIES ${LCMS_LIBRARIES})
SET(LCMS_SUPPORT_CAN_BE_COMPILED true)
ELSE ()
MESSAGE(STATUS "Check for LCMS2 availability instead LCMS1...")
FIND_PACKAGE(LCMS2)
IF (LCMS2_FOUND AND (LCMS2_VERSION VERSION_EQUAL 2.1 OR LCMS2_VERSION VERSION_GREATER 2.1))
MESSAGE(STATUS "Found LCMS2 instead LCMS1: ${LCMS2_LIBRARIES} ${LCMS2_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(${LCMS2_INCLUDE_DIR})
MACRO_LOG_FEATURE(LCMS2_FOUND "LCMS2" "A small-footprint color management engine" "http://www.littlecms.com" FALSE "" "Needed by libkdcraw")
# Flag to compile Little CMS version 2 with LibRaw
ADD_DEFINITIONS(-DUSE_LCMS2)
SET(LCMS_SUPPORT_CAN_BE_COMPILED true)
ENDIF ()
ENDIF ()
ENDIF()
# For registration to libraw_config.h
MACRO_BOOL_TO_01(LCMS_SUPPORT_CAN_BE_COMPILED LIBRAW_USE_LCMS)
# JPEG library check
FIND_PACKAGE(JPEG)
IF(JPEG_FOUND)
# check version of libjpeg
# inspired from digikam/CMakeLists.txt
SET(_jpeglib_version_source "#include \n#include\n#include \n int main()\n {\n #if (JPEG_LIB_VERSION >= 80) \n #error JPEG_LIB_VERSION >= 80 found \n #endif \n }\n")
SET(_jpeglib_version_source_file ${CMAKE_BINARY_DIR}/CMakeTmp/cmake_jpeglib_version_check.cpp)
FILE(WRITE "${_jpeglib_version_source_file}" "${_jpeglib_version_source}")
SET(_jpeglib_version_include_dirs "-DINCLUDE_DIRECTORIES:STRING=${JPEG_INCLUDE_DIR}")
TRY_COMPILE(_jpeglib_version_compile_result ${CMAKE_BINARY_DIR} ${_jpeglib_version_source_file}
CMAKE_FLAGS "${_jpeglib_version_include_dirs}"
)
IF(_jpeglib_version_compile_result)
MESSAGE(STATUS "Identified libjpeg version less than 80 (too low)")
SET(JPEG_FOUND FALSE)
ENDIF()
ENDIF()
MACRO_LOG_FEATURE(JPEG_FOUND "libjpeg" "JPEG image format support" "http://www.ijg.org" FALSE "80" "needed for the LibRaw DNG lossy codec")
# Flag to use libjpeg with LibRaw DNG lossy codec
IF(JPEG_FOUND)
ADD_DEFINITIONS(-DUSE_JPEG)
ADD_DEFINITIONS(-DUSE_JPEG8)
INCLUDE_DIRECTORIES(${JPEG_INCLUDE_DIR})
ENDIF()
# For registration to libraw_config.h
MACRO_BOOL_TO_01(JPEG_FOUND LIBRAW_USE_DNGLOSSYCODEC)
# OpenMP library check
SET(OPENMP_FOUND false)
IF(ENABLE_OPENMP)
# OpenMP library detection (requires CMake >= 2.6.3)
# NOTE: OpenMP under MacOSX do not support multithreading.
IF(NOT APPLE)
MACRO_OPTIONAL_FIND_PACKAGE(OpenMP)
IF(OPENMP_FOUND)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
IF("${OpenMP_CXX_FLAGS}" STREQUAL "-fopenmp")
SET(OPENMP_LDFLAGS "-lgomp")
ENDIF()
IF("${OpenMP_CXX_FLAGS}" STREQUAL "-xopenmp")
SET(OPENMP_LDFLAGS "-xopenmp")
ENDIF()
ENDIF()
ENDIF()
ENDIF()
# For registration to libraw_config.h
MACRO_BOOL_TO_01(OPENMP_FOUND LIBRAW_USE_OPENMP)
# Jasper library check
FIND_PACKAGE(Jasper)
# Flag to use libjasper with LibRaw RedCine codec
IF(JASPER_FOUND)
ADD_DEFINITIONS(-DUSE_JASPER)
INCLUDE_DIRECTORIES(${JASPER_INCLUDE_DIR})
ENDIF()
# For registration to libraw_config.h
MACRO_BOOL_TO_01(JASPER_FOUND LIBRAW_USE_REDCINECODEC)
# For RawSpeed Codec Support
SET(RAWSPEED_FOUND false)
SET(RAWSPEED_SUPPORT_CAN_BE_COMPILED false)
IF(ENABLE_RAWSPEED)
FIND_PACKAGE(LibXml2)
FIND_PACKAGE(Pthreads)
MESSAGE(STATUS "RawSpeed codec path: ${RAWSPEED_PATH}")
IF(EXISTS "${RAWSPEED_PATH}/Common.cpp")
SET(RAWSPEED_FOUND true)
ELSE()
MESSAGE(STATUS "RawSpeed source code not found. Please checkout source code from RawStudio project website.")
ENDIF()
IF(ENABLE_RAWSPEED AND RAWSPEED_FOUND AND JPEG_FOUND AND LIBXML2_FOUND AND PTHREADS_FOUND)
SET(RAWSPEED_SUPPORT_CAN_BE_COMPILED true)
ELSE()
IF (NOT JPEG_FOUND)
MESSAGE(STATUS "LibJPEG dependency not resolved. LibRaw cannot be compiled with RawSpeed codec")
ENDIF()
IF (NOT LIBXML2_FOUND)
MESSAGE(STATUS "LibXML2 dependency not resolved. LibRaw cannot be compiled with RawSpeed codec")
ENDIF()
IF (NOT PTHREADS_FOUND)
MESSAGE(STATUS "Pthreads dependency not resolved. LibRaw cannot be compiled with RawSpeed codec")
ENDIF()
ENDIF()
ENDIF()
# For registration to libraw_config.h
MACRO_BOOL_TO_01(RAWSPEED_SUPPORT_CAN_BE_COMPILED LIBRAW_USE_RAWSPEED)
# -- Compilation rules for RawSpeed library -------------------------------------------------------------
IF(RAWSPEED_SUPPORT_CAN_BE_COMPILED)
INCLUDE_DIRECTORIES(${RAWSPEED_PATH})
INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR} ${PTHREADS_INCLUDE_DIR})
# Flag to include RawSpeed codec with Libraw
ADD_DEFINITIONS(-DUSE_RAWSPEED)
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} ${PTHREADS_DEFINITIONS})
SET(librawspeed_LIB_SRCS ${RAWSPEED_PATH}/ArwDecoder.cpp
${RAWSPEED_PATH}/BitPumpJPEG.cpp
${RAWSPEED_PATH}/BitPumpMSB.cpp
${RAWSPEED_PATH}/BitPumpMSB32.cpp
${RAWSPEED_PATH}/BitPumpPlain.cpp
${RAWSPEED_PATH}/BlackArea.cpp
${RAWSPEED_PATH}/ByteStream.cpp
${RAWSPEED_PATH}/ByteStreamSwap.cpp
${RAWSPEED_PATH}/Camera.cpp
${RAWSPEED_PATH}/CameraMetaData.cpp
${RAWSPEED_PATH}/CameraMetadataException.cpp
${RAWSPEED_PATH}/CameraSensorInfo.cpp
${RAWSPEED_PATH}/ColorFilterArray.cpp
${RAWSPEED_PATH}/Common.cpp
${RAWSPEED_PATH}/Cr2Decoder.cpp
${RAWSPEED_PATH}/DngDecoder.cpp
${RAWSPEED_PATH}/DngDecoderSlices.cpp
${RAWSPEED_PATH}/DngOpcodes.cpp
${RAWSPEED_PATH}/FileIOException.cpp
${RAWSPEED_PATH}/FileMap.cpp
${RAWSPEED_PATH}/IOException.cpp
${RAWSPEED_PATH}/LJpegDecompressor.cpp
${RAWSPEED_PATH}/LJpegPlain.cpp
${RAWSPEED_PATH}/NefDecoder.cpp
${RAWSPEED_PATH}/NikonDecompressor.cpp
${RAWSPEED_PATH}/OrfDecoder.cpp
${RAWSPEED_PATH}/PefDecoder.cpp
${RAWSPEED_PATH}/PentaxDecompressor.cpp
${RAWSPEED_PATH}/RawDecoder.cpp
${RAWSPEED_PATH}/RawDecoderException.cpp
${RAWSPEED_PATH}/RawImage.cpp
${RAWSPEED_PATH}/RawImageDataFloat.cpp
${RAWSPEED_PATH}/RawImageDataU16.cpp
${RAWSPEED_PATH}/RawParser.cpp
${RAWSPEED_PATH}/Rw2Decoder.cpp
${RAWSPEED_PATH}/SrwDecoder.cpp
${RAWSPEED_PATH}/TiffEntry.cpp
${RAWSPEED_PATH}/TiffEntryBE.cpp
${RAWSPEED_PATH}/TiffIFD.cpp
${RAWSPEED_PATH}/TiffIFDBE.cpp
${RAWSPEED_PATH}/TiffParser.cpp
${RAWSPEED_PATH}/TiffParserException.cpp
${RAWSPEED_PATH}/TiffParserHeaderless.cpp
${RAWSPEED_PATH}/TiffParserOlympus.cpp
)
ENDIF()
# -- Common LibRaw library compilation rules ------------------------------------------------------------------
SET(DEMOSAIC_PACK_GPL2_SUPPORT_CAN_BE_COMPILED false)
IF(ENABLE_DEMOSAIC_PACK_GPL2)
MESSAGE(STATUS "Demosaic pack GPL2 path: ${DEMOSAIC_PACK_GPL2_PATH}")
IF(EXISTS "${DEMOSAIC_PACK_GPL2_PATH}/dcraw_foveon.c")
INCLUDE_DIRECTORIES(${DEMOSAIC_PACK_GPL2_PATH})
# Flag to include demosaic pack GPL2
ADD_DEFINITIONS(-DLIBRAW_DEMOSAIC_PACK_GPL2)
SET(DEMOSAIC_PACK_GPL2_SUPPORT_CAN_BE_COMPILED true)
ELSE()
MESSAGE(STATUS "Demosaic pack GPL2 source code not found. Please checkout source code from Libraw project website.")
ENDIF()
ENDIF()
# For registration to libraw_config.h
MACRO_BOOL_TO_01(DEMOSAIC_PACK_GPL2_SUPPORT_CAN_BE_COMPILED LIBRAW_USE_DEMOSAIC_PACK_GPL2)
SET(DEMOSAIC_PACK_GPL3_SUPPORT_CAN_BE_COMPILED false)
IF(ENABLE_DEMOSAIC_PACK_GPL3)
MESSAGE(STATUS "Demosaic pack GPL3 path: ${DEMOSAIC_PACK_GPL3_PATH}")
IF(EXISTS "${DEMOSAIC_PACK_GPL3_PATH}/green_equi.c")
INCLUDE_DIRECTORIES(${DEMOSAIC_PACK_GPL3_PATH})
# Flag to include demosaic pack GPL3
ADD_DEFINITIONS(-DLIBRAW_DEMOSAIC_PACK_GPL3)
SET(DEMOSAIC_PACK_GPL3_SUPPORT_CAN_BE_COMPILED true)
ELSE()
MESSAGE(STATUS "Demosaic pack GPL3 source code not found. Please checkout source code from Libraw project website.")
ENDIF()
ENDIF()
# For registration to libraw_config.h
MACRO_BOOL_TO_01(DEMOSAIC_PACK_GPL3_SUPPORT_CAN_BE_COMPILED LIBRAW_USE_DEMOSAIC_PACK_GPL3)
# Flag to add debug print on the console
IF(ENABLE_DCRAW_DEBUG)
ADD_DEFINITIONS(-DDCRAW_VERBOSE)
ENDIF()
# For registration to libraw_config.h
MACRO_BOOL_TO_01(ENABLE_DCRAW_DEBUG LIBRAW_USE_DCRAW_DEBUG)
# Flag to export library symbols
IF (WIN32)
ADD_DEFINITIONS(-DLIBRAW_BUILDLIB)
ENDIF()
# Create a config header for client application.
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/data/libraw_config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/libraw_config.h)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/
${CMAKE_CURRENT_SOURCE_DIR}/
)
# -- Log messages about configuration ------------------------------------------------------------------
MESSAGE(STATUS "")
MESSAGE(STATUS "----------------------------------------------------------------------------------")
MESSAGE(STATUS " Libraw ${RAW_LIB_VERSION_STRING} configuration ")
MESSAGE(STATUS "")
IF(OPENMP_FOUND)
MESSAGE(STATUS " Libraw will be compiled with OpenMP support .................. YES")
ELSE()
MESSAGE(STATUS " Libraw will be compiled with OpenMP support .................. NO")
ENDIF()
IF(LCMS_SUPPORT_CAN_BE_COMPILED)
MESSAGE(STATUS " Libraw will be compiled with LCMS support .................... YES")
ELSE()
MESSAGE(STATUS " Libraw will be compiled with LCMS support .................... NO")
ENDIF()
IF(ENABLE_EXAMPLES)
MESSAGE(STATUS " Libraw will be compiled with example command-line programs ... YES")
ELSE()
MESSAGE(STATUS " Libraw will be compiled with example command-line programs ... NO")
ENDIF()
IF(JASPER_FOUND)
MESSAGE(STATUS " Libraw will be compiled with RedCine codec support ........... YES")
ELSE()
MESSAGE(STATUS " Libraw will be compiled with RedCine codec support ........... NO")
ENDIF()
IF(JPEG_FOUND)
MESSAGE(STATUS " Libraw will be compiled with DNG lossy codec support ......... YES")
ELSE()
MESSAGE(STATUS " Libraw will be compiled with DNG lossy codec support ......... NO")
ENDIF()
IF(DEMOSAIC_PACK_GPL2_SUPPORT_CAN_BE_COMPILED)
MESSAGE(STATUS " Libraw will be compiled with Demosaic Pack GPL2 support ...... YES")
ELSE()
MESSAGE(STATUS " Libraw will be compiled with Demosaic Pack GPL2 support ...... NO")
ENDIF()
IF(DEMOSAIC_PACK_GPL3_SUPPORT_CAN_BE_COMPILED)
MESSAGE(STATUS " Libraw will be compiled with Demosaic Pack GPL3 support ...... YES")
ELSE()
MESSAGE(STATUS " Libraw will be compiled with Demosaic Pack GPL3 support ...... NO")
ENDIF()
IF(RAWSPEED_SUPPORT_CAN_BE_COMPILED)
MESSAGE(STATUS " Libraw will be compiled with RawSpeed support ................ YES")
ELSE()
MESSAGE(STATUS " Libraw will be compiled with RawSpeed support ................ NO")
ENDIF()
IF(ENABLE_DCRAW_DEBUG)
MESSAGE(STATUS " Libraw will be compiled with debug message from dcraw ........ YES")
ELSE()
MESSAGE(STATUS " Libraw will be compiled with debug message from dcraw ........ NO")
ENDIF()
MESSAGE(STATUS "----------------------------------------------------------------------------------")
MESSAGE(STATUS "")
# -- Dedicated libraw target which not support multi-threading ---------------------------------------
SET(libraw_LIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/internal/dcraw_common.cpp
${CMAKE_CURRENT_SOURCE_DIR}/internal/dcraw_fileio.cpp
${CMAKE_CURRENT_SOURCE_DIR}/internal/demosaic_packs.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/libraw_cxx.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/libraw_c_api.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/libraw_datastream.cpp
)
IF(RAWSPEED_SUPPORT_CAN_BE_COMPILED)
SET(libraw_LIB_SRCS ${libraw_LIB_SRCS} ${librawspeed_LIB_SRCS})
ENDIF()
# Disable compilation warnings from LibRaw. Just to be clear on the console.
# Add flag to not support re-entrancy. Faster but cannot be used in multi-threading.
# Adjust flag for static lib and 64 bits computers using -fPIC for GCC compiler
# Use O4 GCC compilation option to prevent artifacts with OpenMP
FOREACH(_curentfile ${libraw_LIB_SRCS})
IF(WIN32 AND MSVC)
SET_SOURCE_FILES_PROPERTIES(${_curentfile} PROPERTIES COMPILE_FLAGS "-w -DLIBRAW_NOTHREADS")
ELSE()
SET_SOURCE_FILES_PROPERTIES(${_curentfile} PROPERTIES COMPILE_FLAGS "-w -DLIBRAW_NOTHREADS -fPIC -O4 ")
ENDIF()
ENDFOREACH(_curentfile ${libraw_LIB_SRCS})
ADD_LIBRARY(raw SHARED ${libraw_LIB_SRCS})
TARGET_LINK_LIBRARIES(raw ${MATH_LIBRARY})
IF(MINGW)
TARGET_LINK_LIBRARIES(raw ws2_32)
ENDIF()
IF(OPENMP_FOUND)
TARGET_LINK_LIBRARIES(raw ${OPENMP_LDFLAGS})
ENDIF()
IF(LCMS_SUPPORT_CAN_BE_COMPILED)
TARGET_LINK_LIBRARIES(raw ${LCMS2_LIBRARIES})
ENDIF()
IF(JPEG_FOUND)
TARGET_LINK_LIBRARIES(raw ${JPEG_LIBRARY})
ENDIF()
IF(JASPER_FOUND)
TARGET_LINK_LIBRARIES(raw ${JASPER_LIBRARIES})
ENDIF()
IF(RAWSPEED_SUPPORT_CAN_BE_COMPILED)
TARGET_LINK_LIBRARIES(raw ${LIBXML2_LIBRARIES})
ENDIF()
SET_TARGET_PROPERTIES(raw PROPERTIES VERSION ${RAW_LIB_SO_VERSION_STRING})
SET_TARGET_PROPERTIES(raw PROPERTIES SOVERSION ${RAW_LIB_SO_CUR_VERSION})
SET_TARGET_PROPERTIES(raw PROPERTIES OUTPUT_NAME "raw")
# -- Dedicated libraw target to support multi-threading ---------------------------------------------
SET(libraw_r_LIB_SRCS ${libraw_LIB_SRCS})
FOREACH(_curentfile ${libraw_r_LIB_SRCS})
IF(WIN32 AND MSVC)
SET_SOURCE_FILES_PROPERTIES(${_curentfile} PROPERTIES COMPILE_FLAGS "-w")
ELSE()
SET_SOURCE_FILES_PROPERTIES(${_curentfile} PROPERTIES COMPILE_FLAGS "-w -fPIC -O4")
ENDIF()
ENDFOREACH(_curentfile ${libraw_r_LIB_SRCS})
ADD_LIBRARY(raw_r SHARED ${libraw_r_LIB_SRCS})
TARGET_LINK_LIBRARIES(raw_r ${MATH_LIBRARY})
IF(MINGW)
TARGET_LINK_LIBRARIES(raw_r ws2_32)
ENDIF()
IF(OPENMP_FOUND)
TARGET_LINK_LIBRARIES(raw_r ${OPENMP_LDFLAGS})
ENDIF()
IF(LCMS_SUPPORT_CAN_BE_COMPILED)
TARGET_LINK_LIBRARIES(raw_r ${LCMS2_LIBRARIES})
ENDIF()
IF(JPEG_FOUND)
TARGET_LINK_LIBRARIES(raw_r ${JPEG_LIBRARY})
ENDIF()
IF(JASPER_FOUND)
TARGET_LINK_LIBRARIES(raw_r ${JASPER_LIBRARIES})
ENDIF()
IF(RAWSPEED_SUPPORT_CAN_BE_COMPILED)
TARGET_LINK_LIBRARIES(raw_r ${LIBXML2_LIBRARIES} ${PTHREADS_LIBRARY})
ENDIF()
SET_TARGET_PROPERTIES(raw_r PROPERTIES VERSION ${RAW_LIB_SO_VERSION_STRING})
SET_TARGET_PROPERTIES(raw_r PROPERTIES SOVERSION ${RAW_LIB_SO_CUR_VERSION})
SET_TARGET_PROPERTIES(raw_r PROPERTIES OUTPUT_NAME "raw_r")
# -- Files to install -------------------------------------------------------------------------------------
# Configure and install data file for packaging.
IF(NOT WIN32)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/data/libraw.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libraw.pc @ONLY)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libraw.pc DESTINATION lib${LIB_SUFFIX}/pkgconfig)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/data/libraw_r.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libraw_r.pc @ONLY)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libraw_r.pc DESTINATION lib${LIB_SUFFIX}/pkgconfig)
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/data/libraw.lsm.cmake ${CMAKE_CURRENT_BINARY_DIR}/libraw.lsm)
ENDIF()
# Install Shared header files.
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libraw/libraw.h
${CMAKE_CURRENT_SOURCE_DIR}/libraw/libraw_alloc.h
${CMAKE_CURRENT_SOURCE_DIR}/libraw/libraw_const.h
${CMAKE_CURRENT_SOURCE_DIR}/libraw/libraw_datastream.h
${CMAKE_CURRENT_SOURCE_DIR}/libraw/libraw_internal.h
${CMAKE_CURRENT_SOURCE_DIR}/libraw/libraw_types.h
${CMAKE_CURRENT_SOURCE_DIR}/libraw/libraw_version.h
${CMAKE_CURRENT_BINARY_DIR}/libraw_config.h
DESTINATION include/libraw
COMPONENT Devel
)
# Install Shared binary files.
INSTALL(TARGETS raw
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib${LIB_SUFFIX}
ARCHIVE DESTINATION lib${LIB_SUFFIX}
)
INSTALL(TARGETS raw_r
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib${LIB_SUFFIX}
ARCHIVE DESTINATION lib${LIB_SUFFIX}
)
# Install find cmake script to the system for client applications.
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/FindLibRaw.cmake
DESTINATION ${CMAKE_ROOT}/Modules)
# Install doc data files.
IF(NOT WIN32)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/COPYRIGHT
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.CDDL
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.LGPL
${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.LibRaw.pdf
${CMAKE_CURRENT_SOURCE_DIR}/Changelog.txt
DESTINATION share/libraw
COMPONENT main
)
ENDIF()
# Uninstall rules
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/Uninstall.cmake ${CMAKE_BINARY_DIR}/cmake_uninstall.cmake COPYONLY)
ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake")
# -- Compile LibRaw Examples --------------------------------------------------------------------------------
# add a small macro so that this is a bit cleaner
MACRO(LIBRAW_BUILD_SAMPLES)
SET(_filename ${ARGV0})
SET(_rawlib ${ARGV1})
STRING(REPLACE "." ";" _temp ${_filename})
LIST(GET _temp 0 _target)
SET(${_target}_SRCS samples/${_filename})
SET_SOURCE_FILES_PROPERTIES(${${_target}_SRCS} PROPERTIES COMPILE_FLAGS -w)
ADD_EXECUTABLE(${_target} ${${_target}_SRCS})
TARGET_LINK_LIBRARIES(${_target} ${_rawlib})
IF(OPENMP_FOUND)
TARGET_LINK_LIBRARIES(${_target} ${OPENMP_LDFLAGS})
ENDIF()
IF (${_rawlib} MATCHES "raw_r")
TARGET_LINK_LIBRARIES(${_target} ${PTHREADS_LIBRARY})
ENDIF()
IF(WIN32)
TARGET_LINK_LIBRARIES(${_target} ws2_32)
ENDIF()
INSTALL(TARGETS ${_target}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib${LIB_SUFFIX}
ARCHIVE DESTINATION lib${LIB_SUFFIX}
)
ENDMACRO(LIBRAW_BUILD_SAMPLES)
IF(ENABLE_EXAMPLES)
LIBRAW_BUILD_SAMPLES(simple_dcraw.cpp raw)
LIBRAW_BUILD_SAMPLES(mem_image.cpp raw)
LIBRAW_BUILD_SAMPLES(dcraw_emu.cpp raw)
LIBRAW_BUILD_SAMPLES(4channels.cpp raw)
LIBRAW_BUILD_SAMPLES(unprocessed_raw.cpp raw)
LIBRAW_BUILD_SAMPLES(raw-identify.cpp raw)
LIBRAW_BUILD_SAMPLES(multirender_test.cpp raw)
LIBRAW_BUILD_SAMPLES(postprocessing_benchmark.cpp raw)
IF (PTHREADS_FOUND)
IF(WIN32)
LIBRAW_BUILD_SAMPLES(half_mt_win32.c raw_r)
ELSE()
LIBRAW_BUILD_SAMPLES(dcraw_half.c raw_r)
LIBRAW_BUILD_SAMPLES(half_mt.c raw_r)
ENDIF()
ENDIF()
ENDIF()