diff --git a/CMakeLists.txt b/CMakeLists.txt index 73abc5e68..9dd3e02f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,154 +1,150 @@ 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() # 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}") +set(CMAKE_CXX_FLAGS "${CMAKE_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_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") +if(BUILD_FUZZING) + set(ECM_ENABLE_SANITIZERS fuzzer;address) 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) add_subdirectory(tests) endif() 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 a3e5c5d22..090f17737 100644 --- a/fuzzer/CMakeLists.txt +++ b/fuzzer/CMakeLists.txt @@ -1,9 +1,8 @@ include_directories(${MLT_INCLUDE_DIR}) +kde_enable_exceptions() 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 kdenliveLib -fsanitize=fuzzer) target_link_libraries(fuzz_reproduce kdenliveLib) set_property(TARGET fuzz PROPERTY CXX_STANDARD 14) set_property(TARGET fuzz_reproduce PROPERTY CXX_STANDARD 14) -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/lib/external/kiss_fft/CMakeLists.txt b/src/lib/external/kiss_fft/CMakeLists.txt index 5d21e61da..8267fd365 100644 --- a/src/lib/external/kiss_fft/CMakeLists.txt +++ b/src/lib/external/kiss_fft/CMakeLists.txt @@ -1,12 +1,6 @@ # Create a static library from kiss_fft 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 -) +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/src/lib/external/media_ctrl/CMakeLists.txt b/src/lib/external/media_ctrl/CMakeLists.txt index 24870ad3b..51719951e 100644 --- a/src/lib/external/media_ctrl/CMakeLists.txt +++ b/src/lib/external/media_ctrl/CMakeLists.txt @@ -1,10 +1,5 @@ if(HAVE_LINUX_INPUT_H) - # Create a static library media_ctrl - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c99") - include_directories( - ${CMAKE_BINARY_DIR} - ) - add_library(media_ctrl STATIC - mediactrl.c - ) + include_directories(${CMAKE_BINARY_DIR}) + add_library(media_ctrl STATIC mediactrl.c) + set_property(TARGET media_ctrl PROPERTY C_STANDARD 99) endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ecf2a7cb6..b85a5bdef 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,24 +1,21 @@ -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 +include_directories(${MLT_INCLUDE_DIR} ..) +kde_enable_exceptions() +add_executable(runTests 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(${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)