Home | History | Annotate | Line # | Download | only in lesstest
      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