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