cmake_minimum_required(VERSION 3.5) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules") include(DefineCMakeDefaults) project(Filmulator VERSION 0.11.2) include(GNUInstallDirs) include(CompilerChecks.cmake) # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) # Instruct CMake to run moc automatically when needed set(CMAKE_AUTOMOC ON) # Create code from a list of Qt designer ui files #set(CMAKE_AUTOUIC ON) # Tell automoc to not process generated source files # cmake_policy(SET CMP0071 OLD) //trying out new? cmake_policy(SET CMP0071 NEW) if(WIN32) # then look for qt 6 (maybe if(APPLE) too) find_package(Qt6 COMPONENTS Core REQUIRED) find_package(Qt6 COMPONENTS Qml REQUIRED) find_package(Qt6 COMPONENTS Quick REQUIRED) find_package(Qt6 COMPONENTS Sql REQUIRED) find_package(Qt6 COMPONENTS Widgets REQUIRED) else() find_package(Qt5Core CONFIG REQUIRED) find_package(Qt5Widgets CONFIG REQUIRED) find_package(Qt5Quick CONFIG REQUIRED) find_package(Qt5Sql CONFIG REQUIRED) find_package(Qt5Qml CONFIG REQUIRED) find_package(Qt5QuickCompiler CONFIG REQUIRED) # find_package(Qt5LinguistTools CONFIG REQUIRED) endif() # find a bunch of packages find_package(rtprocess CONFIG REQUIRED) find_package(Exiv2 REQUIRED) find_package(libraw REQUIRED) find_package(JPEG REQUIRED) find_package(TIFF REQUIRED) find_package(OpenMP REQUIRED) find_package(LENSFUN REQUIRED) find_package(CURL REQUIRED) find_package(LibArchive REQUIRED) find_package(ZLIB REQUIRED) # SET( EIGEN3_INCLUDE_DIR "$ENV{EIGEN3_INCLUDE_DIR}" ) # IF( NOT EIGEN3_INCLUDE_DIR ) # MESSAGE( FATAL_ERROR "Please point the environment variable EIGEN3_INCLUDE_DIR to the include directory of your Eigen3 installation.") # ENDIF() # INCLUDE_DIRECTORIES ( "${EIGEN3_INCLUDE_DIR}" ) # Checks for config.h include(ConfigureChecks.cmake) configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) set(filmulator_SRCS filmulator-gui/main.cpp filmulator-gui/core/agitate.cpp filmulator-gui/core/colorCurves.cpp filmulator-gui/core/colorSpaces.cpp filmulator-gui/core/curves.cpp filmulator-gui/core/develop.cpp filmulator-gui/core/diffuse.cpp filmulator-gui/core/exposure.cpp filmulator-gui/core/filmulate.cpp filmulator-gui/core/imagePipeline.cpp filmulator-gui/core/imload.cpp filmulator-gui/core/imread.cpp filmulator-gui/core/imreadJpeg.cpp filmulator-gui/core/imreadTiff.cpp filmulator-gui/core/imwriteJpeg.cpp filmulator-gui/core/imwriteTiff.cpp filmulator-gui/core/layerMix.cpp filmulator-gui/core/mergeExps.cpp filmulator-gui/core/outputFile.cpp filmulator-gui/core/rotateImage.cpp filmulator-gui/core/scale.cpp filmulator-gui/core/timeDiff.cpp filmulator-gui/core/vibranceSaturation.cpp filmulator-gui/core/whiteBalance.cpp filmulator-gui/core/whitepointBlackpoint.cpp filmulator-gui/core/nlmeans/bisecting_kmeans.cpp filmulator-gui/core/nlmeans/calcC1chanT.cpp filmulator-gui/core/nlmeans/calcW_generic.cpp filmulator-gui/core/nlmeans/expandDims.cpp filmulator-gui/core/nlmeans/highDimBoxFilter.cpp filmulator-gui/core/nlmeans/kMeansNLMApprox.cpp filmulator-gui/core/nlmeans/splitCluster.cpp filmulator-gui/core/rawtherapee/boxblur.cc filmulator-gui/core/rawtherapee/cplx_wavelet_dec.cc filmulator-gui/core/rawtherapee/FTblockDN.cc filmulator-gui/core/rawtherapee/gauss.cc filmulator-gui/core/rawtherapee/impulse_denoise.cc filmulator-gui/core/rawtherapee/labimage.cc filmulator-gui/database/basicSqlModel.cpp filmulator-gui/database/camconst.cpp filmulator-gui/database/cJSON.c filmulator-gui/database/dateHistogramModel.cpp filmulator-gui/database/dbSetup.cpp filmulator-gui/database/exifFunctions.cpp filmulator-gui/database/importModel.cpp filmulator-gui/database/importProperties.cpp filmulator-gui/database/importWorker.cpp filmulator-gui/database/organizeModel.cpp filmulator-gui/database/organizeProperties.cpp filmulator-gui/database/queueModel.cpp filmulator-gui/database/sqlModel.cpp filmulator-gui/database/sqlInsertion.cpp filmulator-gui/database/signalSwitchboard.cpp filmulator-gui/database/database.cpp filmulator-gui/database/rawproc_lensfun/lensfun_dbupdate.cpp filmulator-gui/ui/filmImageProvider.cpp filmulator-gui/ui/lensSelectModel.cpp filmulator-gui/ui/parameterManager.cpp filmulator-gui/ui/settings.cpp filmulator-gui/ui/thumbWriteWorker.cpp filmulator-gui/ui/updateHistograms.cpp filmulator-gui/qtquick2applicationviewer/qtquick2applicationviewer.cpp ) #qt5_add_resources(filmulator_RSCS qtquick_compiler_add_resources(filmulator_RSCS filmulator-gui/qml.qrc filmulator-gui/resources/pixmaps.qrc ) if(APPLE) set(CMAKE_OSX_SYSROOT "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk") set(MACOSX_DEPLOYMENT_TARGET "11.3") add_executable(filmulator MACOSX_BUNDLE ${filmulator_SRCS} ${filmulator_RSCS} ) target_compile_definitions(filmulator PRIVATE LF_GIT) elseif(WIN32) add_executable(filmulator # WIN32 # comment out WIN32 to get a terminal window ${filmulator_SRCS} ${filmulator_RSCS} ) target_link_directories(filmulator PRIVATE ${GLIB2_LIBRARY_DIRS}) target_compile_definitions(filmulator PRIVATE LF_GIT) else() add_executable(filmulator ${filmulator_SRCS} ${filmulator_RSCS} ) target_compile_definitions(filmulator PRIVATE LF_GIT) endif() # Integrate qml plugins into executable get_target_property(QT_TARGET_TYPE Qt5::Core TYPE) if(${QT_TARGET_TYPE} STREQUAL "STATIC_LIBRARY") message(STATUS "QT as static library") find_package(Qt5QmlImportScanner REQUIRED) qt5_import_qml_plugins(filmulator) endif() target_compile_options(filmulator PRIVATE #${OpenMP_CXX_FLAGS} ${DEFAULT_CXX_COMPILER_FLAGS} -DHAVE_CONFIG_H ) target_include_directories(filmulator PRIVATE filmulator-gui/core filmulator-gui/database filmulator-gui/ui filmulator-gui/qtquick2applicationviewer ${EXIV2_INCLUDE_DIR} ${LIBRAW_INCLUDE_DIR} ${JPEG_INCLUDE_DIRS} ${TIFF_INCLUDE_DIR} ${RTPROCESS_INCLUDE_DIR} ${LENSFUN_INCLUDE_DIR} ${CURL_INCLUDE_DIRS} ${LibArchive_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} ) #glib2 needed for static lensfun on windows above and below target_link_libraries(filmulator PRIVATE Qt::Core Qt::Sql Qt::Widgets Qt::Quick Qt::Qml ${EXIV2_LIBRARIES} ${LIBRAW_LIBRARIES} ${JPEG_LIBRARIES} ${TIFF_LIBRARIES} ${LENSFUN_LIBRARY} ${CURL_LIBRARIES} ${LibArchive_LIBRARIES} ${OpenMP_CXX_LIBRARIES} ${GLIB2_LIBRARIES} ${ZLIB_LIBRARIES} rtprocess::rtprocess OpenMP::OpenMP_CXX ) # let's see where all this stuff is... #message(STATUS "EXIV2_VERSION=${EXIV2_VERSION}") #message(STATUS "CURL_INCLUDE_DIRS=${CURL_INCLUDE_DIRS}") #message(STATUS "RTPROCESS_INCLUDE_DIR=${rtprocess_INCLUDE_DIR}") #message(STATUS "EXIV2_INCLUDE_DIR=${EXIV2_INCLUDE_DIR}") #message(STATUS "LIBRAW_INCLUDE_DIR=${LIBRAW_INCLUDE_DIR}") #message(STATUS "JPEG_INCLUDE_DIRS=${JPEG_INCLUDE_DIRS}") #message(STATUS "TIFF_INCLUDE_DIR=${TIFF_INCLUDE_DIR}") #message(STATUS "LENSFUN_INCLUDE_DIR=${LENSFUN_INCLUDE_DIR}") #message(STATUS "LibArchive_INCLUDE_DIRS=${LibArchive_INCLUDE_DIRS}") #message(STATUS "LibArchive_LIBRARIES=${LibArchive_LIBRARIES}") #message(STATUS "LENSFUN_LIBRARY=${LENSFUN_LIBRARY}") #message(STATUS "OpenMP_CXX_LIBRARIES=${OpenMP_CXX_LIBRARIES}") #message(STATUS "TIFF_LIBRARIES=${TIFF_LIBRARIES}") #message(STATUS "JPEG_LIBRARIES=${JPEG_LIBRARIES}") #message(STATUS "LIBRAW_LIBRARIES=${LIBRAW_LIBRARIES}") #message(STATUS "EXIV2_LIBRARIES=${EXIV2_LIBRARIES}") #message(STATUS "CURL_LIBRARIES=${CURL_LIBRARIES}") if(FALSE) add_definitions( -D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR ) set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install") install(TARGETS filmulator BUNDLE DESTINATION . COMPONENT RUNTIME RUNTIME DESTINATION bin COMPONENT Runtime LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) set(APPS "\${CMAKE_INSTALL_PREFIX}/filmulator.app") # Directories to look for dependencies set(DIRS ${CMAKE_BINARY_DIR}) install(CODE "include(BundleUtilities) fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")") set(CPACK_GENERATOR "DragNDrop") include(CPack) endif() if(APPLE) add_definitions( -D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR ) file(COPY "${CMAKE_SOURCE_DIR}/filmulator-gui/resources/macos/filmulator-gui" DESTINATION "./Filmulator.app/Contents/MacOS" FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE WORLD_EXECUTE) file(COPY "${CMAKE_SOURCE_DIR}/LICENSE" DESTINATION "./Filmulator.app/Contents/Resources") file(COPY "${CMAKE_SOURCE_DIR}/filmulator-gui/resources/macos/icon.icns" DESTINATION "./Filmulator.app/Contents/Resources") file(COPY "${CMAKE_SOURCE_DIR}/filmulator-gui/resources/macos/qt.conf" DESTINATION "./Filmulator.app/Contents/Resources") # set(CMAKE_OSX_ARCHITECTURES x86_64) set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/build") file(COPY "${CMAKE_SOURCE_DIR}/filmulator-gui/resources/macos/Info.plist.in" DESTINATION ".") set_source_files_properties(${CMAKE_SOURCE_DIR}/filmulator-gui/resources/macos/icon.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Filmulator.app/Contents/Resources") set(filmulator ${filmulator} "${CMAKE_SOURCE_DIR}/filmulator-gui/resources/macos/Icon.icns") install(TARGETS filmulator BUNDLE DESTINATION "${CMAKE_SOURCE_DIR}/build") execute_process(COMMAND plutil -replace CFBundleGetInfoString -string "${PROJECT_NAME} ${PROJECT_VERSION}" ./Info.plist.in) execute_process(COMMAND plutil -replace CFBundleVersion -string "${PROJECT_VERSION}" ./Info.plist.in) execute_process(COMMAND plutil -replace LSMinimumSystemVersion -string "${CMAKE_OSX_DEPLOYMENT_TARGET}" ./Info.plist.in) set_target_properties(filmulator PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_INFO_PLIST ./Info.plist.in) # # Copy over the compiled qml files # file(MAKE_DIRECTORY "./Filmulator.app/Contents/Resources/qml") # add_custom_command(TARGET filmulator POST_BUILD # COMMAND ${CMAKE_COMMAND} -E copy # "*.qrc" "./Filmulator.app/Contents/Resources/qml/"} # ) if (IS_SYMLINK "${EXIV2_LIBRARY}") file(READ_SYMLINK "${EXIV2_LIBRARY}" result) get_filename_component(exiv2_dir "${EXIV2_LIBRARY}" DIRECTORY) if (IS_SYMLINK "${exiv2_dir}/${result}") # this is the most likely situation, # assuming its from homebrew file(READ_SYMLINK "${exiv2_dir}/${result}" result2) get_filename_component(exiv2_dir2 "${result2}" DIRECTORY) # at this point we need a dirty, greasy hack... read_symlink appears # to return the wrong thing. so because we fixed the FindExiv2.cmake # file to actually return a real version number, we can make it ourselves... get_filename_component(exiv2_dir2 "${exiv2_dir}/${result}" DIRECTORY) file(COPY "${exiv2_dir2}/libexiv2.${EXIV2_VERSION}.dylib" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/") file(RENAME "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/libexiv2.${EXIV2_VERSION}.dylib" "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/libexiv2.dylib") else() file(COPY "${exiv2_dir}/${result}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/") endif() else() # yeah right its always gonna be a symlink, but we'll put this here just in case... file(COPY "${EXIV2_LIBRARY}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/") endif() #LibArchive is a symlink #file(READ_SYMLINK "${LibArchive_INCLUDE_DIR}/../lib/libarchive.dylib" libarchiveresult) if(IS_SYMLINK "${LibArchive_LIBRARY}") file(READ_SYMLINK "${LibArchive_LIBRARY}" libarchiveresult) get_filename_component(libarchive_dir "${LibArchive_LIBRARY}" DIRECTORY) #file(COPY "${LibArchive_INCLUDE_DIR}/../lib/${libarchiveresult}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") file(COPY "${libarchive_dir}/${libarchiveresult}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") file(RENAME "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/${libarchiveresult}" "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/libarchive.dylib") else() # I really doubt this is the case but we'll cover it just in case file(COPY "${LibArchive_LIBRARY}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") endif() #LIBCURL is a symlink if(IS_SYMLINK "${CURL_LIBRARIES}") file(READ_SYMLINK "${CURL_LIBRARIES}" libcurlresult) get_filename_component(libcurl_dir "${CURL_LIBRARIES}" DIRECTORY) file(COPY "${libcurl_dir}/${libcurlresult}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") file(RENAME "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/${libcurlresult}" "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/libcurl.dylib") else() file(COPY "${CURL_LIBRARY_RELEASE}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") endif() #LENSFUN is a symlink if(IS_SYMLINK "${LENSFUN_LIBRARY}") file(READ_SYMLINK "${LENSFUN_LIBRARY}" liblensfunresult) get_filename_component(liblensfun_dir "${LENSFUN_LIBRARY}" DIRECTORY) file(READ_SYMLINK "${liblensfun_dir}/${liblensfunresult}" liblensfunresult2) file(COPY "${liblensfun_dir}/${liblensfunresult2}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") file(RENAME "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/${liblensfunresult2}" "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/liblensfun.dylib") else() file(COPY "${LENSFUN_LIBRARY}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") endif() if(IS_SYMLINK "${JPEG_LIBRARY_RELEASE}") file(READ_SYMLINK "${JPEG_LIBRARY_RELEASE}" result) get_filename_component(libjpeg_dir "${JPEG_LIBRARY_RELEASE}" DIRECTORY) if(IS_SYMLINK "${libjpeg_dir}/${result}") file(READ_SYMLINK "${libjpeg_dir}/${result}" result2) get_filename_component(libjpeg_dir2 "${libjpeg_dir}/${result}" DIRECTORY) file(COPY "${libjpeg_dir2}/${result2}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") file(RENAME "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/${result2}" "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/libjpeg.dylib") endif() endif() if(IS_SYMLINK "${TIFF_LIBRARY_RELEASE}") file(READ_SYMLINK "${TIFF_LIBRARY_RELEASE}" result) get_filename_component(libtiff_dir "${TIFF_LIBRARY_RELEASE}" DIRECTORY) if(IS_SYMLINK "${libtiff_dir}/${result}") file(READ_SYMLINK "${libtiff_dir}/${result}" result2) get_filename_component(libtiff_dir2 "${libtiff_dir}/${result}" DIRECTORY) file(COPY "${libtiff_dir2}/${result2}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") file(RENAME "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/${result2}" "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/libtiff.dylib") endif() endif() if(IS_SYMLINK "${LIBRAW_LIBRARY_RELEASE}") file(READ_SYMLINK "${LIBRAW_LIBRARY_RELEASE}" result) get_filename_component(libraw_dir "${LIBRAW_LIBRARY_RELEASE}" DIRECTORY) if(IS_SYMLINK "${libraw_dir}/${result}") file(READ_SYMLINK "${libraw_dir}/${result}" result2) get_filename_component(libraw_dir2 "${libraw_dir}/${result}" DIRECTORY) file(COPY "${libraw_dir2}/${result2}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") file(RENAME "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/${result2}" "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/libraw.dylib") endif() else() file(COPY "${LIBRAW_LIBRARIES}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") endif() file(COPY "${librtprocess_dylib}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") get_filename_component(librtprocess_name "${librtprocess_dylib}" NAME) file(RENAME "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/${librtprocess_name}" "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks/librtprocess.0.dylib") file(COPY "${OpenMP_libomp_LIBRARY}" DESTINATION "${CMAKE_SOURCE_DIR}/build/Filmulator.app/Contents/Frameworks") # else() # install(TARGETS filmulator # RUNTIME # DESTINATION ${CMAKE_INSTALL_BINDIR} # ) endif() add_subdirectory(filmulator-gui/qml)