[Top][All Lists]

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

dashes in Makefile macro names

From: Bruno Haible
Subject: dashes in Makefile macro names
Date: Fri, 28 Jan 2011 12:38:07 +0100
User-agent: KMail/1.9.9


Can you use $(FOO-BAR) in Makefile? It's not portable in POSIX [1]
  "Applications shall select macro names from the set of characters
   consisting solely of periods, underscores, digits, and alphabetics
   from the portable character set"
And the Autoconf manual too says that it's not portable [2].

But Paul Eggert found a number of such Makefile macro names in Emacs [3],
which have apparently not been hurting for years.

Prompted by this, I've tested the support for Makefile macro names with
dashes in
  - GNU make,
  - dmake 4.12,
  - smake 1.2.1,
  - the vendor 'make' in
    - MacOS X,
    - FreeBSD 6.4,
    - OpenBSD 4.4,
    - NetBSD 5.0,
    - AIX 5.1,
    - HP-UX 10.20,
    - IRIX 6.5 (also pmake, smake),
    - OSF/1 5.1,
    - Solaris 2.6 (also dmake),
and found that all support it. The test was this Makefile:

================== Makefile ===================
FOO-BAR = yellow_dog
FOO_BAR = green_cat

all : $(FOO-BAR)

$(FOO-BAR) : greet_dog

$(FOO_BAR) : greet_cat

        echo hello my dog

        echo hello my cat

So I think it's time to update the Autoconf documentation by adding a
sentence. Here's a proposed patch.

[1] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html
[3] http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg01031.html

2011-01-28  Bruno Haible  <address@hidden>

        doc: Don't discourage dashes in Makefile macro names.
        * doc/autoconf.texi (Special Chars in Names): Mention that dashes in
        Makefile macro names are supported.

--- doc/autoconf.texi.orig      Fri Jan 28 12:34:38 2011
+++ doc/autoconf.texi   Fri Jan 28 12:26:49 2011
@@ -19183,10 +19183,12 @@
 @section Special Characters in Make Macro Names
 Posix limits macro names to nonempty strings containing only
-ASCII letters and digits, @samp{.}, and @samp{_}.  Many
address@hidden implementations allow a wider variety of characters, but
-portable makefiles should avoid them.  It is portable to start a name
-with a special character, e.g., @samp{$(.FOO)}.
+ASCII letters and digits, @samp{.}, and @samp{_}.  Although Posix does
+not allow dashes @samp{-} in names, all known current @command{make}
+implementations support them.  Many @command{make} implementations allow
+a wider variety of characters, but portable makefiles should avoid them.
+It is portable to start a name with a special character, e.g.,
 Some ancient @command{make} implementations don't support leading
 underscores in macro names.  An example is NEWS-OS 4.2R.

reply via email to

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