From ee1931b81116cd0091c906896f6f4fb74850be51 Mon Sep 17 00:00:00 2001 From: Urs Fleisch Date: Sun, 2 Feb 2025 12:24:26 +0100 Subject: [PATCH] Compile time configuration of supported formats (#1262) CMake options WITH_APE, WITH_ASF, WITH_DSF, WITH_MOD, WITH_MP4, WITH_RIFF, WITH_SHORTEN, WITH_TRUEAUDIO, WITH_VORBIS, by default, they are all ON. --- CMakeLists.txt | 40 +++ INSTALL.md | 24 ++ bindings/c/CMakeLists.txt | 83 ++++-- bindings/c/tag_c.cpp | 76 +++-- examples/framelist.cpp | 5 + taglib/CMakeLists.txt | 476 ++++++++++++++++++------------- taglib/dsdiff/dsdifffile.h | 2 +- taglib/fileref.cpp | 133 +++++++-- taglib/mpeg/mpegfile.cpp | 11 + taglib/mpeg/mpegproperties.cpp | 3 + taglib/taglib_config.h.cmake | 16 ++ taglib/tagutils.cpp | 19 +- tests/CMakeLists.txt | 175 ++++++++---- tests/test_complexproperties.cpp | 55 +++- tests/test_fileref.cpp | 149 ++++++++-- tests/test_id3v2framefactory.cpp | 41 ++- tests/test_mpeg.cpp | 17 ++ tests/test_propertymap.cpp | 45 ++- tests/test_sizes.cpp | 287 +++++++++++-------- tests/test_tag_c.cpp | 5 + 20 files changed, 1162 insertions(+), 500 deletions(-) create mode 100644 taglib/taglib_config.h.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 82ce05c8..81317304 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,6 +97,16 @@ set(TAGLIB_SOVERSION_PATCH 2) include(ConfigureChecks.cmake) +option(WITH_APE "Build with APE, MPC, WavPack" ON) +option(WITH_ASF "Build with ASF" ON) +option(WITH_DSF "Build with DSF" ON) +option(WITH_MOD "Build with Tracker modules" ON) +option(WITH_MP4 "Build with MP4" ON) +option(WITH_RIFF "Build with AIFF, RIFF, WAV" ON) +option(WITH_SHORTEN "Build with Shorten" ON) +option(WITH_TRUEAUDIO "Build with TrueAudio" ON) +option(WITH_VORBIS "Build with Vorbis, FLAC, Ogg, Opus" ON) + # Determine whether zlib is installed. option(WITH_ZLIB "Build with ZLIB" ON) @@ -178,6 +188,36 @@ else() endif() endif() +if(WITH_APE) + set(TAGLIB_WITH_APE TRUE) +endif() +if(WITH_ASF) + set(TAGLIB_WITH_ASF TRUE) +endif() +if(WITH_DSF) + set(TAGLIB_WITH_DSF TRUE) +endif() +if(WITH_MOD) + set(TAGLIB_WITH_MOD TRUE) +endif() +if(WITH_MP4) + set(TAGLIB_WITH_MP4 TRUE) +endif() +if(WITH_RIFF) + set(TAGLIB_WITH_RIFF TRUE) +endif() +if(WITH_SHORTEN) + set(TAGLIB_WITH_SHORTEN TRUE) +endif() +if(WITH_TRUEAUDIO) + set(TAGLIB_WITH_TRUEAUDIO TRUE) +endif() +if(WITH_VORBIS) + set(TAGLIB_WITH_VORBIS TRUE) +endif() + +configure_file(taglib/taglib_config.h.cmake "${CMAKE_CURRENT_BINARY_DIR}/taglib_config.h") + add_subdirectory(taglib) if(BUILD_BINDINGS) diff --git a/INSTALL.md b/INSTALL.md index e238cde4..77c9d7a9 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -49,6 +49,30 @@ for both versions. The installed files will then include bin/taglib-2-config, include/taglib-2, cmake/taglib-2, pkgconfig/taglib-2.pc, pkgconfig/taglib_c-2.pc and the libraries have a suffix "-2". +### Compile Time Configuration of Supported Formats + +To reduce the size of the library, it is possible to switch off supported file +formats. By default, all formats are enabled. Support for MPEG files (MP3, AAC) +and ID3 tags cannot be disabled. The following CMake options are available: + +| Option | Description | +|-------------------------|----------------------------------------------------| +| `WITH_APE` | Build with APE, MPC, WavPack (default ON) | +| `WITH_ASF` | Build with ASF (default ON) | +| `WITH_DSF` | Build with DSF (default ON) | +| `WITH_MOD` | Build with Tracker modules (default ON) | +| `WITH_MP4` | Build with MP4 (default ON) | +| `WITH_RIFF` | Build with AIFF, RIFF, WAV (default ON) | +| `WITH_SHORTEN` | Build with Shorten (default ON) | +| `WITH_TRUEAUDIO` | Build with TrueAudio (default ON) | +| `WITH_VORBIS` | Build with Vorbis, FLAC, Ogg, Opus (default ON) | + +Note that disabling formats will remove exported symbols from the library and +thus break binary compatibility. These options should therefore only be used +if the library is built specifically for a certain project. The public header +files still contain the full API, if you use TagLib with a reduced set of +formats, you can include taglib_config.h and use its definitions (prefixed with +`TAGLIB_`, e.g. `TAGLIB_WITH_APE`), as it is done in examples/framelist.cpp. ## Dependencies diff --git a/bindings/c/CMakeLists.txt b/bindings/c/CMakeLists.txt index c97841c4..24bbc790 100644 --- a/bindings/c/CMakeLists.txt +++ b/bindings/c/CMakeLists.txt @@ -1,32 +1,69 @@ -include_directories( +set(tag_c_HDR_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/toolkit - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/asf ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpeg - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/vorbis - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/flac - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/flac - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpc - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mp4 ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpeg/id3v2 ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpeg/id3v2/frames - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/wavpack - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/speex - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/trueaudio - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff/aiff - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff/wav - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ape - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/it - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mod - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/s3m - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/xm - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/opus - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/dsf - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/dsdiff - ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/shorten ) +if(WITH_ASF) + set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/asf + ) +endif() +if(WITH_VORBIS) + set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/vorbis + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/flac + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/flac + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/speex + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/opus + ) +endif() +if(WITH_APE) + set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpc + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/wavpack + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ape + ) +endif() +if(WITH_MP4) + set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mp4 + ) +endif() +if(WITH_TRUEAUDIO) + set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/trueaudio + ) +endif() +if(WITH_RIFF) + set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff/aiff + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff/wav + ) +endif() +if(WITH_MOD) + set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/it + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mod + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/s3m + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/xm + ) +endif() +if(WITH_DSF) + set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/dsf + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/dsdiff + ) +endif() +if(WITH_SHORTEN) + set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/shorten + ) +endif() +include_directories(${tag_c_HDR_DIRS}) set(tag_c_HDRS tag_c.h) diff --git a/bindings/c/tag_c.cpp b/bindings/c/tag_c.cpp index 10b749a4..c2d18f0a 100644 --- a/bindings/c/tag_c.cpp +++ b/bindings/c/tag_c.cpp @@ -29,35 +29,57 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif + +#include "taglib_config.h" #include "tstringlist.h" #include "tbytevectorstream.h" #include "tiostream.h" #include "tfile.h" #include "tpropertymap.h" #include "fileref.h" -#include "asffile.h" -#include "vorbisfile.h" #include "mpegfile.h" +#include "tag.h" +#include "id3v2framefactory.h" +#ifdef TAGLIB_WITH_ASF +#include "asffile.h" +#endif +#ifdef TAGLIB_WITH_VORBIS +#include "vorbisfile.h" #include "flacfile.h" #include "oggflacfile.h" +#include "speexfile.h" +#include "opusfile.h" +#endif +#ifdef TAGLIB_WITH_APE #include "mpcfile.h" #include "wavpackfile.h" -#include "speexfile.h" +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO #include "trueaudiofile.h" +#endif +#ifdef TAGLIB_WITH_MP4 #include "mp4file.h" +#endif +#ifdef TAGLIB_WITH_RIFF #include "aifffile.h" #include "wavfile.h" +#endif +#ifdef TAGLIB_WITH_APE #include "apefile.h" +#endif +#ifdef TAGLIB_WITH_MOD #include "itfile.h" #include "modfile.h" #include "s3mfile.h" #include "xmfile.h" -#include "opusfile.h" +#endif +#ifdef TAGLIB_WITH_DSF #include "dsffile.h" #include "dsdifffile.h" +#endif +#ifdef TAGLIB_WITH_SHORTEN #include "shortenfile.h" -#include "tag.h" -#include "id3v2framefactory.h" +#endif using namespace TagLib; @@ -134,42 +156,58 @@ TagLib_File *taglib_file_new_type(const char *filename, TagLib_File_Type type) case TagLib_File_MPEG: file = new MPEG::File(filename); break; +#ifdef TAGLIB_WITH_VORBIS case TagLib_File_OggVorbis: file = new Ogg::Vorbis::File(filename); break; case TagLib_File_FLAC: file = new FLAC::File(filename); break; - case TagLib_File_MPC: - file = new MPC::File(filename); - break; case TagLib_File_OggFlac: file = new Ogg::FLAC::File(filename); break; - case TagLib_File_WavPack: - file = new WavPack::File(filename); - break; case TagLib_File_Speex: file = new Ogg::Speex::File(filename); break; + case TagLib_File_Opus: + file = new Ogg::Opus::File(filename); + break; +#endif +#ifdef TAGLIB_WITH_APE + case TagLib_File_MPC: + file = new MPC::File(filename); + break; + case TagLib_File_WavPack: + file = new WavPack::File(filename); + break; + case TagLib_File_APE: + file = new APE::File(filename); + break; +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO case TagLib_File_TrueAudio: file = new TrueAudio::File(filename); break; +#endif +#ifdef TAGLIB_WITH_MP4 case TagLib_File_MP4: file = new MP4::File(filename); break; +#endif +#ifdef TAGLIB_WITH_ASF case TagLib_File_ASF: file = new ASF::File(filename); break; +#endif +#ifdef TAGLIB_WITH_RIFF case TagLib_File_AIFF: file = new RIFF::AIFF::File(filename); break; case TagLib_File_WAV: file = new RIFF::WAV::File(filename); break; - case TagLib_File_APE: - file = new APE::File(filename); - break; +#endif +#ifdef TAGLIB_WITH_MOD case TagLib_File_IT: file = new IT::File(filename); break; @@ -182,18 +220,20 @@ TagLib_File *taglib_file_new_type(const char *filename, TagLib_File_Type type) case TagLib_File_XM: file = new XM::File(filename); break; - case TagLib_File_Opus: - file = new Ogg::Opus::File(filename); - break; +#endif +#ifdef TAGLIB_WITH_DSF case TagLib_File_DSF: file = new DSF::File(filename); break; case TagLib_File_DSDIFF: file = new DSDIFF::File(filename); break; +#endif +#ifdef TAGLIB_WITH_SHORTEN case TagLib_File_SHORTEN: file = new Shorten::File(filename); break; +#endif default: break; } diff --git a/examples/framelist.cpp b/examples/framelist.cpp index 8f94e059..f2f23941 100644 --- a/examples/framelist.cpp +++ b/examples/framelist.cpp @@ -25,6 +25,7 @@ #include #include +#include "taglib_config.h" #include "tbytevector.h" #include "mpegfile.h" #include "id3v2tag.h" @@ -32,7 +33,9 @@ #include "id3v2header.h" #include "commentsframe.h" #include "id3v1tag.h" +#ifdef TAGLIB_WITH_APE #include "apetag.h" +#endif using namespace TagLib; @@ -90,6 +93,7 @@ int main(int argc, char *argv[]) else std::cout << "file does not have a valid id3v1 tag" << std::endl; +#ifdef TAGLIB_WITH_APE APE::Tag *ape = f.APETag(); std::cout << std::endl << "APE" << std::endl; @@ -106,6 +110,7 @@ int main(int argc, char *argv[]) } else std::cout << "file does not have a valid APE tag" << std::endl; +#endif std::cout << std::endl; } diff --git a/taglib/CMakeLists.txt b/taglib/CMakeLists.txt index aa6cf327..3afd845f 100644 --- a/taglib/CMakeLists.txt +++ b/taglib/CMakeLists.txt @@ -1,39 +1,77 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) -include_directories( +set(tag_HDR_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/toolkit - ${CMAKE_CURRENT_SOURCE_DIR}/asf ${CMAKE_CURRENT_SOURCE_DIR}/mpeg - ${CMAKE_CURRENT_SOURCE_DIR}/ogg - ${CMAKE_CURRENT_SOURCE_DIR}/ogg/flac - ${CMAKE_CURRENT_SOURCE_DIR}/flac - ${CMAKE_CURRENT_SOURCE_DIR}/mpc - ${CMAKE_CURRENT_SOURCE_DIR}/mp4 - ${CMAKE_CURRENT_SOURCE_DIR}/ogg/vorbis - ${CMAKE_CURRENT_SOURCE_DIR}/ogg/speex - ${CMAKE_CURRENT_SOURCE_DIR}/ogg/opus ${CMAKE_CURRENT_SOURCE_DIR}/mpeg/id3v2 ${CMAKE_CURRENT_SOURCE_DIR}/mpeg/id3v2/frames ${CMAKE_CURRENT_SOURCE_DIR}/mpeg/id3v1 - ${CMAKE_CURRENT_SOURCE_DIR}/ape - ${CMAKE_CURRENT_SOURCE_DIR}/wavpack - ${CMAKE_CURRENT_SOURCE_DIR}/trueaudio - ${CMAKE_CURRENT_SOURCE_DIR}/riff - ${CMAKE_CURRENT_SOURCE_DIR}/riff/aiff - ${CMAKE_CURRENT_SOURCE_DIR}/riff/wav - ${CMAKE_CURRENT_SOURCE_DIR}/mod - ${CMAKE_CURRENT_SOURCE_DIR}/s3m - ${CMAKE_CURRENT_SOURCE_DIR}/it - ${CMAKE_CURRENT_SOURCE_DIR}/xm - ${CMAKE_CURRENT_SOURCE_DIR}/dsf - ${CMAKE_CURRENT_SOURCE_DIR}/dsdiff - ${CMAKE_CURRENT_SOURCE_DIR}/shorten ) +if(WITH_ASF) + set(tag_HDR_DIRS ${tag_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/asf + ) +endif() +if(WITH_VORBIS) + set(tag_HDR_DIRS ${tag_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/ogg + ${CMAKE_CURRENT_SOURCE_DIR}/ogg/flac + ${CMAKE_CURRENT_SOURCE_DIR}/flac + ${CMAKE_CURRENT_SOURCE_DIR}/ogg/vorbis + ${CMAKE_CURRENT_SOURCE_DIR}/ogg/speex + ${CMAKE_CURRENT_SOURCE_DIR}/ogg/opus + ) +endif() +if(WITH_APE) + set(tag_HDR_DIRS ${tag_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/mpc + ${CMAKE_CURRENT_SOURCE_DIR}/ape + ${CMAKE_CURRENT_SOURCE_DIR}/wavpack + ) +endif() +if(WITH_MP4) + set(tag_HDR_DIRS ${tag_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/mp4 + ) +endif() +if(WITH_TRUEAUDIO) + set(tag_HDR_DIRS ${tag_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/trueaudio + ) +endif() +if(WITH_RIFF) + set(tag_HDR_DIRS ${tag_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/riff + ${CMAKE_CURRENT_SOURCE_DIR}/riff/aiff + ${CMAKE_CURRENT_SOURCE_DIR}/riff/wav + ) +endif() +if(WITH_MOD) + set(tag_HDR_DIRS ${tag_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/mod + ${CMAKE_CURRENT_SOURCE_DIR}/s3m + ${CMAKE_CURRENT_SOURCE_DIR}/it + ${CMAKE_CURRENT_SOURCE_DIR}/xm + ) +endif() +if(WITH_DSF) + set(tag_HDR_DIRS ${tag_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/dsf + ${CMAKE_CURRENT_SOURCE_DIR}/dsdiff + ) +endif() +if(WITH_SHORTEN) + set(tag_HDR_DIRS ${tag_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/shorten + ) +endif() +include_directories(${tag_HDR_DIRS}) set(tag_HDRS tag.h fileref.h audioproperties.h taglib_export.h + ${CMAKE_CURRENT_BINARY_DIR}/../taglib_config.h toolkit/taglib.h toolkit/tstring.h toolkit/tlist.h @@ -83,69 +121,105 @@ set(tag_HDRS mpeg/id3v2/frames/chapterframe.h mpeg/id3v2/frames/tableofcontentsframe.h mpeg/id3v2/frames/podcastframe.h - ogg/oggfile.h - ogg/oggpage.h - ogg/oggpageheader.h - ogg/xiphcomment.h - ogg/vorbis/vorbisfile.h - ogg/vorbis/vorbisproperties.h - ogg/flac/oggflacfile.h - ogg/speex/speexfile.h - ogg/speex/speexproperties.h - ogg/opus/opusfile.h - ogg/opus/opusproperties.h - flac/flacfile.h - flac/flacpicture.h - flac/flacproperties.h - flac/flacmetadatablock.h - ape/apefile.h - ape/apeproperties.h - ape/apetag.h - ape/apefooter.h - ape/apeitem.h - mpc/mpcfile.h - mpc/mpcproperties.h - wavpack/wavpackfile.h - wavpack/wavpackproperties.h - trueaudio/trueaudiofile.h - trueaudio/trueaudioproperties.h - riff/rifffile.h - riff/aiff/aifffile.h - riff/aiff/aiffproperties.h - riff/wav/wavfile.h - riff/wav/wavproperties.h - riff/wav/infotag.h - asf/asffile.h - asf/asfproperties.h - asf/asftag.h - asf/asfattribute.h - asf/asfpicture.h - mp4/mp4file.h - mp4/mp4atom.h - mp4/mp4tag.h - mp4/mp4item.h - mp4/mp4properties.h - mp4/mp4coverart.h - mp4/mp4itemfactory.h - mod/modfilebase.h - mod/modfile.h - mod/modtag.h - mod/modproperties.h - it/itfile.h - it/itproperties.h - s3m/s3mfile.h - s3m/s3mproperties.h - xm/xmfile.h - xm/xmproperties.h - dsf/dsffile.h - dsf/dsfproperties.h - dsdiff/dsdifffile.h - dsdiff/dsdiffproperties.h - dsdiff/dsdiffdiintag.h - shorten/shortenfile.h - shorten/shortenproperties.h - shorten/shortentag.h ) +if(WITH_VORBIS) + set(tag_HDRS ${tag_HDRS} + ogg/oggfile.h + ogg/oggpage.h + ogg/oggpageheader.h + ogg/xiphcomment.h + ogg/vorbis/vorbisfile.h + ogg/vorbis/vorbisproperties.h + ogg/flac/oggflacfile.h + ogg/speex/speexfile.h + ogg/speex/speexproperties.h + ogg/opus/opusfile.h + ogg/opus/opusproperties.h + flac/flacfile.h + flac/flacpicture.h + flac/flacproperties.h + flac/flacmetadatablock.h + ) +endif() +if(WITH_APE) + set(tag_HDRS ${tag_HDRS} + ape/apefile.h + ape/apeproperties.h + ape/apetag.h + ape/apefooter.h + ape/apeitem.h + mpc/mpcfile.h + mpc/mpcproperties.h + wavpack/wavpackfile.h + wavpack/wavpackproperties.h + ) +endif() +if(WITH_TRUEAUDIO) + set(tag_HDRS ${tag_HDRS} + trueaudio/trueaudiofile.h + trueaudio/trueaudioproperties.h + ) +endif() +if(WITH_RIFF) + set(tag_HDRS ${tag_HDRS} + riff/rifffile.h + riff/aiff/aifffile.h + riff/aiff/aiffproperties.h + riff/wav/wavfile.h + riff/wav/wavproperties.h + riff/wav/infotag.h + ) +endif() +if(WITH_ASF) + set(tag_HDRS ${tag_HDRS} + asf/asffile.h + asf/asfproperties.h + asf/asftag.h + asf/asfattribute.h + asf/asfpicture.h + ) +endif() +if(WITH_MP4) + set(tag_HDRS ${tag_HDRS} + mp4/mp4file.h + mp4/mp4atom.h + mp4/mp4tag.h + mp4/mp4item.h + mp4/mp4properties.h + mp4/mp4coverart.h + mp4/mp4itemfactory.h + ) +endif() +if(WITH_MOD) + set(tag_HDRS ${tag_HDRS} + mod/modfilebase.h + mod/modfile.h + mod/modtag.h + mod/modproperties.h + it/itfile.h + it/itproperties.h + s3m/s3mfile.h + s3m/s3mproperties.h + xm/xmfile.h + xm/xmproperties.h + ) +endif() +if(WITH_DSF) + set(tag_HDRS ${tag_HDRS} + dsf/dsffile.h + dsf/dsfproperties.h + dsdiff/dsdifffile.h + dsdiff/dsdiffproperties.h + dsdiff/dsdiffdiintag.h + ) +endif() +if(WITH_SHORTEN) + set(tag_HDRS ${tag_HDRS} + shorten/shortenfile.h + shorten/shortenproperties.h + shorten/shortentag.h + ) +endif() set(mpeg_SRCS mpeg/mpegfile.cpp @@ -189,134 +263,152 @@ set(frames_SRCS mpeg/id3v2/frames/podcastframe.cpp ) -set(ogg_SRCS - ogg/oggfile.cpp - ogg/oggpage.cpp - ogg/oggpageheader.cpp - ogg/xiphcomment.cpp -) +if(WITH_VORBIS) + set(ogg_SRCS + ogg/oggfile.cpp + ogg/oggpage.cpp + ogg/oggpageheader.cpp + ogg/xiphcomment.cpp + ) -set(vorbis_SRCS - ogg/vorbis/vorbisfile.cpp - ogg/vorbis/vorbisproperties.cpp -) + set(vorbis_SRCS + ogg/vorbis/vorbisfile.cpp + ogg/vorbis/vorbisproperties.cpp + ) -set(flacs_SRCS - flac/flacfile.cpp - flac/flacpicture.cpp - flac/flacproperties.cpp - flac/flacmetadatablock.cpp - flac/flacunknownmetadatablock.cpp -) + set(flacs_SRCS + flac/flacfile.cpp + flac/flacpicture.cpp + flac/flacproperties.cpp + flac/flacmetadatablock.cpp + flac/flacunknownmetadatablock.cpp + ) -set(oggflacs_SRCS - ogg/flac/oggflacfile.cpp -) + set(oggflacs_SRCS + ogg/flac/oggflacfile.cpp + ) -set(mpc_SRCS - mpc/mpcfile.cpp - mpc/mpcproperties.cpp -) + set(speex_SRCS + ogg/speex/speexfile.cpp + ogg/speex/speexproperties.cpp + ) -set(mp4_SRCS - mp4/mp4file.cpp - mp4/mp4atom.cpp - mp4/mp4tag.cpp - mp4/mp4item.cpp - mp4/mp4properties.cpp - mp4/mp4coverart.cpp - mp4/mp4itemfactory.cpp -) + set(opus_SRCS + ogg/opus/opusfile.cpp + ogg/opus/opusproperties.cpp + ) +endif() -set(ape_SRCS - ape/apetag.cpp - ape/apefooter.cpp - ape/apeitem.cpp - ape/apefile.cpp - ape/apeproperties.cpp -) +if(WITH_APE) + set(mpc_SRCS + mpc/mpcfile.cpp + mpc/mpcproperties.cpp + ) -set(wavpack_SRCS - wavpack/wavpackfile.cpp - wavpack/wavpackproperties.cpp -) + set(ape_SRCS + ape/apetag.cpp + ape/apefooter.cpp + ape/apeitem.cpp + ape/apefile.cpp + ape/apeproperties.cpp + ) -set(speex_SRCS - ogg/speex/speexfile.cpp - ogg/speex/speexproperties.cpp -) + set(wavpack_SRCS + wavpack/wavpackfile.cpp + wavpack/wavpackproperties.cpp + ) +endif() -set(opus_SRCS - ogg/opus/opusfile.cpp - ogg/opus/opusproperties.cpp -) +if(WITH_MP4) + set(mp4_SRCS + mp4/mp4file.cpp + mp4/mp4atom.cpp + mp4/mp4tag.cpp + mp4/mp4item.cpp + mp4/mp4properties.cpp + mp4/mp4coverart.cpp + mp4/mp4itemfactory.cpp + ) +endif() -set(trueaudio_SRCS - trueaudio/trueaudiofile.cpp - trueaudio/trueaudioproperties.cpp -) +if(WITH_TRUEAUDIO) + set(trueaudio_SRCS + trueaudio/trueaudiofile.cpp + trueaudio/trueaudioproperties.cpp + ) +endif() -set(asf_SRCS - asf/asftag.cpp - asf/asffile.cpp - asf/asfproperties.cpp - asf/asfattribute.cpp - asf/asfpicture.cpp -) +if(WITH_ASF) + set(asf_SRCS + asf/asftag.cpp + asf/asffile.cpp + asf/asfproperties.cpp + asf/asfattribute.cpp + asf/asfpicture.cpp + ) +endif() -set(riff_SRCS - riff/rifffile.cpp -) +if(WITH_RIFF) + set(riff_SRCS + riff/rifffile.cpp + ) -set(aiff_SRCS - riff/aiff/aifffile.cpp - riff/aiff/aiffproperties.cpp -) + set(aiff_SRCS + riff/aiff/aifffile.cpp + riff/aiff/aiffproperties.cpp + ) -set(wav_SRCS - riff/wav/wavfile.cpp - riff/wav/wavproperties.cpp - riff/wav/infotag.cpp -) + set(wav_SRCS + riff/wav/wavfile.cpp + riff/wav/wavproperties.cpp + riff/wav/infotag.cpp + ) +endif() -set(mod_SRCS - mod/modfilebase.cpp - mod/modfile.cpp - mod/modtag.cpp - mod/modproperties.cpp -) +if(WITH_MOD) + set(mod_SRCS + mod/modfilebase.cpp + mod/modfile.cpp + mod/modtag.cpp + mod/modproperties.cpp + ) -set(s3m_SRCS - s3m/s3mfile.cpp - s3m/s3mproperties.cpp -) + set(s3m_SRCS + s3m/s3mfile.cpp + s3m/s3mproperties.cpp + ) -set(it_SRCS - it/itfile.cpp - it/itproperties.cpp -) + set(it_SRCS + it/itfile.cpp + it/itproperties.cpp + ) -set(xm_SRCS - xm/xmfile.cpp - xm/xmproperties.cpp -) + set(xm_SRCS + xm/xmfile.cpp + xm/xmproperties.cpp + ) +endif() -set(dsf_SRCS - dsf/dsffile.cpp - dsf/dsfproperties.cpp -) +if(WITH_DSF) + set(dsf_SRCS + dsf/dsffile.cpp + dsf/dsfproperties.cpp + ) -set(dsdiff_SRCS - dsdiff/dsdifffile.cpp - dsdiff/dsdiffproperties.cpp - dsdiff/dsdiffdiintag.cpp -) + set(dsdiff_SRCS + dsdiff/dsdifffile.cpp + dsdiff/dsdiffproperties.cpp + dsdiff/dsdiffdiintag.cpp + ) +endif() -set(shorten_SRCS - shorten/shortenfile.cpp - shorten/shortenproperties.cpp - shorten/shortentag.cpp -) +if(WITH_SHORTEN) + set(shorten_SRCS + shorten/shortenfile.cpp + shorten/shortenproperties.cpp + shorten/shortentag.cpp + ) +endif() set(toolkit_SRCS toolkit/tstring.cpp diff --git a/taglib/dsdiff/dsdifffile.h b/taglib/dsdiff/dsdifffile.h index 86df7c16..4fcc9730 100644 --- a/taglib/dsdiff/dsdifffile.h +++ b/taglib/dsdiff/dsdifffile.h @@ -26,7 +26,7 @@ #ifndef TAGLIB_DSDIFFFILE_H #define TAGLIB_DSDIFFFILE_H -#include "rifffile.h" +#include "tfile.h" #include "id3v2tag.h" #include "dsdiffproperties.h" #include "dsdiffdiintag.h" diff --git a/taglib/fileref.cpp b/taglib/fileref.cpp index 95cc1a3e..3ff45c33 100644 --- a/taglib/fileref.cpp +++ b/taglib/fileref.cpp @@ -32,32 +32,51 @@ #include #include +#include "taglib_config.h" #include "tfilestream.h" #include "tpropertymap.h" #include "tstringlist.h" #include "tvariant.h" #include "tdebug.h" -#include "aifffile.h" -#include "apefile.h" -#include "asffile.h" -#include "flacfile.h" -#include "itfile.h" -#include "modfile.h" -#include "mp4file.h" -#include "mpcfile.h" #include "mpegfile.h" +#ifdef TAGLIB_WITH_RIFF +#include "aifffile.h" +#include "wavfile.h" +#endif +#ifdef TAGLIB_WITH_APE +#include "apefile.h" +#include "mpcfile.h" +#include "wavpackfile.h" +#endif +#ifdef TAGLIB_WITH_ASF +#include "asffile.h" +#endif +#ifdef TAGLIB_WITH_VORBIS +#include "flacfile.h" +#include "speexfile.h" +#include "vorbisfile.h" #include "oggflacfile.h" #include "opusfile.h" -#include "s3mfile.h" -#include "speexfile.h" -#include "trueaudiofile.h" -#include "vorbisfile.h" -#include "wavfile.h" -#include "wavpackfile.h" +#endif +#ifdef TAGLIB_WITH_MOD +#include "itfile.h" +#include "modfile.h" #include "xmfile.h" +#include "s3mfile.h" +#endif +#ifdef TAGLIB_WITH_MP4 +#include "mp4file.h" +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO +#include "trueaudiofile.h" +#endif +#ifdef TAGLIB_WITH_DSF #include "dsffile.h" #include "dsdifffile.h" +#endif +#ifdef TAGLIB_WITH_SHORTEN #include "shortenfile.h" +#endif using namespace TagLib; @@ -136,6 +155,7 @@ namespace if(ext == "MP3" || ext == "MP2" || ext == "AAC") file = new MPEG::File(stream, readAudioProperties, audioPropertiesStyle); +#ifdef TAGLIB_WITH_VORBIS else if(ext == "OGG") file = new Ogg::Vorbis::File(stream, readAudioProperties, audioPropertiesStyle); else if(ext == "OGA") { @@ -148,26 +168,38 @@ namespace } else if(ext == "FLAC") file = new FLAC::File(stream, readAudioProperties, audioPropertiesStyle); - else if(ext == "MPC") - file = new MPC::File(stream, readAudioProperties, audioPropertiesStyle); - else if(ext == "WV") - file = new WavPack::File(stream, readAudioProperties, audioPropertiesStyle); else if(ext == "SPX") file = new Ogg::Speex::File(stream, readAudioProperties, audioPropertiesStyle); else if(ext == "OPUS") file = new Ogg::Opus::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_APE + else if(ext == "MPC") + file = new MPC::File(stream, readAudioProperties, audioPropertiesStyle); + else if(ext == "WV") + file = new WavPack::File(stream, readAudioProperties, audioPropertiesStyle); + else if(ext == "APE") + file = new APE::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO else if(ext == "TTA") file = new TrueAudio::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_MP4 else if(ext == "M4A" || ext == "M4R" || ext == "M4B" || ext == "M4P" || ext == "MP4" || ext == "3G2" || ext == "M4V") file = new MP4::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_ASF else if(ext == "WMA" || ext == "ASF") file = new ASF::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_RIFF else if(ext == "AIF" || ext == "AIFF" || ext == "AFC" || ext == "AIFC") file = new RIFF::AIFF::File(stream, readAudioProperties, audioPropertiesStyle); else if(ext == "WAV") file = new RIFF::WAV::File(stream, readAudioProperties, audioPropertiesStyle); - else if(ext == "APE") - file = new APE::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_MOD // module, nst and wow are possible but uncommon extensions else if(ext == "MOD" || ext == "MODULE" || ext == "NST" || ext == "WOW") file = new Mod::File(stream, readAudioProperties, audioPropertiesStyle); @@ -177,12 +209,17 @@ namespace file = new IT::File(stream, readAudioProperties, audioPropertiesStyle); else if(ext == "XM") file = new XM::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_DSF else if(ext == "DSF") file = new DSF::File(stream, readAudioProperties, audioPropertiesStyle); else if(ext == "DFF" || ext == "DSDIFF") file = new DSDIFF::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_SHORTEN else if(ext == "SHN") file = new Shorten::File(stream, readAudioProperties, audioPropertiesStyle); +#endif // if file is not valid, leave it to content-based detection. @@ -204,38 +241,54 @@ namespace if(MPEG::File::isSupported(stream)) file = new MPEG::File(stream, readAudioProperties, audioPropertiesStyle); +#ifdef TAGLIB_WITH_VORBIS else if(Ogg::Vorbis::File::isSupported(stream)) file = new Ogg::Vorbis::File(stream, readAudioProperties, audioPropertiesStyle); else if(Ogg::FLAC::File::isSupported(stream)) file = new Ogg::FLAC::File(stream, readAudioProperties, audioPropertiesStyle); else if(FLAC::File::isSupported(stream)) file = new FLAC::File(stream, readAudioProperties, audioPropertiesStyle); - else if(MPC::File::isSupported(stream)) - file = new MPC::File(stream, readAudioProperties, audioPropertiesStyle); - else if(WavPack::File::isSupported(stream)) - file = new WavPack::File(stream, readAudioProperties, audioPropertiesStyle); else if(Ogg::Speex::File::isSupported(stream)) file = new Ogg::Speex::File(stream, readAudioProperties, audioPropertiesStyle); else if(Ogg::Opus::File::isSupported(stream)) file = new Ogg::Opus::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_APE + else if(MPC::File::isSupported(stream)) + file = new MPC::File(stream, readAudioProperties, audioPropertiesStyle); + else if(WavPack::File::isSupported(stream)) + file = new WavPack::File(stream, readAudioProperties, audioPropertiesStyle); + else if(APE::File::isSupported(stream)) + file = new APE::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO else if(TrueAudio::File::isSupported(stream)) file = new TrueAudio::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_MP4 else if(MP4::File::isSupported(stream)) file = new MP4::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_ASF else if(ASF::File::isSupported(stream)) file = new ASF::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_RIFF else if(RIFF::AIFF::File::isSupported(stream)) file = new RIFF::AIFF::File(stream, readAudioProperties, audioPropertiesStyle); else if(RIFF::WAV::File::isSupported(stream)) file = new RIFF::WAV::File(stream, readAudioProperties, audioPropertiesStyle); - else if(APE::File::isSupported(stream)) - file = new APE::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_DSF else if(DSF::File::isSupported(stream)) file = new DSF::File(stream, readAudioProperties, audioPropertiesStyle); else if(DSDIFF::File::isSupported(stream)) file = new DSDIFF::File(stream, readAudioProperties, audioPropertiesStyle); +#endif +#ifdef TAGLIB_WITH_SHORTEN else if(Shorten::File::isSupported(stream)) file = new Shorten::File(stream, readAudioProperties, audioPropertiesStyle); +#endif // isSupported() only does a quick check, so double check the file here. @@ -405,17 +458,25 @@ StringList FileRef::defaultFileExtensions() { StringList l; + l.append("mp3"); + l.append("mp2"); + l.append("aac"); +#ifdef TAGLIB_WITH_VORBIS l.append("ogg"); l.append("flac"); l.append("oga"); l.append("opus"); - l.append("mp3"); - l.append("mp2"); + l.append("spx"); +#endif +#ifdef TAGLIB_WITH_APE l.append("mpc"); l.append("wv"); - l.append("spx"); + l.append("ape"); +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO l.append("tta"); - l.append("aac"); +#endif +#ifdef TAGLIB_WITH_MP4 l.append("m4a"); l.append("m4r"); l.append("m4b"); @@ -423,14 +484,19 @@ StringList FileRef::defaultFileExtensions() l.append("3g2"); l.append("mp4"); l.append("m4v"); +#endif +#ifdef TAGLIB_WITH_ASF l.append("wma"); l.append("asf"); +#endif +#ifdef TAGLIB_WITH_RIFF l.append("aif"); l.append("aiff"); l.append("afc"); l.append("aifc"); l.append("wav"); - l.append("ape"); +#endif +#ifdef TAGLIB_WITH_MOD l.append("mod"); l.append("module"); // alias for "mod" l.append("nst"); // alias for "mod" @@ -438,10 +504,15 @@ StringList FileRef::defaultFileExtensions() l.append("s3m"); l.append("it"); l.append("xm"); +#endif +#ifdef TAGLIB_WITH_DSF l.append("dsf"); l.append("dff"); l.append("dsdiff"); // alias for "dff" +#endif +#ifdef TAGLIB_WITH_SHORTEN l.append("shn"); +#endif return l; } diff --git a/taglib/mpeg/mpegfile.cpp b/taglib/mpeg/mpegfile.cpp index d0a816af..0128250d 100644 --- a/taglib/mpeg/mpegfile.cpp +++ b/taglib/mpeg/mpegfile.cpp @@ -25,11 +25,14 @@ #include "mpegfile.h" +#include "taglib_config.h" #include "id3v2framefactory.h" #include "tdebug.h" #include "tpropertymap.h" +#ifdef TAGLIB_WITH_APE #include "apefooter.h" #include "apetag.h" +#endif #include "id3v1tag.h" #include "id3v2tag.h" #include "tagunion.h" @@ -277,6 +280,7 @@ bool MPEG::File::save(int tags, StripTags strip, ID3v2::Version version, Duplica } } +#ifdef TAGLIB_WITH_APE if(APE & tags) { if(APETag() && !APETag()->isEmpty()) { @@ -305,6 +309,7 @@ bool MPEG::File::save(int tags, StripTags strip, ID3v2::Version version, Duplica File::strip(APE, false); } } +#endif return true; } @@ -321,7 +326,11 @@ ID3v1::Tag *MPEG::File::ID3v1Tag(bool create) APE::Tag *MPEG::File::APETag(bool create) { +#ifdef TAGLIB_WITH_APE return d->tag.access(APEIndex, create); +#else + return nullptr; +#endif } bool MPEG::File::strip(int tags, bool freeMemory) @@ -480,6 +489,7 @@ void MPEG::File::read(bool readProperties, Properties::ReadStyle readStyle) if(d->ID3v1Location >= 0) d->tag.set(ID3v1Index, new ID3v1::Tag(this, d->ID3v1Location)); +#ifdef TAGLIB_WITH_APE // Look for an APE tag d->APELocation = Utils::findAPE(this, d->ID3v1Location); @@ -489,6 +499,7 @@ void MPEG::File::read(bool readProperties, Properties::ReadStyle readStyle) d->APEOriginalSize = APETag()->footer()->completeTagSize(); d->APELocation = d->APELocation + APE::Footer::size() - d->APEOriginalSize; } +#endif if(readProperties) d->properties = std::make_unique(this, readStyle); diff --git a/taglib/mpeg/mpegproperties.cpp b/taglib/mpeg/mpegproperties.cpp index dfbddc26..1790b282 100644 --- a/taglib/mpeg/mpegproperties.cpp +++ b/taglib/mpeg/mpegproperties.cpp @@ -25,10 +25,13 @@ #include "mpegproperties.h" +#include "taglib_config.h" #include "tdebug.h" #include "mpegfile.h" #include "xingheader.h" +#ifdef TAGLIB_WITH_APE #include "apetag.h" +#endif using namespace TagLib; diff --git a/taglib/taglib_config.h.cmake b/taglib/taglib_config.h.cmake new file mode 100644 index 00000000..7a3a02c4 --- /dev/null +++ b/taglib/taglib_config.h.cmake @@ -0,0 +1,16 @@ +/* taglib_config.h. Generated by cmake from taglib_config.h.cmake */ + +#ifndef TAGLIB_TAGLIB_CONFIG_H +#define TAGLIB_TAGLIB_CONFIG_H + +#cmakedefine TAGLIB_WITH_APE 1 +#cmakedefine TAGLIB_WITH_ASF 1 +#cmakedefine TAGLIB_WITH_DSF 1 +#cmakedefine TAGLIB_WITH_MOD 1 +#cmakedefine TAGLIB_WITH_MP4 1 +#cmakedefine TAGLIB_WITH_RIFF 1 +#cmakedefine TAGLIB_WITH_SHORTEN 1 +#cmakedefine TAGLIB_WITH_TRUEAUDIO 1 +#cmakedefine TAGLIB_WITH_VORBIS 1 + +#endif diff --git a/taglib/tagutils.cpp b/taglib/tagutils.cpp index c11c8b69..25242bd1 100644 --- a/taglib/tagutils.cpp +++ b/taglib/tagutils.cpp @@ -25,11 +25,14 @@ #include "tagutils.h" +#include "taglib_config.h" #include "tfile.h" #include "id3v1tag.h" #include "id3v2header.h" +#ifdef TAGLIB_WITH_APE #include "apetag.h" +#endif using namespace TagLib; @@ -45,7 +48,13 @@ offset_t Utils::findID3v1(File *file) const offset_t p = file->tell() + 3; if(const TagLib::ByteVector data = file->readBlock(8); - data.containsAt(ID3v1::Tag::fileIdentifier(), 3) && data != APE::Tag::fileIdentifier()) + data.containsAt(ID3v1::Tag::fileIdentifier(), 3) && +#ifdef TAGLIB_WITH_APE + data != APE::Tag::fileIdentifier() +#else + data != ByteVector::fromCString("APETAGEX") +#endif + ) return p; } else { file->seek(-128, File::End); @@ -83,7 +92,13 @@ offset_t Utils::findAPE(File *file, offset_t id3v1Location) const offset_t p = file->tell(); - if(file->readBlock(8) == APE::Tag::fileIdentifier()) + if(file->readBlock(8) == +#ifdef TAGLIB_WITH_APE + APE::Tag::fileIdentifier() +#else + ByteVector::fromCString("APETAGEX") +#endif + ) return p; return -1; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b36f75d8..25c6e1da 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,34 +1,71 @@ -INCLUDE_DIRECTORIES( +SET(test_HDR_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../taglib ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/toolkit ${CMAKE_CURRENT_SOURCE_DIR}/../bindings/c - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ape - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/asf ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mpeg/id3v1 ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mpeg/id3v2 ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mpeg/id3v2/frames ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mpeg - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mpc - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mp4 - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/riff - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/riff/aiff - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/riff/wav - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/trueaudio - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg/vorbis - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg/flac - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg/speex - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg/opus - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/flac - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/wavpack - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mod - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/s3m - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/it - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/xm - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/dsf - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/dsdiff - ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/shorten ) +IF(WITH_APE) + SET(test_HDR_DIRS ${test_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ape + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mpc + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/wavpack + ) +ENDIF() +IF(WITH_ASF) + SET(test_HDR_DIRS ${test_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/asf + ) +ENDIF() +IF(WITH_MP4) + SET(test_HDR_DIRS ${test_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mp4 + ) +ENDIF() +IF(WITH_RIFF) + SET(test_HDR_DIRS ${test_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/riff + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/riff/aiff + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/riff/wav + ) +ENDIF() +IF(WITH_TRUEAUDIO) + SET(test_HDR_DIRS ${test_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/trueaudio + ) +ENDIF() +IF(WITH_VORBIS) + SET(test_HDR_DIRS ${test_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg/vorbis + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg/flac + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg/speex + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/ogg/opus + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/flac + ) +ENDIF() +IF(WITH_MOD) + SET(test_HDR_DIRS ${test_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/mod + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/s3m + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/it + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/xm + ) +ENDIF() +IF(WITH_DSF) + SET(test_HDR_DIRS ${test_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/dsf + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/dsdiff + ) +ENDIF() +IF(WITH_SHORTEN) + SET(test_HDR_DIRS ${test_HDR_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/../taglib/shorten + ) +ENDIF() +INCLUDE_DIRECTORIES(${test_HDR_DIRS}) SET(test_runner_SRCS main.cpp @@ -36,7 +73,6 @@ SET(test_runner_SRCS test_map.cpp test_mpeg.cpp test_synchdata.cpp - test_trueaudio.cpp test_bytevector.cpp test_bytevectorlist.cpp test_bytevectorstream.cpp @@ -49,36 +85,73 @@ SET(test_runner_SRCS test_id3v1.cpp test_id3v2.cpp test_id3v2framefactory.cpp - test_xiphcomment.cpp - test_aiff.cpp - test_riff.cpp - test_ogg.cpp - test_oggflac.cpp - test_flac.cpp - test_flacpicture.cpp - test_flacunknownmetadatablock.cpp - test_ape.cpp - test_apetag.cpp - test_wav.cpp - test_info.cpp - test_wavpack.cpp - test_mp4.cpp - test_mp4item.cpp - test_mp4coverart.cpp - test_asf.cpp - test_mod.cpp - test_s3m.cpp - test_it.cpp - test_xm.cpp - test_mpc.cpp - test_opus.cpp - test_speex.cpp - test_dsf.cpp - test_dsdiff.cpp - test_shorten.cpp test_sizes.cpp test_versionnumber.cpp ) +IF(WITH_TRUEAUDIO) + SET(test_runner_SRCS ${test_runner_SRCS} + test_trueaudio.cpp + ) +ENDIF() +IF(WITH_VORBIS) + SET(test_runner_SRCS ${test_runner_SRCS} + test_xiphcomment.cpp + test_ogg.cpp + test_oggflac.cpp + test_flac.cpp + test_flacpicture.cpp + test_flacunknownmetadatablock.cpp + test_opus.cpp + test_speex.cpp + ) +ENDIF() +IF(WITH_RIFF) + SET(test_runner_SRCS ${test_runner_SRCS} + test_aiff.cpp + test_riff.cpp + test_wav.cpp + test_info.cpp + ) +ENDIF() +if(WITH_APE) + SET(test_runner_SRCS ${test_runner_SRCS} + test_ape.cpp + test_apetag.cpp + test_wavpack.cpp + test_mpc.cpp + ) +ENDIF() +IF(WITH_MP4) + SET(test_runner_SRCS ${test_runner_SRCS} + test_mp4.cpp + test_mp4item.cpp + test_mp4coverart.cpp + ) +ENDIF() +IF(WITH_ASF) + SET(test_runner_SRCS ${test_runner_SRCS} + test_asf.cpp + ) +ENDIF() +IF(WITH_MOD) + SET(test_runner_SRCS ${test_runner_SRCS} + test_mod.cpp + test_s3m.cpp + test_it.cpp + test_xm.cpp + ) +ENDIF() +IF(WITH_DSF) + SET(test_runner_SRCS ${test_runner_SRCS} + test_dsf.cpp + test_dsdiff.cpp + ) +ENDIF() +IF(WITH_SHORTEN) + SET(test_runner_SRCS ${test_runner_SRCS} + test_shorten.cpp + ) +ENDIF() IF(BUILD_BINDINGS) SET(test_runner_SRCS ${test_runner_SRCS} test_tag_c.cpp diff --git a/tests/test_complexproperties.cpp b/tests/test_complexproperties.cpp index 24354e5a..ca5e3f40 100644 --- a/tests/test_complexproperties.cpp +++ b/tests/test_complexproperties.cpp @@ -23,21 +23,30 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ -#include "asfpicture.h" -#include "flacpicture.h" -#include "flacfile.h" +#include "taglib_config.h" #include "tbytevector.h" #include "tvariant.h" #include "tzlib.h" #include "fileref.h" -#include "apetag.h" -#include "asftag.h" -#include "mp4tag.h" -#include "xiphcomment.h" #include "id3v1tag.h" #include "id3v2tag.h" #include "attachedpictureframe.h" #include "generalencapsulatedobjectframe.h" +#ifdef TAGLIB_WITH_ASF +#include "asfpicture.h" +#include "asftag.h" +#endif +#ifdef TAGLIB_WITH_VORBIS +#include "flacpicture.h" +#include "flacfile.h" +#include "xiphcomment.h" +#endif +#ifdef TAGLIB_WITH_APE +#include "apetag.h" +#endif +#ifdef TAGLIB_WITH_MP4 +#include "mp4tag.h" +#endif #include #include "utils.h" @@ -69,17 +78,25 @@ class TestComplexProperties : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(TestComplexProperties); CPPUNIT_TEST(testReadMp3Picture); + CPPUNIT_TEST(testSetGetId3Geob); + CPPUNIT_TEST(testSetGetId3Picture); + CPPUNIT_TEST(testNonExistent); +#ifdef TAGLIB_WITH_MP4 CPPUNIT_TEST(testReadM4aPicture); + CPPUNIT_TEST(testSetGetMp4Picture); +#endif +#ifdef TAGLIB_WITH_VORBIS CPPUNIT_TEST(testReadOggPicture); CPPUNIT_TEST(testReadWriteFlacPicture); CPPUNIT_TEST(testReadWriteMultipleProperties); - CPPUNIT_TEST(testSetGetId3Geob); - CPPUNIT_TEST(testSetGetId3Picture); - CPPUNIT_TEST(testSetGetApePicture); - CPPUNIT_TEST(testSetGetAsfPicture); - CPPUNIT_TEST(testSetGetMp4Picture); CPPUNIT_TEST(testSetGetXiphPicture); - CPPUNIT_TEST(testNonExistent); +#endif +#ifdef TAGLIB_WITH_APE + CPPUNIT_TEST(testSetGetApePicture); +#endif +#ifdef TAGLIB_WITH_ASF + CPPUNIT_TEST(testSetGetAsfPicture); +#endif CPPUNIT_TEST_SUITE_END(); public: @@ -103,6 +120,7 @@ public: } } +#ifdef TAGLIB_WITH_MP4 void testReadM4aPicture() { const ByteVector expectedData1( @@ -145,7 +163,9 @@ public: CPPUNIT_ASSERT_EQUAL(String("image/jpeg"), picture.value("mimeType").value()); } +#endif +#ifdef TAGLIB_WITH_VORBIS void testReadOggPicture() { FileRef f(TEST_FILE_PATH_C("lowercase-fields.ogg"), false); @@ -217,6 +237,7 @@ public: CPPUNIT_ASSERT(f.pictureList().isEmpty()); } } +#endif void testReadWriteMultipleProperties() { @@ -311,6 +332,7 @@ public: CPPUNIT_ASSERT_EQUAL(ID3v2::AttachedPictureFrame::FrontCover, frame->type()); } +#ifdef TAGLIB_WITH_APE void testSetGetApePicture() { const String FRONT_COVER("COVER ART (FRONT)"); @@ -326,7 +348,9 @@ public: .append(picture.value("data").value()), item.binaryData()); } +#endif +#ifdef TAGLIB_WITH_ASF void testSetGetAsfPicture() { VariantMap picture(TEST_PICTURE); @@ -344,7 +368,9 @@ public: asfPicture.description()); CPPUNIT_ASSERT_EQUAL(ASF::Picture::FrontCover, asfPicture.type()); } +#endif +#ifdef TAGLIB_WITH_MP4 void testSetGetMp4Picture() { VariantMap picture(TEST_PICTURE); @@ -360,7 +386,9 @@ public: covr.data()); CPPUNIT_ASSERT_EQUAL(MP4::CoverArt::JPEG, covr.format()); } +#endif +#ifdef TAGLIB_WITH_VORBIS void testSetGetXiphPicture() { VariantMap picture(TEST_PICTURE); @@ -386,6 +414,7 @@ public: CPPUNIT_ASSERT_EQUAL(1, pic->width()); CPPUNIT_ASSERT_EQUAL(1, pic->height()); } +#endif void testNonExistent() { diff --git a/tests/test_fileref.cpp b/tests/test_fileref.cpp index 3d38e5e4..5c3e4e0d 100644 --- a/tests/test_fileref.cpp +++ b/tests/test_fileref.cpp @@ -26,27 +26,44 @@ #include #include +#include "taglib_config.h" #include "tfilestream.h" #include "tbytevectorstream.h" #include "tag.h" #include "fileref.h" +#include "mpegfile.h" +#ifdef TAGLIB_WITH_VORBIS #include "oggflacfile.h" #include "vorbisfile.h" -#include "mpegfile.h" -#include "mpcfile.h" -#include "asffile.h" #include "speexfile.h" #include "flacfile.h" -#include "trueaudiofile.h" -#include "mp4file.h" -#include "wavfile.h" -#include "apefile.h" -#include "aifffile.h" -#include "wavpackfile.h" #include "opusfile.h" +#endif +#ifdef TAGLIB_WITH_APE +#include "mpcfile.h" +#include "apefile.h" +#include "wavpackfile.h" +#endif +#ifdef TAGLIB_WITH_ASF +#include "asffile.h" +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO +#include "trueaudiofile.h" +#endif +#ifdef TAGLIB_WITH_MP4 +#include "mp4file.h" +#endif +#ifdef TAGLIB_WITH_RIFF +#include "wavfile.h" +#include "aifffile.h" +#endif +#ifdef TAGLIB_WITH_MOD #include "xmfile.h" +#endif +#ifdef TAGLIB_WITH_DSF #include "dsffile.h" #include "dsdifffile.h" +#endif #include #include "utils.h" @@ -55,6 +72,7 @@ using namespace TagLib; namespace { +#ifdef TAGLIB_WITH_VORBIS class DummyResolver : public FileRef::FileTypeResolver { public: @@ -63,7 +81,9 @@ namespace return new Ogg::Vorbis::File(fileName); } }; +#endif +#ifdef TAGLIB_WITH_MP4 class DummyStreamResolver : public FileRef::StreamTypeResolver { public: @@ -77,36 +97,51 @@ namespace return new MP4::File(s); } }; +#endif } // namespace class TestFileRef : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(TestFileRef); - CPPUNIT_TEST(testASF); - CPPUNIT_TEST(testMusepack); - CPPUNIT_TEST(testVorbis); - CPPUNIT_TEST(testSpeex); - CPPUNIT_TEST(testFLAC); CPPUNIT_TEST(testMP3); - CPPUNIT_TEST(testOGA_FLAC); - CPPUNIT_TEST(testOGA_Vorbis); - CPPUNIT_TEST(testMP4_1); - CPPUNIT_TEST(testMP4_2); - CPPUNIT_TEST(testMP4_3); - CPPUNIT_TEST(testMP4_4); - CPPUNIT_TEST(testTrueAudio); - CPPUNIT_TEST(testAPE); - CPPUNIT_TEST(testWav); - CPPUNIT_TEST(testAIFF_1); - CPPUNIT_TEST(testAIFF_2); - CPPUNIT_TEST(testWavPack); - CPPUNIT_TEST(testOpus); - CPPUNIT_TEST(testDSF); - CPPUNIT_TEST(testDSDIFF); CPPUNIT_TEST(testUnsupported); CPPUNIT_TEST(testAudioProperties); CPPUNIT_TEST(testDefaultFileExtensions); CPPUNIT_TEST(testFileResolver); +#ifdef TAGLIB_WITH_ASF + CPPUNIT_TEST(testASF); +#endif +#ifdef TAGLIB_WITH_APE + CPPUNIT_TEST(testMusepack); + CPPUNIT_TEST(testAPE); + CPPUNIT_TEST(testWavPack); +#endif +#ifdef TAGLIB_WITH_VORBIS + CPPUNIT_TEST(testVorbis); + CPPUNIT_TEST(testSpeex); + CPPUNIT_TEST(testFLAC); + CPPUNIT_TEST(testOGA_FLAC); + CPPUNIT_TEST(testOGA_Vorbis); + CPPUNIT_TEST(testOpus); +#endif +#ifdef TAGLIB_WITH_MP4 + CPPUNIT_TEST(testMP4_1); + CPPUNIT_TEST(testMP4_2); + CPPUNIT_TEST(testMP4_3); + CPPUNIT_TEST(testMP4_4); +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO + CPPUNIT_TEST(testTrueAudio); +#endif +#ifdef TAGLIB_WITH_RIFF + CPPUNIT_TEST(testWav); + CPPUNIT_TEST(testAIFF_1); + CPPUNIT_TEST(testAIFF_2); +#endif +#ifdef TAGLIB_WITH_DSF + CPPUNIT_TEST(testDSF); + CPPUNIT_TEST(testDSDIFF); +#endif CPPUNIT_TEST_SUITE_END(); public: @@ -239,16 +274,21 @@ public: } } +#ifdef TAGLIB_WITH_APE void testMusepack() { fileRefSave("click", ".mpc"); } +#endif +#ifdef TAGLIB_WITH_ASF void testASF() { fileRefSave("silence-1", ".wma"); } +#endif +#ifdef TAGLIB_WITH_VORBIS void testVorbis() { fileRefSave("empty", ".ogg"); @@ -263,17 +303,21 @@ public: { fileRefSave("no-tags", ".flac"); } +#endif void testMP3() { fileRefSave("xing", ".mp3"); } +#ifdef TAGLIB_WITH_TRUEAUDIO void testTrueAudio() { fileRefSave("empty", ".tta"); } +#endif +#ifdef TAGLIB_WITH_MP4 void testMP4_1() { fileRefSave("has-tags", ".m4a"); @@ -293,12 +337,16 @@ public: { fileRefSave("blank_video", ".m4v"); } +#endif +#ifdef TAGLIB_WITH_RIFF void testWav() { fileRefSave("empty", ".wav"); } +#endif +#ifdef TAGLIB_WITH_VORBIS void testOGA_FLAC() { fileRefSave("empty_flac", ".oga"); @@ -308,12 +356,16 @@ public: { fileRefSave("empty_vorbis", ".oga"); } +#endif +#ifdef TAGLIB_WITH_APE void testAPE() { fileRefSave("mac-399", ".ape"); } +#endif +#ifdef TAGLIB_WITH_RIFF void testAIFF_1() { fileRefSave("empty", ".aiff"); @@ -323,17 +375,23 @@ public: { fileRefSave("alaw", ".aifc"); } +#endif +#ifdef TAGLIB_WITH_APE void testWavPack() { fileRefSave("click", ".wv"); } +#endif +#ifdef TAGLIB_WITH_VORBIS void testOpus() { fileRefSave("correctness_gain_silent_output", ".opus"); } +#endif +#ifdef TAGLIB_WITH_DSF void testDSF() { fileRefSave("empty10ms",".dsf"); @@ -343,6 +401,7 @@ public: { fileRefSave("empty10ms",".dff"); } +#endif void testUnsupported() { @@ -364,28 +423,56 @@ public: void testDefaultFileExtensions() { const StringList extensions = FileRef::defaultFileExtensions(); +#ifdef TAGLIB_WITH_APE CPPUNIT_ASSERT(extensions.contains("mpc")); +#endif +#ifdef TAGLIB_WITH_ASF CPPUNIT_ASSERT(extensions.contains("wma")); +#endif +#ifdef TAGLIB_WITH_VORBIS CPPUNIT_ASSERT(extensions.contains("ogg")); CPPUNIT_ASSERT(extensions.contains("spx")); CPPUNIT_ASSERT(extensions.contains("flac")); +#endif CPPUNIT_ASSERT(extensions.contains("mp3")); +#ifdef TAGLIB_WITH_TRUEAUDIO CPPUNIT_ASSERT(extensions.contains("tta")); +#endif +#ifdef TAGLIB_WITH_MP4 CPPUNIT_ASSERT(extensions.contains("m4a")); CPPUNIT_ASSERT(extensions.contains("3g2")); CPPUNIT_ASSERT(extensions.contains("m4v")); +#endif +#ifdef TAGLIB_WITH_RIFF CPPUNIT_ASSERT(extensions.contains("wav")); +#endif +#ifdef TAGLIB_WITH_VORBIS CPPUNIT_ASSERT(extensions.contains("oga")); +#endif +#ifdef TAGLIB_WITH_APE CPPUNIT_ASSERT(extensions.contains("ape")); +#endif +#ifdef TAGLIB_WITH_RIFF CPPUNIT_ASSERT(extensions.contains("aiff")); CPPUNIT_ASSERT(extensions.contains("aifc")); +#endif +#ifdef TAGLIB_WITH_APE CPPUNIT_ASSERT(extensions.contains("wv")); +#endif +#ifdef TAGLIB_WITH_VORBIS CPPUNIT_ASSERT(extensions.contains("opus")); +#endif +#ifdef TAGLIB_WITH_MOD CPPUNIT_ASSERT(extensions.contains("xm")); +#endif +#ifdef TAGLIB_WITH_DSF CPPUNIT_ASSERT(extensions.contains("dsf")); CPPUNIT_ASSERT(extensions.contains("dff")); CPPUNIT_ASSERT(extensions.contains("dsdiff")); +#endif +#ifdef TAGLIB_WITH_SHORTEN CPPUNIT_ASSERT(extensions.contains("shn")); +#endif } void testFileResolver() @@ -395,6 +482,7 @@ public: CPPUNIT_ASSERT(dynamic_cast(f.file()) != nullptr); } +#ifdef TAGLIB_WITH_VORBIS DummyResolver resolver; FileRef::addFileTypeResolver(&resolver); @@ -402,7 +490,9 @@ public: FileRef f(TEST_FILE_PATH_C("xing.mp3")); CPPUNIT_ASSERT(dynamic_cast(f.file()) != nullptr); } +#endif +#ifdef TAGLIB_WITH_MP4 DummyStreamResolver streamResolver; FileRef::addFileTypeResolver(&streamResolver); @@ -411,6 +501,7 @@ public: FileRef f(&s); CPPUNIT_ASSERT(dynamic_cast(f.file()) != nullptr); } +#endif FileRef::clearFileTypeResolvers(); } diff --git a/tests/test_id3v2framefactory.cpp b/tests/test_id3v2framefactory.cpp index 98728a16..de4c6b6b 100644 --- a/tests/test_id3v2framefactory.cpp +++ b/tests/test_id3v2framefactory.cpp @@ -26,21 +26,30 @@ #include #include -#include "flacproperties.h" +#include "taglib_config.h" #include "mpegproperties.h" #include "tbytevector.h" #include "tpropertymap.h" #include "mpegfile.h" -#include "flacfile.h" -#include "trueaudiofile.h" -#include "trueaudioproperties.h" -#include "wavfile.h" -#include "aifffile.h" -#include "dsffile.h" -#include "dsdifffile.h" #include "id3v2tag.h" #include "id3v2frame.h" #include "id3v2framefactory.h" +#ifdef TAGLIB_WITH_VORBIS +#include "flacproperties.h" +#include "flacfile.h" +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO +#include "trueaudiofile.h" +#include "trueaudioproperties.h" +#endif +#ifdef TAGLIB_WITH_RIFF +#include "wavfile.h" +#include "aifffile.h" +#endif +#ifdef TAGLIB_WITH_DSF +#include "dsffile.h" +#include "dsdifffile.h" +#endif #include #include "utils.h" @@ -118,12 +127,20 @@ class TestId3v2FrameFactory : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(TestId3v2FrameFactory); CPPUNIT_TEST(testMPEG); +#ifdef TAGLIB_WITH_VORBIS CPPUNIT_TEST(testFLAC); +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO CPPUNIT_TEST(testTrueAudio); +#endif +#ifdef TAGLIB_WITH_RIFF CPPUNIT_TEST(testWAV); CPPUNIT_TEST(testAIFF); +#endif +#ifdef TAGLIB_WITH_DSF CPPUNIT_TEST(testDSF); CPPUNIT_TEST(testDSDIFF); +#endif CPPUNIT_TEST_SUITE_END(); public: @@ -236,6 +253,7 @@ public: ); } +#ifdef TAGLIB_WITH_VORBIS void testFLAC() { ScopedFileCopy copy("no-tags", ".flac"); @@ -260,7 +278,9 @@ public: } ); } +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO void testTrueAudio() { ScopedFileCopy copy("empty", ".tta"); @@ -285,7 +305,9 @@ public: } ); } +#endif +#ifdef TAGLIB_WITH_RIFF void testWAV() { ScopedFileCopy copy("empty", ".wav"); @@ -335,7 +357,9 @@ public: } ); } +#endif +#ifdef TAGLIB_WITH_DSF void testDSF() { ScopedFileCopy copy("empty10ms", ".dsf"); @@ -385,6 +409,7 @@ public: } ); } +#endif }; diff --git a/tests/test_mpeg.cpp b/tests/test_mpeg.cpp index d6aa3a40..14f68588 100644 --- a/tests/test_mpeg.cpp +++ b/tests/test_mpeg.cpp @@ -27,12 +27,15 @@ #include #include +#include "taglib_config.h" #include "tstring.h" #include "tpropertymap.h" #include "mpegfile.h" #include "id3v2tag.h" #include "id3v1tag.h" +#ifdef TAGLIB_WITH_APE #include "apetag.h" +#endif #include "mpegproperties.h" #include "xingheader.h" #include "mpegheader.h" @@ -67,7 +70,9 @@ class TestMPEG : public CppUnit::TestFixture CPPUNIT_TEST(testRepeatedSave3); CPPUNIT_TEST(testEmptyID3v2); CPPUNIT_TEST(testEmptyID3v1); +#ifdef TAGLIB_WITH_APE CPPUNIT_TEST(testEmptyAPE); +#endif CPPUNIT_TEST(testIgnoreGarbage); CPPUNIT_TEST(testExtendedHeader); CPPUNIT_TEST(testReadStyleFast); @@ -304,7 +309,9 @@ public: { MPEG::File f(copy.fileName().c_str()); f.ID3v2Tag(true)->setTitle("ID3v2"); +#ifdef TAGLIB_WITH_APE f.APETag(true)->setTitle("APE"); +#endif f.ID3v1Tag(true)->setTitle("ID3v1"); f.save(); } @@ -312,8 +319,10 @@ public: MPEG::File f(copy.fileName().c_str()); CPPUNIT_ASSERT_EQUAL(String("ID3v2"), f.properties()["TITLE"].front()); f.strip(MPEG::File::ID3v2); +#ifdef TAGLIB_WITH_APE CPPUNIT_ASSERT_EQUAL(String("APE"), f.properties()["TITLE"].front()); f.strip(MPEG::File::APE); +#endif CPPUNIT_ASSERT_EQUAL(String("ID3v1"), f.properties()["TITLE"].front()); f.strip(MPEG::File::ID3v1); CPPUNIT_ASSERT(f.properties().isEmpty()); @@ -464,17 +473,23 @@ public: CPPUNIT_ASSERT(!f.hasAPETag()); CPPUNIT_ASSERT(!f.hasID3v1Tag()); +#ifdef TAGLIB_WITH_APE f.APETag(true)->setTitle("01234 56789 ABCDE FGHIJ"); f.save(); f.APETag()->setTitle("0"); f.save(); +#endif f.ID3v1Tag(true)->setTitle("01234 56789 ABCDE FGHIJ"); +#ifdef TAGLIB_WITH_APE f.APETag()->setTitle("01234 56789 ABCDE FGHIJ 01234 56789 ABCDE FGHIJ 01234 56789"); +#endif f.save(); } { MPEG::File f(copy.fileName().c_str()); +#ifdef TAGLIB_WITH_APE CPPUNIT_ASSERT(f.hasAPETag()); +#endif CPPUNIT_ASSERT(f.hasID3v1Tag()); } } @@ -519,6 +534,7 @@ public: } } +#ifdef TAGLIB_WITH_APE void testEmptyAPE() { ScopedFileCopy copy("xing", ".mp3"); @@ -538,6 +554,7 @@ public: CPPUNIT_ASSERT(!f.hasAPETag()); } } +#endif void testIgnoreGarbage() { diff --git a/tests/test_propertymap.cpp b/tests/test_propertymap.cpp index e7de4b89..db39ce14 100644 --- a/tests/test_propertymap.cpp +++ b/tests/test_propertymap.cpp @@ -23,15 +23,26 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ +#include "taglib_config.h" #include "tpropertymap.h" #include "tag.h" -#include "apetag.h" -#include "asftag.h" #include "id3v1tag.h" #include "id3v2tag.h" +#ifdef TAGLIB_WITH_APE +#include "apetag.h" +#endif +#ifdef TAGLIB_WITH_ASF +#include "asftag.h" +#endif +#ifdef TAGLIB_WITH_RIFF #include "infotag.h" +#endif +#ifdef TAGLIB_WITH_MP4 #include "mp4tag.h" +#endif +#ifdef TAGLIB_WITH_VORBIS #include "xiphcomment.h" +#endif #include #include "utils.h" @@ -41,14 +52,24 @@ class TestPropertyMap : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(TestPropertyMap); CPPUNIT_TEST(testInvalidKeys); - CPPUNIT_TEST(testGetSetApe); - CPPUNIT_TEST(testGetSetAsf); CPPUNIT_TEST(testGetSetId3v1); CPPUNIT_TEST(testGetSetId3v2); - CPPUNIT_TEST(testGetSetInfo); - CPPUNIT_TEST(testGetSetMp4); - CPPUNIT_TEST(testGetSetXiphComment); CPPUNIT_TEST(testGetSet); +#ifdef TAGLIB_WITH_APE + CPPUNIT_TEST(testGetSetApe); +#endif +#ifdef TAGLIB_WITH_ASF + CPPUNIT_TEST(testGetSetAsf); +#endif +#ifdef TAGLIB_WITH_RIFF + CPPUNIT_TEST(testGetSetInfo); +#endif +#ifdef TAGLIB_WITH_MP4 + CPPUNIT_TEST(testGetSetMp4); +#endif +#ifdef TAGLIB_WITH_VORBIS + CPPUNIT_TEST(testGetSetXiphComment); +#endif CPPUNIT_TEST_SUITE_END(); public: @@ -141,30 +162,40 @@ public: tagGetSet(); } +#ifdef TAGLIB_WITH_VORBIS void testGetSetXiphComment() { tagGetSet(); } +#endif +#ifdef TAGLIB_WITH_APE void testGetSetApe() { tagGetSet(); } +#endif +#ifdef TAGLIB_WITH_ASF void testGetSetAsf() { tagGetSet(); } +#endif +#ifdef TAGLIB_WITH_MP4 void testGetSetMp4() { tagGetSet(); } +#endif +#ifdef TAGLIB_WITH_RIFF void testGetSetInfo() { tagGetSet(); } +#endif void testGetSet() { diff --git a/tests/test_sizes.cpp b/tests/test_sizes.cpp index 5c2b2e9a..0bf03cce 100644 --- a/tests/test_sizes.cpp +++ b/tests/test_sizes.cpp @@ -25,34 +25,25 @@ #include -#include "aifffile.h" -#include "aiffproperties.h" -#include "apefile.h" -#include "apefooter.h" -#include "apeitem.h" -#include "apeproperties.h" -#include "apetag.h" -#include "asfattribute.h" -#include "asffile.h" -#include "asfpicture.h" -#include "asfproperties.h" -#include "asftag.h" -#include "attachedpictureframe.h" -#include "audioproperties.h" -#include "chapterframe.h" -#include "commentsframe.h" -#include "dsffile.h" -#include "dsfproperties.h" -#include "dsdifffile.h" -#include "dsdiffproperties.h" -#include "eventtimingcodesframe.h" +#include "taglib_config.h" +#include "tag.h" +#include "tbytevector.h" +#include "tbytevectorlist.h" +#include "tbytevectorstream.h" +#include "tdebuglistener.h" +#include "tfile.h" +#include "tfilestream.h" +#include "tiostream.h" +#include "tlist.h" +#include "tmap.h" +#include "tpropertymap.h" +#include "tstring.h" +#include "tstringlist.h" #include "fileref.h" -#include "flacfile.h" -#include "flacmetadatablock.h" -#include "flacunknownmetadatablock.h" -#include "flacpicture.h" -#include "flacproperties.h" -#include "generalencapsulatedobjectframe.h" +#include "mpegfile.h" +#include "mpegheader.h" +#include "mpegproperties.h" +#include "xingheader.h" #include "id3v1tag.h" #include "id3v2extendedheader.h" #include "id3v2footer.h" @@ -60,75 +51,103 @@ #include "id3v2framefactory.h" #include "id3v2header.h" #include "id3v2tag.h" +#include "attachedpictureframe.h" +#include "audioproperties.h" +#include "chapterframe.h" +#include "commentsframe.h" +#include "eventtimingcodesframe.h" +#include "generalencapsulatedobjectframe.h" +#include "ownershipframe.h" +#include "podcastframe.h" +#include "popularimeterframe.h" +#include "privateframe.h" +#include "relativevolumeframe.h" +#include "synchronizedlyricsframe.h" +#include "tableofcontentsframe.h" +#include "textidentificationframe.h" +#include "uniquefileidentifierframe.h" +#include "unknownframe.h" +#include "unsynchronizedlyricsframe.h" +#include "urllinkframe.h" +#ifdef TAGLIB_WITH_RIFF +#include "aifffile.h" +#include "aiffproperties.h" #include "infotag.h" -#include "itfile.h" -#include "itproperties.h" -#include "modfile.h" -#include "modfilebase.h" -#include "modproperties.h" -#include "modtag.h" -#include "mp4coverart.h" -#include "mp4file.h" -#include "mp4item.h" -#include "mp4itemfactory.h" -#include "mp4properties.h" -#include "mp4tag.h" +#include "rifffile.h" +#include "wavfile.h" +#include "wavproperties.h" +#endif +#ifdef TAGLIB_WITH_APE +#include "apefile.h" +#include "apefooter.h" +#include "apeitem.h" +#include "apeproperties.h" +#include "apetag.h" #include "mpcfile.h" #include "mpcproperties.h" -#include "mpegfile.h" -#include "mpegheader.h" -#include "mpegproperties.h" +#include "wavpackfile.h" +#include "wavpackproperties.h" +#endif +#ifdef TAGLIB_WITH_ASF +#include "asfattribute.h" +#include "asffile.h" +#include "asfpicture.h" +#include "asfproperties.h" +#include "asftag.h" +#endif +#ifdef TAGLIB_WITH_DSF +#include "dsffile.h" +#include "dsfproperties.h" +#include "dsdifffile.h" +#include "dsdiffproperties.h" +#endif +#ifdef TAGLIB_WITH_VORBIS +#include "flacfile.h" +#include "flacmetadatablock.h" +#include "flacunknownmetadatablock.h" +#include "flacpicture.h" +#include "flacproperties.h" #include "oggfile.h" #include "oggflacfile.h" #include "oggpage.h" #include "oggpageheader.h" #include "opusfile.h" #include "opusproperties.h" -#include "ownershipframe.h" -#include "podcastframe.h" -#include "popularimeterframe.h" -#include "privateframe.h" -#include "relativevolumeframe.h" -#include "rifffile.h" +#include "speexfile.h" +#include "speexproperties.h" +#include "vorbisfile.h" +#include "vorbisproperties.h" +#include "xiphcomment.h" +#endif +#ifdef TAGLIB_WITH_MOD +#include "itfile.h" +#include "itproperties.h" +#include "modfile.h" +#include "modfilebase.h" +#include "modproperties.h" +#include "modtag.h" #include "s3mfile.h" #include "s3mproperties.h" +#include "xmfile.h" +#include "xmproperties.h" +#endif +#ifdef TAGLIB_WITH_MP4 +#include "mp4coverart.h" +#include "mp4file.h" +#include "mp4item.h" +#include "mp4itemfactory.h" +#include "mp4properties.h" +#include "mp4tag.h" +#endif +#ifdef TAGLIB_WITH_SHORTEN #include "shortenfile.h" #include "shortenproperties.h" #include "shortentag.h" -#include "speexfile.h" -#include "speexproperties.h" -#include "synchronizedlyricsframe.h" -#include "tableofcontentsframe.h" -#include "tag.h" -#include "tbytevector.h" -#include "tbytevectorlist.h" -#include "tbytevectorstream.h" -#include "tdebuglistener.h" -#include "textidentificationframe.h" -#include "tfile.h" -#include "tfilestream.h" -#include "tiostream.h" -#include "tlist.h" -#include "tmap.h" -#include "tpropertymap.h" +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO #include "trueaudiofile.h" #include "trueaudioproperties.h" -#include "tstring.h" -#include "tstringlist.h" -#include "uniquefileidentifierframe.h" -#include "unknownframe.h" -#include "unsynchronizedlyricsframe.h" -#include "urllinkframe.h" -#include "vorbisfile.h" -#include "vorbisproperties.h" -#include "wavfile.h" -#include "wavpackfile.h" -#include "wavpackproperties.h" -#include "wavproperties.h" -#include "xingheader.h" -#include "xiphcomment.h" -#include "xmfile.h" -#include "xmproperties.h" +#endif #include @@ -147,31 +166,11 @@ public: // Class list was built by generating XML docs with Doxygen, and then running: // $ grep kind=\"class\" index.xml | sed -E -e 's/(.*|<\/name>.*)//g' - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::APE::File)); - CPPUNIT_ASSERT_EQUAL(classSize(0, false), sizeof(TagLib::APE::Footer)); - CPPUNIT_ASSERT_EQUAL(classSize(0, false), sizeof(TagLib::APE::Item)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::APE::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::APE::Tag)); - CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::ASF::Attribute)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::ASF::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::ASF::Picture)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::ASF::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::ASF::Tag)); CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::AudioProperties)); CPPUNIT_ASSERT_EQUAL(classSize(0, false), sizeof(TagLib::ByteVector)); CPPUNIT_ASSERT_EQUAL(classSize(2, false), sizeof(TagLib::ByteVectorList)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::ByteVectorStream)); CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::DebugListener)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSDIFF::DIIN::Tag)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSDIFF::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSDIFF::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::FLAC::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSF::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSF::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::FLAC::MetadataBlock)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::FLAC::Picture)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::FLAC::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::FLAC::UnknownMetadataBlock)); CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::File)); CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::FileRef)); CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::FileRef::FileTypeResolver)); @@ -207,26 +206,47 @@ public: CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::ID3v2::UserTextIdentificationFrame)); CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::ID3v2::UserUrlLinkFrame)); CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::IOStream)); - CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::IT::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::IT::Properties)); CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::List)); - CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::MP4::CoverArt)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MP4::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::MP4::Item)); - CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::MP4::ItemFactory)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MP4::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MP4::Tag)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MPC::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MPC::Properties)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MPEG::File)); CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::MPEG::Header)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MPEG::Properties)); CPPUNIT_ASSERT_EQUAL(classSize(0, false), sizeof(TagLib::MPEG::XingHeader)); CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::Map)); - CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::Mod::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Mod::FileBase)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Mod::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Mod::Tag)); + CPPUNIT_ASSERT_EQUAL(classSize(2, false), sizeof(TagLib::PropertyMap)); + CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::String)); + CPPUNIT_ASSERT_EQUAL(classSize(2, false), sizeof(TagLib::StringList)); + CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::Tag)); +#ifdef TAGLIB_WITH_APE + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::APE::File)); + CPPUNIT_ASSERT_EQUAL(classSize(0, false), sizeof(TagLib::APE::Footer)); + CPPUNIT_ASSERT_EQUAL(classSize(0, false), sizeof(TagLib::APE::Item)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::APE::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::APE::Tag)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MPC::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MPC::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::WavPack::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::WavPack::Properties)); +#endif +#ifdef TAGLIB_WITH_ASF + CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::ASF::Attribute)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::ASF::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::ASF::Picture)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::ASF::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::ASF::Tag)); +#endif +#ifdef TAGLIB_WITH_DSF + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSDIFF::DIIN::Tag)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSDIFF::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSDIFF::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSF::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::DSF::Properties)); +#endif +#ifdef TAGLIB_WITH_VORBIS + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::FLAC::File)); + CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::FLAC::MetadataBlock)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::FLAC::Picture)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::FLAC::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::FLAC::UnknownMetadataBlock)); CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::Ogg::FLAC::File)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Ogg::File)); CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::Ogg::Opus::File)); @@ -238,7 +258,29 @@ public: CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::Ogg::Vorbis::File)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Ogg::Vorbis::Properties)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Ogg::XiphComment)); - CPPUNIT_ASSERT_EQUAL(classSize(2, false), sizeof(TagLib::PropertyMap)); +#endif +#ifdef TAGLIB_WITH_MOD + CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::IT::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::IT::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::Mod::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Mod::FileBase)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Mod::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Mod::Tag)); + CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::S3M::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::S3M::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::XM::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::XM::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::Variant)); +#endif +#ifdef TAGLIB_WITH_MP4 + CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::MP4::CoverArt)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MP4::File)); + CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::MP4::Item)); + CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::MP4::ItemFactory)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MP4::Properties)); + CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::MP4::Tag)); +#endif +#ifdef TAGLIB_WITH_RIFF CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::RIFF::AIFF::File)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::RIFF::AIFF::Properties)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::RIFF::File)); @@ -246,21 +288,16 @@ public: CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::RIFF::Info::Tag)); CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::RIFF::WAV::File)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::RIFF::WAV::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::S3M::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::S3M::Properties)); +#endif +#ifdef TAGLIB_WITH_SHORTEN CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Shorten::File)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Shorten::Properties)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::Shorten::Tag)); - CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::String)); - CPPUNIT_ASSERT_EQUAL(classSize(2, false), sizeof(TagLib::StringList)); - CPPUNIT_ASSERT_EQUAL(classSize(0, true), sizeof(TagLib::Tag)); +#endif +#ifdef TAGLIB_WITH_TRUEAUDIO CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::TrueAudio::File)); CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::TrueAudio::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::WavPack::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::WavPack::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(2, true), sizeof(TagLib::XM::File)); - CPPUNIT_ASSERT_EQUAL(classSize(1, true), sizeof(TagLib::XM::Properties)); - CPPUNIT_ASSERT_EQUAL(classSize(1, false), sizeof(TagLib::Variant)); +#endif } private: diff --git a/tests/test_tag_c.cpp b/tests/test_tag_c.cpp index dc51028a..b9d8511a 100644 --- a/tests/test_tag_c.cpp +++ b/tests/test_tag_c.cpp @@ -27,6 +27,7 @@ #include #include +#include "taglib_config.h" #include "tag_c.h" #include "tbytevector.h" #include "tstring.h" @@ -77,7 +78,9 @@ class TestTagC : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(TestTagC); CPPUNIT_TEST(testMp3); +#ifdef TAGLIB_WITH_VORBIS CPPUNIT_TEST(testStream); +#endif CPPUNIT_TEST_SUITE_END(); public: @@ -165,6 +168,7 @@ public: taglib_tag_free_strings(); } +#ifdef TAGLIB_WITH_VORBIS void testStream() { // Only fetch the beginning of a FLAC file @@ -233,6 +237,7 @@ public: taglib_tag_free_strings(); } +#endif }; CPPUNIT_TEST_SUITE_REGISTRATION(TestTagC);