-# Sorted by their action and their place in the build timeline
-# These variables can have varying datatypes. For example, anything with
-# flagtype(v) == 'list' is inited as False, then set as a list of strings.
-flag_defaults = OrderedDict([
- ('disable', False),
- ('commit', None),
- ('subdir', None),
- ('submodules', False),
- ('init', ''),
- ('patch', []),
- ('gradle', False),
- ('maven', False),
- ('kivy', False),
- ('output', None),
- ('srclibs', []),
- ('oldsdkloc', False),
- ('encoding', None),
- ('forceversion', False),
- ('forcevercode', False),
- ('rm', []),
- ('extlibs', []),
- ('prebuild', ''),
- ('update', ['auto']),
- ('target', None),
- ('scanignore', []),
- ('scandelete', []),
- ('build', ''),
- ('buildjni', []),
- ('ndk', 'r10e'), # defaults to latest
- ('preassemble', []),
- ('gradleprops', []),
- ('antcommands', None),
- ('novcheck', False),
-])
+build_flags_order = [
+ 'disable',
+ 'commit',
+ 'subdir',
+ 'submodules',
+ 'init',
+ 'patch',
+ 'gradle',
+ 'maven',
+ 'kivy',
+ 'output',
+ 'srclibs',
+ 'oldsdkloc',
+ 'encoding',
+ 'forceversion',
+ 'forcevercode',
+ 'rm',
+ 'extlibs',
+ 'prebuild',
+ 'update',
+ 'target',
+ 'scanignore',
+ 'scandelete',
+ 'build',
+ 'buildjni',
+ 'ndk',
+ 'preassemble',
+ 'gradleprops',
+ 'antcommands',
+ 'novcheck',
+]
+
+
+build_flags = set(build_flags_order + ['version', 'vercode'])
+
+
+class Build():
+
+ def __init__(self):
+ self.disable = False
+ self.commit = None
+ self.subdir = None
+ self.submodules = False
+ self.init = ''
+ self.patch = []
+ self.gradle = False
+ self.maven = False
+ self.kivy = False
+ self.output = None
+ self.srclibs = []
+ self.oldsdkloc = False
+ self.encoding = None
+ self.forceversion = False
+ self.forcevercode = False
+ self.rm = []
+ self.extlibs = []
+ self.prebuild = ''
+ self.update = None
+ self.target = None
+ self.scanignore = []
+ self.scandelete = []
+ self.build = ''
+ self.buildjni = []
+ self.ndk = None
+ self.preassemble = []
+ self.gradleprops = []
+ self.antcommands = None
+ self.novcheck = False
+
+ def get_flag(self, f):
+ if f not in build_flags:
+ raise MetaDataException('Unrecognised build flag: ' + f)
+ return getattr(self, f)
+
+ def set_flag(self, f, v):
+ if f == 'versionName':
+ f = 'version'
+ if f == 'versionCode':
+ f = 'vercode'
+ if f not in build_flags:
+ raise MetaDataException('Unrecognised build flag: ' + f)
+ setattr(self, f, v)
+
+ def append_flag(self, f, v):
+ if f not in build_flags:
+ raise MetaDataException('Unrecognised build flag: ' + f)
+ if f not in self.__dict__:
+ self.__dict__[f] = [v]
+ else:
+ self.__dict__[f].append(v)
+
+ def method(self):
+ for f in ['maven', 'gradle', 'kivy']:
+ if self.get_flag(f):
+ return f
+ if build.output:
+ return 'raw'
+ return 'ant'
+
+ def ndk_path(self):
+ version = self.ndk
+ if not version:
+ version = 'r10e' # falls back to latest
+ paths = common.config['ndk_paths']
+ if version not in paths:
+ return ''
+ return paths[version]
+
+ def update_flags(self, d):
+ for f, v in d.iteritems():
+ self.set_flag(f, v)
+
+
+def flagtype(name):
+ if name in ['extlibs', 'srclibs', 'patch', 'rm', 'buildjni', 'preassemble',
+ 'update', 'scanignore', 'scandelete', 'gradle', 'antcommands',
+ 'gradleprops']:
+ return 'list'
+ if name in ['init', 'prebuild', 'build']:
+ return 'script'
+ if name in ['submodules', 'oldsdkloc', 'forceversion', 'forcevercode',
+ 'novcheck']:
+ return 'bool'
+ return 'string'