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)