[perl-SOAP-Lite/el6] Branch version 0.716 for EPEL6

Emmanuel Seyman eseyman at fedoraproject.org
Fri Mar 6 16:36:26 UTC 2015


commit 5645476577f1a09ea5f16e304e00591528cc8485
Author: Emmanuel Seyman <emmanuel at seyman.fr>
Date:   Fri Mar 6 17:36:23 2015 +0100

    Branch version 0.716 for EPEL6

 filter-requires.sh                    |   3 -
 perl-SOAP-Lite-0.715-IO-modules.patch | 425 ++++++++++++++++++++++++++++++++++
 perl-SOAP-Lite-0.716-test.patch       |  13 ++
 perl-SOAP-Lite.spec                   | 142 +++++-------
 sources                               |   2 +-
 5 files changed, 494 insertions(+), 91 deletions(-)
---
diff --git a/perl-SOAP-Lite-0.715-IO-modules.patch b/perl-SOAP-Lite-0.715-IO-modules.patch
new file mode 100644
index 0000000..8c7c9fc
--- /dev/null
+++ b/perl-SOAP-Lite-0.715-IO-modules.patch
@@ -0,0 +1,425 @@
+From e5091cc065b492cfaba9896cb488035e291555e6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20=C5=A0abata?= <contyk at redhat.com>
+Date: Thu, 2 Aug 2012 17:10:04 +0200
+Subject: [PATCH] Add IO::SessionDat and IO::SessionSet from SOAP::Lite 0.714
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+
+Signed-off-by: Petr Šabata <contyk at redhat.com>
+---
+ lib/IO/SessionData.pm |  230 +++++++++++++++++++++++++++++++++++++++++++++++++
+ lib/IO/SessionSet.pm  |  163 ++++++++++++++++++++++++++++++++++
+ 2 files changed, 393 insertions(+), 0 deletions(-)
+ create mode 100644 lib/IO/SessionData.pm
+ create mode 100644 lib/IO/SessionSet.pm
+
+diff --git a/lib/IO/SessionData.pm b/lib/IO/SessionData.pm
+new file mode 100644
+index 0000000..de85382
+--- /dev/null
++++ b/lib/IO/SessionData.pm
+@@ -0,0 +1,230 @@
++# ======================================================================
++#
++# Copyright (C) 2000 Lincoln D. Stein
++# Slightly modified by Paul Kulchenko to work on multiple platforms
++# Formatting changed to match the layout layed out in Perl Best Practices
++# (by Damian Conway) by Martin Kutter in 2008
++#
++# ======================================================================
++
++package IO::SessionData;
++
++use strict;
++use Carp;
++use IO::SessionSet;
++use vars '$VERSION';
++$VERSION = 1.02;
++
++use constant BUFSIZE => 3000;
++
++BEGIN {
++    my @names = qw(EWOULDBLOCK EAGAIN EINPROGRESS);
++    my %WOULDBLOCK =
++        (eval {require Errno}
++            ? map {
++                Errno->can($_)
++                    ? (Errno->can($_)->() => 1)
++                    : (),
++                } @names
++            : ()
++        ),
++        (eval {require POSIX}
++            ? map {
++                POSIX->can($_) && eval { POSIX->can($_)->() }
++                ? (POSIX->can($_)->() => 1)
++                    : ()
++                } @names
++            : ()
++        );
++
++    sub WOULDBLOCK { $WOULDBLOCK{$_[0]+0} }
++}
++
++# Class method: new()
++# Create a new IO::SessionData object.  Intended to be called from within
++# IO::SessionSet, not directly.
++sub new {
++    my $pack = shift;
++    my ($sset,$handle,$writeonly) = @_;
++    # make the handle nonblocking (but check for 'blocking' method first)
++    # thanks to Jos Clijmans <jos.clijmans at recyfin.be>
++    $handle->blocking(0) if $handle->can('blocking');
++    my $self = bless {
++        outbuffer   => '',
++        sset        => $sset,
++        handle      => $handle,
++        write_limit => BUFSIZE,
++        writeonly   => $writeonly,
++        choker      => undef,
++        choked      => 0,
++    },$pack;
++    $self->readable(1) unless $writeonly;
++    return $self;
++}
++
++# Object method: handle()
++# Return the IO::Handle object corresponding to this IO::SessionData
++sub handle {
++    return shift->{handle};
++}
++
++# Object method: sessions()
++# Return the IO::SessionSet controlling this object.
++sub sessions {
++    return shift->{sset};
++}
++
++# Object method: pending()
++# returns number of bytes pending in the out buffer
++sub pending {
++    return length shift->{outbuffer};
++}
++
++# Object method: write_limit([$bufsize])
++# Get or set the limit on the size of the write buffer.
++# Write buffer will grow to this size plus whatever extra you write to it.
++sub write_limit {
++    my $self = shift;
++    return defined $_[0]
++        ? $self->{write_limit} = $_[0]
++        : $self->{write_limit};
++}
++
++# set a callback to be called when the contents of the write buffer becomes larger
++# than the set limit.
++sub set_choke {
++    my $self = shift;
++    return defined $_[0]
++        ? $self->{choker} = $_[0]
++        : $self->{choker};
++}
++
++# Object method: write($scalar)
++# $obj->write([$data]) -- append data to buffer and try to write to handle
++# Returns number of bytes written, or 0E0 (zero but true) if data queued but not
++# written. On other errors, returns undef.
++sub write {
++    my $self = shift;
++    return unless my $handle = $self->handle; # no handle
++    return unless defined $self->{outbuffer}; # no buffer for queued data
++
++    $self->{outbuffer} .= $_[0] if defined $_[0];
++
++    my $rc;
++    if ($self->pending) { # data in the out buffer to write
++        local $SIG{PIPE}='IGNORE';
++        # added length() to make it work on Mac. Thanks to Robin Fuller <rfuller at broadjump.com>
++        $rc = syswrite($handle,$self->{outbuffer},length($self->{outbuffer}));
++
++        # able to write, so truncate out buffer apropriately
++        if ($rc) {
++            substr($self->{outbuffer},0,$rc) = '';
++        }
++        elsif (WOULDBLOCK($!)) {  # this is OK
++            $rc = '0E0';
++        }
++        else { # some sort of write error, such as a PIPE error
++            return $self->bail_out($!);
++        }
++    }
++    else {
++        $rc = '0E0';   # nothing to do, but no error either
++    }
++
++    $self->adjust_state;
++
++    # Result code is the number of bytes successfully transmitted
++    return $rc;
++}
++
++# Object method: read($scalar,$length [,$offset])
++# Just like sysread(), but returns the number of bytes read on success,
++# 0EO ("0 but true") if the read would block, and undef on EOF and other failures.
++sub read {
++    my $self = shift;
++    return unless my $handle = $self->handle;
++    my $rc = sysread($handle,$_[0],$_[1],$_[2]||0);
++    return $rc if defined $rc;
++    return '0E0' if WOULDBLOCK($!);
++    return;
++}
++
++# Object method: close()
++# Close the session and remove it from the monitored list.
++sub close {
++    my $self = shift;
++    unless ($self->pending) {
++        $self->sessions->delete($self);
++        CORE::close($self->handle);
++    }
++    else {
++        $self->readable(0);
++        $self->{closing}++;  # delayed close
++    }
++}
++
++# Object method: adjust_state()
++# Called periodically from within write() to control the
++# status of the handle on the IO::SessionSet's IO::Select sets
++sub adjust_state {
++    my $self = shift;
++
++    # make writable if there's anything in the out buffer
++    $self->writable($self->pending > 0);
++
++    # make readable if there's no write limit, or the amount in the out
++    # buffer is less than the write limit.
++    $self->choke($self->write_limit <= $self->pending) if $self->write_limit;
++
++    # Try to close down the session if it is flagged
++    # as in the closing state.
++    $self->close if $self->{closing};
++}
++
++# choke gets called when the contents of the write buffer are larger
++# than the limit.  The default action is to inactivate the session for further
++# reading until the situation is cleared.
++sub choke {
++    my $self = shift;
++    my $do_choke = shift;
++    return if $self->{choked} == $do_choke;  # no change in state
++    if (ref $self->set_choke eq 'CODE') {
++        $self->set_choke->($self,$do_choke);
++    }
++    else {
++        $self->readable(!$do_choke);
++    }
++    $self->{choked} = $do_choke;
++}
++
++# Object method: readable($flag)
++# Flag the associated IO::SessionSet that we want to do reading on the handle.
++sub readable {
++    my $self = shift;
++    my $is_active = shift;
++    return if $self->{writeonly};
++    $self->sessions->activate($self,'read',$is_active);
++}
++
++# Object method: writable($flag)
++# Flag the associated IO::SessionSet that we want to do writing on the handle.
++sub writable {
++    my $self = shift;
++    my $is_active = shift;
++    $self->sessions->activate($self,'write',$is_active);
++}
++
++# Object method: bail_out([$errcode])
++# Called when an error is encountered during writing (such as a PIPE).
++# Default behavior is to flush all buffered outgoing data and to close
++# the handle.
++sub bail_out {
++    my $self = shift;
++    my $errcode = shift;           # save errorno
++    delete $self->{outbuffer};     # drop buffered data
++    $self->close;
++    $! = $errcode;                 # restore errno
++    return;
++}
++
++1;
+diff --git a/lib/IO/SessionSet.pm b/lib/IO/SessionSet.pm
+new file mode 100644
+index 0000000..ae6e4fe
+--- /dev/null
++++ b/lib/IO/SessionSet.pm
+@@ -0,0 +1,163 @@
++# ======================================================================
++#
++# Copyright (C) 2000 Lincoln D. Stein
++# Formatting changed to match the layout layed out in Perl Best Practices
++# (by Damian Conway) by Martin Kutter in 2008
++#
++# ======================================================================
++
++package IO::SessionSet;
++
++use strict;
++use Carp;
++use IO::Select;
++use IO::Handle;
++use IO::SessionData;
++
++use vars '$DEBUG';
++$DEBUG = 0;
++
++# Class method new()
++# Create a new Session set.
++# If passed a listening socket, use that to
++# accept new IO::SessionData objects automatically.
++sub new {
++    my $pack = shift;
++    my $listen = shift;
++    my $self = bless {
++        sessions     => {},
++        readers      => IO::Select->new(),
++        writers      => IO::Select->new(),
++        }, $pack;
++    # if initialized with an IO::Handle object (or subclass)
++    # then we treat it as a listening socket.
++    if ( defined($listen) and $listen->can('accept') ) {
++        $self->{listen_socket} = $listen;
++        $self->{readers}->add($listen);
++    }
++    return $self;
++}
++
++# Object method: sessions()
++# Return list of all the sessions currently in the set.
++sub sessions {
++    return values %{shift->{sessions}}
++};
++
++# Object method: add()
++# Add a handle to the session set.  Will automatically
++# create a IO::SessionData wrapper around the handle.
++sub add {
++    my $self = shift;
++    my ($handle,$writeonly) = @_;
++    warn "Adding a new session for $handle.\n" if $DEBUG;
++    return $self->{sessions}{$handle} =
++        $self->SessionDataClass->new($self,$handle,$writeonly);
++}
++
++# Object method: delete()
++# Remove a session from the session set.  May pass either a handle or
++# a corresponding IO::SessionData wrapper.
++sub delete {
++    my $self = shift;
++    my $thing = shift;
++    my $handle = $self->to_handle($thing);
++    my $sess = $self->to_session($thing);
++    warn "Deleting session $sess handle $handle.\n" if $DEBUG;
++    delete $self->{sessions}{$handle};
++    $self->{readers}->remove($handle);
++    $self->{writers}->remove($handle);
++}
++
++# Object method: to_handle()
++# Return a handle, given either a handle or a IO::SessionData object.
++sub to_handle {
++    my $self = shift;
++    my $thing = shift;
++    return $thing->handle if $thing->isa('IO::SessionData');
++    return $thing if defined (fileno $thing);
++    return;  # undefined value
++}
++
++# Object method: to_session
++# Return a IO::SessionData object, given either a handle or the object itself.
++sub to_session {
++    my $self = shift;
++    my $thing = shift;
++    return $thing if $thing->isa('IO::SessionData');
++    return $self->{sessions}{$thing} if defined (fileno $thing);
++    return;  # undefined value
++}
++
++# Object method: activate()
++# Called with parameters ($session,'read'|'write' [,$activate])
++# If called without the $activate argument, will return true
++# if the indicated handle is on the read or write IO::Select set.
++# May use either a session object or a handle as first argument.
++sub activate {
++    my $self = shift;
++    my ($thing,$rw,$act) = @_;
++    croak 'Usage $obj->activate($session,"read"|"write" [,$activate])'
++        unless @_ >= 2;
++    my $handle = $self->to_handle($thing);
++    my $select = lc($rw) eq 'read' ? 'readers' : 'writers';
++    my $prior = defined $self->{$select}->exists($handle);
++    if (defined $act && $act != $prior) {
++        $self->{$select}->add($handle)        if $act;
++        $self->{$select}->remove($handle) unless $act;
++        warn $act ? 'Activating' : 'Inactivating',
++            " handle $handle for ",
++            $rw eq 'read' ? 'reading':'writing',".\n" if $DEBUG;
++    }
++    return $prior;
++}
++
++# Object method: wait()
++# Wait for I/O.  Handles writes automatically.  Returns a list of
++# IO::SessionData objects ready for reading.
++# If there is a listen socket, then will automatically do an accept()
++# and return a new IO::SessionData object for that.
++sub wait {
++    my $self = shift;
++    my $timeout = shift;
++
++    # Call select() to get the list of sessions that are ready for
++    # reading/writing.
++    warn "IO::Select->select() returned error: $!"
++        unless my ($read,$write) =
++            IO::Select->select($self->{readers},$self->{writers},undef,$timeout);
++
++    # handle queued writes automatically
++    foreach (@$write) {
++        my $session = $self->to_session($_);
++        warn "Writing pending data (",$session->pending+0," bytes) for $_.\n"
++            if $DEBUG;
++        my $rc = $session->write;
++    }
++
++    # Return list of sessions that are ready for reading.
++    # If one of the ready handles is the listen socket, then
++    # create a new session.
++    # Otherwise return the ready handles as a list of IO::SessionData objects.
++    my @sessions;
++    foreach (@$read) {
++        if ($_ eq $self->{listen_socket}) {
++            my $newhandle = $_->accept;
++            warn "Accepting a new handle $newhandle.\n" if $DEBUG;
++            my $newsess = $self->add($newhandle) if $newhandle;
++            push @sessions,$newsess;
++        }
++        else {
++            push @sessions,$self->to_session($_);
++        }
++    }
++    return @sessions;
++}
++
++# Class method: SessionDataClass
++# Return the string containing the name of the session data
++# wrapper class.  Subclass and override to use a different
++# session data class.
++sub SessionDataClass {  return 'IO::SessionData'; }
++
++1;
+-- 
+1.7.7.6
+
diff --git a/perl-SOAP-Lite-0.716-test.patch b/perl-SOAP-Lite-0.716-test.patch
new file mode 100644
index 0000000..0fae97f
--- /dev/null
+++ b/perl-SOAP-Lite-0.716-test.patch
@@ -0,0 +1,13 @@
+diff --git a/t/04-attach.t b/t/04-attach.t
+index 3258e89..6fb5650 100644
+--- a/t/04-attach.t
++++ b/t/04-attach.t
+@@ -20,7 +20,7 @@ BEGIN {
+     }
+ }
+ 
+-BEGIN { plan tests => 15 }
++BEGIN { plan tests => 18 }
+ 
+ my ( $a, $soap, $d, $s, $r, $serialized, $deserialized );
+ 
diff --git a/perl-SOAP-Lite.spec b/perl-SOAP-Lite.spec
index 84fdc9d..14400cd 100644
--- a/perl-SOAP-Lite.spec
+++ b/perl-SOAP-Lite.spec
@@ -1,68 +1,63 @@
 Name:       perl-SOAP-Lite
-Version:    1.13
-Release:    1%{?dist}
+Version:    0.716
+Release:    4%{?dist}
 Summary:    Client and server side SOAP implementation
 License:    GPL+ or Artistic
 Group:      Development/Libraries
 URL:        http://search.cpan.org/dist/SOAP-Lite/
-Source0:    http://search.cpan.org/CPAN/authors/id/P/PH/PHRED/SOAP-Lite-%{version}.tar.gz
+Source0:    http://search.cpan.org/CPAN/authors/id/M/MK/MKUTTER/SOAP-Lite-%{version}.tar.gz
+# This shouldn't be needed with 0.717+ (#78489)
+Patch0:     perl-SOAP-Lite-0.715-IO-modules.patch
+Patch1:     perl-SOAP-Lite-0.716-test.patch
 BuildArch:  noarch
-# Build
+
+# Core package
 BuildRequires:  perl
-BuildRequires:  perl(ExtUtils::MakeMaker) >= 6.76
-BuildRequires:  perl(strict)
-BuildRequires:  perl(warnings)
-# Runtime
-BuildRequires:  perl(bytes)
-BuildRequires:  perl(Carp)
 BuildRequires:  perl(Class::Inspector)
 BuildRequires:  perl(constant)
-BuildRequires:  perl(Encode)
-BuildRequires:  perl(Exporter)
-BuildRequires:  perl(IO::File)
-BuildRequires:  perl(IO::Select)
-BuildRequires:  perl(IO::SessionData)
-BuildRequires:  perl(IO::SessionSet)
-BuildRequires:  perl(IO::Socket)
-BuildRequires:  perl(IPC::Open2)
-BuildRequires:  perl(LWP::UserAgent)
-BuildRequires:  perl(Net::POP3)
-BuildRequires:  perl(overload)
+BuildRequires:  perl(MIME::Base64)
 BuildRequires:  perl(Scalar::Util)
+BuildRequires:  perl(Task::Weaken)
+BuildRequires:  perl(Test::More)
 BuildRequires:  perl(URI)
-BuildRequires:  perl(URI::Escape)
-BuildRequires:  perl(vars)
-BuildRequires:  perl(XML::Parser)
-# Tests only
-# Tests in Issues/ and SOAP/ directories are not executed
-# Many tests are skipped for various reasons
-BuildRequires:  perl(B)
-BuildRequires:  perl(Data::Dumper)
-BuildRequires:  perl(File::Basename)
-BuildRequires:  perl(LWP::Protocol::http)
-BuildRequires:  perl(LWP::Protocol::https)
+BuildRequires:  perl(XML::Parser) >= 2.23
+# Optional
+BuildRequires:  perl(LWP::UserAgent)
+BuildRequires:  perl(Crypt::SSLeay)
+BuildRequires:  perl(MIME::Lite)
+BuildRequires:  perl(HTTP::Daemon)
+BuildRequires:  perl(Apache)
+BuildRequires:  perl(FCGI)
 BuildRequires:  perl(MIME::Parser)
-BuildRequires:  perl(Test)
-BuildRequires:  perl(Test::More)
-# We don't require Apache* modules as both mod_perl 1 and 2 are supported.
-# The server also introduces a huge dependency chain not everyone really wants.
+BuildRequires:  perl(Net::POP3)
+BuildRequires:  perl(IO::File)
+BuildRequires:  perl(IO::Socket::SSL)
+BuildRequires:  perl(Compress::Zlib)
+
+Requires:       perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
 Requires:       perl(Compress::Zlib)
 Requires:       perl(Encode)
-Requires:       perl(FCGI)
+Requires:       perl(Errno)
+Requires:       perl(HTTP::Daemon)
 Requires:       perl(HTTP::Headers)
 Requires:       perl(HTTP::Request)
 Requires:       perl(LWP::UserAgent)
-Requires:       perl(LWP::Protocol::http)
-Requires:       perl(LWP::Protocol::https)
 Requires:       perl(MIME::Base64)
 Requires:       perl(MIME::Entity)
-Requires:       perl(URI::_server)
+Requires:       perl(MIME::Parser)
+Requires:       perl(POSIX)
+Requires:       perl(URI)
 Requires:       perl(XML::Parser)
-Requires:       perl(:MODULE_COMPAT_%(eval "$(perl -V:version)"; echo $version))
-# Merged back into SOAP-Lite in 1.00
-Provides:       perl-SOAP-Transport-TCP = %{version}-%{release}
-Obsoletes:      perl-SOAP-Transport-TCP < 0.715-12
-
+Requires:       perl(XML::Parser::Lite)
+
+# RPM 4.8 filters
+%{?filter_setup:
+%filter_from_requires /perl(My::/d
+%filter_from_provides /perl(My::/d
+%filter_from_provides /perl(LWP::Protocol)/d
+%?perl_default_filter
+}
+# RPM 4.9 filters
 %global __provides_exclude %{?__provides_exclude:%__provides_exclude|}perl\\(My::.*\\)
 %global __provides_exclude %__provides_exclude|perl\\(LWP::Protocol\\)
 %global __requires_exclude %{?_requires_exclude:%__requires_exclude|}perl\\(My::\\)
@@ -74,65 +69,38 @@ client and server side.
 
 %prep
 %setup -q -n SOAP-Lite-%{version}
-find examples -type f -exec chmod -c ugo-x {} +
+%patch0 -p1
+%patch1 -p1
+find examples -type f -exec chmod ugo-x {} \;
 
 %build
-perl Makefile.PL --noprompt INSTALLDIRS=vendor NO_PACKLIST=1
+perl Makefile.PL --noprompt INSTALLDIRS=vendor
 make %{?_smp_mflags}
 
 %install
 make pure_install DESTDIR=%{buildroot}
-%{_fixperms} %{buildroot}/*
+find %{buildroot} -type f -name .packlist -exec rm -f {} ';'
+chmod -R u+w %{buildroot}/*
 
 %check
-make test
+# PERL_PERTURB_KEYS=0 to work around CPAN RT#84168, fixed in 1.01.
+PERL_PERTURB_KEYS=0 make test
 
 %files
-%doc Changes HACKING README ReleaseNotes.txt examples
+%doc Changes README ReleaseNotes.txt examples
 %{_bindir}/*pl
 %{perl_vendorlib}/SOAP
 %{perl_vendorlib}/Apache
+%{perl_vendorlib}/IO
+%{perl_vendorlib}/UDDI
+%{perl_vendorlib}/XML
+%{perl_vendorlib}/XMLRPC
 %{_mandir}/man3/*
 %{_mandir}/man1/*
 
 %changelog
-* Tue Jan 06 2015 Petr Šabata <contyk at redhat.com> - 1.13-1
-- 1.13 bugfix bump
-
-* Fri Dec 05 2014 Petr Šabata <contyk at redhat.com> - 1.12-1
-- 1.12 bump
-
-* Fri Aug 29 2014 Jitka Plesnikova <jplesnik at redhat.com> - 1.11-3
-- Perl 5.20 rebuild
-
-* Sat Jun 07 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.11-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
-
-* Wed Feb 26 2014 Petr Šabata <contyk at redhat.com> - 1.11-1
-- 1.11 bump
-
-* Tue Jan 28 2014 Petr Šabata <contyk at redhat.com> - 1.10-1
-- 1.10 bump
-
-* Thu Jan 16 2014 Petr Šabata <contyk at redhat.com> - 1.09-1
-- 1.09 bugfix bump
-
-* Tue Jan 07 2014 Petr Šabata <contyk at redhat.com> - 1.08-2
-- Update the source URL
-
-* Mon Nov 25 2013 Petr Šabata <contyk at redhat.com> - 1.08-1
-- 1.08 bump, no code changes
-
-* Thu Nov 14 2013 Petr Šabata <contyk at redhat.com> - 1.06-3
-- Properly obsolete/provide SOAP-Transport-TCP
-
-* Tue Nov 12 2013 Petr Šabata <contyk at redhat.com> - 1.06-2
-- Add a missing, undetected runtime dependency on LWP::UserAgent
-
-* Tue Nov 12 2013 Petr Šabata <contyk at redhat.com> - 1.06-1
-- 1.06 bump
-- SOAP::Transport::TCP is back
-- UDDI::Lite, XML::Parser::Lite, and XMLRPC::Lite are now split from the package
+* Fri Mar 06 2015 Emmanuel Seyman <emmanuel at seyman.fr> - 0.716-4
+- Build for EPEL6
 
 * Sun Aug 04 2013 Petr Pisar <ppisar at redhat.com> - 0.716-3
 - Perl 5.18 rebuild
diff --git a/sources b/sources
index 062e482..d4e747a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-a743e386947f6e93ca81ee557ddee264  SOAP-Lite-1.13.tar.gz
+d9cef5120d52745ecfd24a7622f08d2f  SOAP-Lite-0.716.tar.gz


More information about the scm-commits mailing list