Home | History | Annotate | Download | only in features
      1 #                                                                    -*-perl-*-
      2 $description = "Check GNU make export/unexport commands.";
      3 
      4 $details = "";
      5 
      6 # The test driver cleans out our environment for us so we don't have to worry
      7 # about that here.
      8 
      9 open(MAKEFILE,"> $makefile");
     10 
     11 # The Contents of the MAKEFILE ...
     12 
     13 print MAKEFILE <<'EOMAKE';
     14 
     15 FOO = foo
     16 BAR = bar
     17 BOZ = boz
     18 
     19 export BAZ = baz
     20 export BOZ
     21 
     22 BITZ = bitz
     23 BOTZ = botz
     24 
     25 export BITZ BOTZ
     26 unexport BOTZ
     27 
     28 ifdef EXPORT_ALL
     29 export
     30 endif
     31 
     32 ifdef UNEXPORT_ALL
     33 unexport
     34 endif
     35 
     36 ifdef EXPORT_ALL_PSEUDO
     37 .EXPORT_ALL_VARIABLES:
     38 endif
     39 
     40 all:
     41 	@echo "FOO=$(FOO) BAR=$(BAR) BAZ=$(BAZ) BOZ=$(BOZ) BITZ=$(BITZ) BOTZ=$(BOTZ)"
     42 	@echo "FOO=$$FOO BAR=$$BAR BAZ=$$BAZ BOZ=$$BOZ BITZ=$$BITZ BOTZ=$$BOTZ"
     43 
     44 EOMAKE
     45 
     46 close(MAKEFILE);
     47 
     48 # TEST 0: basics
     49 
     50 &run_make_with_options($makefile,"",&get_logfile,0);
     51 
     52 $answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz
     53 FOO= BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n";
     54 
     55 &compare_output($answer,&get_logfile(1));
     56 
     57 # TEST 1: make sure vars inherited from the parent are exported
     58 
     59 $extraENV{FOO} = 1;
     60 
     61 &run_make_with_options($makefile,"",&get_logfile,0);
     62 
     63 $answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz
     64 FOO=foo BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n";
     65 
     66 &compare_output($answer,&get_logfile(1));
     67 
     68 # TEST 2: global export.  Explicit unexport takes precedence.
     69 
     70 &run_make_with_options($makefile,"EXPORT_ALL=1",&get_logfile,0);
     71 
     72 $answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz
     73 FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n";
     74 
     75 &compare_output($answer,&get_logfile(1));
     76 
     77 # TEST 3: global unexport.  Explicit export takes precedence.
     78 
     79 &run_make_with_options($makefile,"UNEXPORT_ALL=1",&get_logfile,0);
     80 
     81 $answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz
     82 FOO= BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n";
     83 
     84 &compare_output($answer,&get_logfile(1));
     85 
     86 # TEST 4: both: in the above makefile the unexport comes last so that rules.
     87 
     88 &run_make_with_options($makefile,"EXPORT_ALL=1 UNEXPORT_ALL=1",&get_logfile,0);
     89 
     90 $answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz
     91 FOO= BAR= BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n";
     92 
     93 &compare_output($answer,&get_logfile(1));
     94 
     95 # TEST 5: test the pseudo target.
     96 
     97 &run_make_with_options($makefile,"EXPORT_ALL_PSEUDO=1",&get_logfile,0);
     98 
     99 $answer = "FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=botz
    100 FOO=foo BAR=bar BAZ=baz BOZ=boz BITZ=bitz BOTZ=\n";
    101 
    102 &compare_output($answer,&get_logfile(1));
    103 
    104 
    105 # TEST 6: Test the expansion of variables inside export
    106 
    107 $makefile2 = &get_tmpfile;
    108 
    109 open(MAKEFILE, "> $makefile2");
    110 
    111 print MAKEFILE <<'EOF';
    112 
    113 foo = f-ok
    114 bar = b-ok
    115 
    116 FOO = foo
    117 F = f
    118 
    119 BAR = bar
    120 B = b
    121 
    122 export $(FOO)
    123 export $(B)ar
    124 
    125 all:
    126 	@echo foo=$(foo) bar=$(bar)
    127 	@echo foo=$$foo bar=$$bar
    128 
    129 EOF
    130 
    131 close(MAKEFILE);
    132 
    133 &run_make_with_options($makefile2,"",&get_logfile,0);
    134 $answer = "foo=f-ok bar=b-ok\nfoo=f-ok bar=b-ok\n";
    135 &compare_output($answer,&get_logfile(1));
    136 
    137 
    138 # TEST 7: Test the expansion of variables inside unexport
    139 
    140 $makefile3 = &get_tmpfile;
    141 
    142 open(MAKEFILE, "> $makefile3");
    143 
    144 print MAKEFILE <<'EOF';
    145 
    146 foo = f-ok
    147 bar = b-ok
    148 
    149 FOO = foo
    150 F = f
    151 
    152 BAR = bar
    153 B = b
    154 
    155 export foo bar
    156 
    157 unexport $(FOO)
    158 unexport $(B)ar
    159 
    160 all:
    161 	@echo foo=$(foo) bar=$(bar)
    162 	@echo foo=$$foo bar=$$bar
    163 
    164 EOF
    165 
    166 close(MAKEFILE);
    167 
    168 &run_make_with_options($makefile3,"",&get_logfile,0);
    169 $answer = "foo=f-ok bar=b-ok\nfoo= bar=\n";
    170 &compare_output($answer,&get_logfile(1));
    171 
    172 
    173 # TEST 7: Test exporting multiple variables on the same line
    174 
    175 $makefile4 = &get_tmpfile;
    176 
    177 open(MAKEFILE, "> $makefile4");
    178 
    179 print MAKEFILE <<'EOF';
    180 
    181 A = a
    182 B = b
    183 C = c
    184 D = d
    185 E = e
    186 F = f
    187 G = g
    188 H = h
    189 I = i
    190 J = j
    191 
    192 SOME = A B C
    193 
    194 export F G H I J
    195 
    196 export D E $(SOME)
    197 
    198 all: ; @echo A=$$A B=$$B C=$$C D=$$D E=$$E F=$$F G=$$G H=$$H I=$$I J=$$J
    199 EOF
    200 
    201 close(MAKEFILE);
    202 
    203 &run_make_with_options($makefile4,"",&get_logfile,0);
    204 $answer = "A=a B=b C=c D=d E=e F=f G=g H=h I=i J=j\n";
    205 &compare_output($answer,&get_logfile(1));
    206 
    207 
    208 # TEST 8: Test unexporting multiple variables on the same line
    209 
    210 $makefile5 = &get_tmpfile;
    211 
    212 open(MAKEFILE, "> $makefile5");
    213 
    214 print MAKEFILE <<'EOF';
    215 
    216 A = a
    217 B = b
    218 C = c
    219 D = d
    220 E = e
    221 F = f
    222 G = g
    223 H = h
    224 I = i
    225 J = j
    226 
    227 SOME = A B C
    228 
    229 unexport F G H I J
    230 
    231 unexport D E $(SOME)
    232 
    233 all: ; @echo A=$$A B=$$B C=$$C D=$$D E=$$E F=$$F G=$$G H=$$H I=$$I J=$$J
    234 EOF
    235 
    236 close(MAKEFILE);
    237 
    238 @extraENV{qw(A B C D E F G H I J)} = qw(1 2 3 4 5 6 7 8 9 10);
    239 
    240 &run_make_with_options($makefile5,"",&get_logfile,0);
    241 $answer = "A= B= C= D= E= F= G= H= I= J=\n";
    242 &compare_output($answer,&get_logfile(1));
    243 
    244 
    245 # This tells the test driver that the perl test script executed properly.
    246 1;
    247