1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317
|
PROJECT("Luminance HDR") # luminance-hdr)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
CMAKE_POLICY(SET CMP0043 OLD)
# set include path for FindXXX.cmake files
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/build_files/Modules")
# Global variables for CMake
include(build_files/Modules/Version.cmake)
include(build_files/Modules/GlobalSettings.cmake)
include(build_files/Modules/CompilerSettings.cmake)
include(build_files/Modules/Internationalization.cmake)
IF(TIMER_PROFILING)
ADD_DEFINITIONS(-DTIMER_PROFILING)
ENDIF()
# ======== Has branch prediction =======
include( CheckCXXSourceCompiles )
check_cxx_source_compiles( "int main() { int x = 0; if( __builtin_expect((x),0) ) x = 1; return 0; }" HAS_BRANCH_PREDICTION )
if( HAS_BRANCH_PREDICTION )
set( BRANCH_PREDICTION 1 )
else( HAS_BRANCH_PREDICTION )
set( BRANCH_PREDICTION 0 )
endif( HAS_BRANCH_PREDICTION )
# find and setup Qt5 for this project
# Tell CMake to run moc when necessary:
#set(CMAKE_AUTOMOC ON)
# As moc files are generated in the binary dir, tell CMake
# to always look for includes there:
#set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Core REQUIRED)
find_package(Qt5Concurrent REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5WebKit REQUIRED)
find_package(Qt5WebKitWidgets REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Sql REQUIRED)
find_package(Qt5Svg REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5LinguistTools REQUIRED)
find_package(Qt5PrintSupport REQUIRED)
IF(WIN32)
find_package(Qt5WinExtras)
ENDIF()
# Include the qtmain lib if we are on the windows platform
IF(WIN32)
SET(LIBS ${LIBS} ${Qt5Core_QTMAIN_LIBRARIES})
ENDIF(WIN32)
set(LIBS ${LIBS}
${QT_QTCORE_LIBRARIES} ${QT_QTGUI_LIBRARIES} ${QT_QTNETWORK_LIBRARIES}
${QT_QTWEBKIT_LIBRARIES} ${QT_QTXML_LIBRARIES} ${QT_QTSQL_LIBRARIES})
FIND_PACKAGE(Git)
IF(GIT_FOUND)
include(GetGitRevisionDescription)
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
ENDIF()
IF(WIN32)
# Windows Section
# to not define min/max macros, which cause troubles with STL and boost
ADD_DEFINITIONS(-DNOMINMAX)
SET(LIBRAW_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/../DEPs/include/libraw")
SET(FFTWF_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/../DEPs/include/fftw3")
SET(LCMS2_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/../DEPs/include/lcms2")
# Enable multi processor compilation
ADD_DEFINITIONS(/MP)
# Enable SSE2
IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
# SSE2 is on by default, on x64 platforms
ADD_DEFINITIONS(/arch:SSE2)
ENDIF()
ADD_DEFINITIONS(-DUNICODE )
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_REENTRANT)
SET(FFTWF_LIBRARIES "${CMAKE_SOURCE_DIR}/../DEPs/lib/fftw3/libfftw3f-3.lib")
SET(LIBRAW_LIBRARIES "${CMAKE_SOURCE_DIR}/../DEPs/lib/libraw/libraw.lib")
ADD_DEFINITIONS("-DDEMOSAICING_GPL2")
ADD_DEFINITIONS("-DDEMOSAICING_GPL3")
SET(LCMS2_LIBRARIES "${CMAKE_SOURCE_DIR}/../DEPs/lib/lcms2/lcms2.lib")
ADD_DEFINITIONS(-DCMS_DLL)
ADD_DEFINITIONS(-DUSE_LCMS2)
INCLUDE_DIRECTORIES(${LIBRAW_INCLUDE_DIR} "${LIBRAW_INCLUDE_DIR}/libraw")
INCLUDE_DIRECTORIES(${FFTWF_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${LCMS2_INCLUDE_DIR})
ELSE()
# Unix & Apple part
FIND_PACKAGE(LibRAW REQUIRED)
INCLUDE_DIRECTORIES(${LIBRAW_INCLUDE_DIR} "${LIBRAW_INCLUDE_DIR}/libraw")
FIND_PACKAGE(fftwf REQUIRED)
INCLUDE_DIRECTORIES(${FFTWF_INCLUDE_DIR})
FIND_PACKAGE(lcms2 REQUIRED)
INCLUDE_DIRECTORIES(${LCMS2_INCLUDE_DIR})
ENDIF()
IF(WIN32)
SET(Boost_USE_STATIC_LIBS ON)
ENDIF()
FIND_PACKAGE(Boost REQUIRED COMPONENTS program_options thread chrono system date_time)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
FIND_PACKAGE(exiv2 REQUIRED)
INCLUDE_DIRECTORIES(${EXIV2_INCLUDE_DIR} "${EXIV2_INCLUDE_DIR}/exiv2")
FIND_PACKAGE(TIFF REQUIRED)
INCLUDE_DIRECTORIES(${TIFF_INCLUDE_DIR})
FIND_PACKAGE(PNG REQUIRED)
INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR})
FIND_PACKAGE(OpenEXR REQUIRED)
INCLUDE_DIRECTORIES(${OPENEXR_INCLUDE_DIR} "${OPENEXR_INCLUDE_DIR}/OpenEXR")
FIND_PACKAGE(GSL REQUIRED)
INCLUDE_DIRECTORIES(${GSL_INCLUDE_DIR} ${GSLCBLAS_INCLUDE_DIR})
FIND_PACKAGE(JPEG REQUIRED)
INCLUDE_DIRECTORIES(${JPEGLIB_INCLUDE_DIR})
FIND_PACKAGE(CFITSIO)
IF(CFITSIO_FOUND)
INCLUDE_DIRECTORIES(${CFITSIO_INCLUDE_DIR})
SET(LIBS ${LIBS} ${CFITSIO_LIBRARIES})
ADD_DEFINITIONS(-DHAVE_CFITSIO)
ELSE()
MESSAGE(WARNING "cfitsio not found! Building without FITS support!")
ENDIF()
SET(LIBS ${LIBS} ${OPENEXR_LIBRARIES})
SET(LIBS ${LIBS} ${TIFF_LIBRARIES})
SET(LIBS ${LIBS} ${LIBRAW_LIBRARIES})
SET(LIBS ${LIBS} ${FFTWF_LIBRARIES})
ADD_DEFINITIONS(-DHAVE_FFTW3F)
SET(LIBS ${LIBS} ${GSL_LIBRARIES} ${GSLCBLAS_LIBRARIES})
SET(LIBS ${LIBS} ${EXIV2_LIBRARIES})
SET(LIBS ${LIBS} ${JPEG_LIBRARIES})
SET(LIBS ${LIBS} ${LCMS2_LIBRARIES})
SET(LIBS ${LIBS} ${PNG_LIBRARIES})
SET(LIBS ${LIBS} ${Boost_LIBRARIES})
INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/src/")
INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/src/")
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
SET(LUMINANCE_HDR_H )
SET(LUMINANCE_HDR_SRC )
SET(LUMINANCE_HDR_H ${LUMINANCE_HDR_H}
src/arch/math.h
src/arch/malloc.h
src/arch/string.h
src/arch/freebsd/math.h
src/arch/msvc/math.h
)
SET(LUMINANCE_HDR_RCCS icons.qrc)
QT5_ADD_RESOURCES(LUMINANCE_HDR_RCCS_SRCS ${LUMINANCE_HDR_RCCS})
ADD_SUBDIRECTORY(src)
IF(ENABLE_UNIT_TEST)
ENABLE_TESTING()
ADD_SUBDIRECTORY(test)
ENDIF(ENABLE_UNIT_TEST)
# translations
FILE(GLOB LUMINANCE_TS i18n/lang_*.ts)
IF(UPDATE_TRANSLATIONS)
SET(LUMINANCE_TS ${LUMINANCE_TS} i18n/source.ts)
IF(LUPDATE_NOOBSOLETE)
QT5_CREATE_TRANSLATION(LUMINANCE_QM ${FILES_TO_TRANSLATE} ${LUMINANCE_TS} OPTIONS -noobsolete)
ELSE()
QT5_CREATE_TRANSLATION(LUMINANCE_QM ${FILES_TO_TRANSLATE} ${LUMINANCE_TS})
ENDIF()
IF(UNIX)
IF(NOT APPLE) # Sadly on Linux Qt5 add global include paths in list of translation files, let's get rid of them
EXECUTE_PROCESS(COMMAND ${CMAKE_SOURCE_DIR}/build_files/platforms/linux/sanitize_translations.sh
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
ENDIF(NOT APPLE)
ENDIF(UNIX)
ELSE(UPDATE_TRANSLATIONS)
QT5_ADD_TRANSLATION(LUMINANCE_QM ${LUMINANCE_TS})
ENDIF(UPDATE_TRANSLATIONS)
ADD_CUSTOM_TARGET(translations_target DEPENDS ${LUMINANCE_QM})
SET(LUMINANCE_FILES
${LUMINANCE_HDR_H}
${LUMINANCE_HDR_CPP}
${LUMINANCE_HDR_RCCS_SRCS}
${LUMINANCE_QM})
# Apple Mac OS X
IF(APPLE)
SET(CMAKE_INSTALL_PREFIX "/Applications")
# Set Bundle settings
set(MACOSX_BUNDLE_INFO_STRING "${LHDR_NAME} ${LHDR_VERSION}")
set(MACOSX_BUNDLE_BUNDLE_VERSION "${LHDR_NAME} ${LHDR_VERSION}")
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${LHDR_NAME} ${LHDR_VERSION}")
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${LHDR_VERSION}")
set(MACOSX_BUNDLE_VERSION "${LHDR_VERSION}")
set(MACOSX_BUNDLE_ICON_FILE "${CMAKE_SOURCE_DIR}/program-icons/luminance.icns")
set(MACOSX_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/program-icons/luminance.icns")
set(MACOSX_BUNDLE_RESOURCES "${CMAKE_CURRENT_BINARY_DIR}/${LHDR_OSX_EXECUTABLE_NAME}.app/Contents/Resources")
set(MACOSX_BUNDLE_GUI_IDENTIFIER "${LHDR_DOMAIN_SECOND}.${LHDR_DOMAIN_FIRST}")
set(MACOSX_BUNDLE_BUNDLE_NAME "${LHDR_NAME}")
configure_file( ${CMAKE_SOURCE_DIR}/build_files/platforms/macosx/Info.plist.in
${CMAKE_BINARY_DIR}/Info.plist )
configure_file( ${CMAKE_SOURCE_DIR}/build_files/platforms/macosx/create-dmg.sh.in
${CMAKE_BINARY_DIR}/create-dmg.sh )
# icon files to copy in the bundle
SET(OSX_ICON_FILES "${CMAKE_SOURCE_DIR}/program-icons/luminance.icns")
# include the icns files in the target
SET(LUMINANCE_FILES ${LUMINANCE_FILES} ${OSX_ICON_FILES})
# Build project
# SET( CMAKE_OSX_ARCHITECTURES x86_64;i386 ) # Universal build
ADD_EXECUTABLE(${LHDR_OSX_EXECUTABLE_TARGET} MACOSX_BUNDLE ${LUMINANCE_FILES}) # luminance-hdr
set_property(TARGET ${LHDR_OSX_EXECUTABLE_TARGET} PROPERTY OUTPUT_NAME ${LHDR_OSX_EXECUTABLE_NAME})
ADD_EXECUTABLE(luminance-hdr-cli ${LUMINANCE_FILES})
SET_TARGET_PROPERTIES( ${LHDR_OSX_EXECUTABLE_TARGET} PROPERTIES MACOSX_BUNDLE_INFO_PLIST
"${CMAKE_BINARY_DIR}/Info.plist" )
# set where in the bundle to put the icns files
SET_SOURCE_FILES_PROPERTIES(${OSX_ICON_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
# set where in the bundle to put the translation files
SET_SOURCE_FILES_PROPERTIES(${LUMINANCE_QM} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/i18n)
SET_SOURCE_FILES_PROPERTIES(${LUMINANCE_QT_QM} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/i18n)
INSTALL(TARGETS ${LHDR_OSX_EXECUTABLE_TARGET} luminance-hdr-cli
BUNDLE DESTINATION . COMPONENT Runtime
RUNTIME DESTINATION ${LHDR_OSX_EXECUTABLE_NAME}.app/Contents/MacOS COMPONENT Runtime)
qt5_use_modules(${LHDR_OSX_EXECUTABLE_TARGET} Core Gui Widgets)
qt5_use_modules(luminance-hdr-cli Core Gui Widgets)
# Link libraries
TARGET_LINK_LIBRARIES(${LHDR_OSX_EXECUTABLE_TARGET} ${LUMINANCE_MODULES_GUI} ${LIBS})
TARGET_LINK_LIBRARIES(luminance-hdr-cli ${LUMINANCE_MODULES_CLI} ${LIBS})
# Unix
ELSEIF(UNIX)
SET(LUMINANCE_FILES ${LUMINANCE_FILES})
ADD_EXECUTABLE(luminance-hdr ${LUMINANCE_FILES})
ADD_EXECUTABLE(luminance-hdr-cli ${LUMINANCE_FILES})
qt5_use_modules(luminance-hdr Core Gui Widgets)
qt5_use_modules(luminance-hdr-cli Core Gui Widgets)
# link libraries
TARGET_LINK_LIBRARIES(luminance-hdr -Xlinker --start-group ${LUMINANCE_MODULES_GUI} -Xlinker --end-group)
TARGET_LINK_LIBRARIES(luminance-hdr-cli -Xlinker --start-group ${LUMINANCE_MODULES_CLI} -Xlinker --end-group)
TARGET_LINK_LIBRARIES(luminance-hdr ${LIBS})
TARGET_LINK_LIBRARIES(luminance-hdr-cli ${LIBS})
# make install directivies
INSTALL(TARGETS luminance-hdr RUNTIME DESTINATION bin) # main GUI exec
INSTALL(TARGETS luminance-hdr-cli RUNTIME DESTINATION bin) # main CLI exec
INSTALL(FILES ${LUMINANCE_QM} DESTINATION share/luminance-hdr/i18n) # i18n
#INSTALL(FILES ${LUMINANCE_QT_QM} DESTINATION share/luminance-hdr/i18n) # i18n
INSTALL(FILES ${CMAKE_SOURCE_DIR}/program-icons/luminance-hdr.png DESTINATION share/icons/hicolor/48x48/apps) # icon
INSTALL(FILES ${CMAKE_SOURCE_DIR}/luminance-hdr.desktop DESTINATION share/applications) #desktop entry
INSTALL(FILES ${CMAKE_SOURCE_DIR}/luminance-hdr.appdata.xml DESTINATION share/appdata) #appstream
INSTALL(FILES
${CMAKE_SOURCE_DIR}/AUTHORS
${CMAKE_SOURCE_DIR}/README.md
${CMAKE_SOURCE_DIR}/LICENSE
${CMAKE_SOURCE_DIR}/Changelog
DESTINATION share/doc/luminance-hdr) #info files
INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/help DESTINATION share/doc/luminance-hdr) # help directory
INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/hdrhtml DESTINATION share/luminance-hdr) # hdrhtml directory
# Microsoft Windows
ELSEIF(WIN32)
# icon files to copy in the bundle
SET(LUMINANCE_FILES ${LUMINANCE_FILES} "${CMAKE_SOURCE_DIR}/program-icons/luminance_ico.rc")
# Subsystem console:
ADD_EXECUTABLE(luminance-hdr WIN32 ${LUMINANCE_FILES})
ADD_EXECUTABLE(luminance-hdr-cli ${LUMINANCE_FILES})
qt5_use_modules(luminance-hdr Core Gui Widgets WinExtras Svg)
qt5_use_modules(luminance-hdr-cli Core Gui Widgets)
# Link libraries
TARGET_LINK_LIBRARIES(luminance-hdr ${LUMINANCE_MODULES_GUI} ${LIBS})
TARGET_LINK_LIBRARIES(luminance-hdr-cli ${LUMINANCE_MODULES_CLI} ${LIBS})
ENDIF()
# Packaging must go at the bottom
include(${CMAKE_SOURCE_DIR}/build_files/Packaging.cmake)
|