Esempio n. 1
0
def abi_check_task(self):
    """check if the ABI has changed"""
    abi_gen = self.ABI_GEN

    libpath = self.inputs[0].abspath(self.env)
    libname = os.path.basename(libpath)

    sigs = Utils.cmd_output([abi_gen, libpath])
    parsed_sigs = parse_sigs(sigs, self.ABI_MATCH)

    sig_file = self.ABI_FILE

    old_sigs = samba_utils.load_file(sig_file)
    if old_sigs is None or Options.options.ABI_UPDATE:
        if not save_sigs(sig_file, parsed_sigs):
            raise Utils.WafError('Failed to save ABI file "%s"' % sig_file)
        Logs.warn("Generated ABI signatures %s" % sig_file)
        return

    parsed_old_sigs = parse_sigs(old_sigs, self.ABI_MATCH)

    # check all old sigs
    got_error = False
    for s in parsed_old_sigs:
        if not s in parsed_sigs:
            Logs.error(
                "%s: symbol %s has been removed - please update major version\n\tsignature: %s"
                % (libname, s, parsed_old_sigs[s])
            )
            got_error = True
        elif normalise_varargs(parsed_old_sigs[s]) != normalise_varargs(parsed_sigs[s]):
            Logs.error(
                "%s: symbol %s has changed - please update major version\n\told_signature: %s\n\tnew_signature: %s"
                % (libname, s, parsed_old_sigs[s], parsed_sigs[s])
            )
            got_error = True

    for s in parsed_sigs:
        if not s in parsed_old_sigs:
            Logs.error(
                "%s: symbol %s has been added - please mark it _PRIVATE_ or update minor version\n\tsignature: %s"
                % (libname, s, parsed_sigs[s])
            )
            got_error = True

    if got_error:
        raise Utils.WafError(
            "ABI for %s has changed - please fix library version then build with --abi-update\nSee http://wiki.samba.org/index.php/Waf#ABI_Checking for more information\nIf you have not changed any ABI, and your platform always gives this error, please configure with --abi-check-disable to skip this check"
            % libname
        )
Esempio n. 2
0
def abi_check_task(self):
    '''check if the ABI has changed'''
    abi_gen = self.ABI_GEN

    libpath = self.inputs[0].abspath(self.env)
    libname = os.path.basename(libpath)

    sigs = Utils.cmd_output([abi_gen, libpath])
    parsed_sigs = parse_sigs(sigs, self.ABI_MATCH)

    sig_file = self.ABI_FILE

    old_sigs = samba_utils.load_file(sig_file)
    if old_sigs is None or Options.options.ABI_UPDATE:
        if not save_sigs(sig_file, parsed_sigs):
            raise Utils.WafError('Failed to save ABI file "%s"' % sig_file)
        Logs.warn('Generated ABI signatures %s' % sig_file)
        return

    parsed_old_sigs = parse_sigs(old_sigs, self.ABI_MATCH)

    # check all old sigs
    got_error = False
    for s in parsed_old_sigs:
        if not s in parsed_sigs:
            Logs.error(
                '%s: symbol %s has been removed - please update major version\n\tsignature: %s'
                % (libname, s, parsed_old_sigs[s]))
            got_error = True
        elif normalise_varargs(parsed_old_sigs[s]) != normalise_varargs(
                parsed_sigs[s]):
            Logs.error(
                '%s: symbol %s has changed - please update major version\n\told_signature: %s\n\tnew_signature: %s'
                % (libname, s, parsed_old_sigs[s], parsed_sigs[s]))
            got_error = True

    for s in parsed_sigs:
        if not s in parsed_old_sigs:
            Logs.error(
                '%s: symbol %s has been added - please mark it _PRIVATE_ or update minor version\n\tsignature: %s'
                % (libname, s, parsed_sigs[s]))
            got_error = True

    if got_error:
        raise Utils.WafError(
            'ABI for %s has changed - please fix library version then build with --abi-update\nSee http://wiki.samba.org/index.php/Waf#ABI_Checking for more information\nIf you have not changed any ABI, and your platform always gives this error, please configure with --abi-check-disable to skip this check'
            % libname)