Skip to content
  • Nirbheek Chauhan's avatar
    cerbero: Rework environment modification in recipes · 7462b065
    Nirbheek Chauhan authored
    
    
    Environment variable modification in a recipe used to be done with:
    
      self.append_env, self.prepend_env, or self.new_env
    
    All of these were dictionaries of {string:string} mappings, which
    means that if a recipe wanted to, say, append to `CFLAGS` from
    multiple places within the recipe (f.ex., `glib.recipe`), you had to
    carefully juggle `=` and `+=` in recipes, which was error-prone
    (f.ex., `gstreamer-1.0.recipe` `variants.nodebug` was broken).
    
    Now that we also conditionally use `self.append_env['CFLAGS']` in
    `cerbero/build/build.py` for bitcode support with make-based build
    systems, it's impossible to get this right in recipes. This was
    causing the cross-ios-universal builds to fail on recipes that
    directly set `self.append_env['CFLAGS'] = 'foo'` such as pixman.
    
    The dictionaries have now been replaced with the following functions:
    
      self.append_env(varname, value1, value2, ..., sep=separator)
      self.prepend_env(varname, value1, value2, ..., sep=separator)
      self.set_env(varname, value1, value2, ..., sep=separator)
    
    The separator is used to join value1, value2, etc and also while
    appending/prepending to the value in the env. It is optional, and
    defaults to ` ` (space).
    
    Most often the usage is very simple to translate:
    
      self.append_env['CFLAGS'] = ' -funroll-loops '
      =>
      self.append_env('CFLAGS', '-funroll-loops')
    
    If values are omitted with `self.set_env()`, the variable is unset:
    
      self.new_env['MAKEFLAGS'] = None
      =>
      self.set_env('MAKEFLAGS')
    
    An important intended feature is that multiple calls to these
    functions all take effect sequentially at build time for each build
    step. So, you can call append and prepend multiple times on the same
    variable, and the values will be appended and prepended in that order
    to the value at build time.
    
    Note that if you call `self.set_env()` on a variable, the variable will,
    of course, be set to that value and previous append/prepend
    declarations will be overriden.
    
    Reviewed-by: default avatarJan Schmidt <jan@centricular.com>
    7462b065