'Add all flags in other that aren\'t in self to self.
Return whether the spec changed.'

def constrain(self, other):

    if (other.spec and other.spec._concrete):
        for k in self:
            if (k not in other):
                raise UnsatisfiableCompilerFlagSpecError(self[k], '<absent>')
    changed = False
    for k in other:
        if ((k in self) and (not (set(self[k]) <= set(other[k])))):
            raise UnsatisfiableCompilerFlagSpecError('    '.join((f for f in self[k])), '    '.join((f for f in other[k])))
        elif (k not in self):
            self[k] = other[k]
            changed = True
    return changed
