1#! /usr/bin/perl -w
2
3use strict;
4
5use File::Temp qw/tempfile/;
6
7use FileHandle;
8
9my $prefix = "j";
10
11if (-f "./ex_dir_list")
12  { $prefix = "./ex_"; }
13
14my $dir_name = undef;
15
16use Getopt::Long;
17use Pod::Usage;
18
19my $man = 0;
20my $help = 0;
21
22my $filter_def_args = "-A .. --deny-name-beg . -D index.html -D dir_list.css --acpt-name-end .tar.gz --deny-name-end .gz --acpt-name-end .tar.bz2 --deny-name-end .bz2 --deny-name-end .tmp --deny-name-end '~' --deny-name-end '#'";
23my $filter_args = $filter_def_args;
24
25my $sort_def_args = "--sort=version";
26my $sort_args = $sort_def_args;
27my $html_def_args = "--css-filename http://www.and.org/dir_list.css";
28my $html_args = $html_def_args;
29my $index_loc = undef;
30
31pod2usage(0) if !
32GetOptions ("filter-args=s@" => \$filter_args,
33	    "sort-args=s@" => \$sort_args,
34	    "html-args=s@" => \$html_args,
35	    "dir-name|dirname|d=s" => \$dir_name,
36	    "output|o=s" => \$index_loc,
37	    "prefix-exes|P=s" => \$prefix,
38	    "help|?"   => \$help,
39	    "man"      => \$man);
40pod2usage(-exitstatus => 0, -verbose => 1) if $help;
41pod2usage(-exitstatus => 0, -verbose => 2) if $man;
42
43if (ref $filter_args)
44  { $filter_args = join " ", map { $_ eq "--default" ? $filter_def_args : $_ }
45                             @$filter_args; }
46if (ref $sort_args)
47  { $sort_args   = join " ", map { $_ eq "--default" ? $sort_def_args   : $_ }
48                             @$sort_args; }
49if (ref $html_args)
50  { $html_args   = join " ", map { $_ eq "--default" ? $html_def_args   : $_ }
51                             @$html_args; }
52
53pod2usage(0) if (scalar @ARGV != 1);
54
55my $dir_loc   = shift @ARGV;
56
57pod2usage(0) if (! -d $dir_loc);
58
59if (!defined ($index_loc))
60  { $index_loc = $dir_loc . "/index.html"; }
61if (!defined ($dir_name))
62  {
63    $dir_name = $dir_loc;
64    $dir_name =~ m!/([^/]+)/*$!;
65    if ($1 ne '')
66      { $dir_name = $1; }
67    else
68      { $dir_name = "Unknown"; }
69  }
70
71$dir_loc   =~ s/'/'"'"'/g;
72$dir_name  =~ s/'/'"'"'/g;
73$index_loc =~ s/'/'"'"'/g;
74
75my $cmds = <<EOL;
76 ${prefix}dir_list --size --follow -- '$dir_loc' | \
77 ${prefix}dir_filter $filter_args | \
78 ${prefix}dir_sort $sort_args | \
79 ${prefix}dir_list2html --name '$dir_name' $html_args > '$index_loc'
80EOL
81
82system($cmds);
83
84__END__
85
86=head1 NAME
87
88make_index.pl - Make index.html files from directories
89
90=head1 SYNOPSIS
91
92make_index.pl [options] <dir>
93
94 Options:
95  --help -?         brief help message
96  --man             full documentation
97  --filter-args     Filter arguments
98  --sort-args       Sort arguments
99  --html-args       HTML conversion arguments
100  --dir-name        Directory name
101  --prefix-exes     prefix for executables
102
103=head1 OPTIONS
104
105=over 8
106
107=item B<--help>
108
109Print a brief help message and exits.
110
111=item B<--man>
112
113Prints the manual page and exits.
114
115=item B<--filter-args>
116
117Args to pass the dir_filter.
118
119=item B<--sort-args>
120
121Args to pass the dir_sort.
122
123=item B<--html-args>
124
125Args to pass the dir_list2html.
126
127=item B<--dir-name>
128
129Name of directory for the title.
130
131=item B<--prefix>
132
133Prefix to add the executable names (can be a path).
134
135=back
136
137
138=head1 DESCRIPTION
139
140B<make_index.pl> will create index.html files from a given directory.
141 It filters the filenames in the directory and can use an executable prefix.
142
143B<make_index.pl> calls the programs dir_list, dir_filter, dir_sort and
144dir_list2html.
145
146=cut
147