aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--miscutils/make.c19
-rwxr-xr-xtestsuite/make.tests18
2 files changed, 34 insertions, 3 deletions
diff --git a/miscutils/make.c b/miscutils/make.c
index 111ab2914..daad75f5c 100644
--- a/miscutils/make.c
+++ b/miscutils/make.c
@@ -1120,7 +1120,11 @@ process_line(char *s)
1120 r = s; 1120 r = s;
1121 1121
1122 // Strip comment 1122 // Strip comment
1123 t = strchr(s, '#'); 1123 // don't treat '#' in macro expansion as a comment
1124 if (!posix)
1125 t = find_char(s, '#');
1126 else
1127 t = strchr(s, '#');
1124 if (t) 1128 if (t)
1125 *t = '\0'; 1129 *t = '\0';
1126 1130
@@ -1401,9 +1405,18 @@ static char *
1401process_command(char *s) 1405process_command(char *s)
1402{ 1406{
1403 char *t, *u; 1407 char *t, *u;
1404 int len = strlen(s) + 1; 1408 int len;
1405 char *outside = xzalloc(len); 1409 char *outside;
1410
1411 if (posix) {
1412 // POSIX strips comments from command lines
1413 t = strchr(s, '#');
1414 if (t)
1415 *t = '\0';
1416 }
1406 1417
1418 len = strlen(s) + 1;
1419 outside = xzalloc(len);
1407 for (t = skip_macro(s); *t; t = skip_macro(t + 1)) { 1420 for (t = skip_macro(s); *t; t = skip_macro(t + 1)) {
1408 outside[t - s] = 1; 1421 outside[t - s] = 1;
1409 } 1422 }
diff --git a/testsuite/make.tests b/testsuite/make.tests
index a0ca9778b..f52770438 100755
--- a/testsuite/make.tests
+++ b/testsuite/make.tests
@@ -379,6 +379,24 @@ t1? t2* t3[abc]: s1? s2* s3[abc]
379' 379'
380cd .. || exit 1; rm -rf make.tempdir 2>/dev/null 380cd .. || exit 1; rm -rf make.tempdir 2>/dev/null
381 381
382# A '#' character in a macro expansion doesn't start a comment
383testing "make hash in macro expansion isn't a comment" \
384 "make -f -" \
385 ": hash # hash\n" "" '
386HASH = hash
387hash = $(HASH:hash=#)
388target:
389 : hash $(hash) hash
390'
391
392# A '#' character in a command line doesn't start a comment
393testing "make hash in command line isn't a comment" \
394 "make -f -" \
395 ": hash # hash\n" "" '
396target:
397 : hash # hash
398'
399
382# Skip duplicate entries in $? and $^ 400# Skip duplicate entries in $? and $^
383mkdir make.tempdir && cd make.tempdir || exit 1 401mkdir make.tempdir && cd make.tempdir || exit 1
384touch -t 202206171200 file1 file3 402touch -t 202206171200 file1 file3