summaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-extended/mime-construct
diff options
context:
space:
mode:
Diffstat (limited to 'meta-networking/recipes-extended/mime-construct')
-rw-r--r--meta-networking/recipes-extended/mime-construct/files/Signal.pm132
-rw-r--r--meta-networking/recipes-extended/mime-construct/files/WaitStat.pm178
-rw-r--r--meta-networking/recipes-extended/mime-construct/mime-construct_1.11.bb29
3 files changed, 339 insertions, 0 deletions
diff --git a/meta-networking/recipes-extended/mime-construct/files/Signal.pm b/meta-networking/recipes-extended/mime-construct/files/Signal.pm
new file mode 100644
index 000000000..9280e8868
--- /dev/null
+++ b/meta-networking/recipes-extended/mime-construct/files/Signal.pm
@@ -0,0 +1,132 @@
1# $Id: Signal.pm,v 1.4 1998-10-27 16:16:13-05 roderick Exp $
2#
3# Copyright (c) 1997 Roderick Schertler. All rights reserved. This
4# program is free software; you can redistribute it and/or modify it
5# under the same terms as Perl itself.
6
7package IPC::Signal;
8
9use 5.003_94; # __PACKAGE__
10use strict;
11use vars qw($VERSION @ISA @EXPORT_OK $AUTOLOAD %Sig_num @Sig_name);
12
13require Exporter;
14
15$VERSION = '1.00';
16@ISA = qw(Exporter);
17@EXPORT_OK = qw(sig_num sig_name sig_translate_setup %Sig_num @Sig_name);
18%Sig_num = ();
19@Sig_name = ();
20
21sub sig_num ($);
22sub sig_name ($);
23
24sub sig_translate_setup () {
25 return if %Sig_num && @Sig_name;
26
27 require Config;
28
29 # In 5.005 the sig_num entries are comma separated and there's a
30 # trailing 0.
31 my $num = $Config::Config{'sig_num'};
32 if ($num =~ s/,//g) {
33 $num =~ s/\s+0$//;
34 }
35
36 my @name = split ' ', $Config::Config{'sig_name'};
37 my @num = split ' ', $num;
38
39 @name or die 'No signals defined';
40 @name == @num or die 'Signal name/number mismatch';
41
42 @Sig_num{@name} = @num;
43 keys %Sig_num == @name or die 'Duplicate signal names present';
44 for (@name) {
45 $Sig_name[$Sig_num{$_}] = $_
46 unless defined $Sig_name[$Sig_num{$_}];
47 }
48}
49
50# This autoload routine just is just for sig_num() and sig_name(). It
51# calls sig_translate_setup() and then snaps the real function definitions
52# into place.
53
54sub AUTOLOAD {
55 if ($AUTOLOAD ne __PACKAGE__ . '::sig_num'
56 && $AUTOLOAD ne __PACKAGE__ . '::sig_name') {
57 require Carp;
58 Carp::croak("Undefined subroutine &$AUTOLOAD called");
59 }
60 sig_translate_setup;
61 *sig_num = sub ($) { $Sig_num{$_[0]} };
62 *sig_name = sub ($) { $Sig_name[$_[0]] };
63 goto &$AUTOLOAD;
64}
65
661
67
68__END__
69
70=head1 NAME
71
72IPC::Signal - Utility functions dealing with signals
73
74=head1 SYNOPSIS
75
76 $number = sig_num $name;
77 $name = sig_name $number;
78
79 sig_translate_setup;
80 $number = $Sig_num{$name};
81 $name = $Sig_name[$number];
82
83=head1 DESCRIPTION
84
85This module contains utility functions for dealing with signals.
86
87Nothing is exported by default.
88
89=over
90
91=item B<sig_num> I<chopped-signal-name>
92
93Returns the signal number of the signal whose name (sans C<SIG>) is
94I<chopped-signal-name>, or undef if there is no such signal.
95
96This function is prototyped to take a single scalar argument.
97
98=item B<sig_name> I<signal-number>
99
100Returns the chopped signal name (like C<HUP>) of signal number
101I<signal-number>, or undef if there is no such signal.
102
103This function is prototyped to take a single scalar argument.
104
105=item B<sig_translate_setup>
106
107If you want to use the @Sig_name and %Sig_num variables directly you must
108call B<sig_translate_setup> to initialize them. This isn't necessary if
109you only use the function interfaces sig_name() and sig_num().
110
111This function is prototyped to take no arguments.
112
113=item B<%Sig_num>
114
115A hash with chopped signal name keys (like C<HUP>) and integer signal
116number values.
117
118=item B<@Sig_name>
119
120An array mapping signal numbers to chopped signal names (like C<HUP>).
121
122=back
123
124=head1 AUTHOR
125
126Roderick Schertler <F<roderick@argon.org>>
127
128=head1 SEE ALSO
129
130perl(1).
131
132=cut
diff --git a/meta-networking/recipes-extended/mime-construct/files/WaitStat.pm b/meta-networking/recipes-extended/mime-construct/files/WaitStat.pm
new file mode 100644
index 000000000..337e52a70
--- /dev/null
+++ b/meta-networking/recipes-extended/mime-construct/files/WaitStat.pm
@@ -0,0 +1,178 @@
1# $Id: WaitStat.pm,v 1.3 1999-10-21 12:39:43-04 roderick Exp $
2#
3# Copyright (c) 1997 Roderick Schertler. All rights reserved. This
4# program is free software; you can redistribute it and/or modify it
5# under the same terms as Perl itself.
6
7=head1 NAME
8
9Proc::WaitStat - Interpret and act on wait() status values
10
11=head1 SYNOPSIS
12
13 $description = waitstat $?;
14 exit waitstat_reuse $?;
15 waitstat_die $?, 'program-name';
16 close_die COMMAND, 'program-name';
17
18=head1 DESCRIPTION
19
20This module contains functions for interpreting and acting on wait
21status values.
22
23Nothing is exported by default.
24
25=over
26
27=cut
28
29package Proc::WaitStat;
30
31use 5.003_98; # piped close errno resetting
32use strict;
33use vars qw($VERSION @ISA @EXPORT_OK);
34
35use Carp qw(croak);
36use Exporter ();
37use IPC::Signal qw(sig_name);
38use POSIX qw(:sys_wait_h);
39
40$VERSION = '1.00';
41@ISA = qw(Exporter);
42@EXPORT_OK = qw(waitstat waitstat_reuse waitstat_die close_die);
43
44=item B<waitstat> I<wait-status>
45
46Returns a string representation of wait() status value I<wait-status>.
47Values returned are like C<"0"> and C<"64"> and C<"killed (SIGHUP)">.
48
49This function is prototyped to take a single scalar argument.
50
51=cut
52
53sub waitstat ($) {
54 my $status = shift;
55
56 if (WIFEXITED $status) {
57 WEXITSTATUS $status
58 }
59 elsif (WIFSIGNALED $status) {
60 # XXX WCOREDUMP
61 'killed (SIG' . sig_name(WTERMSIG $status) . ')'
62 }
63 elsif (WIFSTOPPED $status) {
64 'stopped (SIG' . sig_name(WSTOPSIG $status) . ')'
65 }
66 # XXX WIFCONTINUED
67 else {
68 "invalid wait status $status"
69 }
70}
71
72=item B<waitstat_reuse> I<wait-status>
73
74Turn I<wait-status> into a value which can be passed to B<exit>, converted
75in the same manner the shell uses. If I<wait-status> indicates a normal
76exit, return the exit value. If I<wait-status> instead indicates death by
77signal, return 128 plus the signal number.
78
79This function is prototyped to take a single scalar argument.
80
81=cut
82
83sub waitstat_reuse ($) {
84 my $status = shift;
85
86 if (WIFEXITED $status) {
87 WEXITSTATUS $status
88 }
89 elsif (WIFSIGNALED $status) {
90 128 + WTERMSIG $status
91 }
92 elsif (WIFSTOPPED $status) {
93 128 + WSTOPSIG $status
94 }
95 else {
96 croak "Invalid wait status $status";
97 }
98}
99
100=item B<waitstat_die> I<wait-status> I<program-name>
101
102die() if I<wait-status> is non-zero (mentioning I<program-name> as the
103source of the error).
104
105This function is prototyped to take two scalar arguments.
106
107=cut
108
109sub waitstat_die ($$) {
110 my ($status, $program) = @_;
111 croak "Non-zero exit (" . waitstat($status) .
112 ") from $program"
113 if $status;
114}
115
116=item B<close_die> I<filehandle> I<name>
117
118Close I<filehandle>, if that fails die() with an appropriate message
119which refers to I<name>. This handles failed closings of both programs
120and files properly.
121
122This function is prototyped to take a filehandle (actually, a glob ref)
123and a scalar.
124
125=cut
126
127sub close_die (*$) {
128 my ($fh, $name) = @_;
129
130 unless (ref $fh || ref \$fh eq 'GLOB') {
131 require Symbol;
132 $fh = Symbol::qualify_to_ref($fh, caller);
133 }
134
135 unless (close $fh) {
136 croak "Error closing $name: ",
137 $!+0 ? "$!" : 'non-zero exit (' . waitstat($?) . ')';
138 }
139}
140
1411
142
143__END__
144
145=back
146
147=head1 EXAMPLES
148
149 close SENDMAIL;
150 exit if $? == 0;
151 log "sendmail failure: ", waitstat $?;
152 exit EX_TEMPFAIL;
153
154 $pid == waitpid $pid, 0 or croak "Failed to reap $pid: $!";
155 exit waitstat_reuse $?;
156
157 $output = `some-program -with args`;
158 waitstat_die $?, 'some-program';
159 print "Output from some-process:\n", $output;
160
161 open PROGRAM, '| post-processor' or die "Can't fork: $!";
162 while (<IN>) {
163 print PROGRAM pre_process $_
164 or die "Error writing to post-processor: $!";
165 }
166 # This handles both flush failures at close time and a non-zero exit
167 # from the subprocess.
168 close_die PROGRAM, 'post-processor';
169
170=head1 AUTHOR
171
172Roderick Schertler <F<roderick@argon.org>>
173
174=head1 SEE ALSO
175
176perl(1), IPC::Signal(3pm).
177
178=cut
diff --git a/meta-networking/recipes-extended/mime-construct/mime-construct_1.11.bb b/meta-networking/recipes-extended/mime-construct/mime-construct_1.11.bb
new file mode 100644
index 000000000..bf42a3051
--- /dev/null
+++ b/meta-networking/recipes-extended/mime-construct/mime-construct_1.11.bb
@@ -0,0 +1,29 @@
1SUMMARY = "Construct and optionally mail MIME messages"
2DESCRIPTION = "Constructs and (by default) mails MIME messages. \
3 It is entirely driven from the command line, it is \
4 designed to be used by other programs, or people who act \
5 like programs."
6HOMEPAGE = "http://search.cpan.org/~rosch/mime-construct/mime-construct"
7SECTION = "mail"
8LICENSE = "GPLv2+"
9LIC_FILES_CHKSUM = "file://debian/copyright;md5=5e2e5da619ac8ef8c84767ccc4656e96"
10
11SRC_URI = "${CPAN_MIRROR}/authors/id/R/RO/ROSCH/mime-construct-${PV}.tar.gz \
12 file://WaitStat.pm \
13 file://Signal.pm \
14 "
15SRC_URI[md5sum] = "73834ea780fbea81b89dbd9b2fb54f58"
16SRC_URI[sha256sum] = "4cd7bb61b51d41192d1498c1051aa6a4ccd75aeb09b71d2ec706a7084a4a9303"
17
18inherit cpan
19
20do_install () {
21 oe_runmake install DESTDIR="${D}"
22 install -d ${D}${libdir}/perl/vendor_perl/${@get_perl_version(d)}/Proc \
23 ${D}${libdir}/perl/vendor_perl/${@get_perl_version(d)}/IPC
24 install -m 644 ${WORKDIR}/WaitStat.pm \
25 ${D}${libdir}/perl/vendor_perl/${@get_perl_version(d)}/Proc
26 install -m 644 ${WORKDIR}/Signal.pm \
27 ${D}${libdir}/perl/vendor_perl/${@get_perl_version(d)}/IPC
28}
29RDEPENDS_${PN} = "postfix perl"