autoconf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: autotest/AT_CHECK: ways to pass additional options on to diff?


From: Luke Mewburn
Subject: Re: autotest/AT_CHECK: ways to pass additional options on to diff?
Date: Wed, 5 Jun 2019 15:56:01 +1000
User-agent: Mutt/1.5.20 (2009-12-10)

On 19-04-16 15:20, Nick Bowler wrote:
  | On 4/16/19, Jannick <address@hidden> wrote:
  | > I am wondering if there is an elegant way to pass additional diff options
  | > on to AT_CHECK in a testsuite - ideally on the level of .ac, .am, .at 
files
  | > or alike?
  | [...]
  | > configure translates this code snip into the script testsuite where - and
  | > this is really evil hackery I solemnly confess and I would like to avoid -
  | > I changed the definition of the variable at_diff.  In my cases the diff
  | > options are the same for all tests in each of the relevant projects.
  | >
  | > I am aware that the test output could be restructured, but this question
  | > focuses at autoconf, autotest, AT_CHECK and friends. Using a customized
  | > version of autotest/general.m4 would not be optimal, since the project
  | > should automatically benefit from updates of autoconf/automake out of the
  | > box.
  | 
  | Aside from hackery like you describe, I do not believe there is any
  | built-in way to modify the behaviour of AT_CHECK like this.
  | 
  | But you can just do whatever comparison you want directly in AT_CHECK...
  | there is no reason to use the built-in diff when it is inadequate for
  | your test case.
  | 
  | For example, if I want to use 'cmp' instead of 'diff' I might write
  | (untested):
  | 
  |   AT_CHECK([:; { commands_to_generate_output
  |   } >stdout && cmp stdout expected_output])
  | 
  | And if I did that a lot I would define a macro for it.

I used another solution where wanted to use a different diff
implementation for AT_CHECK() that that allowed for regexes to
be used in places where the output changes each test run.
See my "pyrediff" project: https://github.com/lukem/pyrediff

In pyrediff, I implemented a new macro with similar semantics to
AT_CHECK() which temporarily overrode the setting of at_diff before
calling AT_CHECK(), and set at_diff back before AT_CHECK() returns.
Per ax_at_check_pyrediff.m4, the definition is:

        m4_defun([AX_AT_CHECK_PYREDIFF], [dnl
        AS_REQUIRE([_AX_AT_CHECK_PYRE_PREPARE])
        _ax_at_check_pyrediff_prepare_original_at_diff="$at_diff"
        at_diff='ax_at_diff_pyre'
        AT_CHECK(m4_expand([$1]), [$2], m4_expand([$3]), m4_expand([$4]),
                [at_diff="$_ax_at_check_pyrediff_prepare_original_at_diff";$5],
                [at_diff="$_ax_at_check_pyrediff_prepare_original_at_diff";$6])
        ])dnl AX_AT_CHECK_PYREDIFF

The _AX_AT_CHECK_PYRE_PREPARE does some preparation
including defining the shell function ax_at_diff_pyre
that is used as the replacement at_diff.

Note: if autotest's AT_CHECK() was extended in the future to
support a new (optional) argument as the overload for at_diff,
I would adapt to using that.

I hope that's useful,
Luke.

Attachment: pgpby81A1UzcU.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]