mapnik-config: fix substitution of environment variables

Simply calling str(val) doesn't work, because if the value happens to
be a SCons.Util.CLVar, it may contain not just plain strings, but also
tuples appended by SCons.Environment.ParseFlags.

For example "-isysroot /foo" becomes CLVar: [("-isysroot", "/foo")]

CLVar.__str__ supports only string elements, nothing else.
This commit is contained in:
Mickey Rose 2020-01-30 15:15:14 +01:00
parent b22d5d2fac
commit 39202f5ac0

View file

@ -59,11 +59,11 @@ def write_config(env, template_filename, config_filename):
escape = env['ESCAPE'] escape = env['ESCAPE']
def subst(matchobj): def subst(matchobj):
key = matchobj.group(1) key = matchobj.group(1)
val = env.get(key) if key not in env:
if val is None:
return matchobj.group(0) return matchobj.group(0)
else: else:
return 'CONFIG_%s=%s' % (key, escape(str(val))) val = env.subst('$' + key)
return 'CONFIG_%s=%s' % (key, escape(val))
config = re.sub(r'^CONFIG_(\w+)=.*', subst, template, flags=re.M) config = re.sub(r'^CONFIG_(\w+)=.*', subst, template, flags=re.M)
config_file.write(config) config_file.write(config)
try: try: