From 8791d2b38ec916ea4206d5cae3b0036bb440c918 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Mon, 2 Jan 2023 11:23:09 -0500 Subject: [SV 61463] Don't export inherited private variables If a parent target has an exported variable that is private, don't export it in child targets. * NEWS: Mention this change. * src/variable.c (target_environment): Ignore private inherited variables. * tests/thelp.pl: Add a new "env" operation to show env.var. values. * tests/scripts/variables/private: Verify this new behavior. --- tests/scripts/variables/private | 55 +++++++++++++++++++++++++++++++++++++++++ tests/thelp.pl | 13 +++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/scripts/variables/private b/tests/scripts/variables/private index 8967ffb5..16a34c7d 100644 --- a/tests/scripts/variables/private +++ b/tests/scripts/variables/private @@ -47,6 +47,17 @@ a: b ', '', "b: F=b / G=g\na: F= / G=g\n"); +# Exported private global variables +run_make_test(' +private export F = global +$(info $(shell #HELPER# env F)) +a: b +b: export F=b +a b: ; @#HELPER# raw $@ env F +', + '', "F=global\nbF=b\naF="); + + # 5: Multiple conditions on the same variable. Test export. delete $ENV{'_X'}; &run_make_test(' @@ -119,4 +130,48 @@ bar: IA=global b% bar bar: PA=global b% bar bar: PS=bar\n"); +# SV 61463: Private parent variables should not be exported + +run_make_test(q! +a: private export FOO := a +a: b +b: ; @#HELPER# env FOO +!, + '', 'FOO='); + +run_make_test(q! +a: private export FOO := a +a: b +b: FOO := b +b: ; @#HELPER# env FOO +!, + '', 'FOO='); + +run_make_test(q! +export FOO := g +a: private export FOO := a +a: b +b: +b: ; @#HELPER# env FOO +!, + '', 'FOO=g'); + +run_make_test(q! +export FOO := g +a: private export FOO := a +a: b +b: FOO := b +b: ; @#HELPER# env FOO +!, + '', 'FOO=b'); + +run_make_test(q! +private export FOO := g +a: private export FOO := a +a: b +b: FOO := b +b: ; @#HELPER# env FOO +!, + '', 'FOO='); + 1; diff --git a/tests/thelp.pl b/tests/thelp.pl index 8d29e5c3..c95b54ae 100755 --- a/tests/thelp.pl +++ b/tests/thelp.pl @@ -10,6 +10,7 @@ # It supports the following operators: # out : echo to stdout with a newline # raw : echo to stdout without adding anything +# env : echo the value of the env.var. , or "" # file : echo to stdout AND create the file # dir : echo to stdout AND create the directory # rm : echo to stdout AND delete the file/directory @@ -19,7 +20,7 @@ # term : send SIGTERM to PID # fail : echo to stdout then exit with error code err # -# If given -q only the "out" command generates output. +# If given -q only the "out", "raw", and "env" commands generate output. # Force flush $| = 1; @@ -41,6 +42,16 @@ sub op { return 1; } + if ($op eq 'env') { + print "$nm=" unless $quiet; + if (exists $ENV{$nm}) { + print "$ENV{$nm}\n"; + } else { + print "\n"; + } + return 1; + } + # Show the output before creating the file if ($op eq 'file') { print "file $nm\n" unless $quiet; -- cgit v1.2.1