xref: /freebsd/contrib/bmake/unit-tests/comment.mk (revision a7623790fb345e6dc986dfd31df0ace115e6f2e4)
1# $NetBSD: comment.mk,v 1.3 2020/11/15 14:07:53 rillig Exp $
2#
3# Demonstrate how comments are written in makefiles.
4
5# This is a comment.
6
7#\
8This is a multiline comment.
9
10# Another multiline comment \
11that \
12goes \
13on and on.
14
15 # Comments can be indented with spaces, but that is rather unusual.
16
17	# Comments can be indented with a tab.
18	# These are not shell commands, they are just makefile comments.
19
20.if 1			# There can be comments after conditions.
21.endif			# And after the closing directive.
22
23VAR=			# This comment makes the variable value empty.
24			# ParseGetLine removes any whitespace before the
25			# comment.
26.if ${VAR} != ""
27.  error
28.endif
29
30# The comment does not need to start at the beginning of a word (as in the
31# shell), it can start anywhere.
32VAR=# defined but empty
33
34# The space before the comment is always trimmed.
35VAR=	value
36.if ${VAR} != "value"
37.  error
38.endif
39
40# This comment ends with 2 backslashes.  An even number of backslashes does
41# not count as a line continuation, therefore the variable assignment that
42# follows is actively interpreted. \\
43VAR=	not part of the comment
44.if ${VAR} != "not part of the comment"
45.  error
46.endif
47
48# To escape a comment sign, precede it with a backslash.
49VAR=	\#		# Both in the assignment.
50.if ${VAR} != "\#"	# And in the comparison.
51.  error
52.endif
53
54# Since 2012-03-24 the variable modifier :[#] does not need to be escaped.
55# To keep the parsing code simple, any "[#" does not start a comment, even
56# outside of a variable expression.
57WORDS=	${VAR:[#]} [#
58.if ${WORDS} != "1 [#"
59.  error
60.endif
61
62# An odd number of backslashes makes a line continuation, \\\
63no matter if it is 3 or 5 \\\\\
64or 9 backslashes. \\\\\\\\\
65This is the last line of the comment.
66VAR=	no comment anymore
67.if ${VAR} != "no comment anymore"
68.  error
69.endif
70
71all:
72# In the commands associated with a target, the '#' does not start a makefile
73# comment.  The '#' is just passed to the shell, like any ordinary character.
74	echo This is a shell comment: # comment
75# If the '#' were to start a makefile comment, the following shell command
76# would have unbalanced quotes.
77	echo This is not a shell comment: '# comment'
78	@echo A shell comment can#not start in the middle of a word.
79