!,
'', "recur=/onetwothree/ simple=/fourfivesix/\n");
+# Test POSIX :::=
+# This creates a recursive variable, but it expands the RHS first. Any
+# variable escapes ('$$') are preserved so that this recursive variable can be
+# expanded again without changing its contents.
+run_make_test('
+bar = Goodbye
+foo :::= $(bar)
+bar = ${ugh}
+ugh = Hello
+all: ; @echo $(foo)
+',
+ '', "Goodbye");
+
+# POSIX :::= no spaces
+run_make_test(q!
+bar = Goodbye
+foo:::=$(bar)
+bar = ${ugh}
+ugh = Hello
+all: ; @echo $(foo)
+!,
+ '', "Goodbye");
+
+# Variable escapes ('$$') are preserved.
+run_make_test(q!
+bar = Good$$bye
+foo :::= $(bar) $$what
+bar = ${ugh}
+ugh = Hello
+all: ; @echo '$(foo)'
+!,
+ '', 'Good$bye $what');
+
+# Append works as expected
+run_make_test(q!
+bar = Good$$bye
+foo :::= $(bar)
+foo += $$what $(bar)
+bar = ${ugh}
+ugh = Hello
+all: ; @echo '$(foo)'
+!,
+ '', 'Good$bye $what Hello');
+
1;