mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-12 15:42:29 +00:00
add make-4.3.tar.gz
This commit is contained in:
parent
0a0997a872
commit
19f70a154e
458 changed files with 239669 additions and 0 deletions
92
third_party/make/tests/scripts/functions/call
vendored
Normal file
92
third_party/make/tests/scripts/functions/call
vendored
Normal file
|
@ -0,0 +1,92 @@
|
|||
# -*-perl-*-
|
||||
$description = "Test the call function.\n";
|
||||
|
||||
$details = "Try various uses of call and ensure they all give the correct
|
||||
results.\n";
|
||||
|
||||
run_make_test(q!
|
||||
# Simple, just reverse two things
|
||||
#
|
||||
reverse = $2 $1
|
||||
|
||||
# A complex 'map' function, using recursive 'call'.
|
||||
#
|
||||
map = $(foreach a,$2,$(call $1,$a))
|
||||
|
||||
# Test using a builtin; this is silly as it's simpler to do without call
|
||||
#
|
||||
my-notdir = $(call notdir,$(1))
|
||||
|
||||
# Test using non-expanded builtins
|
||||
#
|
||||
my-foreach = $(foreach $(1),$(2),$(3))
|
||||
my-if = $(if $(1),$(2),$(3))
|
||||
|
||||
# Test recursive invocations of call with different arguments
|
||||
#
|
||||
one = $(1) $(2) $(3)
|
||||
two = $(call one,$(1),foo,$(2))
|
||||
|
||||
# Test recursion on the user-defined function. As a special case make
|
||||
# won't error due to this.
|
||||
# Implement transitive closure using $(call ...)
|
||||
#
|
||||
DEP_foo = bar baz quux
|
||||
DEP_baz = quux blarp
|
||||
rest = $(wordlist 2,$(words ${1}),${1})
|
||||
tclose = $(if $1,$(firstword $1)\
|
||||
$(call tclose,$(sort ${DEP_$(firstword $1)} $(call rest,$1))))
|
||||
|
||||
all: ; @echo '$(call reverse,bar,foo)'; \
|
||||
echo '$(call map,origin,MAKE reverse map)'; \
|
||||
echo '$(call my-notdir,a/b c/d e/f)'; \
|
||||
echo '$(call my-foreach)'; \
|
||||
echo '$(call my-foreach,a,,,)'; \
|
||||
echo '$(call my-if,a,b,c)'; \
|
||||
echo '$(call two,bar,baz)'; \
|
||||
echo '$(call tclose,foo)';
|
||||
!,
|
||||
"", "foo bar\ndefault file file\nb d f\n\n\nb\nbar foo baz\nfoo bar baz blarp quux \n");
|
||||
|
||||
# These won't work because call expands all its arguments first, before
|
||||
# passing them on, then marks them as resolved/simple, so they're not
|
||||
# expanded again by the function.
|
||||
#
|
||||
# echo '$(call my-foreach,a,x y z,$$(a)$$(a))'; \
|
||||
# echo '$(call my-if,,$$(info don't print this),$$(info do print this))'
|
||||
#
|
||||
# $answer = "xx yy zz\ndo print this\n";
|
||||
|
||||
# TEST eclipsing of arguments when invoking sub-calls
|
||||
|
||||
run_make_test(q!
|
||||
all = $1 $2 $3 $4 $5 $6 $7 $8 $9
|
||||
|
||||
level1 = $(call all,$1,$2,$3,$4,$5)
|
||||
level2 = $(call level1,$1,$2,$3)
|
||||
level3 = $(call level2,$1,$2,$3,$4,$5)
|
||||
|
||||
all:
|
||||
@echo $(call all,1,2,3,4,5,6,7,8,9,10,11)
|
||||
@echo $(call level1,1,2,3,4,5,6,7,8)
|
||||
@echo $(call level2,1,2,3,4,5,6,7,8)
|
||||
@echo $(call level3,1,2,3,4,5,6,7,8)
|
||||
!,
|
||||
"", "1 2 3 4 5 6 7 8 9\n1 2 3 4 5\n1 2 3\n1 2 3\n");
|
||||
|
||||
# Ensure that variables are defined in global scope even in a $(call ...)
|
||||
|
||||
delete $ENV{X123};
|
||||
|
||||
run_make_test('
|
||||
tst = $(eval export X123)
|
||||
$(call tst)
|
||||
all: ; @echo "$${X123-not set}"
|
||||
',
|
||||
'', "\n");
|
||||
|
||||
1;
|
||||
|
||||
### Local Variables:
|
||||
### eval: (setq whitespace-action (delq 'auto-cleanup whitespace-action))
|
||||
### End:
|
Loading…
Add table
Add a link
Reference in a new issue