bug-m4
[Top][All Lists]
Advanced

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

bug: quote include makes patsubst no longer handle ^ correctly


From: Lesmana Zimmer
Subject: bug: quote include makes patsubst no longer handle ^ correctly
Date: Sun, 24 Feb 2019 01:23:11 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0

hello fine m4 developers,
i may have found a bug in m4: quoting include makes patsubst no longer recognize ^ (beginning of line) in the text apart from the first line.

observe:

    $ cat textnocomma
    some text.
    with sentences.
    and no commas.

    $ cat includenocomma
    foo
    patsubst(include(textnocomma), `^', `    ')
    bar
    patsubst(`include(textnocomma)', `^', `    ')
    baz

    $ m4 includenocomma
    foo
        some text.
        with sentences.
        and no commas.

    bar
        some text.
    with sentences.
    and no commas.

    baz

this also happens when defining the text as "string literals" instead of `include`:

    $ cat definestringliterals
    define(`sometext', `first line
    second line
    third line')dnl
    foo
    patsubst(sometext, `^', `    ')
    bar
    patsubst(`sometext', `^', `    ')
    baz

    $ m4 definestringliterals
    foo
        first line
        second line
        third line
    bar
        first line
    second line
    third line
    baz

strangely this does not happen if putting the string literals directly inside `patsubst`:

    $ cat patsubststringliterals
    foo
    patsubst(first line
    second line
    third line, `^', `    ')
    bar
    patsubst(`first line
    second line
    third line', `^', `    ')
    baz

    $ m4 patsubststringliterals
    foo
        first line
        second line
        third line
    bar
        first line
        second line
        third line
    baz

using parens to "quote" the text does not have this problem. but now my text has parens around it:

    $ cat textcomma
    some text.
    with sentences.
    and, commas.

    $ cat includecomma
    foo
    patsubst(include(textcomma), `^', `    ')
    bar
    patsubst(`include(textcomma)', `^', `    ')
    baz
    patsubst((include(textcomma)), `^', `    ')
    qux

    $ m4 includecomma
    foo
m4:includecomma:2: Warning: excess arguments to builtin `patsubst' ignored
    some text.
    with sentences.
    and
    bar
        some text.
    with sentences.
    and, commas.

    baz
        (some text.
        with sentences.
        and, commas.
        )
    qux

so i guess this is a bug. if quoting `include` then `patsubst` will no longer recognize `^` apart from the first line. But quoting `include` is necessary to prevent a comma in the text to be interpreted as syntax.

here is the stackoverflow thread which led me to stumble upon this bug:
https://stackoverflow.com/questions/54798556/include-file-and-indent-every-line

my m4 version

    $ m4 --version
    m4 (GNU M4) 1.4.18
    ...

i use the provided m4 from arch repositories

here is the build file: https://git.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/m4

and the patch used in the build file: https://git.archlinux.org/svntogit/packages.git/tree/trunk/m4-1.4.18-glibc-change-work-around.patch?h=packages/m4

the patch is to fix this bug: https://bugs.archlinux.org/task/59562

which seems to be known in the m4 mailing list: http://lists.gnu.org/archive/html/bug-m4/2018-12/msg00001.html

so as far as i understand it is the vanilla gnu m4 version 1.4.18 with a patch which fixes the build process.

i hope this helps you guys to track this bug down.

if you have questions you can write me. i will try to help.

lesmana zimmer



reply via email to

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