View Issue Details

IDProjectCategoryView StatusLast Update
00008661003.1(2013)/Issue7+TC1Shell and Utilitiespublic2019-06-10 08:54
Reporterantoinel Assigned To 
PrioritynormalSeverityEditorialTypeEnhancement Request
Status ClosedResolutionAccepted As Marked 
NameAntoine Leca
Organization
User Reference
Sectionmake
Page Number2928
Line Number96368
Interp Status---
Final Accepted TextSee 0000866:0002392
Summary0000866: No precedence between include lines and macro definitions
DescriptionThe Standard does not prescribe an order of evaluation between include lines and macro definitions. Furthermore, various implementations chose distinct interpretations for
include =foo.mk


Given the low actual usefulness of such a construct, it does not seem important to try to choose between interpretations (which would automatically render the other half of the implementations theoretically not conforming.) Rather, we could suggest workarounds to let applications avoid the pitfall.
Desired ActionAdd a new paragraph to RATIONALE after P2928, L96368:
The standard does not prescribe the precedence between include lines and macro definitions. As such, the effect of
include =foo.mk

is unspecified. To define a variable named include, either the whitespace before the <equal-sign> should be removed, or another macro should be used, as in
INCLUDE_NAME = include
$(INCLUDE_NAME) =foo.mk

On the other hand, if the intent is to include a file which starts with an <equal-sign>, the makefile should be written as
INCLUDE_FILE = =foo.mk
include $(INCLUDE_FILE)
Tagstc2-2008

Activities

nick

2014-09-18 16:35

manager   bugnote:0002392

Last edited: 2014-09-18 16:46

Add the following to APPLICATION USAGE: after line 97603

This version of POSIX.1:2008 does not specify precedence between macro
definition and include directives. Thus the behavior of
        include =foo.mk

is unspecified. To define a variable named include, either the whitespace
before the <equal-sign> should be removed, or another macro should be
used, as in
        INCLUDE_NAME = include
        $(INCLUDE_NAME) =foo.mk


On the other hand, if the intent is to include a file which starts with an
<equal-sign>, either the filename should be changed to <tt>./=foo.mk</tt>,
or the makefile should be written as
        INCLUDE_FILE = =foo.mk
        include $(INCLUDE_FILE)


shware_systems

2014-09-18 17:16

reporter   bugnote:0002394

Editorial: <tt> </tt> should be replaced with " directly, or just removed from Note 2932.

Should some mention of equals not being a portable filename character, so use of a filename containing it may not work properly anyways with all file systems, be added? This ambiguity, necessitating those example workarounds, arises only with non-portable makefiles, in other words.

Issue History

Date Modified Username Field Change
2014-08-12 09:43 antoinel New Issue
2014-08-12 09:43 antoinel Name => Antoine Leca
2014-08-12 09:43 antoinel Section => make
2014-08-12 09:43 antoinel Page Number => 2928
2014-08-12 09:43 antoinel Line Number => 96368
2014-09-18 16:35 nick Note Added: 0002392
2014-09-18 16:36 nick Interp Status => ---
2014-09-18 16:36 nick Final Accepted Text => See 0000866:0002392
2014-09-18 16:36 nick Status New => Resolved
2014-09-18 16:36 nick Resolution Open => Accepted As Marked
2014-09-18 16:36 nick Desired Action Updated
2014-09-18 16:37 nick Tag Attached: tc2-2008
2014-09-18 16:45 Don Cragun Note Edited: 0002392
2014-09-18 16:46 Don Cragun Note Edited: 0002392
2014-09-18 17:16 shware_systems Note Added: 0002394
2019-06-10 08:54 agadmin Status Resolved => Closed