import glob
import distutils
import distutils.spawn
-from waflib import Logs
+from waflib import Logs, Context
APPNAME = 'dcpomatic'
-VERSION = '2.3.5devel'
+VERSION = '2.5.6devel'
def options(opt):
opt.load('compiler_cxx')
'-D_FILE_OFFSET_BITS=64'])
if conf.options.enable_debug:
- conf.env.append_value('CXXFLAGS', ['-g', '-DDCPOMATIC_DEBUG'])
+ conf.env.append_value('CXXFLAGS', ['-g', '-DDCPOMATIC_DEBUG', '-fno-omit-frame-pointer'])
else:
conf.env.append_value('CXXFLAGS', '-O2')
# libicu
if conf.check_cfg(package='icu-i18n', args='--cflags --libs', uselib_store='ICU', mandatory=False) is None:
if conf.check_cfg(package='icu', args='--cflags --libs', uselib_store='ICU', mandatory=False) is None:
- Logs.pprint('RED', 'libicu not found')
+ conf.check_cxx(fragment="""
+ #include <unicode/ucsdet.h>
+ int main(void) {
+ UErrorCode status = U_ZERO_ERROR;
+ UCharsetDetector* detector = ucsdet_open (&status);
+ return 0; }\n
+ """,
+ mandatory=True,
+ msg='Checking for libicu',
+ okmsg='yes',
+ libpath=['/usr/local/lib', '/usr/lib', '/usr/lib/x86_64-linux-gnu'],
+ lib=['icuio', 'icui18n', 'icudata', 'icuuc'],
+ uselib_store='ICU')
# libsndfile
conf.check_cfg(package='sndfile', args='--cflags --libs', uselib_store='SNDFILE', mandatory=True)
# libdcp
if conf.options.static_dcp:
- conf.check_cfg(package='libdcp-1.0', atleast_version='1.2.4', args='--cflags', uselib_store='DCP', mandatory=True)
+ conf.check_cfg(package='libdcp-1.0', atleast_version='1.2.8', args='--cflags', uselib_store='DCP', mandatory=True)
conf.env.DEFINES_DCP = [f.replace('\\', '') for f in conf.env.DEFINES_DCP]
conf.env.STLIB_DCP = ['dcp-1.0', 'asdcp-libdcp-1.0', 'kumu-libdcp-1.0']
conf.env.LIB_DCP = ['glibmm-2.4', 'ssl', 'crypto', 'bz2', 'xslt']
else:
- conf.check_cfg(package='libdcp-1.0', atleast_version='1.2.4', args='--cflags --libs', uselib_store='DCP', mandatory=True)
+ conf.check_cfg(package='libdcp-1.0', atleast_version='1.2.8', args='--cflags --libs', uselib_store='DCP', mandatory=True)
conf.env.DEFINES_DCP = [f.replace('\\', '') for f in conf.env.DEFINES_DCP]
# libsub
if conf.options.static_sub:
- conf.check_cfg(package='libsub-1.0', atleast_version='1.1.5', args='--cflags', uselib_store='SUB', mandatory=True)
+ conf.check_cfg(package='libsub-1.0', atleast_version='1.1.8', args='--cflags', uselib_store='SUB', mandatory=True)
conf.env.DEFINES_SUB = [f.replace('\\', '') for f in conf.env.DEFINES_SUB]
conf.env.STLIB_SUB = ['sub-1.0']
else:
- conf.check_cfg(package='libsub-1.0', atleast_version='1.1.5', args='--cflags --libs', uselib_store='SUB', mandatory=True)
+ conf.check_cfg(package='libsub-1.0', atleast_version='1.1.8', args='--cflags --libs', uselib_store='SUB', mandatory=True)
conf.env.DEFINES_SUB = [f.replace('\\', '') for f in conf.env.DEFINES_SUB]
# libxml++
# FFmpeg
if conf.options.static_ffmpeg:
- names = ['avformat', 'avfilter', 'avcodec', 'avutil', 'swscale', 'swresample', 'postproc']
+ names = ['avformat', 'avfilter', 'avcodec', 'avutil', 'swscale', 'postproc']
for name in names:
static = subprocess.Popen(shlex.split('pkg-config --static --libs lib%s' % name), stdout=subprocess.PIPE).communicate()[0]
libs = []
conf.check_cfg(package='libavcodec', args='--cflags --libs', uselib_store='AVCODEC', mandatory=True)
conf.check_cfg(package='libavutil', args='--cflags --libs', uselib_store='AVUTIL', mandatory=True)
conf.check_cfg(package='libswscale', args='--cflags --libs', uselib_store='SWSCALE', mandatory=True)
- conf.check_cfg(package='libswresample', args='--cflags --libs', uselib_store='SWRESAMPLE', mandatory=True)
conf.check_cfg(package='libpostproc', args='--cflags --libs', uselib_store='POSTPROC', mandatory=True)
# Boost
lib=['boost_regex%s' % boost_lib_suffix],
uselib_store='BOOST_REGEX')
+ # libxml++ requires glibmm and versions of glibmm 2.45.31 and later
+ # must be built with -std=c++11 as they use c++11
+ # features and c++11 is not (yet) the default in gcc.
+ glibmm_version = conf.cmd_and_log(['pkg-config', '--modversion', 'glibmm-2.4'], output=Context.STDOUT, quiet=Context.BOTH)
+ s = glibmm_version.split('.')
+ v = (int(s[0]) << 16) | (int(s[1]) << 8) | int(s[2])
+ if v >= 0x022D1F:
+ conf.env.append_value('CXXFLAGS', '-std=c++11')
+
# Other stuff
conf.find_program('msgfmt', var='MSGFMT')
create_version_cc(VERSION, bld.env.CXXFLAGS)
bld.recurse('src')
+ bld.recurse('graphics')
+
if not bld.env.DISABLE_TESTS:
bld.recurse('test')
if bld.env.TARGET_WINDOWS:
if bld.env.TARGET_OSX:
bld.recurse('platform/osx')
- for r in ['22x22', '32x32', '48x48', '64x64', '128x128']:
- bld.install_files('${PREFIX}/share/icons/hicolor/%s/apps' % r, 'graphics/%s/dcpomatic2.png' % r)
-
if not bld.env.TARGET_WINDOWS:
- bld.install_files('${PREFIX}/share/dcpomatic2', 'graphics/taskbar_icon.png')
- bld.install_files('${PREFIX}/share/dcpomatic2', 'graphics/splash.png')
- bld.install_files('${PREFIX}/share/dcpomatic2', 'LiberationSans-Regular.ttf')
+ bld.install_files('${PREFIX}/share/dcpomatic2', 'fonts/LiberationSans-Regular.ttf')
+ bld.install_files('${PREFIX}/share/dcpomatic2', 'fonts/LiberationSans-Italic.ttf')
+ bld.install_files('${PREFIX}/share/dcpomatic2', 'fonts/LiberationSans-Bold.ttf')
bld.add_post_fun(post)
bld.recurse('src')
def tags(bld):
- os.system('etags src/lib/*.cc src/lib/*.h src/wx/*.cc src/wx/*.h src/tools/*.cc src/tools/*.h')
-
-def zanata_pull(bld):
- os.system('zanata-cli -B -q pull -t .')
- for f in glob.glob('src/lib/po/*.po'):
- l = os.path.basename(f)
- os.rename('dcpomatic_%s' % l, 'src/tools/po/%s' % l)
- os.rename('libdcpomatic_%s' % l, 'src/lib/po/%s' % l)
- os.rename('libdcpomatic-wx_%s' % l, 'src/wx/po/%s' % l)
+ os.system('etags src/lib/*.cc src/lib/*.h src/wx/*.cc src/wx/*.h src/tools/*.cc')
def cppcheck(bld):
os.system('cppcheck --enable=all --quiet .')