Subject: bug#67477: Automake warns that $(?D) is a non-POSIX variable name

From: Quinn Grier <[email-masked]>
Date: Sun, 26 Nov 2023 21:42:52 -0800

POSIX Make allows the syntax $(@D) and $(@F) to be used to retrieve the
directory and filename parts of the $@ internal macro. It also allows
this syntax for the other four internal macros ($%, $?, $<, and $*).

Automake seems to be aware of $(@D) and $(@F), but not the others.

Here is an example:

       $ nl configure.ac
            1  AC_INIT([example], [1])
            2  AM_INIT_AUTOMAKE([-Wall foreign])
            3  AC_CONFIG_FILES([Makefile])
            4  AC_OUTPUT

       $ nl Makefile.am
            1  foo.a(foo.o): foo.o
            2          echo $(@D) # no warning
            3          echo $(@F) # no warning
            4          echo $(%D) # warning
            5          echo $(%F) # warning
            6          echo $(?D) # warning
            7          echo $(?F) # warning
            8          echo $(<D) # warning
            9          echo $(<F) # warning
           10          echo $(*D) # warning
           11          echo $(*F) # warning

       $ autoreconf -i
       Makefile.am:4: warning: %D: non-POSIX variable name
       Makefile.am:5: warning: %F: non-POSIX variable name
       Makefile.am:6: warning: ?D: non-POSIX variable name
       Makefile.am:7: warning: ?F: non-POSIX variable name
       Makefile.am:8: warning: <D: non-POSIX variable name
       Makefile.am:9: warning: <F: non-POSIX variable name
       Makefile.am:10: warning: *D: non-POSIX variable name
       Makefile.am:11: warning: *F: non-POSIX variable name

       $ autoconf --version | head -n 1
       autoconf (GNU Autoconf) 2.71

       $ automake --version | head -n 1
       automake (GNU automake) 1.16.5