diff --git a/CMakeLists.txt b/CMakeLists.txt index 971bdafee..73abc5e68 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,173 +1,154 @@ 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 "20") set(KDE_APPLICATIONS_VERSION_MINOR "07") 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(BUILD_FUZZING) - set(CMAKE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -fsanitize=fuzzer-no-link,address") -endif() -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option") -endif() - # To be switched on when releasing. option(RELEASE_BUILD "Remove Git revision from program version" ON) option(BUILD_TESTING "Build tests" ON) option(BUILD_FUZZING "Build fuzzing target" OFF) # Minimum versions of main dependencies. set(MLT_MIN_MAJOR_VERSION 6) set(MLT_MIN_MINOR_VERSION 20) set(MLT_MIN_PATCH_VERSION 0) set(MLT_MIN_VERSION ${MLT_MIN_MAJOR_VERSION}.${MLT_MIN_MINOR_VERSION}.${MLT_MIN_PATCH_VERSION}) # KDE Frameworks find_package(ECM 5.45.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) include(ECMEnableSanitizers) add_definitions(-DTRANSLATION_DOMAIN=\"kdenlive\") find_package(KF5 REQUIRED COMPONENTS Archive Bookmarks CoreAddons Config ConfigWidgets DBusAddons KIO WidgetsAddons NotifyConfig NewStuff XmlGui Notifications GuiAddons TextWidgets IconThemes Declarative Solid OPTIONAL_COMPONENTS DocTools FileMetaData Crash Purpose) # Qt set(QT_MIN_VERSION 5.11.0) find_package(Qt5 REQUIRED COMPONENTS Core DBus Widgets Svg Quick QuickControls2 Concurrent QuickWidgets Multimedia) add_definitions(-DQT_NO_CAST_TO_ASCII -DQT_NO_URL_CAST_FROM_STRING) set(DEFAULT_CXX_FLAGS "${DEFAULT_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") # MLT find_package(MLT ${MLT_MIN_VERSION} REQUIRED) set_package_properties(MLT PROPERTIES DESCRIPTION "Multimedia framework" URL "https://mltframework.org" PURPOSE "Required to do video processing") message(STATUS "Found MLT++: ${MLTPP_LIBRARIES}") # Windows include(CheckIncludeFiles) check_include_files(malloc.h HAVE_MALLOC_H) check_include_files(pthread.h HAVE_PTHREAD_H) if(WIN32) find_package(DrMinGW) set(MLT_PREFIX "..") else() set(MLT_PREFIX ${MLT_ROOT_DIR}) find_package(Qt5 OPTIONAL_COMPONENTS WebKitWidgets QUIET) endif() 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() if(KF5Purpose_FOUND) message(STATUS "Found KF5 Purpose, filesharing enabled") set(KF5_PURPOSE TRUE) else() message(STATUS "KF5 Purpose not found, filesharing disabled") endif() if(KF5DocTools_FOUND) add_subdirectory(doc) kdoctools_install(po) endif() # 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) 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() find_package(RTTR 0.9.6 QUIET) if(NOT RTTR_FOUND) message(STATUS "RTTR not found on system, will download source and build it") include(rttr.CMakeLists.txt) endif() feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) set(FFMPEG_SUFFIX "" CACHE STRING "FFmpeg custom suffix") configure_file(config-kdenlive.h.cmake config-kdenlive.h @ONLY) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wno-suggest-override") +set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) + +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option") +endif() +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-suggest-override") + set(KDENLIVE_CXX_FLAGS "${DEFAULT_CXX_FLAGS} -Wall -pedantic -Wextra") +endif() # Sources add_subdirectory(src) add_subdirectory(renderer) add_subdirectory(thumbnailer) add_subdirectory(data) ki18n_install(po) include(GNUInstallDirs) install(FILES AUTHORS COPYING README.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) if (ECM_VERSION VERSION_LESS "5.59.0") install(FILES kdenlive.categories DESTINATION ${KDE_INSTALL_CONFDIR}) else() install(FILES kdenlive.categories DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}) endif() -############################ # Tests -############################ - if(BUILD_TESTING) - message(STATUS "Building tests") add_subdirectory(tests) - - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexceptions") - include_directories( - ${CMAKE_BINARY_DIR} - ${CMAKE_BINARY_DIR}/src - ${MLT_INCLUDE_DIR} - ${MLTPP_INCLUDE_DIR} - src) - add_executable(runTests ${Tests_SRCS}) - set_property(TARGET runTests PROPERTY CXX_STANDARD 14) - target_link_libraries(runTests kdenliveLib) - add_test(NAME runTests COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/runTests -d yes) endif() - -if(BUILD_FUZZING) - message(STATUS "Building fuzzing") - set(CMAKE_CXX_COMPILER /usr/bin/clang++) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${KDENLIVE_CXX_FLAGS} -fsanitize=fuzzer-no-link,address") +if(BUILD_FUZZING AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")) add_subdirectory(fuzzer) endif() diff --git a/fuzzer/CMakeLists.txt b/fuzzer/CMakeLists.txt index 87704a7bb..a3e5c5d22 100644 --- a/fuzzer/CMakeLists.txt +++ b/fuzzer/CMakeLists.txt @@ -1,32 +1,9 @@ -############################ -# fuzzing -######################## - -if(POLICY CMP0079) - cmake_policy(SET CMP0079 NEW) -endif() - -project(Kdenlive_fuzzing) - -SET(FUZZING_CXX_FLAGS "${DEFAULT_CXX_FLAGS} -Wall -pedantic -Wextra -fexceptions -O1 -fsanitize=fuzzer,address -g") - - - -SET(fuzzing_SRCS - main_fuzzer.cpp - fuzzing.cpp -) -SET(reproduce_SRCS - main_reproducer.cpp - fuzzing.cpp -) - -ADD_EXECUTABLE(fuzz ${fuzzing_SRCS}) -ADD_EXECUTABLE(fuzz_reproduce ${reproduce_SRCS}) +include_directories(${MLT_INCLUDE_DIR}) +add_executable(fuzz main_fuzzer.cpp fuzzing.cpp) +add_executable(fuzz_reproduce main_reproducer.cpp fuzzing.cpp) target_link_libraries(fuzz kdenliveLib) target_link_libraries(fuzz_reproduce kdenliveLib) -#target_link_options(fuzz PUBLIC "-fsanitize=fuzzer") -set_target_properties(fuzz PROPERTIES LINK_FLAGS "-fsanitize=fuzzer") set_property(TARGET fuzz PROPERTY CXX_STANDARD 14) set_property(TARGET fuzz_reproduce PROPERTY CXX_STANDARD 14) -set_target_properties(fuzz PROPERTIES COMPILE_FLAGS "${FUZZING_CXX_FLAGS}") +set_target_properties(fuzz PROPERTIES COMPILE_FLAGS "-O1 -g -Wall -pedantic -Wextra -fexceptions -fsanitize=fuzzer,address") +set_target_properties(fuzz PROPERTIES LINK_FLAGS "-fsanitize=fuzzer") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c7ffba6c0..734b80788 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,224 +1,209 @@ ### Find packages files find_package(LibV4L2) set_package_properties(LibV4L2 PROPERTIES DESCRIPTION "video4linux support libraries" URL "https://linuxtv.org/downloads/v4l-utils/" TYPE RUNTIME PURPOSE "Required for better webcam support") if(NOT WIN32) 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() else() set(MLT_MELTBIN "melt.exe") set(MLT_DATADIR "../share/mlt") endif() configure_file(mlt_config.h.in ${CMAKE_BINARY_DIR}/mlt_config.h) check_include_files(linux/input.h HAVE_LINUX_INPUT_H) if(HAVE_LINUX_INPUT_H) list(APPEND kdenlive_SRCS jogshuttle/jogmanager.cpp jogshuttle/jogaction.cpp jogshuttle/jogshuttle.cpp jogshuttle/jogshuttleconfig.cpp) endif() ### Find source files add_subdirectory(abstractmodel) add_subdirectory(assets) add_subdirectory(audiomixer) 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(library) 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() ## top_SRCS file(GLOB top_SRCS "*.cpp") # string(REGEX REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/lib/[^;]+;?" "" top_SRCS "${top_SRCS}") list(REMOVE_ITEM top_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp) list(APPEND kdenlive_SRCS ${top_SRCS}) ## Others special cases kconfig_add_kcfg_files(kdenlive_SRCS kdenlivesettings.kcfgc) install(FILES kdenlivesettings.kcfg DESTINATION ${KCFG_INSTALL_DIR}) ecm_qt_declare_logging_category(kdenlive_SRCS HEADER kdenlive_debug.h IDENTIFIER KDENLIVE_LOG CATEGORY_NAME org.kde.multimedia.kdenlive) qt5_add_dbus_adaptor(kdenlive_SRCS org.kdenlive.MainWindow.xml mainwindow.h MainWindow) ## UI's file(GLOB kdenlive_UIS "ui/*.ui") ki18n_wrap_ui(kdenlive_UIS ${kdenlive_UIS}) ## MOC qt5_wrap_cpp(kdenlive_MOC definitions.h) set_property(SOURCE definitions.h PROPERTY SKIP_AUTOMOC ON) add_library(kdenliveLib STATIC ${kdenlive_SRCS} ${kdenlive_UIS} ${kdenlive_MOC}) qt5_add_resources(kdenlive_extra_SRCS icons.qrc ui/resources.qrc uiresources.qrc) ## Icon for Windows and OSX file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../data/icons/*-apps-kdenlive.png") ecm_add_app_icon(kdenlive ICONS ${ICONS_SRCS}) # icon name = variable name add_executable(kdenlive main.cpp ${kdenlive_extra_SRCS} ${kdenlive}) target_include_directories(kdenlive PRIVATE ${CMAKE_BINARY_DIR} ) target_include_directories(kdenlive SYSTEM PRIVATE ${MLT_INCLUDE_DIR} ${MLTPP_INCLUDE_DIR}) target_link_libraries(kdenlive kdenliveLib) install(TARGETS kdenlive DESTINATION ${BIN_INSTALL_DIR}) install(FILES kdenliveui.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/kdenlive) target_include_directories(kdenliveLib PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/lib/external ${CMAKE_CURRENT_SOURCE_DIR}/lib ) target_include_directories(kdenliveLib SYSTEM PRIVATE ${MLT_INCLUDE_DIR} ${MLTPP_INCLUDE_DIR}) # Adds Qt definitions and include directories, and sets QT_LIBRARIES according # to the components requested in find_package(). # 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). 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::Solid Qt5::Svg Qt5::Quick Qt5::QuickControls2 Qt5::QuickWidgets Qt5::Concurrent Qt5::Multimedia ${OPENGL_LIBRARIES} ${OPENGLES_LIBRARIES} ${MLT_LIBRARIES} ${MLTPP_LIBRARIES} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} kiss_fft) if(TARGET RTTR::Core) target_link_libraries(kdenliveLib RTTR::Core) else() target_link_libraries(kdenliveLib RTTR::Core_Lib) endif() if(BUILD_COVERAGE) target_link_libraries(kdenliveLib gcov) endif() set_property(TARGET kdenliveLib PROPERTY CXX_STANDARD 14) -SET(KDENLIVE_CXX_FLAGS "${DEFAULT_CXX_FLAGS} -Wall -pedantic -Wextra") -SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wcast-qual -Wcast-align -Wfloat-equal -Wpointer-arith") -SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wunreachable-code -Wchar-subscripts -Wcomment -Wformat") -SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wmain -Wmissing-braces") -SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wparentheses -Wsequence-point -Wreturn-type -Wswitch") -SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wuninitialized -Wreorder -Wundef -Wshadow -Wwrite-strings") -SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wmissing-noreturn -Wsign-compare -Wsign-conversion -Wunused") -SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wstrict-aliasing -Wconversion -Wdisabled-optimization -Wno-undef") -SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wunused-parameter -Wshadow -Wno-variadic-macros -Wno-float-conversion") -if(KDENLIVE_COMPILER_IS_GNUCXX) - SET(KDENLIVE_CXX_FLAGS "${KDENLIVE_CXX_FLAGS} -Wlogical-op -Wunsafe-loop-optimizations ") -endif() -set_target_properties(kdenliveLib PROPERTIES COMPILE_FLAGS "${KDENLIVE_CXX_FLAGS}") add_definitions(${qt5gui_definitions} -DQT_STRICT_ITERATORS -DQT_NO_CAST_FROM_BYTEARRAY) -# To compile kiss_fft. -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c99") # Optional deps if(DRMINGW_FOUND) target_compile_definitions(kdenlive PRIVATE -DUSE_DRMINGW) target_include_directories(kdenlive SYSTEM PRIVATE ${DRMINGW_INCLUDE_DIR}) target_link_libraries(kdenlive ${DRMINGW_LIBRARY}) elseif(KF5Crash_FOUND) target_compile_definitions(kdenlive PRIVATE -DKF5_USE_CRASH) target_link_libraries(kdenlive KF5::Crash) endif() if(KF5_FILEMETADATA) target_compile_definitions(kdenliveLib PRIVATE -DKF5_USE_FILEMETADATA) target_link_libraries(kdenliveLib KF5::FileMetaData) endif() if(KF5_PURPOSE) target_compile_definitions(kdenliveLib PRIVATE -DKF5_USE_PURPOSE) target_link_libraries(kdenliveLib KF5::Purpose KF5::PurposeWidgets) endif() if(Qt5WebKitWidgets_FOUND) message(STATUS "Found Qt5 WebKitWidgets. You can use your Freesound.org credentials to download files") target_compile_definitions(kdenliveLib PRIVATE -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) target_include_directories(kdenliveLib SYSTEM PRIVATE ${X11_Xlib_INCLUDE_PATH}) target_link_libraries(kdenliveLib ${X11_LIBRARIES}) endif() if(SDL2_FOUND) target_link_libraries(kdenliveLib ${SDL2_LIBRARY}) elseif(SDL_FOUND) target_link_libraries(kdenliveLib ${SDL_LIBRARY}) endif() if(LIBV4L2_FOUND) target_include_directories(kdenliveLib SYSTEM PRIVATE ${LIBV4L2_INCLUDE_DIR}) target_link_libraries(kdenliveLib ${LIBV4L2_LIBRARY}) target_compile_definitions(kdenliveLib PRIVATE -DUSE_V4L) endif() if(HAVE_LINUX_INPUT_H) target_compile_definitions(kdenliveLib PRIVATE -DUSE_JOGSHUTTLE) target_link_libraries(kdenliveLib media_ctrl) endif() diff --git a/src/lib/external/kiss_fft/CMakeLists.txt b/src/lib/external/kiss_fft/CMakeLists.txt index c33f1af2a..5d21e61da 100644 --- a/src/lib/external/kiss_fft/CMakeLists.txt +++ b/src/lib/external/kiss_fft/CMakeLists.txt @@ -1,12 +1,12 @@ # Create a static library from kiss_fft -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c99") find_package(Qt5Core REQUIRED) include_directories( ${CMAKE_BINARY_DIR} ) add_library(kiss_fft STATIC _kiss_fft_guts.h kiss_fft.c tools/kiss_fftr.c ) +set_property(TARGET kiss_fft PROPERTY C_STANDARD 99) target_link_libraries(kiss_fft Qt5::Core) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c625389a3..ecf2a7cb6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,35 +1,24 @@ -############################ -# Tests -############################ -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -fexceptions") -string (REPLACE "-std=gnu++11" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - - -SET(Tests_SRCS - tests/TestMain.cpp - tests/abortutil.cpp - tests/compositiontest.cpp - tests/effectstest.cpp - tests/groupstest.cpp - tests/keyframetest.cpp - tests/markertest.cpp - tests/modeltest.cpp - tests/regressions.cpp - tests/snaptest.cpp - tests/test_utils.cpp - tests/timewarptest.cpp - tests/treetest.cpp - tests/trimmingtest.cpp - PARENT_SCOPE +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions") +endif() +set(Tests_SRCS + TestMain.cpp + abortutil.cpp + compositiontest.cpp + effectstest.cpp + groupstest.cpp + keyframetest.cpp + markertest.cpp + modeltest.cpp + regressions.cpp + snaptest.cpp + test_utils.cpp + timewarptest.cpp + treetest.cpp + trimmingtest.cpp ) - -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 - ) - +include_directories(${MLT_INCLUDE_DIR} ..) +add_executable(runTests ${Tests_SRCS}) +set_property(TARGET runTests PROPERTY CXX_STANDARD 14) +target_link_libraries(runTests kdenliveLib) +add_test(NAME runTests COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/runTests -d yes)