Module Name:    src
Committed By:   rillig
Date:           Fri Jul 30 22:16:09 UTC 2021

Modified Files:
        src/usr.bin/make: make.1 var.c
        src/usr.bin/make/unit-tests: varmod-order-numeric.exp
            varmod-order-numeric.mk

Log Message:
make: fix typo in manual page, add more tests for the new ':On'


To generate a diff of this commit:
cvs rdiff -u -r1.297 -r1.298 src/usr.bin/make/make.1
cvs rdiff -u -r1.939 -r1.940 src/usr.bin/make/var.c
cvs rdiff -u -r1.1 -r1.2 src/usr.bin/make/unit-tests/varmod-order-numeric.exp \
    src/usr.bin/make/unit-tests/varmod-order-numeric.mk

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/make.1
diff -u src/usr.bin/make/make.1:1.297 src/usr.bin/make/make.1:1.298
--- src/usr.bin/make/make.1:1.297	Fri Jul 30 19:55:22 2021
+++ src/usr.bin/make/make.1	Fri Jul 30 22:16:09 2021
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.297 2021/07/30 19:55:22 sjg Exp $
+.\"	$NetBSD: make.1,v 1.298 2021/07/30 22:16:09 rillig Exp $
 .\"
 .\" Copyright (c) 1990, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	from: @(#)make.1	8.4 (Berkeley) 3/19/94
 .\"
-.Dd July 30, 2020
+.Dd July 30, 2021
 .Dt MAKE 1
 .Os
 .Sh NAME

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.939 src/usr.bin/make/var.c:1.940
--- src/usr.bin/make/var.c:1.939	Fri Jul 30 19:55:22 2021
+++ src/usr.bin/make/var.c	Fri Jul 30 22:16:09 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.939 2021/07/30 19:55:22 sjg Exp $	*/
+/*	$NetBSD: var.c,v 1.940 2021/07/30 22:16:09 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -140,7 +140,7 @@
 #include "metachar.h"
 
 /*	"@(#)var.c	8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.939 2021/07/30 19:55:22 sjg Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.940 2021/07/30 22:16:09 rillig Exp $");
 
 /*
  * Variables are defined using one of the VAR=value assignments.  Their
@@ -3311,7 +3311,7 @@ num_cmp_asc(const void *sa, const void *
 	b = num_val(*(const char *const *)sb);
 	return (a > b) ? 1 : (b > a) ? -1 : 0;
 }
-    
+
 static int
 num_cmp_desc(const void *sa, const void *sb)
 {
@@ -3321,7 +3321,7 @@ num_cmp_desc(const void *sa, const void 
 	b = num_val(*(const char *const *)sb);
 	return (a > b) ? -1 : (b > a) ? 1 : 0;
 }
-    
+
 static int
 str_cmp_asc(const void *a, const void *b)
 {

Index: src/usr.bin/make/unit-tests/varmod-order-numeric.exp
diff -u src/usr.bin/make/unit-tests/varmod-order-numeric.exp:1.1 src/usr.bin/make/unit-tests/varmod-order-numeric.exp:1.2
--- src/usr.bin/make/unit-tests/varmod-order-numeric.exp:1.1	Fri Jul 30 19:55:22 2021
+++ src/usr.bin/make/unit-tests/varmod-order-numeric.exp	Fri Jul 30 22:16:09 2021
@@ -1 +1,16 @@
-exit status 0
+make: Bad modifier ":Oxn" for variable "NUMBERS"
+make: "varmod-order-numeric.mk" line 32: Malformed conditional (${NUMBERS:Oxn})
+make: Bad modifier ":typo" for variable "NUMBERS"
+make: "varmod-order-numeric.mk" line 45: Malformed conditional (${NUMBERS:On_typo})
+make: "varmod-order-numeric.mk" line 54: Unknown modifier "_typo"
+make: "varmod-order-numeric.mk" line 54: Malformed conditional (${NUMBERS:Onr_typo})
+make: "varmod-order-numeric.mk" line 63: Unknown modifier "_typo"
+make: "varmod-order-numeric.mk" line 63: Malformed conditional (${NUMBERS:Orn_typo})
+make: "varmod-order-numeric.mk" line 75: Missing argument for ".error"
+make: "varmod-order-numeric.mk" line 83: Unknown modifier "r"
+make: "varmod-order-numeric.mk" line 83: Malformed conditional (${NUMBERS:Onrr})
+make: Bad modifier ":Orrn" for variable "NUMBERS"
+make: "varmod-order-numeric.mk" line 94: Malformed conditional (${NUMBERS:Orrn})
+make: Fatal errors encountered -- cannot continue
+make: stopped in unit-tests
+exit status 1
Index: src/usr.bin/make/unit-tests/varmod-order-numeric.mk
diff -u src/usr.bin/make/unit-tests/varmod-order-numeric.mk:1.1 src/usr.bin/make/unit-tests/varmod-order-numeric.mk:1.2
--- src/usr.bin/make/unit-tests/varmod-order-numeric.mk:1.1	Fri Jul 30 19:55:22 2021
+++ src/usr.bin/make/unit-tests/varmod-order-numeric.mk	Fri Jul 30 22:16:09 2021
@@ -1,18 +1,100 @@
-# $NetBSD: varmod-order-numeric.mk,v 1.1 2021/07/30 19:55:22 sjg Exp $
+# $NetBSD: varmod-order-numeric.mk,v 1.2 2021/07/30 22:16:09 rillig Exp $
 #
 # Tests for the :On variable modifier, which returns the words, sorted in
 # ascending numeric order.
 
-NUMBERS=	3 5 7 1 42 -42 1M 1k
+# This list contains only 32-bit numbers since the make code needs to conform
+# to C90, which does not provide integer types larger than 32 bit.  It uses
+# 'long long' by default, but that type is overridable if necessary.
+# To get 53-bit integers even in C90, it would be possible to switch to
+# 'double' instead, but that would allow floating-point numbers as well, which
+# is out of scope for this variable modifier.
+NUMBERS=	3 5 7 1 42 -42 5K -3m 1M 1k -2G
 
-.if ${NUMBERS:On} != "-42 1 3 5 7 42 1k 1M"
+.if ${NUMBERS:On} != "-2G -3m -42 1 3 5 7 42 1k 5K 1M"
 .  error ${NUMBERS:On}
 .endif
 
-.if ${NUMBERS:Orn} != "1M 1k 42 7 5 3 1 -42"
+.if ${NUMBERS:Orn} != "1M 5K 1k 42 7 5 3 1 -42 -3m -2G"
 .  error ${NUMBERS:Orn}
 .endif
 
+# Both ':Onr' and ':Orn' have the same effect.
+.if ${NUMBERS:Onr} != "1M 5K 1k 42 7 5 3 1 -42 -3m -2G"
+.  error ${NUMBERS:Onr}
+.endif
+
+# Shuffling numerically doesn't make sense, so don't allow 'x' and 'n' to be
+# combined.
+#
+# expect-text: Bad modifier ":Oxn" for variable "NUMBERS"
+# expect+1: Malformed conditional (${NUMBERS:Oxn})
+.if ${NUMBERS:Oxn}
+.  error
+.else
+.  error
+.endif
+
+# Extra characters after ':On' are detected and diagnosed.
+# TODO: Add line number information to the "Bad modifier" diagnostic.
+# TODO: Use uniform diagnostics for ':On' and ':Onr'.
+# TODO: Fix the misleading ':typo' in the diagnostic.
+# TODO: The '_' is already wrong but does not occur in the diagnostic.
+#
+# expect-text: Bad modifier ":typo" for variable "NUMBERS"
+.if ${NUMBERS:On_typo}
+.  error
+.else
+.  error
+.endif
+
+# Extra characters after ':Onr' are detected and diagnosed.
+#
+# expect+1: Unknown modifier "_typo"
+.if ${NUMBERS:Onr_typo}
+.  error
+.else
+.  error
+.endif
+
+# Extra characters after ':Orn' are detected and diagnosed.
+#
+# expect+1: Unknown modifier "_typo"
+.if ${NUMBERS:Orn_typo}
+.  error
+.else
+.  error
+.endif
+
+# Repeating the 'n' is not supported.  In the typical use cases, the sorting
+# criteria are fixed, not computed, therefore allowing this redundancy does
+# not make sense.
+#
+# TODO: This repetition is not diagnosed.
+.if ${NUMBERS:Onn}
+.  error
+.else
+.  error
+.endif
+
+# Repeating the 'r' is not supported as well, for the same reasons as above.
+#
+# expect+1: Unknown modifier "r"
+.if ${NUMBERS:Onrr}
+.  error
+.else
+.  error
+.endif
+
+# Repeating the 'r' is not supported as well, for the same reasons as above.
+#
+# TODO: Use uniform diagnostics for ':Onrr' and ':Orrn'.
+#
+# expect-text: Bad modifier ":Orrn" for variable "NUMBERS"
+.if ${NUMBERS:Orrn}
+.  error
+.else
+.  error
+.endif
 
 all:
-	@:;

Reply via email to