summaryrefslogtreecommitdiffstats
path: root/meta-networking
diff options
context:
space:
mode:
authorJagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>2015-08-17 20:40:21 +0530
committerJoe MacDonald <joe_macdonald@mentor.com>2015-09-11 10:39:00 -0400
commit4b532090206695db8902222dd60f7e1948d5aac8 (patch)
treef5ddd9a9370838deda5dc3862fc993196cb37547 /meta-networking
parentd3eaede791c121147f1b99db01facd2080019993 (diff)
downloadmeta-openembedded-4b532090206695db8902222dd60f7e1948d5aac8.tar.gz
mime-construct: add new recipe
mime-construct constructs and (by default) mails MIME messages. It is entirely driven from the command line, it is designed to be used by other programs, or people who act like programs." Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
Diffstat (limited to 'meta-networking')
-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"