13
0
livetrax/libs/taglib/wscript
Paul Davis 3ea7529c14 fix broken situation with respect to taglib on windows where we used to use symlinks to fix up taglib's insane header/directory structure
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.
2013-11-26 21:54:48 -05:00

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()