import glob
import distutils
import distutils.spawn
+try:
+ # python 2
+ from urllib import urlencode
+except ImportError:
+ # python 3
+ from urllib.parse import urlencode
from waflib import Logs, Context
APPNAME = 'dcpomatic'
-VERSION = '2.11.53devel'
+
+this_version = subprocess.Popen(shlex.split('git tag -l --points-at HEAD'), stdout=subprocess.PIPE).communicate()[0]
+last_version = subprocess.Popen(shlex.split('git describe --tags --abbrev=0'), stdout=subprocess.PIPE).communicate()[0]
+
+if this_version == '':
+ VERSION = '%sdevel' % last_version[1:].strip()
+else:
+ VERSION = this_version[1:].strip()
def options(opt):
opt.load('compiler_cxx')
opt.add_option('--static-curl', action='store_true', default=False, help='link statically to libcurl')
opt.add_option('--workaround-gssapi', action='store_true', default=False, help='link to gssapi_krb5')
opt.add_option('--force-cpp11', action='store_true', default=False, help='force use of C++11')
+ opt.add_option('--variant', help='build variant', choices=['swaroop'])
def configure(conf):
conf.load('compiler_cxx')
+ conf.load('clang_compilation_database', tooldir=['waf-tools'])
if conf.options.target_windows:
conf.load('winres')
'-msse',
'-fno-strict-aliasing',
'-Wall',
- '-Wno-attributes',
+ '-Wcast-align',
'-Wextra',
+ '-Wwrite-strings',
# Remove auto_ptr warnings from libxml++-2.6
'-Wno-deprecated-declarations',
+ '-Wno-ignored-qualifiers',
'-D_FILE_OFFSET_BITS=64'])
if conf.options.force_cpp11:
else:
conf.env.append_value('CXXFLAGS', '-O2')
+ if conf.options.variant is not None:
+ conf.env.VARIANT = conf.options.variant
+ conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_VARIANT_%s' % conf.options.variant.upper())
+
#
# Windows/Linux/OS X specific
#
conf.env.append_value('CXXFLAGS', '-DLINUX_LOCALE_PREFIX="%s/share/locale"' % conf.env['INSTALL_PREFIX'])
conf.env.append_value('CXXFLAGS', '-DLINUX_SHARE_PREFIX="%s/share/dcpomatic2"' % conf.env['INSTALL_PREFIX'])
conf.env.append_value('CXXFLAGS', '-DDCPOMATIC_LINUX')
+ conf.env.append_value('CXXFLAGS', ['-Wlogical-op'])
if not conf.env.DISABLE_GUI:
conf.check_cfg(package='gtk+-2.0', args='--cflags --libs', uselib_store='GTK', mandatory=True)
# libcxml
if conf.options.static_cxml:
- conf.check_cfg(package='libcxml', atleast_version='0.15.1', args='--cflags', uselib_store='CXML', mandatory=True)
+ conf.check_cfg(package='libcxml', atleast_version='0.15.5', args='--cflags', uselib_store='CXML', mandatory=True)
conf.env.STLIB_CXML = ['cxml']
else:
- conf.check_cfg(package='libcxml', atleast_version='0.15.1', args='--cflags --libs', uselib_store='CXML', mandatory=True)
+ conf.check_cfg(package='libcxml', atleast_version='0.15.5', args='--cflags --libs', uselib_store='CXML', mandatory=True)
# libssh
if conf.options.static_ssh:
# libdcp
if conf.options.static_dcp:
- conf.check_cfg(package='libdcp-1.0', atleast_version='1.4.1', args='--cflags', uselib_store='DCP', mandatory=True)
+ conf.check_cfg(package='libdcp-1.0', atleast_version='1.5.1', 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-cth', 'kumu-cth', 'openjp2']
conf.env.LIB_DCP = ['glibmm-2.4', 'ssl', 'crypto', 'bz2', 'xslt']
else:
- conf.check_cfg(package='libdcp-1.0', atleast_version='1.4.1', args='--cflags --libs', uselib_store='DCP', mandatory=True)
+ conf.check_cfg(package='libdcp-1.0', atleast_version='1.5.1', 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.2.1', args='--cflags', uselib_store='SUB', mandatory=True)
+ conf.check_cfg(package='libsub-1.0', atleast_version='1.3.0', 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.2.1', args='--cflags --libs', uselib_store='SUB', mandatory=True)
+ conf.check_cfg(package='libsub-1.0', atleast_version='1.3.0', args='--cflags --libs', uselib_store='SUB', mandatory=True)
conf.env.DEFINES_SUB = [f.replace('\\', '') for f in conf.env.DEFINES_SUB]
# libxml++
# Other stuff
conf.find_program('msgfmt', var='MSGFMT')
+ conf.check(header_name='valgrind/memcheck.h', mandatory=False)
datadir = conf.env.DATADIR
if not datadir:
Logs.pprint('YELLOW', '')
-def download_supporters():
- os.system('curl https://dcpomatic.com/supporters.cc > build/supporters.cc')
+def download_supporters(can_fail):
+ last_date = subprocess.Popen(shlex.split('git log -1 --format=%%ai %s' % last_version), stdout=subprocess.PIPE).communicate()[0]
+ r = os.system('curl -s -f https://dcpomatic.com/supporters.cc?%s > src/wx/supporters.cc' % urlencode({"until": last_date.strip()}))
+ if (r >> 8) == 0:
+ r = os.system('curl -s -f https://dcpomatic.com/subscribers.cc?%s > src/wx/subscribers.cc' % urlencode({"until": last_date.strip()}))
+ if (r >> 8) != 0 and can_fail:
+ raise Exception("Could not download supporters lists")
def build(bld):
create_version_cc(VERSION, bld.env.CXXFLAGS)
- download_supporters()
+ download_supporters(not bld.env.DEBUG)
bld.recurse('src')
bld.recurse('graphics')
ctx.excl = """
TODO core *~ src/wx/*~ src/lib/*~ builds/*~ doc/manual/*~ src/tools/*~ *.pyc .waf* build .git
deps alignment hacks sync *.tar.bz2 *.exe .lock* *build-windows doc/manual/pdf doc/manual/html
- GRSYMS GRTAGS GSYMS GTAGS
+ GRSYMS GRTAGS GSYMS GTAGS compile_commands.json
"""
def create_version_cc(version, cxx_flags):