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 "01") 0006 set (RELEASE_SERVICE_VERSION_MICRO "95") 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)