Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 8 Mar 2001 16:04:54 GMT
From:      jhs@freebsd.org
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   bin/25627: Cannot append hash after .elif in Makefile, (but can after .if)
Message-ID:  <200103081604.f28G4s419991@jhs.muc.de>

next in thread | raw e-mail | index | archive | help

>Number:         25627
>Category:       bin
>Synopsis:       Cannot append hash after .elif in Makefile, (but can after .if)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Mar 09 01:30:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Julian Stacey jhs@jhs.muc.de
>Release:        FreeBSD 4.2-RELEASE i386
>Organization:
FreeBSD
>Environment:

`man make` says:
  Comments begin with a hash (`#') character, anywhere but in a shell com-
  mand line, and continue to the end of the line.

To understand a complex Makefile like /usr/src/release/Makefile
with nested .if .endif conditionals, it is useful to hang "#{" & "#}"
at end of lines & use the "%" key in vi to bounce between matching braces.
This fails on .elif

>Description:

The expansion of .elif uses everything up to '\n' & allows no
'#' comment delimeter as available to simpler .if & .else & .endif commands.

>How-To-Repeat:

mkdir ~/tmp ; cd ~/tmp ; cat > Makefile << EOF
break:
.if defined(AA)		#{AA
	@echo 11
.elif defined(BB)	#}{!AA{BB
	@echo 22
.else			#}{!BB
	@echo 33
.endif			#}}

ok:
.if defined(AA)		#{AA
	@echo 11
.else			#}{!AA
.if defined(BB)		#{BB
	@echo 22
.else			#}{!BB
	@echo 33
.endif			#}
.endif			#}
EOF
make

"Makefile", line 4: Malformed conditional (defined(BB)  #}{!AA{BB)
make: fatal errors encountered -- cannot continue

>Fix:
Document it - until a make guru fixes it sometime, maybe.
*** 4.2-RELEASE/src/usr.bin/make/make.1	Thu Oct 19 06:23:49 2000
--- new/src/usr.bin/make/make.1	Thu Mar  8 16:53:43 2001
***************
*** 1238,1243 ****
--- 1238,1273 ----
  \&.endfor
  .Ed
  won't work, and should be rewritten the other way around.
+ .Pp
+ The expansion of .elif uses everything up to end of line, & allows no
+ # comment delimeter as available to simpler .if & .else & .endif commands.
+ .br
+ This thus fails;
+ .in +2
+ .nf
+  .if defined(AA)         #{AA
+          @echo 11
+  .elif defined(BB)       #}{!AA{BB
+          @echo 22
+  .else                   #}{!BB
+          @echo 33
+  .endif                  #}}
+ .fi
+ .in -2
+ Whereas this works
+ .in +2
+ .nf
+  .if defined(AA)         #{AA
+          @echo 11
+  .else                   #}{!AA
+  .if defined(BB)         #{BB
+          @echo 22
+  .else                   #}{!BB
+          @echo 33
+  .endif                  #}
+  .endif                  #}
+ .fi
+ .in -2
  .Sh SEE ALSO
  .Xr mkdep 1
  .Rs
>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200103081604.f28G4s419991>