cmake_minimum_required(VERSION 3.17.0 FATAL_ERROR) # meta data project(tagparser) set(META_PROJECT_NAME ${PROJECT_NAME}) set(META_PROJECT_VARNAME TAG_PARSER) set(META_APP_NAME "Tag Parser") set(META_APP_AUTHOR "Martchus") set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}") set(META_APP_DESCRIPTION "C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags") set(META_VERSION_MAJOR 12) set(META_VERSION_MINOR 2) set(META_VERSION_PATCH 0) set(META_REQUIRED_CPP_UNIT_VERSION 1.14.0) set(META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION ON) # add project files set(HEADER_FILES aac/aaccodebook.h aac/aacframe.h abstractattachment.h abstractchapter.h abstractcontainer.h abstracttrack.h adts/adtsframe.h adts/adtsstream.h aspectratio.h avc/avcconfiguration.h avc/avcinfo.h avi/bitmapinfoheader.h backuphelper.h basicfileinfo.h caseinsensitivecomparer.h diagnostics.h exceptions.h fieldbasedtag.h flac/flacmetadata.h flac/flacstream.h flac/flactooggmappingheader.h genericcontainer.h genericfileelement.h generictagfield.h id3/id3genres.h id3/id3v1tag.h id3/id3v2frame.h id3/id3v2frameids.h id3/id3v2tag.h ivf/ivfframe.h ivf/ivfstream.h localehelper.h localeawarestring.h margin.h matroska/ebmlelement.h matroska/ebmlid.h matroska/matroskaattachment.h matroska/matroskachapter.h matroska/matroskacontainer.h matroska/matroskacues.h matroska/matroskaeditionentry.h matroska/matroskaid.h matroska/matroskaseekinfo.h matroska/matroskatag.h matroska/matroskatagfield.h matroska/matroskatagid.h matroska/matroskatrack.h mediafileinfo.h mediaformat.h mp4/mp4atom.h mp4/mp4container.h mp4/mp4ids.h mp4/mp4tag.h mp4/mp4tagfield.h mp4/mp4track.h mp4/mpeg4descriptor.h mpegaudio/mpegaudioframe.h mpegaudio/mpegaudioframestream.h ogg/oggcontainer.h ogg/oggiterator.h ogg/oggpage.h ogg/oggstream.h opus/opusidentificationheader.h positioninset.h progressfeedback.h settings.h signature.h size.h tag.h tagtarget.h tagtype.h tagvalue.h vorbis/vorbiscomment.h vorbis/vorbiscommentfield.h vorbis/vorbiscommentids.h vorbis/vorbisidentificationheader.h vorbis/vorbispackagetypes.h wav/waveaudiostream.h) set(SRC_FILES aac/aaccodebook.cpp aac/aacframe.cpp abstractattachment.cpp abstractchapter.cpp abstractcontainer.cpp abstracttrack.cpp adts/adtsframe.cpp adts/adtsstream.cpp aspectratio.cpp av1/av1configuration.h av1/av1configuration.cpp avc/avcconfiguration.cpp avc/avcinfo.cpp avi/bitmapinfoheader.cpp backuphelper.cpp basicfileinfo.cpp diagnostics.cpp exceptions.cpp flac/flacmetadata.cpp flac/flacstream.cpp flac/flactooggmappingheader.cpp id3/id3genres.cpp id3/id3v1tag.cpp id3/id3v2frame.cpp id3/id3v2frameids.cpp id3/id3v2tag.cpp ivf/ivfframe.cpp ivf/ivfstream.cpp localehelper.cpp localeawarestring.cpp matroska/ebmlelement.cpp matroska/matroskaattachment.cpp matroska/matroskachapter.cpp matroska/matroskacontainer.cpp matroska/matroskacues.cpp matroska/matroskaeditionentry.cpp matroska/matroskaid.cpp matroska/matroskaseekinfo.cpp matroska/matroskatag.cpp matroska/matroskatagfield.cpp matroska/matroskatagid.cpp matroska/matroskatrack.cpp mediafileinfo.cpp mediaformat.cpp mp4/mp4atom.cpp mp4/mp4container.cpp mp4/mp4ids.cpp mp4/mp4tag.cpp mp4/mp4tagfield.cpp mp4/mp4track.cpp mp4/mpeg4descriptor.cpp mpegaudio/mpegaudioframe.cpp mpegaudio/mpegaudioframestream.cpp ogg/oggcontainer.cpp ogg/oggiterator.cpp ogg/oggpage.cpp ogg/oggstream.cpp opus/opusidentificationheader.cpp progressfeedback.cpp signature.cpp size.cpp tag.cpp tagtarget.cpp tagvalue.cpp vorbis/vorbiscomment.cpp vorbis/vorbiscommentfield.cpp vorbis/vorbisidentificationheader.cpp wav/waveaudiostream.cpp) set(TEST_HEADER_FILES tests/helper.h tests/overall.h) set(TEST_SRC_FILES tests/helper.cpp tests/mediafileinfo.cpp tests/overallflac.cpp tests/overallgeneral.cpp tests/overallmkv.cpp tests/overallmp3.cpp tests/overallmp4.cpp tests/overallogg.cpp tests/tagvalue.cpp tests/testfilecheck.cpp tests/utils.cpp doc/example.cpp) set(DOC_FILES README.md doc/adding-new-fields.md) set(LANGUAGE_HEADER_ISO_639_2 "${CMAKE_CURRENT_BINARY_DIR}/resources/iso_language_codes.h") set(RES_FILES "${LANGUAGE_HEADER_ISO_639_2}") # find c++utilities set(CONFIGURATION_PACKAGE_SUFFIX "" CACHE STRING "sets the suffix for find_package() calls to packages configured via c++utilities") find_package(c++utilities${CONFIGURATION_PACKAGE_SUFFIX} 5.21.0 REQUIRED) use_cpp_utilities(VISIBILITY PUBLIC) list(APPEND META_PRIVATE_COMPILE_DEFINITIONS CHRONO_UTILITIES_TIMESPAN_INTEGER_SCALE_OVERLOADS) # link against a possibly required extra library for std::filesystem use_standard_filesystem() # find 3rd party libraries include(3rdParty) # zlib use_zlib() use_crypto(LIBRARIES_VARIABLE "TEST_LIBRARIES" PACKAGES_VARIABLE "TEST_PACKAGES" OPTIONAL) if (NOT "OpenSSL::Crypto" IN_LIST "TEST_LIBRARIES") list(REMOVE_ITEM TEST_SRC_FILES tests/testfilecheck.cpp) message(WARNING "Unable to check testfile integrity because OpenSSL is not available.") endif () # include modules to apply configuration include(BasicConfig) include(WindowsResources) include(LibraryTarget) include(TestTarget) include(Doxygen) include(ConfigHeader) # add rules to generate code for dealing with language codes set(LANGUAGE_FILE_ISO_639_2 "" CACHE STRING "path to JSON document from https://salsa.debian.org/iso-codes-team/iso-codes for ISO-639-2") add_custom_command( OUTPUT "${LANGUAGE_HEADER_ISO_639_2}" COMMENT "Generating code for ISO-639-2 language codes" COMMAND "${CMAKE_COMMAND}" "-DLANGUAGE_FILE=${LANGUAGE_FILE_ISO_639_2}" "-DOUTPUT_PATH=${LANGUAGE_HEADER_ISO_639_2}" -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/scripts/generate_iso_language_codes.cmake")