Commit | Line | Data |
---|---|---|
01c223d0 BOFG |
1 | ##--------------------------------------------------------------------------## |
2 | ## File: | |
3 | ## $Id: Util.pm,v 1.5 2002/09/13 07:24:18 ehood Exp $ | |
4 | ## Description: | |
5 | ## POD at end of file. | |
6 | ##--------------------------------------------------------------------------## | |
7 | ## Copyright (C) 2002 Earl Hood <earl@earlhood.com> | |
8 | ## | |
9 | ## This program is free software; you can redistribute it and/or modify | |
10 | ## it under the terms of the GNU General Public License as published by | |
11 | ## the Free Software Foundation; either version 2 of the License, or | |
12 | ## (at your option) any later version. | |
13 | ## | |
14 | ## This program is distributed in the hope that it will be useful, | |
15 | ## but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | ## GNU General Public License for more details. | |
18 | ## | |
19 | ## You should have received a copy of the GNU General Public License | |
20 | ## along with this program; if not, write to the Free Software | |
21 | ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
22 | ## 02111-1307, USA | |
23 | ##--------------------------------------------------------------------------## | |
24 | ||
25 | package MHArc::Util; | |
26 | ||
27 | use Exporter; | |
28 | @ISA = qw(Exporter); | |
29 | ||
30 | @EXPORT_OK = qw( | |
31 | &ch_dir | |
32 | &cmd | |
33 | &exec_prg | |
34 | &mk_dir | |
35 | &run_prg | |
36 | &usage | |
37 | ); | |
38 | ||
39 | ##--------------------------------------------------------------------------## | |
40 | ||
41 | BEGIN { | |
42 | $ECHO_CMDS = 0; | |
43 | $ECHO_ONLY = 0; | |
44 | } | |
45 | ||
46 | ##--------------------------------------------------------------------------## | |
47 | ||
48 | sub cmd { | |
49 | print "@_\n" if $ECHO_CMDS || $ECHO_ONLY; | |
50 | if ($ECHO_ONLY) { | |
51 | return 0; # bogus ok exit status | |
52 | } | |
53 | system @_; | |
54 | } | |
55 | ||
56 | sub ch_dir { | |
57 | my $dir = shift; | |
58 | print "chdir $dir\n" if $ECHO_CMDS || $ECHO_ONLY; | |
59 | if ($ECHO_ONLY) { | |
60 | return 0; | |
61 | } | |
62 | chdir $dir; | |
63 | } | |
64 | ||
65 | sub run_prg { | |
66 | print "@_\n" if $ECHO_CMDS || $ECHO_ONLY; | |
67 | if (!$ECHO_ONLY) { | |
68 | my $wait = system @_; | |
69 | die qq/system @_ failed: $?\n/ if $wait; | |
70 | } | |
71 | } | |
72 | ||
73 | sub mk_dir { | |
74 | my $dir = shift; | |
75 | my $mask = shift; | |
76 | print "mkdir $dir\n" if $ECHO_CMDS || $ECHO_ONLY; | |
77 | ||
78 | if ($ECHO_ONLY) { | |
79 | return 0; | |
80 | } else { | |
81 | if (defined($mask)) { | |
82 | mkdir $dir, $mask; | |
83 | } else { | |
84 | mkdir $dir, 0777; | |
85 | } | |
86 | } | |
87 | } | |
88 | ||
89 | sub exec_prg { | |
90 | print "@_\n" if $ECHO_CMDS || $ECHO_ONLY; | |
91 | if ($ECHO_ONLY) { | |
92 | exit 0; | |
93 | } else { | |
94 | exec(@_); | |
95 | die qq/exec @_ failed: $?\n/; | |
96 | } | |
97 | } | |
98 | ||
99 | sub usage { | |
100 | require Pod::Usage; | |
101 | my $verbose = shift; | |
102 | if ($verbose == 0) { | |
103 | Pod::Usage::pod2usage(-verbose => $verbose); | |
104 | } else { | |
105 | my $pager = $ENV{'PAGER'} || 'more'; | |
106 | local(*PAGER); | |
107 | my $fh = (-t STDOUT && open(PAGER, "|$pager")) ? \*PAGER : \*STDOUT; | |
108 | Pod::Usage::pod2usage(-verbose => $verbose, | |
109 | -output => $fh); | |
110 | } | |
111 | } | |
112 | ||
113 | ##--------------------------------------------------------------------------## | |
114 | 1; | |
115 | __END__ | |
116 | ||
117 | =head1 NAME | |
118 | ||
119 | MHArc::Util - General utilities for mail archiving system. | |
120 | ||
121 | =head1 SYNOPSIS | |
122 | ||
123 | use MHArc::Util; | |
124 | ||
125 | =head1 DESCRIPTION | |
126 | ||
127 | This module contains a collection of utility routines. | |
128 | ||
129 | =head1 VARIABLES | |
130 | ||
131 | The following module variables can be set to affect the behavior | |
132 | of the utility routines: | |
133 | ||
134 | =over | |
135 | ||
136 | =item C<$ECHO_CMDS> | |
137 | ||
138 | If set to a true value, any routines that execute shell commands, | |
139 | or external programs, will print the command to be executed to the | |
140 | default filehandle. | |
141 | ||
142 | The default value for C<$ECHO_CMDS> is 0. | |
143 | ||
144 | =item C<$ECHO_ONLY> | |
145 | ||
146 | If set to a true value, any routines that execute shell commands, | |
147 | will only print the command to be executed to the default filehandle | |
148 | if C<$ECHO_CMDS> is true. The command itself will not be | |
149 | executed at all. | |
150 | ||
151 | The default value for C<$ECHO_ONLY> is 0. | |
152 | ||
153 | =back | |
154 | ||
155 | =head1 ROUTINES | |
156 | ||
157 | By default, no routines are exported into the calling namespace. | |
158 | Routines in this module can be imported by explicitly listing the | |
159 | routines to import in the C<use> declaration: | |
160 | ||
161 | use MHArc::Util qw( run_prg ); | |
162 | ||
163 | The following routines are availale: | |
164 | ||
165 | =over | |
166 | ||
167 | =item C<ch_dir($dir)> | |
168 | ||
169 | Change the current working directory. | |
170 | ||
171 | =item C<cmd(LIST)> | |
172 | ||
173 | Execute external program. The return value is the wait(2) status | |
174 | of the program invoked. | |
175 | ||
176 | =item C<mk_dir($dir, $mask)> | |
177 | ||
178 | Create specified directory. C<$mask> is optional, and if | |
179 | not specified, will default to C<0777>. | |
180 | ||
181 | =item C<run_prg(LIST)> | |
182 | ||
183 | Execute external program and terminate process if program returns | |
184 | a non-zero status. | |
185 | ||
186 | =item C<usage($verbosity)> | |
187 | ||
188 | Display usage information of program based upon embedded POD. | |
189 | The C<$verbosity> argument has the same meaning as the C<-verbose> | |
190 | option to C<Pod::Usage::pod2usage>. | |
191 | ||
192 | =back | |
193 | ||
194 | =head1 VERSION | |
195 | ||
196 | C<$Id: Util.pm,v 1.5 2002/09/13 07:24:18 ehood Exp $> | |
197 | ||
198 | =head1 AUTHOR | |
199 | ||
200 | Earl Hood, earl@earlhood.com | |
201 | ||
202 | This module is part of the mharc archiving system and comes with | |
203 | ABSOLUTELY NO WARRANTY and may be copied only under the terms of | |
204 | the GNU General Public License, which may be found in the mharc | |
205 | distribution. | |
206 | ||
207 | =cut | |
208 |