Warning, /multimedia/k3b/CMakeLists.txt is written in an unsupported language. File is not indexed.

0001 cmake_minimum_required(VERSION 3.16)
0002 
0003 # KDE Application Version, managed by release script
0004 set (RELEASE_SERVICE_VERSION_MAJOR "24")
0005 set (RELEASE_SERVICE_VERSION_MINOR "04")
0006 set (RELEASE_SERVICE_VERSION_MICRO "70")
0007 set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
0008 
0009 project(k3b VERSION ${RELEASE_SERVICE_VERSION})
0010 
0011 set(QT_MIN_VERSION "5.15.2")
0012 set(KF5_MIN_VERSION "5.96.0")
0013 
0014 set (KDE_COMPILERSETTINGS_LEVEL "5.84")
0015 
0016 find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE)
0017 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" "${ECM_MODULE_PATH}")
0018 
0019 ##################  K3b version  ################################
0020 set(K3B_VERSION_STRING ${RELEASE_SERVICE_VERSION})
0021 
0022 # increase on BC breakage
0023 set(K3B_LIB_VERSION_MAJOR 8)
0024 
0025 # increase after adding functionality
0026 set(K3B_LIB_VERSION_MINOR 0)
0027 set(K3B_LIB_VERSION_RELEASE 0)
0028 
0029 
0030 ##################  K3b options #################################
0031 option(K3B_DEBUG "K3b additional debugging support" OFF)
0032 if(K3B_DEBUG)
0033     add_definitions(-g)
0034 endif()
0035 option(K3B_ENABLE_MUSICBRAINZ "Support for querying metadata about audio tracks from Musicbrainz." ON)
0036 option(K3B_ENABLE_DVD_RIPPING "Support for ripping Video DVDs with optional decryption." ON)
0037 option(K3B_ENABLE_TAGLIB "Support for reading audio file metadata using Taglib." ON)
0038 option(K3B_BUILD_API_DOCS "Build the API documentation for the K3b libs." OFF)
0039 
0040 # plugin options
0041 option(K3B_BUILD_FFMPEG_DECODER_PLUGIN "Build FFmpeg decoder plugin" ON)
0042 option(K3B_BUILD_OGGVORBIS_DECODER_PLUGIN "Build Ogg-Vorbis decoder plugin" ON)
0043 option(K3B_BUILD_OGGVORBIS_ENCODER_PLUGIN "Build Ogg-Vorbis encoder plugin" ON)
0044 option(K3B_BUILD_MAD_DECODER_PLUGIN "Build MAD mp3 decoder plugin" ON)
0045 option(K3B_BUILD_MUSE_DECODER_PLUGIN "Build Musepack decoder plugin" ON)
0046 option(K3B_BUILD_FLAC_DECODER_PLUGIN "Build Flac decoder plugin" ON)
0047 option(K3B_BUILD_SNDFILE_DECODER_PLUGIN "Build libsndfile decoder plugin" ON)
0048 option(K3B_BUILD_LAME_ENCODER_PLUGIN "Build Lame encoder plugin" ON)
0049 option(K3B_BUILD_SOX_ENCODER_PLUGIN "Build Sox encoder plugin" ON)
0050 option(K3B_BUILD_EXTERNAL_ENCODER_PLUGIN "Build external app encoder plugin" ON)
0051 option(K3B_BUILD_WAVE_DECODER_PLUGIN "Build Wave decoder plugin" ON)
0052 
0053 ##################  K3b requirements #################################
0054 include(KDEInstallDirs)
0055 include(KDECompilerSettings NO_POLICY_SCOPE)
0056 include(KDECMakeSettings)
0057 
0058 include(FeatureSummary)
0059 include(GenerateExportHeader)
0060 include(ECMInstallIcons)
0061 include(ECMEnableSanitizers)
0062 include(ECMSetupQtPluginMacroNames)
0063 include(ECMQtDeclareLoggingCategory)
0064 if (QT_MAJOR_VERSION STREQUAL "6")
0065     set(QT_REQUIRED_VERSION "6.4.0")
0066     set(KF_MIN_VERSION "5.240.0")
0067     set(KF_MAJOR_VERSION "6")
0068 else()
0069     set(KF_MAJOR_VERSION "5")
0070 endif()
0071 
0072 find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} REQUIRED COMPONENTS Core DBus Gui)
0073 find_package(KF${KF_MAJOR_VERSION} ${KF5_MIN_VERSION} REQUIRED COMPONENTS Archive Auth Config CoreAddons DocTools FileMetaData I18n IconThemes JobWidgets
0074                                      KCMUtils KIO Notifications NewStuff NotifyConfig Solid WidgetsAddons XmlGui)
0075 if (QT_MAJOR_VERSION STREQUAL "6")
0076     find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core5Compat)
0077 endif()
0078 
0079 find_package(Qt${QT_MAJOR_VERSION}WebEngineWidgets)
0080 set_package_properties(Qt${QT_MAJOR_VERSION}WebEngineWidgets PROPERTIES
0081     DESCRIPTION "QtWebEngineWidgets is used for prettier k3bdiskinfoview."
0082     TYPE OPTIONAL)
0083 if(Qt${QT_MAJOR_VERSION}WebEngineWidgets_FOUND)
0084     add_definitions(-DHAVE_QTWEBENGINEWIDGETS)
0085 endif()
0086 
0087 add_definitions(-DQT_NO_URL_CAST_FROM_STRING)
0088 
0089 option(WITH_NEW_SOLID_JOB "WIP: base Job class" Off)
0090 add_feature_info(Solid::Job WITH_NEW_SOLID_JOB "WIP: Base class for Solid Asynchronous apis")
0091 if(WITH_NEW_SOLID_JOB)
0092     add_definitions(-DWITH_NEW_SOLID_JOB)
0093 endif()
0094 
0095 find_package(Iconv)
0096 set(HAVE_ICONV "${ICONV_FOUND}")
0097 
0098 find_package(Samplerate)
0099 set_package_properties(Samplerate PROPERTIES
0100     DESCRIPTION "Audio sampling rate conversion."
0101     URL "http://www.mega-nerd.com/SRC"
0102     TYPE REQUIRED)
0103 
0104 if (KF_MAJOR_VERSION STREQUAL "5")
0105     set(KCDDB_TARGET_NAME KF5::Cddb)
0106     find_package(KF5Cddb 5.1 REQUIRED)
0107 else()
0108     set(KCDDB_TARGET_NAME KCddb6)
0109     find_package(KCddb6 5.1 REQUIRED)
0110 endif()
0111 set_package_properties(${KCDDB_TARGET_NAME} PROPERTIES
0112     DESCRIPTION "Latest branch for CDDB library"
0113     URL "https://commits.kde.org/libkcddb"
0114     TYPE REQUIRED
0115     PURPOSE "libkcddb is used to retrieve audio CD meta data from the internet.")
0116 
0117 if(K3B_ENABLE_DVD_RIPPING)
0118     find_package(DvdRead)
0119     set_package_properties(DvdRead PROPERTIES
0120         DESCRIPTION "Libdvdread provides a simple foundation for reading DVD video disks."
0121         URL "https://www.videolan.org/developers/libdvdnav.html"
0122         TYPE OPTIONAL)
0123 
0124     set(ENABLE_DVD_RIPPING "${DVDREAD_FOUND}")
0125 endif()
0126 
0127 if(K3B_ENABLE_TAGLIB)
0128     find_package(Taglib)
0129     set_package_properties(Taglib PROPERTIES
0130         DESCRIPTION "Read and write tags in audio files"
0131         URL "https://taglib.org/"
0132         TYPE OPTIONAL)
0133 
0134     set(ENABLE_TAGLIB "${TAGLIB_FOUND}")
0135 endif()
0136 
0137 if(K3B_ENABLE_MUSICBRAINZ)
0138     find_package(MusicBrainz)
0139     set_package_properties(MusicBrainz PROPERTIES
0140         DESCRIPTION "Provide information about the CD, about the artist or about related information"
0141         URL "https://musicbrainz.org/"
0142         TYPE OPTIONAL)
0143 
0144     set(ENABLE_MUSICBRAINZ "${MUSICBRAINZ_FOUND}")
0145 endif()
0146 
0147 if(K3B_BUILD_FFMPEG_DECODER_PLUGIN)
0148     find_package(FFmpeg 4.4.0)
0149     set_package_properties(FFmpeg PROPERTIES
0150         PURPOSE "Needed for the K3b FFmpeg decoder plugin which can decode virtually all audio types."
0151         URL "https://ffmpeg.org/"
0152         TYPE OPTIONAL)
0153 
0154     if(FFMPEG_FOUND)
0155         include(CheckSymbolExists)
0156         include(CMakePushCheckState)
0157         cmake_push_check_state()
0158 
0159         if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
0160             # FindKDE4Internal.cmake screws things up
0161             set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} -std=c99)
0162         endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
0163 
0164         if(FFMPEG_INCLUDE_DIR_OLD_STYLE)
0165             set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${FFMPEG_INCLUDE_DIR_OLD_STYLE})
0166             set(FFMPEG_HEADERS ffmpeg/avcodec.h ffmpeg/avformat.h)
0167         else(FFMPEG_INCLUDE_DIR_OLD_STYLE)
0168             set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${FFMPEG_INCLUDE_DIR} ${FFMPEG_INCLUDE_DIRS})
0169             set(FFMPEG_HEADERS libavcodec/avcodec.h libavformat/avformat.h)
0170             set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -DNEWFFMPEGAVCODECPATH)
0171         endif(FFMPEG_INCLUDE_DIR_OLD_STYLE)
0172         set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${FFMPEG_LIBRARIES})
0173 
0174         check_symbol_exists(avformat_open_input "${FFMPEG_HEADERS}" HAVE_FFMPEG_AVFORMAT_OPEN_INPUT)
0175         check_symbol_exists(av_dump_format "${FFMPEG_HEADERS}" HAVE_FFMPEG_AV_DUMP_FORMAT)
0176         check_symbol_exists(avformat_find_stream_info "${FFMPEG_HEADERS}" HAVE_FFMPEG_AVFORMAT_FIND_STREAM_INFO)
0177         check_symbol_exists(avformat_close_input "${FFMPEG_HEADERS}" HAVE_FFMPEG_AVFORMAT_CLOSE_INPUT)
0178         check_symbol_exists(avcodec_open2 "${FFMPEG_HEADERS}" HAVE_FFMPEG_AVCODEC_OPEN2)
0179         include(CheckCSourceCompiles)
0180         check_c_source_compiles("
0181             #ifdef NEWFFMPEGAVCODECPATH
0182             #include <libavcodec/avcodec.h>
0183             #else
0184             #include <ffmpeg/avcodec.h>
0185             #endif
0186             int main() { enum AVMediaType t = AVMEDIA_TYPE_UNKNOWN; return 0; }
0187             " HAVE_FFMPEG_AVMEDIA_TYPE)
0188         check_c_source_compiles("
0189             #ifdef NEWFFMPEGAVCODECPATH
0190             #include <libavcodec/avcodec.h>
0191             #else
0192             #include <ffmpeg/avcodec.h>
0193             #endif
0194             int main() {
0195             #if LIBAVCODEC_BUILD >= AV_VERSION_INT(54,25,0)
0196             # Not needed here. AV_CODEC_ID_MP3 exists.
0197             #else
0198             enum CodecID t = CODEC_ID_MP3;
0199             #endif
0200             return 0;
0201             }
0202             " HAVE_FFMPEG_CODEC_MP3)
0203 
0204         cmake_pop_check_state()
0205     endif(FFMPEG_FOUND)
0206 
0207     set(BUILD_FFMPEG_DECODER_PLUGIN "${FFMPEG_FOUND}")
0208 endif(K3B_BUILD_FFMPEG_DECODER_PLUGIN)
0209 
0210 if(K3B_BUILD_FLAC_DECODER_PLUGIN)
0211     find_package(Flac)
0212     set_package_properties(Flac PROPERTIES
0213         PURPOSE "Needed for the Flac audio decoder plugin."
0214         URL "https://xiph.org/flac/"
0215         TYPE OPTIONAL)
0216 
0217     find_package(Flac++)
0218     set_package_properties(Flac++ PROPERTIES
0219         PURPOSE "Needed for the Flac audio decoder plugin."
0220         URL "https://xiph.org/flac/"
0221         TYPE OPTIONAL)
0222 
0223     if(FLAC_FOUND AND FLAC++_FOUND)
0224         set(BUILD_FLAC_DECODER_PLUGIN 1)
0225     endif()
0226 endif()
0227 
0228 if(K3B_BUILD_MAD_DECODER_PLUGIN)
0229     find_package(Mad)
0230     set_package_properties(Mad PROPERTIES
0231         PURPOSE "Needed for the mp3 audio decoder plugin."
0232         URL "https://www.underbit.com/products/mad"
0233         TYPE OPTIONAL)
0234 
0235     set(BUILD_MAD_DECODER_PLUGIN "${MAD_FOUND}")
0236 endif()
0237 
0238 if(K3B_BUILD_MUSE_DECODER_PLUGIN)
0239     find_package(Muse)
0240     set_package_properties(Muse PROPERTIES
0241         PURPOSE "Needed for the Musepack audio decoder plugin"
0242         URL "https://www.musepack.net/"
0243         TYPE OPTIONAL)
0244 
0245     set(BUILD_MUSE_DECODER_PLUGIN "${Muse_FOUND}")
0246 endif()
0247 
0248 if(K3B_BUILD_SNDFILE_DECODER_PLUGIN)
0249     find_package(Sndfile)
0250     set_package_properties(Sndfile PROPERTIES
0251         PURPOSE "Needed for the libsndfile audio decoder plugin."
0252         URL "http://www.mega-nerd.com/libsndfile"
0253         TYPE OPTIONAL)
0254 
0255     set(BUILD_SNDFILE_DECODER_PLUGIN "${SNDFILE_FOUND}")
0256 endif()
0257 
0258 if(K3B_BUILD_LAME_ENCODER_PLUGIN)
0259     find_package(Lame)
0260     set_package_properties(Lame PROPERTIES
0261         DESCRIPTION "Lame mp3 encoder"
0262         PURPOSE "Needed for the lame mpf encoder encoder plugin."
0263         URL "https://lame.sourceforge.io/"
0264         TYPE OPTIONAL)
0265 
0266     set(BUILD_LAME_ENCODER_PLUGIN "${LAME_FOUND}")
0267 endif()
0268 
0269 if(K3B_BUILD_OGGVORBIS_DECODER_PLUGIN OR K3B_BUILD_OGGVORBIS_ENCODER_PLUGIN)
0270     find_package(OggVorbis)
0271     set_package_properties(OggVorbis PROPERTIES
0272         DESCRIPTION "Ogg Vorbis"
0273         PURPOSE "Needed for the K3b Ogg Vorbis decoder and encoder plugins."
0274         URL "https://xiph.org/vorbis/"
0275         TYPE OPTIONAL)
0276 
0277     set(BUILD_OGGVORBIS_DECODER_PLUGIN "${OGGVORBIS_FOUND}")
0278     set(BUILD_OGGVORBIS_ENCODER_PLUGIN "${OGGVORBIS_FOUND}")
0279 endif()
0280 
0281 ###################  K3b build settings #################################
0282 include(ConfigureChecks)
0283 
0284 set(BUILD_WAVE_DECODER_PLUGIN "${K3B_BUILD_WAVE_DECODER_PLUGIN}")
0285 set(BUILD_SOX_ENCODER_PLUGIN "${K3B_BUILD_SOX_ENCODER_PLUGIN}")
0286 set(BUILD_EXTERNAL_ENCODER_PLUGIN "${K3B_BUILD_EXTERNAL_ENCODER_PLUGIN}")
0287 
0288 set(ENABLE_HAL_SUPPORT "${K3B_ENABLE_HAL_SUPPORT}")
0289 set(ENABLE_AUDIO_PLAYER "${QT_QTMULTIMEDIA_FOUND}")
0290 
0291 if(IS_ABSOLUTE ${KDE_INSTALL_DATADIR})
0292   set(K3B_DATA_INSTALL_DIR ${KDE_INSTALL_DATADIR}/k3b)
0293 else()
0294   set(K3B_DATA_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/${KDE_INSTALL_DATADIR}/k3b)
0295 endif()
0296 
0297 configure_file(config-k3b.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-k3b.h)
0298 include_directories(${CMAKE_BINARY_DIR})
0299 
0300 ecm_setup_qtplugin_macro_names(
0301     JSON_NONE
0302         K3B_EXPORT_PLUGIN
0303         K3B_EXPORT_PLUGIN_CONFIG_WIDGET
0304 )
0305 
0306 ##################  K3b apidox ################################
0307 if(K3B_BUILD_API_DOCS)
0308     find_package(Doxygen)
0309 
0310     if(DOXYGEN_EXECUTABLE)
0311         configure_file(${CMAKE_SOURCE_DIR}/Doxyfile.cmake ${CMAKE_BINARY_DIR}/Doxyfile)
0312 
0313         if(EXISTS ${QT_DOC_DIR}/html)
0314             set(QTDOCS "${QT_DOC_DIR}/html")
0315         else()
0316             set(QTDOCS "https://doc.qt.io/qt-5/")
0317         endif()
0318 
0319         add_custom_target(apidox
0320             COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
0321             COMMAND docs/html/installdox -l qt${QT_MAJOR_VERSION}.tag@${QTDOCS} docs/html/*.html)
0322     endif()
0323 endif(K3B_BUILD_API_DOCS)
0324 
0325 ##################  K3b build environment ################################
0326 add_subdirectory( libk3bdevice )
0327 add_subdirectory( libk3b )
0328 add_subdirectory( src )
0329 add_subdirectory( kioworkers )
0330 add_subdirectory( plugins )
0331 add_subdirectory( doc )
0332 if(BUILD_TESTING)
0333     find_package(Qt${QT_MAJOR_VERSION}Test REQUIRED)
0334     find_package(LibFuzzer)
0335     set_package_properties(LibFuzzer PROPERTIES
0336         PURPOSE "libFuzzer – a library for coverage-guided fuzz testing."
0337         URL "https://llvm.org/docs/LibFuzzer.html"
0338         TYPE OPTIONAL)
0339     add_subdirectory(tests)
0340 endif()
0341 
0342 ecm_qt_install_logging_categories(
0343     EXPORT K3B
0344     FILE k3b.categories
0345     DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR}
0346 )
0347 
0348 ki18n_install(po)
0349 kdoctools_install(po)
0350 
0351 ###################  K3b config summary ################################
0352 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)