]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lesstest/maketest
Vendor import of less v643.
[FreeBSD/FreeBSD.git] / lesstest / maketest
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 }