Have all multi-value build flags work similarly

Semicolons are still supported, but commas are now the better standard.
This commit is contained in:
Daniel Martí 2014-02-12 11:13:20 +01:00
parent 5125b52e39
commit 24c9232398
3 changed files with 37 additions and 15 deletions

View file

@ -815,7 +815,7 @@ def getsrclib(spec, srclib_dir, srclibpaths=[], subdir=None,
if srclib["Srclibs"]:
n=1
for lib in srclib["Srclibs"].split(','):
for lib in srclib["Srclibs"]:
s_tuple = None
for t in srclibpaths:
if t[0] == lib:
@ -894,7 +894,7 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
# Apply patches if any
if 'patch' in build:
for patch in build['patch'].split(';'):
for patch in build['patch']:
patch = patch.strip()
logging.info("Applying " + patch)
patch_path = os.path.join('metadata', app['id'], patch)
@ -906,7 +906,7 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
srclibpaths = []
if 'srclibs' in build:
logging.info("Collecting source libraries")
for lib in build['srclibs'].split(';'):
for lib in build['srclibs']:
srclibpaths.append(getsrclib(lib, srclib_dir, srclibpaths,
preponly=onserver))
@ -1005,7 +1005,7 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
# Delete unwanted files
if 'rm' in build:
for part in build['rm'].split(';'):
for part in build['rm']:
dest = os.path.join(build_dir, part.strip())
rdest = os.path.abspath(dest)
logging.info("Removing {0}".format(rdest))
@ -1030,7 +1030,7 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
libsdir = os.path.join(root_dir, 'libs')
if not os.path.exists(libsdir):
os.mkdir(libsdir)
for lib in build['extlibs'].split(';'):
for lib in build['extlibs']:
lib = lib.strip()
logging.info("...installing extlib {0}".format(lib))
libf = os.path.basename(lib)
@ -1119,7 +1119,7 @@ def scan_source(build_dir, root_dir, thisbuild):
paths = []
if field not in thisbuild:
return paths
for p in thisbuild[field].split(';'):
for p in thisbuild[field]:
p = p.strip()
if p == '.':
p = '/'

View file

@ -381,7 +381,6 @@ def parse_srclib(metafile, **kw):
thisinfo['Subdir'] = None
thisinfo['Prepare'] = None
thisinfo['Srclibs'] = None
thisinfo['Update Project'] = None
if metafile is None:
return thisinfo
@ -451,6 +450,13 @@ def metafieldtype(name):
return 'unknown'
return 'string'
def flagtype(name):
if name in ['extlibs', 'srclibs', 'patch', 'rm', 'scanignore', 'scandelete']:
return 'list'
if name in ['init', 'prebuild', 'build']:
return 'script'
return 'string'
# Parse metadata for a single application.
#
# 'metafile' - the filename to read. The package id for the application comes
@ -507,7 +513,17 @@ def parse_metadata(metafile):
if pk not in ordered_flags:
raise MetaDataException("Unrecognised build flag at {0} in {1}".
format(p, metafile.name))
thisbuild[pk] = pv
t = flagtype(pk)
if t == 'list':
# Port legacy ';' separators
thisbuild[pk] = pv.replace(';',',').split(',')
elif t == 'string':
thisbuild[pk] = pv
elif t == 'script':
thisbuild[pk] = pv
else:
raise MetaDataException("Unrecognised build flag type '%s' at %s in %s" % (
t, p, metafile.name))
return thisbuild
@ -732,9 +748,15 @@ def write_metadata(dest, app):
if not value:
return
value = 'yes'
t = flagtype(key)
logging.debug("...writing {0} : {1}".format(key, value))
outline = ' %s=' % key
outline += '&& \\\n '.join([s.lstrip() for s in value.split('&& ')])
if t == 'string':
outline += value
elif t == 'script':
outline += '&& \\\n '.join([s.lstrip() for s in value.split('&& ')])
elif t == 'list':
outline += ','.join(value) if type(value) == list else value
outline += '\n'
mf.write(outline)