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 "23") 0005 set (RELEASE_SERVICE_VERSION_MINOR "04") 0006 set (RELEASE_SERVICE_VERSION_MICRO "1") 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 0065 find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core DBus Gui) 0066 find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Archive Auth Config CoreAddons DocTools FileMetaData I18n IconThemes JobWidgets 0067 KCMUtils KIO Notifications NewStuff NotifyConfig Service Solid WidgetsAddons XmlGui) 0068 0069 find_package(Qt5WebKitWidgets) 0070 set_package_properties(Qt5WebKitWidgets PROPERTIES 0071 DESCRIPTION "Qt5WebKitWidgets is used for prettier k3bdiskinfoview." 0072 TYPE OPTIONAL) 0073 if(Qt5WebKitWidgets_FOUND) 0074 add_definitions(-DHAVE_QT5WEBKITWIDGETS) 0075 endif() 0076 0077 add_definitions(-DQT_NO_URL_CAST_FROM_STRING) 0078 0079 option(WITH_NEW_SOLID_JOB "WIP: base Job class" Off) 0080 add_feature_info(Solid::Job WITH_NEW_SOLID_JOB "WIP: Base class for Solid Asynchronous apis") 0081 if(WITH_NEW_SOLID_JOB) 0082 add_definitions(-DWITH_NEW_SOLID_JOB) 0083 endif() 0084 0085 find_package(Iconv) 0086 set(HAVE_ICONV "${ICONV_FOUND}") 0087 0088 find_package(Samplerate) 0089 set_package_properties(Samplerate PROPERTIES 0090 DESCRIPTION "Audio sampling rate conversion." 0091 URL "http://www.mega-nerd.com/SRC" 0092 TYPE REQUIRED) 0093 0094 find_package(KF5Cddb 5.1 REQUIRED) 0095 set_package_properties(KF5Cddb PROPERTIES 0096 DESCRIPTION "KF5 branch for CDDB library" 0097 URL "https://commits.kde.org/libkcddb" 0098 TYPE REQUIRED 0099 PURPOSE "libkcddb is used to retrieve audio CD meta data from the internet.") 0100 0101 if(K3B_ENABLE_DVD_RIPPING) 0102 find_package(DvdRead) 0103 set_package_properties(DvdRead PROPERTIES 0104 DESCRIPTION "Libdvdread provides a simple foundation for reading DVD video disks." 0105 URL "https://www.videolan.org/developers/libdvdnav.html" 0106 TYPE OPTIONAL) 0107 0108 set(ENABLE_DVD_RIPPING "${DVDREAD_FOUND}") 0109 endif() 0110 0111 if(K3B_ENABLE_TAGLIB) 0112 find_package(Taglib) 0113 set_package_properties(Taglib PROPERTIES 0114 DESCRIPTION "Read and write tags in audio files" 0115 URL "https://taglib.org/" 0116 TYPE OPTIONAL) 0117 0118 set(ENABLE_TAGLIB "${TAGLIB_FOUND}") 0119 endif() 0120 0121 if(K3B_ENABLE_MUSICBRAINZ) 0122 find_package(MusicBrainz) 0123 set_package_properties(MusicBrainz PROPERTIES 0124 DESCRIPTION "Provide information about the CD, about the artist or about related information" 0125 URL "https://musicbrainz.org/" 0126 TYPE OPTIONAL) 0127 0128 set(ENABLE_MUSICBRAINZ "${MUSICBRAINZ_FOUND}") 0129 endif() 0130 0131 if(K3B_BUILD_FFMPEG_DECODER_PLUGIN) 0132 find_package(FFmpeg 4.4.0) 0133 set_package_properties(FFmpeg PROPERTIES 0134 PURPOSE "Needed for the K3b FFmpeg decoder plugin which can decode virtually all audio types." 0135 URL "https://ffmpeg.org/" 0136 TYPE OPTIONAL) 0137 0138 if(FFMPEG_FOUND) 0139 include(CheckSymbolExists) 0140 include(CMakePushCheckState) 0141 cmake_push_check_state() 0142 0143 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") 0144 # FindKDE4Internal.cmake screws things up 0145 set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} -std=c99) 0146 endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") 0147 0148 if(FFMPEG_INCLUDE_DIR_OLD_STYLE) 0149 set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${FFMPEG_INCLUDE_DIR_OLD_STYLE}) 0150 set(FFMPEG_HEADERS ffmpeg/avcodec.h ffmpeg/avformat.h) 0151 else(FFMPEG_INCLUDE_DIR_OLD_STYLE) 0152 set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${FFMPEG_INCLUDE_DIR} ${FFMPEG_INCLUDE_DIRS}) 0153 set(FFMPEG_HEADERS libavcodec/avcodec.h libavformat/avformat.h) 0154 set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -DNEWFFMPEGAVCODECPATH) 0155 endif(FFMPEG_INCLUDE_DIR_OLD_STYLE) 0156 set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${FFMPEG_LIBRARIES}) 0157 0158 check_symbol_exists(avformat_open_input "${FFMPEG_HEADERS}" HAVE_FFMPEG_AVFORMAT_OPEN_INPUT) 0159 check_symbol_exists(av_dump_format "${FFMPEG_HEADERS}" HAVE_FFMPEG_AV_DUMP_FORMAT) 0160 check_symbol_exists(avformat_find_stream_info "${FFMPEG_HEADERS}" HAVE_FFMPEG_AVFORMAT_FIND_STREAM_INFO) 0161 check_symbol_exists(avformat_close_input "${FFMPEG_HEADERS}" HAVE_FFMPEG_AVFORMAT_CLOSE_INPUT) 0162 check_symbol_exists(avcodec_open2 "${FFMPEG_HEADERS}" HAVE_FFMPEG_AVCODEC_OPEN2) 0163 include(CheckCSourceCompiles) 0164 check_c_source_compiles(" 0165 #ifdef NEWFFMPEGAVCODECPATH 0166 #include <libavcodec/avcodec.h> 0167 #else 0168 #include <ffmpeg/avcodec.h> 0169 #endif 0170 int main() { enum AVMediaType t = AVMEDIA_TYPE_UNKNOWN; return 0; } 0171 " HAVE_FFMPEG_AVMEDIA_TYPE) 0172 check_c_source_compiles(" 0173 #ifdef NEWFFMPEGAVCODECPATH 0174 #include <libavcodec/avcodec.h> 0175 #else 0176 #include <ffmpeg/avcodec.h> 0177 #endif 0178 int main() { 0179 #if LIBAVCODEC_BUILD >= AV_VERSION_INT(54,25,0) 0180 # Not needed here. AV_CODEC_ID_MP3 exists. 0181 #else 0182 enum CodecID t = CODEC_ID_MP3; 0183 #endif 0184 return 0; 0185 } 0186 " HAVE_FFMPEG_CODEC_MP3) 0187 0188 cmake_pop_check_state() 0189 endif(FFMPEG_FOUND) 0190 0191 set(BUILD_FFMPEG_DECODER_PLUGIN "${FFMPEG_FOUND}") 0192 endif(K3B_BUILD_FFMPEG_DECODER_PLUGIN) 0193 0194 if(K3B_BUILD_FLAC_DECODER_PLUGIN) 0195 find_package(Flac) 0196 set_package_properties(Flac PROPERTIES 0197 PURPOSE "Needed for the Flac audio decoder plugin." 0198 URL "https://xiph.org/flac/" 0199 TYPE OPTIONAL) 0200 0201 find_package(Flac++) 0202 set_package_properties(Flac++ PROPERTIES 0203 PURPOSE "Needed for the Flac audio decoder plugin." 0204 URL "https://xiph.org/flac/" 0205 TYPE OPTIONAL) 0206 0207 if(FLAC_FOUND AND FLAC++_FOUND) 0208 set(BUILD_FLAC_DECODER_PLUGIN 1) 0209 endif() 0210 endif() 0211 0212 if(K3B_BUILD_MAD_DECODER_PLUGIN) 0213 find_package(Mad) 0214 set_package_properties(Mad PROPERTIES 0215 PURPOSE "Needed for the mp3 audio decoder plugin." 0216 URL "https://www.underbit.com/products/mad" 0217 TYPE OPTIONAL) 0218 0219 set(BUILD_MAD_DECODER_PLUGIN "${MAD_FOUND}") 0220 endif() 0221 0222 if(K3B_BUILD_MUSE_DECODER_PLUGIN) 0223 find_package(Muse) 0224 set_package_properties(Muse PROPERTIES 0225 PURPOSE "Needed for the Musepack audio decoder plugin" 0226 URL "https://www.musepack.net/" 0227 TYPE OPTIONAL) 0228 0229 set(BUILD_MUSE_DECODER_PLUGIN "${Muse_FOUND}") 0230 endif() 0231 0232 if(K3B_BUILD_SNDFILE_DECODER_PLUGIN) 0233 find_package(Sndfile) 0234 set_package_properties(Sndfile PROPERTIES 0235 PURPOSE "Needed for the libsndfile audio decoder plugin." 0236 URL "http://www.mega-nerd.com/libsndfile" 0237 TYPE OPTIONAL) 0238 0239 set(BUILD_SNDFILE_DECODER_PLUGIN "${SNDFILE_FOUND}") 0240 endif() 0241 0242 if(K3B_BUILD_LAME_ENCODER_PLUGIN) 0243 find_package(Lame) 0244 set_package_properties(Lame PROPERTIES 0245 DESCRIPTION "Lame mp3 encoder" 0246 PURPOSE "Needed for the lame mpf encoder encoder plugin." 0247 URL "https://lame.sourceforge.io/" 0248 TYPE OPTIONAL) 0249 0250 set(BUILD_LAME_ENCODER_PLUGIN "${LAME_FOUND}") 0251 endif() 0252 0253 if(K3B_BUILD_OGGVORBIS_DECODER_PLUGIN OR K3B_BUILD_OGGVORBIS_ENCODER_PLUGIN) 0254 find_package(OggVorbis) 0255 set_package_properties(OggVorbis PROPERTIES 0256 DESCRIPTION "Ogg Vorbis" 0257 PURPOSE "Needed for the K3b Ogg Vorbis decoder and encoder plugins." 0258 URL "https://xiph.org/vorbis/" 0259 TYPE OPTIONAL) 0260 0261 set(BUILD_OGGVORBIS_DECODER_PLUGIN "${OGGVORBIS_FOUND}") 0262 set(BUILD_OGGVORBIS_ENCODER_PLUGIN "${OGGVORBIS_FOUND}") 0263 endif() 0264 0265 ################### K3b build settings ################################# 0266 include(ConfigureChecks) 0267 0268 set(BUILD_WAVE_DECODER_PLUGIN "${K3B_BUILD_WAVE_DECODER_PLUGIN}") 0269 set(BUILD_SOX_ENCODER_PLUGIN "${K3B_BUILD_SOX_ENCODER_PLUGIN}") 0270 set(BUILD_EXTERNAL_ENCODER_PLUGIN "${K3B_BUILD_EXTERNAL_ENCODER_PLUGIN}") 0271 0272 set(ENABLE_HAL_SUPPORT "${K3B_ENABLE_HAL_SUPPORT}") 0273 set(ENABLE_AUDIO_PLAYER "${QT_QTMULTIMEDIA_FOUND}") 0274 0275 if(IS_ABSOLUTE ${KDE_INSTALL_DATADIR}) 0276 set(K3B_DATA_INSTALL_DIR ${KDE_INSTALL_DATADIR}/k3b) 0277 else() 0278 set(K3B_DATA_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/${KDE_INSTALL_DATADIR}/k3b) 0279 endif() 0280 0281 configure_file(config-k3b.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-k3b.h) 0282 include_directories(${CMAKE_BINARY_DIR}) 0283 0284 ecm_setup_qtplugin_macro_names( 0285 JSON_NONE 0286 K3B_EXPORT_PLUGIN 0287 K3B_EXPORT_PLUGIN_CONFIG_WIDGET 0288 ) 0289 0290 ################## K3b apidox ################################ 0291 if(K3B_BUILD_API_DOCS) 0292 find_package(Doxygen) 0293 0294 if(DOXYGEN_EXECUTABLE) 0295 configure_file(${CMAKE_SOURCE_DIR}/Doxyfile.cmake ${CMAKE_BINARY_DIR}/Doxyfile) 0296 0297 if(EXISTS ${QT_DOC_DIR}/html) 0298 set(QTDOCS "${QT_DOC_DIR}/html") 0299 else() 0300 set(QTDOCS "https://doc.qt.io/qt-5/") 0301 endif() 0302 0303 add_custom_target(apidox 0304 COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile 0305 COMMAND docs/html/installdox -l qt5.tag@${QTDOCS} docs/html/*.html) 0306 endif() 0307 endif(K3B_BUILD_API_DOCS) 0308 0309 ################## K3b build environment ################################ 0310 add_subdirectory( libk3bdevice ) 0311 add_subdirectory( libk3b ) 0312 add_subdirectory( src ) 0313 add_subdirectory( kioworkers ) 0314 add_subdirectory( plugins ) 0315 add_subdirectory( doc ) 0316 if(BUILD_TESTING) 0317 find_package(Qt5Test REQUIRED) 0318 find_package(LibFuzzer) 0319 set_package_properties(LibFuzzer PROPERTIES 0320 PURPOSE "libFuzzer – a library for coverage-guided fuzz testing." 0321 URL "https://llvm.org/docs/LibFuzzer.html" 0322 TYPE OPTIONAL) 0323 add_subdirectory(tests) 0324 endif() 0325 0326 ecm_qt_install_logging_categories( 0327 EXPORT K3B 0328 FILE k3b.categories 0329 DESTINATION ${KDE_INSTALL_LOGGINGCATEGORIESDIR} 0330 ) 0331 0332 ki18n_install(po) 0333 kdoctools_install(po) 0334 0335 ################### K3b config summary ################################ 0336 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)