### SPAR ### 191 421 1162935563 1217791125 RootMakeppfile # # This file tests the builtin commands. # # Test &rm by specifying dirs first and deleting answers for files we never create $(phony all): a b c \ dir2/c dir2/d dir2/subdir/c dir2/subdir/d dir2/subdir/d1 install_log \ c[au]t.out echo.out sed.out expr.out grep.out sort.out template.out uniq.out uc.out \ preprocess.out &rm -fv bogus answers/bogus answers/bogus/subdir answers/bogus/file answers/bogus/subdir/file IGNINST = ifperl ((stat 'RootMakeppfile')[2] & 01777) != 0421 CHMOD = @&echo chmod not working, //server/share? CHMODTEST = perl { unlink 'answers/install_log' } ifnsys cygwin IGNINST = - # Because &install fails if chmod() does endif else CHMOD = &chmod CHMODTEST = perl { ((stat 'b')[2] & 0777) == 0664 && ((stat 'c')[2] & 0777) == 0750 or die } endif # Test comment on same line and &touch a b: &touch -v $(outputs) # tab comment $(CHMOD) -v 664 $(outputs) # space comment # Test that &ln -f removes an empty dir and &chmod c: dir1/c b &ln -v --force $(input) . &ln -fv RootMakeppfile dir1 $(CHMOD) 750 c $(CHMODTEST) # Test &mkdir -p implicitly also making parent and -A dir2/subdir dir2: &echo -o $(mktemp) -- -vpfm750 &mkdir -A $(mktemp /) $(output) # Test &ln dir2/c: dir1/c dir2 &ln -v $(input) $(dir $(output)) # Test &ln -s dir2/d: dir1/d dir2 &ln --verbose --symbolic ../$(input) $(output) # Test &ln -r dir2/subdir/c dir2/subdir/d: dir1/c dir1/d dir2 &ln --verbose --resolve $(wordlist 1, 2, $(inputs)) $(dir $(output)) # Test &ln -r with short opts dir2/subdir/d1: dir1/d dir2 &ln -vr $(input) $(output) # Test &sed and -r0 # helper variable for sed what = just %.out: %.in uniq.in &perl -r0 'print tr/a-e//d, ":"' $(inputs) --output=$(output) &perl 'print "$$.\n"' $(input) --output=>>$(output) &sed -v s/$$what/only/o $(input) --output=>>$(output) &sed -v 'chomp; $$_ .= "|" . reverse . "\n"' -o +<$(output) # Test complicated variant of &cat with missing newline and multi line file. cat.out: sed.in uniq.in &cat --sync-lines $(inputs 1 2 1) -o $(output) # Test various variants of &cut cut.out: cut.in &cut -vf1..-2 -d\ $(input) -o $(output) &cut -vmp '%s\0%3s\0%2s\n' -f1,3,-1 -d\ $(input) -o >>$(output) &cut -vmf16 -d\ $(input) -o >>$(output) &cut -vf1 -sdf $(input) -o >>$(output) &cut -vc0,1,4..6,11..-1 $(input) -o >>$(output) &cut -vl1,4,6..-5 $(input) -o >>$(output) &cut -vSmf1 -dF $(input) -o >>$(output) &cut -vSl1,-2 $(input) uniq.in -o >>$(output) # Test various variants of &echo and its siblings echo.out: &echo -o $(output) - -- no options - -n -o $(output) &echo -nE aa\\tbb \# no comment! -o >>$(output) # NUL is the only code portable to EBCDIC &echo 'aa\tbb\x00cc\x{0000}dd\000ee' -o >>$(output) &printf -E '%03d\t%02.2f:%s:' 5 5 '\123' -o >>$(output) &printf '%03d\t%02.2f:%s:\n' 5 5 '\123' -o >>$(output) ifnsys MSWin* &yes Hi there! -o '| read x; echo $$x >>$(output)' &yes -o '| read x; read y; echo $$x $$y >>$(output)' else # Complex Shell command not available on native Windows. &echo 'Hi there!\ny y' -o >>$(output) endif # Test arithmetic, logical and string &expr expr.out: -&expr -n 8 - 3 * 2 - 2 -o $(output) &expr 8 - 3 * 2 > 1 && "'joy'" || \'sorrow\' -o >>$(output) # Test various variants of &grep sub choose_a { /a/ } grep.out grep.o grep.ou: grep.in &grep --separator=, /a/ grep.in -o grep.o -w grep.waste &grep -co '>>grep.o' /a/ template.tmpl &grep --vice-versa -s, /a/ grep.in -o '>>grep.o' &grep -r3 /a/ grep.in -o '>>grep.o' &grep -vco '>>grep.o' &choose_a template.tmpl &grep -l /[Jj]ust/ RootMakeppfile sed.in template.tmpl -o '>>grep.o' &echo -o '>>grep.o' &grep -vl /[Jj]ust/ RootMakeppfile sed.in template.tmpl -o '>>grep.o' &echo -o '>>grep.o' &grep -vvl /[Jj]ust/ RootMakeppfile grep.in template.tmpl uniq.in -o '>>grep.o' &cp -vfl grep.o grep.ou &cp -v grep.ou grep.ou1 &mv -v grep.ou1 $(output) # Test &sort perl { sub transform { $_ = ((split)[1] || '')."\0$_" } sub detransform { (split "\0")[1] }} sort.out: template.tmpl ifperl 'a' lt 'A' # Ebcdic, sorts differently &cp -l answers/sort.out . else &sort $(input) -o $(output) &echo + -o >>$(output) &sort --compare '$$b cmp $$a' $(input) -o >>$(output) &echo + -o >>$(output) &sort -t '$$_ = [lc, $$_]' -c '$$a->[0] cmp $$b->[0]' -d '$$_->[1]' $(input) -o >>$(output) &echo + -o >>$(output) &sort -t &transform -d &detransform $(input) -o >>$(output) &echo +++ -o >>$(output) &sort --uniq $(input) $(input) -o >>$(output) &echo + -o >>$(output) &sort --unique --compare '$$b cmp $$a' $(input) $(input) -o >>$(output) &echo + -o >>$(output) &sort -ut '$$_ = [lc, $$_]' -c '$$a->[0] cmp $$b->[0]' -d '$$_->[1]' $(input) $(input) -o >>$(output) &echo + -o >>$(output) &sort -urt transform -d detransform $(input) $(input) -o >>$(output) &echo + -o >>$(output) &sort -uc 'ord( $$a ) <=> ord $$b' $(input) -o >>$(output) endif # Test &template perl { %hash = (aa => 1, aaa => "1\n2", TITLE => 'Test') } %.out: title.tmpl %.tmpl &template -v -o $(output) -h\\%hash THIS=foo THAT=bar:$$1: $(inputs) &template -dv --simple=|<|/>| --multiline=|<|>|| -h '+{%hash, bb => 2}' template.xml -o >>$(output) &template -vS -o >>$(output) -h\\%hash THIS=foo THAT=bar:$$1: $(input 2) # Test &uniq # helper function for --compare sub c0(\$) { substr ${$_[0]}, 0, 1 } uniq.out: uniq.in sed.in &uniq $(input) -o $(output) &uniq -c 'c0( $$a ) ne c0 $$b' $(input) -o >>$(output) &uniq -S $(inputs 2 1) -o >>$(output) &uniq -S $(inputs 1 1) -o >>$(output) # Must reemit file name first time. install_log: &rm -f .install_log installog &install --directory --mode=750 dest $(IGNINST)&install -v --mode=640 grep.in dest $(IGNINST)&install -vc --log installog --mode=666 sed.in dest/foobar &sed 's/^[^ ].*/date/; s|`[^`]+(?=/dest)|`...|' .install_log installog -o install_log &uninstall -v &uninstall -v installog @perl { and die "uninstall failed\n" } # Test own command with frame and loaded fom a module perl { use mymodule } uc.out: uniq.in &uc -v $(input) -o $(output) preprocess.out: preprocess.test &preprocess -v v4=foobar -h\\%hash preprocess.test -o preprocess.out &preprocess -va v2=xyz preprocess.test -o >>preprocess.out ### 13 644 1141068683 1140901286 mymodule.pm package mymodule; require Exporter; our @ISA = 'Exporter'; our @EXPORT = 'c_uc'; sub c_uc { local @ARGV = @_; Mpp::Cmds::frame { print "\u\L$_" while <>; } 'f', qw(i I o O r s); # fails in 5.6: qw(f i I o O r s); } 1; ### -12 644 1134923188 1134923188 cut.in ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ !"# $%&' ()*+ ,-./ 0123 4567 89:; <=>? @ABC DEFG HIJK LMNO PQRS TUVW XYZ[ \]^_ `abc defg hijk lmno pqrs tuvw xyz{ |}~ ### 0 644 1107332258 1105783994 dir2 ### 1 644 1107332258 1107331351 grep.in aha,foo,bar,with a,without ### 22 644 1153676973 1181388272 preprocess.test # empty & comment $() $()# empty & comment not gone con- \$() tinuation no \ continuation v1 += 5 override v2 := $(v1) define v3 long var enddef $()v4 = 1 show aa = $(aa); v1 = $(v1); v2 = $(v2); v3 = $(v3); v4 = $(v4) $()include plain text ifeq $(v1),5 -include $( preprocess.test) # Force expand text, which didn't initially work. endif ### -1 644 1107332258 1105995922 sed.in just some text ### 7 644 1107332258 1106072810 template.tmpl Just a silly test to see if @THIS@ and @aaa@ all @@THIS@@ and this@@ before here @@THAT(stuff)@@ foo bar goner @@ gets replaced. 1 + 2 = @{ 1 + 2 }@ ### 7 644 1113205406 1113205406 template.xml <{ 1 + 2 }/> foo bar ### 7 644 1107332258 1106067541 title.tmpl @UNDEF@@field=Title@\ @TITLE?=nothing@\ @field@\ @field { ' ' . ($_[0]+1) . " is$_[1]" }@\ @n=0@\ @field(@n@,:)@ @TITLE@ -------------------- ### 5 644 1112771877 1112771877 uniq.in aa aa b bb bcd ### D 755 1107332258 1105873176 c/ ### D 755 1107332258 1105741386 dir1/ ### 1 644 1107332258 1105741331 dir1/c c ### 1 644 1107332258 1105741386 dir1/d d ### D 755 1172254968 1172254974 answers/ ### 0 644 1107332258 1105741346 answers/a ### 0 644 1107332258 1105741350 answers/b ### 1 644 1107332258 1105873176 answers/c c ### -10 644 1191603652 1191603922 answers/cat.out #line 1 "sed.in" just some text #line 1 "uniq.in" aa aa b bb bcd #line 1 "sed.in" just some text ### 48 644 1134924208 1217791214 answers/cut.out ! " # $ % & ' ( ) * + , - . 1 2 3 4 5 6 7 8 9 : ; < = > A B C D E F G H I J K L M N Q R S T U V W X Y Z [ \ ] ^ a b c d e f g h i j k l m n q r s t u v w x y z { | } 0123 4567 89:; <=>? @ABC DEFG HIJK LMNO PQRS TUVW XYZ[ \]^_ `abc defg hijk lmno pqrs tuvw xyz{ |}~ " / 1 3 ? A C O Q S _ a c o q s ~ / g h i j k l m n o g hijk lmno " # & ' ( ) * + , - . / 0 2 3 6 7 8 9 : ; < = > ? @ B C F G H I J K L M N O P R S V W X Y Z [ \ ] ^ _ ` b c f g h i j k l m n o p r s v w x y z { | } ~ ! $%)*+ ,-./ 01 459:; <=>? @A DEIJK LMNO PQ TUYZ[ \]^_ `a deijk lmno pq tuyz{ |}~ ! " # $ % & ' ( ) * + , - . / P Q R S T U V W X Y Z [ \ ] ^ _ p q r s t u v w x y z { | } ~ !"# $%&' ()*+ ,-./ 0123 4567 89:; <=>? #line 3 "cut.in" G H I J K L M N O #line 9 G HIJK LMNO #line 1 "cut.in" ! " # $ % & ' ( ) * + , - . / #line 11 `abc defg hijk lmno #line 1 "uniq.in" aa #line 4 bb ### 5 644 1112222831 1112222831 answers/echo.out - no options - -n -o echo.out aa\tbb # no comment!aa bbccddee 005\t5.00:\123:005 5.00:\123: Hi there! y y ### 1 644 1107332258 1105998624 answers/expr.out 0joy ### 12 644 1139267891 1107332362 answers/grep.out aha,bar,with a,4 foo,without ahaar,h a3 RootMakeppfile sed.in template.tmpl RootMakeppfile template.tmpl grep.in uniq.in ### 1 644 1172254973 1172254973 answers/grep.waste foo,without ### 8 644 1135411294 1135030728 answers/install_log date create directory `.../dest' date move `grep.in' to `.../dest/grep.in' set mode for `.../dest/grep.in' date copy `sed.in' to `.../dest/foobar' set mode for `.../dest/foobar' ### 1 644 1107332258 1106296317 answers/n_files 24 1 0 ### 27 644 1153678733 1153342165 answers/preprocess.out # empty & comment not gone con- \ tinuation no continuation v1 += 5 override v2 := define v3 long var enddef v4 = 1 show aa = 1; v1 = ; v2 = ; v3 = ; v4 = foobar include plain text # empty & comment not gone con- \ tinuation no continuation show aa = ; v1 = 5; v2 = 5; v3 = long var; v4 = 1 include plain text # empty & comment not gone con- \ tinuation no continuation show aa = ; v1 = 5 5; v2 = 5 5; v3 = long var; v4 = 1 include plain text ### 2 644 1139987227 1217368876 answers/sed.out 2:10:1|1:01:2 only some text|txet emos ylno ### 69 644 1137661544 1134935825 answers/sort.out @@ @@THAT(stuff)@@ Just a silly test to see if @THIS@ and @aaa@ all @@THIS@@ and this@@ before here foo bar gets replaced. 1 + 2 = @{ 1 + 2 }@ goner + goner gets replaced. 1 + 2 = @{ 1 + 2 }@ foo bar all @@THIS@@ and this@@ before here Just a silly test to see if @THIS@ and @aaa@ @@THAT(stuff)@@ @@ + @@ @@THAT(stuff)@@ all @@THIS@@ and this@@ before here foo bar gets replaced. 1 + 2 = @{ 1 + 2 }@ goner Just a silly test to see if @THIS@ and @aaa@ + @@ @@THAT(stuff)@@ goner all @@THIS@@ and this@@ before here Just a silly test to see if @THIS@ and @aaa@ foo bar gets replaced. 1 + 2 = @{ 1 + 2 }@ +++ @@ @@THAT(stuff)@@ Just a silly test to see if @THIS@ and @aaa@ all @@THIS@@ and this@@ before here foo bar gets replaced. 1 + 2 = @{ 1 + 2 }@ goner + goner gets replaced. 1 + 2 = @{ 1 + 2 }@ foo bar all @@THIS@@ and this@@ before here Just a silly test to see if @THIS@ and @aaa@ @@THAT(stuff)@@ @@ + @@ @@THAT(stuff)@@ all @@THIS@@ and this@@ before here foo bar gets replaced. 1 + 2 = @{ 1 + 2 }@ goner Just a silly test to see if @THIS@ and @aaa@ + gets replaced. 1 + 2 = @{ 1 + 2 }@ foo bar Just a silly test to see if @THIS@ and @aaa@ all @@THIS@@ and this@@ before here goner @@THAT(stuff)@@ @@ + @@THAT(stuff)@@ Just a silly test to see if @THIS@ and @aaa@ all @@THIS@@ and this@@ before here foo bar goner ### 20 644 1107332258 1181388408 answers/template.out Title 1 is: Test -------------------- Just a silly test to see if foo and 1 2 all foo before here bar:stuff: gets replaced. 1 + 2 = 3 1 2 3 4 #line 1 "template.tmpl" Just a silly test to see if foo and 1 #line 1 2 all foo before here #line 6 bar:stuff: gets replaced. 1 + 2 = 3 ### 5 644 1140901721 1140901721 answers/uc.out Aa Aa B Bb Bcd ### 26 644 1112771877 1180279531 answers/uniq.out aa b bb bcd aa b #line 1 "sed.in" just some text #line 1 "uniq.in" aa #line 3 b bb bcd #line 1 "uniq.in" aa #line 3 b bb bcd #line 1 aa #line 3 b bb bcd ### D 755 1109777984 1109777998 answers/bogus/ ### 0 644 1109777998 1109777998 answers/bogus/file ### D 755 1109777984 1109777984 answers/bogus/subdir/ ### 0 644 1109777998 1109777998 answers/bogus/subdir/file ### D 755 1107332258 1105873176 answers/dir2/ ### 1 644 1107332258 1105741331 answers/dir2/c c ### 1 644 1107332258 1105741407 answers/dir2/d d ### D 755 1107332258 1105741407 answers/dir2/subdir/ ### 1 644 1107332258 1105741407 answers/dir2/subdir/c c ### 1 644 1107332258 1105873176 answers/dir2/subdir/d d ### 1 644 1107332258 1105871996 answers/dir2/subdir/d1 d