1 1.1 simonb #!/usr/bin/env perl 2 1.1 simonb use strict; 3 1.1 simonb 4 1.1 simonb # Create a test file. 5 1.1 simonb # Wrapper for lesstest, using most common options. 6 1.1 simonb my $usage = "usage: maketest [-o lt-file] [-l less.exe] [-s lt_screen] [-t lesstest] [-w width] [-h height] [-O lesstest-opts] [-S lt_screen-opts] textfile\n"; 7 1.1 simonb 8 1.1 simonb use Getopt::Std; 9 1.1 simonb 10 1.1 simonb exit main(); 11 1.1 simonb sub main { 12 1.1 simonb my %opt; 13 1.1 simonb die $usage if not getopts('h:l:o:O:s:S:t:w:v', \%opt); 14 1.1 simonb my $textfile = shift @ARGV; 15 1.1 simonb die $usage if not defined $textfile; 16 1.1 simonb my $lesstest = ($opt{t} or "./lesstest"); 17 1.1 simonb my $lt_screen = ($opt{s} or "./lt_screen"); 18 1.1 simonb my $less = ($opt{l} or "../obj/less"); 19 1.1 simonb my $lines = ($opt{h} or $ENV{LINES}-1); 20 1.1 simonb my $columns = ($opt{w} or $ENV{COLUMNS}-1); 21 1.1 simonb my $verbose = ($opt{v} or 0); 22 1.1 simonb my $lt_opts = opts($opt{O} or ""); 23 1.1 simonb my $ls_opts = opts($opt{S} or ""); 24 1.1 simonb my $ltfile = $opt{o}; 25 1.1 simonb my $linked = 0; 26 1.1 simonb if (not less_is_test($less)) { 27 1.1 simonb print "$less is not compiled to support LESSTEST\n"; 28 1.1 simonb my ($dir) = $less =~ m|^(.*)/[^/]*$|; 29 1.1 simonb print "To fix: cd $dir; make clean; make LESSTEST=1\n"; 30 1.1 simonb exit 1; 31 1.1 simonb } 32 1.1 simonb if ($textfile =~ m|/|) { 33 1.1 simonb my ($basename) = $textfile =~ m|^.*/([^/]+)$|; 34 1.1 simonb if (not link $textfile, $basename) { 35 1.1 simonb print "cannot link $textfile to $basename: $!\n"; 36 1.1 simonb exit 1; 37 1.1 simonb } 38 1.1 simonb $linked = 1; 39 1.1 simonb $textfile = $basename; 40 1.1 simonb } 41 1.1 simonb if (not defined $ltfile) { 42 1.1 simonb for (my $i = 0;; ++$i) { 43 1.1 simonb my $suffix = $i ? $i : ""; 44 1.1 simonb $ltfile = "lt/$textfile$suffix.lt"; 45 1.1 simonb last if not -e $ltfile; 46 1.1 simonb } 47 1.1 simonb } 48 1.1 simonb $ls_opts = "-S$ls_opts" if $ls_opts; 49 1.1 simonb my $cmd = "LINES=$lines COLUMNS=$columns $lesstest $lt_opts $ls_opts -s '$lt_screen' -o '$ltfile' -- $less '$textfile'"; 50 1.1 simonb print "$cmd\n" if $verbose; 51 1.1 simonb my $err = system($cmd); 52 1.1 simonb if ($err) { 53 1.1 simonb unlink $ltfile; 54 1.1 simonb } else { 55 1.1 simonb print "created $ltfile\n"; 56 1.1 simonb } 57 1.1 simonb unlink $textfile if $linked; 58 1.1 simonb exit $err; 59 1.1 simonb } 60 1.1 simonb 61 1.1 simonb sub opts { 62 1.1 simonb my ($opts) = @_; 63 1.1 simonb $opts = "-$opts" if $opts =~ /^[^-]/; 64 1.1 simonb return $opts; 65 1.1 simonb } 66 1.1 simonb 67 1.1 simonb sub less_is_test { 68 1.1 simonb my ($less) = @_; 69 1.1 simonb my $ver = `$less -V`; 70 1.1 simonb return $ver =~ /LESSTEST/; 71 1.1 simonb } 72