Skip to content

Commit ee1931b

Browse files
authored
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.
1 parent 648f5e5 commit ee1931b

20 files changed

Lines changed: 1120 additions & 458 deletions

CMakeLists.txt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,16 @@ set(TAGLIB_SOVERSION_PATCH 2)
9797

9898
include(ConfigureChecks.cmake)
9999

100+
option(WITH_APE "Build with APE, MPC, WavPack" ON)
101+
option(WITH_ASF "Build with ASF" ON)
102+
option(WITH_DSF "Build with DSF" ON)
103+
option(WITH_MOD "Build with Tracker modules" ON)
104+
option(WITH_MP4 "Build with MP4" ON)
105+
option(WITH_RIFF "Build with AIFF, RIFF, WAV" ON)
106+
option(WITH_SHORTEN "Build with Shorten" ON)
107+
option(WITH_TRUEAUDIO "Build with TrueAudio" ON)
108+
option(WITH_VORBIS "Build with Vorbis, FLAC, Ogg, Opus" ON)
109+
100110
# Determine whether zlib is installed.
101111
option(WITH_ZLIB "Build with ZLIB" ON)
102112

@@ -178,6 +188,36 @@ else()
178188
endif()
179189
endif()
180190

191+
if(WITH_APE)
192+
set(TAGLIB_WITH_APE TRUE)
193+
endif()
194+
if(WITH_ASF)
195+
set(TAGLIB_WITH_ASF TRUE)
196+
endif()
197+
if(WITH_DSF)
198+
set(TAGLIB_WITH_DSF TRUE)
199+
endif()
200+
if(WITH_MOD)
201+
set(TAGLIB_WITH_MOD TRUE)
202+
endif()
203+
if(WITH_MP4)
204+
set(TAGLIB_WITH_MP4 TRUE)
205+
endif()
206+
if(WITH_RIFF)
207+
set(TAGLIB_WITH_RIFF TRUE)
208+
endif()
209+
if(WITH_SHORTEN)
210+
set(TAGLIB_WITH_SHORTEN TRUE)
211+
endif()
212+
if(WITH_TRUEAUDIO)
213+
set(TAGLIB_WITH_TRUEAUDIO TRUE)
214+
endif()
215+
if(WITH_VORBIS)
216+
set(TAGLIB_WITH_VORBIS TRUE)
217+
endif()
218+
219+
configure_file(taglib/taglib_config.h.cmake "${CMAKE_CURRENT_BINARY_DIR}/taglib_config.h")
220+
181221
add_subdirectory(taglib)
182222

183223
if(BUILD_BINDINGS)

INSTALL.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,30 @@ for both versions. The installed files will then include bin/taglib-2-config,
4949
include/taglib-2, cmake/taglib-2, pkgconfig/taglib-2.pc,
5050
pkgconfig/taglib_c-2.pc and the libraries have a suffix "-2".
5151

52+
### Compile Time Configuration of Supported Formats
53+
54+
To reduce the size of the library, it is possible to switch off supported file
55+
formats. By default, all formats are enabled. Support for MPEG files (MP3, AAC)
56+
and ID3 tags cannot be disabled. The following CMake options are available:
57+
58+
| Option | Description |
59+
|-------------------------|----------------------------------------------------|
60+
| `WITH_APE` | Build with APE, MPC, WavPack (default ON) |
61+
| `WITH_ASF` | Build with ASF (default ON) |
62+
| `WITH_DSF` | Build with DSF (default ON) |
63+
| `WITH_MOD` | Build with Tracker modules (default ON) |
64+
| `WITH_MP4` | Build with MP4 (default ON) |
65+
| `WITH_RIFF` | Build with AIFF, RIFF, WAV (default ON) |
66+
| `WITH_SHORTEN` | Build with Shorten (default ON) |
67+
| `WITH_TRUEAUDIO` | Build with TrueAudio (default ON) |
68+
| `WITH_VORBIS` | Build with Vorbis, FLAC, Ogg, Opus (default ON) |
69+
70+
Note that disabling formats will remove exported symbols from the library and
71+
thus break binary compatibility. These options should therefore only be used
72+
if the library is built specifically for a certain project. The public header
73+
files still contain the full API, if you use TagLib with a reduced set of
74+
formats, you can include taglib_config.h and use its definitions (prefixed with
75+
`TAGLIB_`, e.g. `TAGLIB_WITH_APE`), as it is done in examples/framelist.cpp.
5276

5377
## Dependencies
5478

bindings/c/CMakeLists.txt

Lines changed: 60 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,69 @@
1-
include_directories(
1+
set(tag_c_HDR_DIRS
22
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib
33
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/toolkit
4-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/asf
54
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpeg
6-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg
7-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/vorbis
8-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/flac
9-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/flac
10-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpc
11-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mp4
125
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpeg/id3v2
136
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpeg/id3v2/frames
14-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/wavpack
15-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/speex
16-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/trueaudio
17-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff
18-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff/aiff
19-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff/wav
20-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ape
21-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/it
22-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mod
23-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/s3m
24-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/xm
25-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/opus
26-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/dsf
27-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/dsdiff
28-
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/shorten
297
)
8+
if(WITH_ASF)
9+
set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS}
10+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/asf
11+
)
12+
endif()
13+
if(WITH_VORBIS)
14+
set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS}
15+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg
16+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/vorbis
17+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/flac
18+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/flac
19+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/speex
20+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ogg/opus
21+
)
22+
endif()
23+
if(WITH_APE)
24+
set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS}
25+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mpc
26+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/wavpack
27+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/ape
28+
)
29+
endif()
30+
if(WITH_MP4)
31+
set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS}
32+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mp4
33+
)
34+
endif()
35+
if(WITH_TRUEAUDIO)
36+
set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS}
37+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/trueaudio
38+
)
39+
endif()
40+
if(WITH_RIFF)
41+
set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS}
42+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff
43+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff/aiff
44+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/riff/wav
45+
)
46+
endif()
47+
if(WITH_MOD)
48+
set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS}
49+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/it
50+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/mod
51+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/s3m
52+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/xm
53+
)
54+
endif()
55+
if(WITH_DSF)
56+
set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS}
57+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/dsf
58+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/dsdiff
59+
)
60+
endif()
61+
if(WITH_SHORTEN)
62+
set(tag_c_HDR_DIRS ${tag_c_HDR_DIRS}
63+
${CMAKE_CURRENT_SOURCE_DIR}/../../taglib/shorten
64+
)
65+
endif()
66+
include_directories(${tag_c_HDR_DIRS})
3067

3168
set(tag_c_HDRS tag_c.h)
3269

bindings/c/tag_c.cpp

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,35 +29,57 @@
2929
#ifdef HAVE_CONFIG_H
3030
# include "config.h"
3131
#endif
32+
33+
#include "taglib_config.h"
3234
#include "tstringlist.h"
3335
#include "tbytevectorstream.h"
3436
#include "tiostream.h"
3537
#include "tfile.h"
3638
#include "tpropertymap.h"
3739
#include "fileref.h"
40+
#include "mpegfile.h"
41+
#include "tag.h"
42+
#include "id3v2framefactory.h"
43+
#ifdef TAGLIB_WITH_ASF
3844
#include "asffile.h"
45+
#endif
46+
#ifdef TAGLIB_WITH_VORBIS
3947
#include "vorbisfile.h"
40-
#include "mpegfile.h"
4148
#include "flacfile.h"
4249
#include "oggflacfile.h"
50+
#include "speexfile.h"
51+
#include "opusfile.h"
52+
#endif
53+
#ifdef TAGLIB_WITH_APE
4354
#include "mpcfile.h"
4455
#include "wavpackfile.h"
45-
#include "speexfile.h"
56+
#endif
57+
#ifdef TAGLIB_WITH_TRUEAUDIO
4658
#include "trueaudiofile.h"
59+
#endif
60+
#ifdef TAGLIB_WITH_MP4
4761
#include "mp4file.h"
62+
#endif
63+
#ifdef TAGLIB_WITH_RIFF
4864
#include "aifffile.h"
4965
#include "wavfile.h"
66+
#endif
67+
#ifdef TAGLIB_WITH_APE
5068
#include "apefile.h"
69+
#endif
70+
#ifdef TAGLIB_WITH_MOD
5171
#include "itfile.h"
5272
#include "modfile.h"
5373
#include "s3mfile.h"
5474
#include "xmfile.h"
55-
#include "opusfile.h"
75+
#endif
76+
#ifdef TAGLIB_WITH_DSF
5677
#include "dsffile.h"
5778
#include "dsdifffile.h"
79+
#endif
80+
#ifdef TAGLIB_WITH_SHORTEN
5881
#include "shortenfile.h"
59-
#include "tag.h"
60-
#include "id3v2framefactory.h"
82+
#endif
6183

6284
using namespace TagLib;
6385

@@ -134,42 +156,58 @@ TagLib_File *taglib_file_new_type(const char *filename, TagLib_File_Type type)
134156
case TagLib_File_MPEG:
135157
file = new MPEG::File(filename);
136158
break;
159+
#ifdef TAGLIB_WITH_VORBIS
137160
case TagLib_File_OggVorbis:
138161
file = new Ogg::Vorbis::File(filename);
139162
break;
140163
case TagLib_File_FLAC:
141164
file = new FLAC::File(filename);
142165
break;
143-
case TagLib_File_MPC:
144-
file = new MPC::File(filename);
145-
break;
146166
case TagLib_File_OggFlac:
147167
file = new Ogg::FLAC::File(filename);
148168
break;
169+
case TagLib_File_Speex:
170+
file = new Ogg::Speex::File(filename);
171+
break;
172+
case TagLib_File_Opus:
173+
file = new Ogg::Opus::File(filename);
174+
break;
175+
#endif
176+
#ifdef TAGLIB_WITH_APE
177+
case TagLib_File_MPC:
178+
file = new MPC::File(filename);
179+
break;
149180
case TagLib_File_WavPack:
150181
file = new WavPack::File(filename);
151182
break;
152-
case TagLib_File_Speex:
153-
file = new Ogg::Speex::File(filename);
183+
case TagLib_File_APE:
184+
file = new APE::File(filename);
154185
break;
186+
#endif
187+
#ifdef TAGLIB_WITH_TRUEAUDIO
155188
case TagLib_File_TrueAudio:
156189
file = new TrueAudio::File(filename);
157190
break;
191+
#endif
192+
#ifdef TAGLIB_WITH_MP4
158193
case TagLib_File_MP4:
159194
file = new MP4::File(filename);
160195
break;
196+
#endif
197+
#ifdef TAGLIB_WITH_ASF
161198
case TagLib_File_ASF:
162199
file = new ASF::File(filename);
163200
break;
201+
#endif
202+
#ifdef TAGLIB_WITH_RIFF
164203
case TagLib_File_AIFF:
165204
file = new RIFF::AIFF::File(filename);
166205
break;
167206
case TagLib_File_WAV:
168207
file = new RIFF::WAV::File(filename);
169208
break;
170-
case TagLib_File_APE:
171-
file = new APE::File(filename);
172-
break;
209+
#endif
210+
#ifdef TAGLIB_WITH_MOD
173211
case TagLib_File_IT:
174212
file = new IT::File(filename);
175213
break;
@@ -182,18 +220,20 @@ TagLib_File *taglib_file_new_type(const char *filename, TagLib_File_Type type)
182220
case TagLib_File_XM:
183221
file = new XM::File(filename);
184222
break;
185-
case TagLib_File_Opus:
186-
file = new Ogg::Opus::File(filename);
187-
break;
223+
#endif
224+
#ifdef TAGLIB_WITH_DSF
188225
case TagLib_File_DSF:
189226
file = new DSF::File(filename);
190227
break;
191228
case TagLib_File_DSDIFF:
192229
file = new DSDIFF::File(filename);
193230
break;
231+
#endif
232+
#ifdef TAGLIB_WITH_SHORTEN
194233
case TagLib_File_SHORTEN:
195234
file = new Shorten::File(filename);
196235
break;
236+
#endif
197237
default:
198238
break;
199239
}

examples/framelist.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,17 @@
2525
#include <iostream>
2626
#include <cstdlib>
2727

28+
#include "taglib_config.h"
2829
#include "tbytevector.h"
2930
#include "mpegfile.h"
3031
#include "id3v2tag.h"
3132
#include "id3v2frame.h"
3233
#include "id3v2header.h"
3334
#include "commentsframe.h"
3435
#include "id3v1tag.h"
36+
#ifdef TAGLIB_WITH_APE
3537
#include "apetag.h"
38+
#endif
3639

3740
using namespace TagLib;
3841

@@ -90,6 +93,7 @@ int main(int argc, char *argv[])
9093
else
9194
std::cout << "file does not have a valid id3v1 tag" << std::endl;
9295

96+
#ifdef TAGLIB_WITH_APE
9397
APE::Tag *ape = f.APETag();
9498

9599
std::cout << std::endl << "APE" << std::endl;
@@ -106,6 +110,7 @@ int main(int argc, char *argv[])
106110
}
107111
else
108112
std::cout << "file does not have a valid APE tag" << std::endl;
113+
#endif
109114

110115
std::cout << std::endl;
111116
}

0 commit comments

Comments
 (0)