diff --git a/CMakeLists.txt b/CMakeLists.txt index d4a4d677b..24671f684 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,155 +1,158 @@ project(Kdenlive) # An odd patch version number means development version, while an even one means # stable release. An additional number can be used for bugfix-only releases. # KDE Application Version, managed by release script set (KDE_APPLICATIONS_VERSION_MAJOR "17") set (KDE_APPLICATIONS_VERSION_MINOR "11") set (KDE_APPLICATIONS_VERSION_MICRO "70") set(KDENLIVE_VERSION ${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO}) cmake_minimum_required(VERSION 3.0) if(POLICY CMP0063) cmake_policy(SET CMP0063 NEW) endif() if (POLICY CMP0053) cmake_policy(SET CMP0053 NEW) endif() +if(POLICY CMP0071) + cmake_policy(SET CMP0071 NEW) +endif() # Minimum versions of main dependencies. set(MLT_MIN_MAJOR_VERSION 6) set(MLT_MIN_MINOR_VERSION 6) set(MLT_MIN_PATCH_VERSION 0) set(MLT_MIN_VERSION ${MLT_MIN_MAJOR_VERSION}.${MLT_MIN_MINOR_VERSION}.${MLT_MIN_PATCH_VERSION}) set(QT_MIN_VERSION 5.7.0) find_package(ECM 5.18.0 REQUIRED CONFIG) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules) include(KDECompilerSettings NO_POLICY_SCOPE) include(FeatureSummary) include(ECMInstallIcons) include(GenerateExportHeader) include(KDEInstallDirs) include(KDECMakeSettings) include(ECMOptionalAddSubdirectory) include(ECMMarkNonGuiExecutable) include(ECMAddAppIcon) include(ECMQtDeclareLoggingCategory) add_definitions(-DQT_NO_CAST_TO_ASCII) add_definitions(-DQT_NO_URL_CAST_FROM_STRING) add_definitions(-DTRANSLATION_DOMAIN=\"kdenlive\") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14") #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -fsanitize=address -fno-omit-frame-pointer") # To be switched on when releasing. option(RELEASE_BUILD "Remove Git revision from program version (use for stable releases)" ON) option(BUILD_TESTS "Build tests" ON) # Get current version. set(KDENLIVE_VERSION_STRING "${KDENLIVE_VERSION}") if(NOT RELEASE_BUILD AND EXISTS ${CMAKE_SOURCE_DIR}/.git) # Probably a Git workspace; determine the revision. find_package(Git QUIET) if(GIT_FOUND) exec_program(${GIT_EXECUTABLE} ${CMAKE_SOURCE_DIR} ARGS "log -n 1 --pretty=format:\"%h\"" OUTPUT_VARIABLE KDENLIVE_GIT_REVISION RETURN_VALUE TAG_RESULT ) # git log failed; maybe the repository was checked with depth=1. if(NOT ${TAG_RESULT} EQUAL 0) exec_program(${GIT_EXECUTABLE} ${CMAKE_SOURCE_DIR} ARGS "describe --always" OUTPUT_VARIABLE KDENLIVE_GIT_REVISION ) endif() message(STATUS "Kdenlive Git revision: ${KDENLIVE_GIT_REVISION}") set(KDENLIVE_VERSION_STRING "${KDENLIVE_VERSION} (rev. ${KDENLIVE_GIT_REVISION})") else() message(STATUS "Kdenlive Git revision could not be determined") endif() endif() include(CheckIncludeFiles) check_include_files(malloc.h HAVE_MALLOC_H) check_include_files(pthread.h HAVE_PTHREAD_H) find_package(Qt5 REQUIRED COMPONENTS Core DBus Widgets Svg Quick Concurrent QuickWidgets) find_package(Qt5 OPTIONAL_COMPONENTS WebKitWidgets QUIET) find_package(KF5 5.23.0 OPTIONAL_COMPONENTS XmlGui QUIET) if (KF5XmlGui_FOUND) message(STATUS "Found KF5 >= 5.23.0 enabling icon coloring") else() message(STATUS "KF5 < 5.23.0 Disable icon coloring") set(KF5_ICON_COMPATIBILITY TRUE) endif() find_package(KF5 REQUIRED COMPONENTS Archive Bookmarks CoreAddons Config ConfigWidgets DBusAddons KIO WidgetsAddons NotifyConfig NewStuff XmlGui Notifications GuiAddons TextWidgets IconThemes Crash Declarative Solid OPTIONAL_COMPONENTS DocTools FileMetaData) if (KF5FileMetaData_FOUND) message(STATUS "Found KF5 FileMetadata to extract file metadata") set(KF5_FILEMETADATA TRUE) else() message(STATUS "KF5 FileMetadata not found, file metadata will not be available") endif() # Search MLT package. find_package(MLT ${MLT_MIN_VERSION} REQUIRED) set_package_properties(MLT PROPERTIES DESCRIPTION "Multimedia framework and video playout server for TV broadcasting" URL "http://mltframework.org" TYPE RUNTIME PURPOSE "Required to do video processing") set(MLT_PREFIX ${MLT_ROOT_DIR}) add_subdirectory(data) if(KF5DocTools_FOUND) add_subdirectory(doc) endif() #add_subdirectory(plugins) ecm_optional_add_subdirectory(po) add_subdirectory(renderer) add_subdirectory(src) add_subdirectory(thumbnailer) ############################ # Tests ############################ if (BUILD_TESTS) message(STATUS "Building TESTS") add_subdirectory(tests) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -fexceptions") include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src ${MLT_INCLUDE_DIR} ${MLTPP_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/lib/external ${CMAKE_CURRENT_SOURCE_DIR}/lib src ) ADD_EXECUTABLE(runTests ${Tests_SRCS}) target_link_libraries(runTests kdenliveLib) ADD_TEST(runTests runTests -d yes) else() message(STATUS "Not building TESTS") endif() #add_subdirectory(testingArea) install( FILES kdenlive.categories DESTINATION ${KDE_INSTALL_CONFDIR} ) configure_file(config-kdenlive.h.cmake config-kdenlive.h @ONLY) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 93466177d..dc3da111f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,346 +1,347 @@ add_definitions(${Qt5Gui_DEFINITIONS}) if(${Qt5Gui_OPENGL_IMPLEMENTATION} STREQUAL "GL") find_package(OpenGL REQUIRED) set_package_properties(OpenGL PROPERTIES DESCRIPTION "the OpenGL library" URL "" TYPE RUNTIME PURPOSE "") else() find_package(OpenGLES REQUIRED) set_package_properties(OpenGLES PROPERTIES DESCRIPTION "the OpenGLES library" URL "" TYPE RUNTIME PURPOSE "") endif() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -pedantic -Wextra") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-qual -Wcast-align -Wfloat-equal -Wpointer-arith") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunreachable-code -Wchar-subscripts -Wcomment -Wformat") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror-implicit-function-declaration -Wmain -Wmissing-braces") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wparentheses -Wsequence-point -Wreturn-type -Wswitch") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wuninitialized -Wreorder -Wundef -Wshadow -Wwrite-strings") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-compare -Wconversion") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wmissing-noreturn -Wsign-conversion -Wunused ") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-aliasing -Wstrict-overflow -Wconversion") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wdisabled-optimization") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-undef") if (CMAKE_COMPILER_IS_GNUCXX) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wlogical-op -Wunsafe-loop-optimizations ") endif() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunused-parameter -Wshadow -Wno-variadic-macros -Wno-float-conversion") find_package(PkgConfig QUIET) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=mltdatadir mlt-framework OUTPUT_VARIABLE MLT_DATADIR RESULT_VARIABLE MLT_DATADIR_failed) if (NOT MLT_DATADIR_failed) string(REGEX REPLACE "[\r\n]" "" MLT_DATADIR "${MLT_DATADIR}") endif() execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=meltbin mlt-framework OUTPUT_VARIABLE MLT_MELTBIN RESULT_VARIABLE MLT_MELTBIN_failed) if (NOT MLT_MELTBIN_failed) string(REGEX REPLACE "[\r\n]" "" MLT_MELTBIN "${MLT_MELTBIN}") endif() configure_file( mlt_config.h.in ${CMAKE_BINARY_DIR}/generated/mlt_config.h ) include_directories( ${CMAKE_BINARY_DIR}/generated/ ) # Make sure it can be included... option(WITH_JogShuttle "Build Jog/Shuttle support" ON) set(FFMPEG_SUFFIX "" CACHE STRING "FFmpeg custom suffix") find_package(LibV4L2) set_package_properties(LibV4L2 PROPERTIES DESCRIPTION "Collection of video4linux support libraries" URL "http://freecode.com/projects/libv4l" TYPE RUNTIME PURPOSE "Required for better webcam support") if(WITH_JogShuttle) check_include_files(linux/input.h HAVE_LINUX_INPUT_H) if(HAVE_LINUX_INPUT_H) set(BUILD_JogShuttle TRUE) endif(HAVE_LINUX_INPUT_H) endif() set_package_properties(OpenGL PROPERTIES DESCRIPTION "the OpenGL library" URL "" TYPE RUNTIME PURPOSE "") #if(APPLE) # macro_log_feature(SDL_FOUND # "SDL" # "Cross-platform multimedia library" # "http://www.libsdl.org" # TRUE # ) #endif(APPLE) # use sane compile flags add_definitions( # -DQT_USE_QSTRINGBUILDER -DQT_NO_CAST_TO_ASCII # -DQT_NO_CAST_FROM_ASCII -DQT_STRICT_ITERATORS -DQT_NO_URL_CAST_FROM_STRING -DQT_NO_CAST_FROM_BYTEARRAY # -DQT_USE_FAST_OPERATOR_PLUS ) install(FILES kdenlivesettings.kcfg DESTINATION ${KCFG_INSTALL_DIR}) kconfig_add_kcfg_files(kdenlive_SRCS kdenlivesettings.kcfgc) add_subdirectory(abstractmodel) add_subdirectory(assets) add_subdirectory(bin) add_subdirectory(capture) add_subdirectory(dialogs) add_subdirectory(doc) add_subdirectory(dvdwizard) add_subdirectory(effects) add_subdirectory(effectslist) add_subdirectory(jobs) add_subdirectory(lib) add_subdirectory(mltcontroller) add_subdirectory(monitor) add_subdirectory(profiles) add_subdirectory(project) add_subdirectory(qml) add_subdirectory(scopes) add_subdirectory(simplekeyframes) add_subdirectory(timeline2) add_subdirectory(titler) add_subdirectory(transitions) add_subdirectory(utils) add_subdirectory(widgets) add_subdirectory(xml) if (Qt5WebKitWidgets_FOUND) add_subdirectory(qt-oauth-lib) endif() add_subdirectory(library) list(APPEND kdenlive_SRCS colortools.cpp definitions.cpp gentime.cpp doc/kthumb.cpp mainwindow.cpp renderer.cpp statusbarmessagelabel.cpp timecode.cpp timecodedisplay.cpp layoutmanagement.cpp hidetitlebars.cpp mltconnection.cpp core.cpp undohelper.cpp ) ecm_qt_declare_logging_category(kdenlive_SRCS HEADER kdenlive_debug.h IDENTIFIER KDENLIVE_LOG CATEGORY_NAME org.kde.multimedia.kdenlive) ki18n_wrap_ui(kdenlive_UIS ui/addtrack_ui.ui ui/archivewidget_ui.ui ui/audiospectrum_ui.ui ui/backupdialog_ui.ui ui/bezierspline_ui.ui ui/boolparamwidget_ui.ui ui/clipdurationdialog_ui.ui ui/clipproperties_ui.ui ui/clipspeed_ui.ui ui/clipstabilize_ui.ui ui/cliptranscode_ui.ui ui/collapsiblewidget_ui.ui ui/colorclip_ui.ui ui/colorplaneexport_ui.ui ui/configcapture_ui.ui ui/configenv_ui.ui ui/configjogshuttle_ui.ui ui/configmisc_ui.ui ui/configproject_ui.ui ui/configsdl_ui.ui ui/configtimeline_ui.ui ui/configtranscode_ui.ui ui/cutjobdialog_ui.ui ui/dvdwizardchapters_ui.ui ui/dvdwizardmenu_ui.ui ui/dvdwizardstatus_ui.ui ui/dvdwizardvob_ui.ui ui/effectlist_ui.ui ui/fontval_ui.ui ui/freesound_ui.ui ui/geometrywidget_ui.ui ui/gradientedit_ui.ui ui/histogram_ui.ui ui/keyframedialog_ui.ui ui/keyframeeditor_ui.ui ui/keyframewidget_ui.ui ui/keywordval_ui.ui ui/listparamwidget_ui.ui ui/logindialog_ui.ui ui/managecaptures_ui.ui ui/manageencodingprofile_ui.ui ui/markerdialog_ui.ui ui/missingclips_ui.ui ui/monitoreditwidget_ui.ui ui/profiledialog_ui.ui ui/projectsettings_ui.ui ui/qtextclip_ui.ui ui/recmonitor_ui.ui ui/renderwidget_ui.ui ui/rgbparade_ui.ui ui/saveprofile_ui.ui ui/scenecutdialog_ui.ui ui/selectivecolor_ui.ui ui/slideshowclip_ui.ui ui/smconfig_ui.ui ui/spacerdialog_ui.ui ui/spectrogram_ui.ui ui/templateclip_ui.ui ui/titlewidget_ui.ui ui/tracksconfigdialog_ui.ui ui/transitionsettings_ui.ui ui/unicodewidget_ui.ui ui/urlval_ui.ui ui/vectorscope_ui.ui ui/waveform_ui.ui ui/wipeval_ui.ui ui/wizardcapture_ui.ui ui/wizardcheck_ui.ui ui/wizardextra_ui.ui ui/wizardmltcheck_ui.ui ui/wizardstandard_ui.ui ) if(BUILD_JogShuttle) list(APPEND kdenlive_SRCS jogshuttle/jogmanager.cpp jogshuttle/jogaction.cpp jogshuttle/jogshuttle.cpp jogshuttle/jogshuttleconfig.cpp ) endif() # Sets the icon on Windows and OSX file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/*-apps-kdenlive.png") ecm_add_app_icon(kdenlive_SRCS ICONS ${ICONS_SRCS}) qt5_add_dbus_adaptor(kdenlive_SRCS org.kdenlive.MainWindow.xml mainwindow.h MainWindow ) qt5_add_resources(kdenlive_extra_SRCS icons.qrc ui/resources.qrc uiresources.qrc) qt5_wrap_cpp(kdenlive_MOC definitions.h) add_library(kdenliveLib STATIC ${kdenlive_SRCS} ${kdenlive_UIS} ${kdenlive_MOC}) add_executable(kdenlive main.cpp ${kdenlive_extra_SRCS} ) target_link_libraries(kdenlive kdenliveLib ) # To compile kiss_fft. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c99") # KDE definitions and include directories *must* always come first, Qt follows # (to avoid breaking builds when KDE and/or Qt are installed to different # prefixes). include_directories( ${CMAKE_BINARY_DIR} ${MLT_INCLUDE_DIR} ${MLTPP_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/lib/external ${CMAKE_CURRENT_SOURCE_DIR}/lib ) # Adds Qt definitions and include directories, and sets QT_LIBRARIES according # to the components requested in find_package(). #include(${QT_USE_FILE}) target_link_libraries(kdenliveLib KF5::WidgetsAddons KF5::Archive KF5::CoreAddons KF5::KIOCore KF5::KIOFileWidgets KF5::KIOWidgets KF5::NotifyConfig KF5::NewStuff KF5::DBusAddons KF5::XmlGui KF5::GuiAddons KF5::Notifications KF5::TextWidgets KF5::Declarative KF5::IconThemes KF5::Crash KF5::Solid Qt5::Svg Qt5::Quick Qt5::QuickWidgets Qt5::Concurrent ${OPENGL_LIBRARIES} ${OPENGLES_LIBRARIES} ${MLT_LIBRARIES} ${MLTPP_LIBRARIES} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} kiss_fft ) message(STATUS "Found MLT++: ${MLTPP_LIBRARIES}") if (KF5_FILEMETADATA) add_definitions(-DKF5_USE_FILEMETADATA) target_link_libraries(kdenliveLib KF5::FileMetaData) endif() if (Qt5WebKitWidgets_FOUND) message(STATUS "Found Qt5 WebKitWidgets. You can use your Freesound.org credentials to download files") add_definitions(-DQT5_USE_WEBKIT) target_link_libraries(kdenliveLib Qt5::WebKitWidgets) else() message(STATUS "Qt5 WebKitWidgets not found. You cannot use your Freesound.org credentials, only preview files can be downloaded from the Online Resources Widget") endif() if(Q_WS_X11) include_directories(${X11_Xlib_INCLUDE_PATH}) target_link_libraries(kdenliveLib ${X11_LIBRARIES}) endif(Q_WS_X11) if(SDL2_FOUND) target_link_libraries(kdenliveLib ${SDL2_LIBRARY}) elseif(SDL_FOUND) target_link_libraries(kdenliveLib ${SDL_LIBRARY}) endif(SDL2_FOUND) if(LIBV4L2_FOUND) include_directories(${LIBV4L2_INCLUDE_DIR}) target_link_libraries(kdenliveLib ${LIBV4L2_LIBRARY}) add_definitions(-DUSE_V4L) endif() if(BUILD_JogShuttle) add_definitions(-DUSE_JOGSHUTTLE) target_link_libraries(kdenliveLib media_ctrl ) endif() +set_property(SOURCE definitions.h PROPERTY SKIP_AUTOMOC ON) install(TARGETS kdenlive DESTINATION ${BIN_INSTALL_DIR}) install(FILES kdenliveui.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/kdenlive)