Example #1
0
    def fn(ctx, dependency_identifier, **kw):
        argsl = list(args)
        packages = args[::2]
        verchecks = args[1::2]
        sargs = []
        for i in range(0, len(packages)):
            if i < len(verchecks):
                sargs.append(packages[i] + ' ' + verchecks[i])
            else:
                sargs.append(packages[i])
        pkgc_args = ["--libs", "--cflags"]
        if ctx.dependency_satisfied('static-build'):
            pkgc_args += ["--static"]

        defaults = {
            'path': ctx.env.PKG_CONFIG,
            'package': " ".join(packages),
            'args': sargs + pkgc_args
        }
        opts = __merge_options__(dependency_identifier, defaults, kw_ext, kw)

        # Warning! Megahack incoming: when parsing flags in `parse_flags` waf
        # uses append_unique. This appends the flags only if they aren't
        # already present in the list. This causes breakage if one checks for
        # multiple pkg-config packages in a single call as stuff like -lm is
        # added only at its first occurrence.
        original_append_unique = ConfigSet.append_unique
        ConfigSet.append_unique = ConfigSet.append_value
        result = bool(ctx.check_cfg(**opts))
        ConfigSet.append_unique = original_append_unique

        if not result:
            defkey = DependencyInflector(dependency_identifier).define_key()
            ctx.undefine(defkey)
        return result
Example #2
0
def __get_features_string__(ctx):
    from inflectors import DependencyInflector
    stuff = []
    for dependency_identifier in ctx.satisfied_deps:
        defkey = DependencyInflector(dependency_identifier).define_key()
        if ctx.is_defined(defkey) and ctx.get_define(defkey) == "1":
            stuff.append(dependency_identifier)
    stuff.sort()
    return " ".join(stuff)
Example #3
0
 def fn(ctx, dependency_identifier):
     for header in headers:
         defaults = {'header_name': header, 'features': 'c cprogram'}
         options  = __merge_options__(dependency_identifier, defaults)
         if ctx.check(**options):
             undef_others(ctx, headers, header)
             defkey = DependencyInflector(dependency_identifier).define_key()
             ctx.define(defkey, 1)
             return True
     undef_others(ctx, headers, None)
     return False
Example #4
0
    def check(self):
        self.ctx.start_msg('Checking for {0}'.format(self.desc))

        try:
            self.check_group_disabled()
            self.check_disabled()
            self.check_any_dependencies()
            self.check_dependencies()
            self.check_negative_dependencies()
        except DependencyError:
            # No check was run, since the prerequisites of the dependency are
            # not satisfied. Make sure the define is 'undefined' so that we
            # get a `#define YYY 0` in `config.h`.
            def_key = DependencyInflector(self.identifier).define_key()
            self.ctx.undefine(def_key)
            self.fatal_if_needed()
            return

        self.check_autodetect_func()
Example #5
0
def __merge_options__(dependency_identifier, *args):
    options_accu = DependencyInflector(dependency_identifier).storage_dict()
    options_accu['mandatory'] = False
    [options_accu.update(arg) for arg in args if arg]
    return options_accu
Example #6
0
def dependencies_use(ctx):
    return [DependencyInflector(dep).storage_key() for \
                dep in ctx.env.satisfied_deps]
Example #7
0
def __merge_options__(dependency_identifier, *args):
    options_accu = DependencyInflector(dependency_identifier).storage_dict()
    options_accu['mandatory'] = False
    [options_accu.update(arg) for arg in args if arg]
    return options_accu
Example #8
0
def __define_options__(dependency_identifier):
    return DependencyInflector(dependency_identifier).define_dict()
Example #9
0
def check_stub(ctx, dependency_identifier):
    defkey = DependencyInflector(dependency_identifier).define_key()
    ctx.undefine(defkey)
    return False
Example #10
0
def check_true(ctx, dependency_identifier):
    defkey = DependencyInflector(dependency_identifier).define_key()
    ctx.define(defkey, 1)
    return True
Example #11
0
 def undef_others(ctx, headers, found):
     not_found_hs = set(headers) - set([found])
     for not_found_h in not_found_hs:
         defkey = DependencyInflector(not_found_h).define_key()
         ctx.undefine(defkey)