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