Paul Davis
3ea7529c14
Symlinks don't work correctly with git on windows, so instead we now copy the required "public" headers into the build tree as part of the build. Works on Linux.
155 lines
5.3 KiB
Python
155 lines
5.3 KiB
Python
#!/usr/bin/env python
|
|
from waflib.extras import autowaf as autowaf
|
|
import glob
|
|
import os
|
|
|
|
# Version of this package (even if built as a child)
|
|
LIBTAGLIB_VERSION = '0.0.0'
|
|
|
|
# Library version (UNIX style major, minor, micro)
|
|
# major increment <=> incompatible changes
|
|
# minor increment <=> compatible changes (additions)
|
|
# micro increment <=> no interface changes
|
|
LIBTAGLIB_LIB_VERSION = '0.0.0'
|
|
|
|
# Variables for 'waf dist'
|
|
APPNAME = 'libtaglib'
|
|
VERSION = LIBTAGLIB_VERSION
|
|
|
|
# Mandatory variables
|
|
top = '.'
|
|
out = 'build'
|
|
|
|
def options(opt):
|
|
autowaf.set_options(opt)
|
|
|
|
def configure(conf):
|
|
if conf.is_defined('USE_EXTERNAL_LIBS'):
|
|
autowaf.check_pkg(conf, 'taglib', uselib_store='TAGLIB', atleast_version="1.4", mandatory=True)
|
|
else:
|
|
conf.load('compiler_cxx')
|
|
autowaf.configure(conf)
|
|
|
|
def build(bld):
|
|
if bld.is_defined('USE_EXTERNAL_LIBS'):
|
|
return
|
|
|
|
# the story: taglib distributes its headers all over the place then copies them
|
|
# into place during an install. but we're not planning to do an install. so this
|
|
# doesn't work when code does #include <taglib/foo.h>.
|
|
#
|
|
# one approach is to store symlinks in the repository. but this breaks on windows
|
|
# where symlink support and git are not very well developed (if at all)
|
|
#
|
|
# the approach here is to copy the header files as part of the build step, if necessary
|
|
|
|
headers = [
|
|
'./ape/apefooter.h',
|
|
'./ape/apeitem.h',
|
|
'./ape/apetag.h',
|
|
'./mpeg/id3v2/frames/attachedpictureframe.h',
|
|
'./mpeg/id3v2/frames/commentsframe.h',
|
|
'./flac/flacfile.h',
|
|
'./flac/flacproperties.h',
|
|
'./mpeg/id3v2/frames/generalencapsulatedobjectframe.h',
|
|
'./mpeg/id3v1/id3v1genres.h',
|
|
'./mpeg/id3v1/id3v1tag.h',
|
|
'./mpeg/id3v2/id3v2extendedheader.h',
|
|
'./mpeg/id3v2/id3v2footer.h',
|
|
'./mpeg/id3v2/id3v2framefactory.h',
|
|
'./mpeg/id3v2/id3v2frame.h',
|
|
'./mpeg/id3v2/id3v2header.h',
|
|
'./mpeg/id3v2/id3v2synchdata.h',
|
|
'./mpeg/id3v2/id3v2tag.h',
|
|
'./mpc/mpcfile.h',
|
|
'./mpc/mpcproperties.h',
|
|
'./mpeg/mpegfile.h',
|
|
'./mpeg/mpegheader.h',
|
|
'./mpeg/mpegproperties.h',
|
|
'./ogg/oggfile.h',
|
|
'./ogg/flac/oggflacfile.h',
|
|
'./ogg/oggpage.h',
|
|
'./ogg/oggpageheader.h',
|
|
'./mpeg/id3v2/frames/relativevolumeframe.h',
|
|
'./ogg/speex/speexfile.h',
|
|
'./ogg/speex/speexproperties.h',
|
|
'./toolkit/taglib.h',
|
|
'./toolkit/tbytevector.h',
|
|
'./toolkit/tbytevectorlist.h',
|
|
'./toolkit/tdebug.h',
|
|
'./mpeg/id3v2/frames/textidentificationframe.h',
|
|
'./toolkit/tfile.h',
|
|
'./toolkit/tlist.h',
|
|
'toolkit/tlist.tcc',
|
|
'./toolkit/tmap.h',
|
|
'toolkit/tmap.tcc',
|
|
'./trueaudio/trueaudiofile.h',
|
|
'./trueaudio/trueaudioproperties.h',
|
|
'./toolkit/tstring.h',
|
|
'./toolkit/tstringlist.h',
|
|
'./toolkit/unicode.h',
|
|
'./mpeg/id3v2/frames/uniquefileidentifierframe.h',
|
|
'./mpeg/id3v2/frames/unknownframe.h',
|
|
'./mpeg/id3v2/frames/unsynchronizedlyricsframe.h',
|
|
'./mpeg/id3v2/frames/urllinkframe.h',
|
|
'./ogg/vorbis/vorbisfile.h',
|
|
'./ogg/vorbis/vorbisproperties.h',
|
|
'./wavpack/wavpackfile.h',
|
|
'./wavpack/wavpackproperties.h',
|
|
'./mpeg/xingheader.h',
|
|
'./ogg/xiphcomment.h',
|
|
]
|
|
|
|
for h in headers:
|
|
tgt = bld.path.get_bld().make_node (os.path.join ('taglib', os.path.basename (h)))
|
|
if not os.path.exists (tgt.bldpath()):
|
|
bld (rule = "cp ${SRC} ${TGT}",
|
|
source = bld.path.make_node (os.path.join ('taglib', h)),
|
|
target = tgt)
|
|
|
|
# Library
|
|
obj = bld(features = 'cxx cxxshlib')
|
|
sources = bld.path.ant_glob('taglib/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/flac/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/mpc/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/mpeg/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/mpeg/id3v1/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/mpeg/id3v2/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/mpeg/id3v2/frames/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/ogg/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/ogg/vorbis/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/ogg/speex/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/ogg/flac/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/trueaudio/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/wavpack/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/ape/*.cpp')
|
|
sources += bld.path.ant_glob('taglib/toolkit/*.cpp')
|
|
obj.source = sources
|
|
|
|
include_dirs = '''
|
|
taglib
|
|
taglib/toolkit
|
|
taglib/flac
|
|
taglib/ape
|
|
taglib/mpc
|
|
taglib/mpeg
|
|
taglib/mpeg/id3v1
|
|
taglib/mpeg/id3v2
|
|
taglib/wavpack
|
|
taglib/trueaudio
|
|
taglib/ogg
|
|
taglib/ogg/vorbis
|
|
taglib/ogg/speex
|
|
taglib/ogg/flac
|
|
'''.split()
|
|
obj.export_includes = ['.', 'taglib' ]
|
|
obj.includes = include_dirs
|
|
obj.defines = ['MAKE_TAGLIB_LIB']
|
|
obj.name = 'libtaglib'
|
|
obj.target = 'taglib'
|
|
obj.vnum = LIBTAGLIB_LIB_VERSION
|
|
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
|
|
|
|
def shutdown():
|
|
autowaf.shutdown()
|