develooper Front page | perl.perl5.porters | Postings from February 2008

Re: Assistance with IPC modules and perl 5.10

Thread Previous | Thread Next
From:
Tom "spot" Callaway
Date:
February 17, 2008 23:07
Subject:
Re: Assistance with IPC modules and perl 5.10
Message ID:
1203303267.3235.38.camel@localhost.localdomain

On Sat, 2008-02-16 at 01:10 +0000, Dave Mitchell wrote:
> On Fri, Feb 15, 2008 at 06:44:09PM -0500, Tom Callaway wrote:
> > As a secondary issue, both of these modules seem to be unmaintained for
> > several years. Given how pivotal they are in the perl dependency chain,
> > it seems that it would be a good idea for someone to maintain them
> > properly, or to rewrite these items entirely.
> 
> What dependency chain is this, and why are they so pivotal to it?

Apologies for the delay in responding, I was hiding from the internet
for a brief vacation.

This is going to be a long reply, but I'd rather be thorough than simply
say "because they are". Normally, I would simply put this content on the
web somewhere and just link to it, but I'm stuck in O'Hare at the
moment, and I cannot bring myself to pay in blood to suck wireless
internet through the digital equivalent of a coffee stirrer.

As part of the perl 5.10.* rebuild, I used the BuildRequires for the
Fedora packaged perl modules (and perl dependent packages) to identify
series of "dependency" chains, and identify a working order for chained
rebuilds (A depends on B, B depends on C, C depends on D, E and F, so
build D, then E, then F, then C, then B, then A). The order may not be
the most optimal, but it does illustrate the relative importance of
specific perl modules (e.g. if D is broken, C, B, and A cannot cleanly
rebuild, even though A may never use D directly.)

With that in mind, I was able to break out the ordering sequence into
three phases:

A) Critical components (and components I maintain in Fedora)
    - Since I maintain a lot of the perl modules packaged in Fedora, I
decided to start with those first, and generate the packages necessary
to build my perl modules, presuming that it would provide a solid base
for the rest of the perl components.

The chain for A was (in order of build):

* perl
* perl-ExtUtils-ParseXS
* perl-ExtUtils-MakeMaker
* perl-Test-Simple
** perl-PAR-Dist
* perl-IO-Zlib
** perl-IO-String
** perl-Devel-Symdump
* perl-Module-Build
** perl-Pod-Coverage (disable Test-Pod for first pass)
** perl-Test-Pod (then, rebuild perl-Pod-Coverage with Test-Pod enabled)
 ** perl-Archive-Tar
 ** perl-YAML
* perl-ExtUtils-CBuilder
* perl-Compress-Zlib
 ** perl-File-Which
 ** perl-Archive-Zip
 ** perl-B-Keywords (disable Test-Pod-Coverage for first pass)
* perl-version
** perl-IPC-Run3 (disable Test-Pod-Coverage for first pass)
** perl-Test-Script
** perl-List-MoreUtils ( disable Test-Pod-Coverage for first pass)
** perl-Hook-LexWrap
** perl-Test-SubCalls
** perl-Params-Util (disable perl-Test-MinimumVersion for first pass)
** perl-Class-Inspector (disable perl-Test-MinimumVersion for first
pass)
** perl-Config-Tiny (disable perl-Test-MinimumVersion for first pass)
** perl-Test-ClassAPI
** perl-Test-Object
** perl-File-Remove (disable perl-Test-MinimumVersion for first pass)
** perl-Taint-Runtime
** perl-Clone
** perl-PPI
** perl-Text-Glob
** perl-Number-Compare
** perl-File-Find-Rule
** perl-Perl-MinimumVersion
** perl-File-Find-Rule-Perl
** perl-Test-MinimumVersion ( disable Test-Pod-Coverage for first pass)
** perl-File-HomeDir
** perl-Pod-Escapes
** perl-Pod-Spell
** perl-Test-Spelling
** perl-PadWalker
** perl-Devel-Cycle
** perl-Test-Memory-Cycle ( disable Test-Pod-Coverage for first pass)
** perl-String-Format
** perltidy
** perl-Module-Pluggable
** perl-Test-Pod-Coverage (then, rebuild perl-B-Keywords and
perl-Test-MinimumVersion and perl-Test-MinimumVersion and
perl-Test-Memory-Cycle with T-P-C reenabled)
* perl-IO-Compress-Zlib
** perl-Convert-BinHex
** perl-String-CRC32
** perl-Readonly-XS
** perl-Readonly
** perl-Devel-StackTrace
** perl-Class-Data-Inheritable
** perl-Exception-Class
** perl-Perl-Critic
** perl-Test-Perl-Critic
** perl-Test-Taint
** perl-Params-Validate
** perl-Class-Container
** perl-DBI
** perl-DBD-SQLite
** perl-IO-stringy
** perl-Class-Trigger
** perl-DBD-Pg
** perl-DBIx-ContextualFetch
** perl-Ima-DBI
** perl-Date-Simple
** perl-Lingua-EN-Inflect
** perl-Lingua-EN-Inflect-Number
** perl-UNIVERSAL-moniker
** perl-Class-Accessor
** perl-Time-Piece
** perl-Time-Piece-MySQL
** perl-Class-DBI
** perl-Class-DBI-SQLite
** perl-UNIVERSAL-require
** perl-CGI-Untaint
** perl-Date-Manip
** perl-CGI-Untaint-date
** perl-Net-Domain-TLD
** perl-TimeDate
** perl-MailTools
** perl-Email-Valid
** perl-CGI-Untaint-email
** perl-Mail-Transport-Dbx
** perl-HTML-Tagset
** perl-HTML-Parser
** perl-HTML-Tree
** perl-Font-AFM
** perl-HTML-Format
** perl-MIME-tools
** perl-Digest-SHA1
** perl-Digest-HMAC
** perl-Test-MockModule
** perl-Sub-Uplevel
** perl-Test-Exception
** perl-Class-Accessor-Chained
** perl-Data-Page
** perl-Object-Realize-Later
** perl-Email-MIME-ContentType
** perl-Text-Reform
** perl-TeX-Hyphen
** perl-Text-Autoformat
** perl-Email-Address
** perl-Algorithm-Diff
** perl-Geography-Countries
** perl-XML-Writer
** perl-Email-MessageID
** perl-Pod-POM
** js
** perl-Parse-RecDescent
** perl-CSS-Tiny
** perl-File-Slurp
** perl-PPI-HTML
** perl-Module-Info
** perl-Email-MIME-Encodings
** perl-MIME-Types
** perl-Email-Simple
** perl-Email-MIME
** perl-SQL-Abstract
** perl-Class-DBI-Plugin
** perl-Class-DBI-Plugin-Type
** perl-Class-DBI-AsForm
** perl-Sub-Install
** perl-Data-OptList
** perl-Package-Generator
** perl-Sub-Exporter
** perl-Test-Tester
** perl-Test-Output
** perl-Class-Singleton
** perl-DateTime
** perl-DateTime-Format-Mail
** perl-SGMLSpm
** ImageMagick
** perl-Image-Size
** perl-DateTime-Format-W3CDTF
** perl-Test-Manifest
** perl-URI
** perl-libwww-perl
** perl-XML-Parser
** perl-Text-Diff
** perl-Test-Differences
** perl-XML-RSS
** perl-XML-RegExp
** perl-libxml-perl
** perl-XML-DOM
** perl-GD
** perl-GDTextUtil
** perl-GDGraph
** perl-GDGraph3d
** perl-XML-XPath
** perl-XML-LibXML-Common
** perl-XML-NamespaceSupport
** perl-XML-SAX (disable XML-LibXML BR temporarily)
** perl-XML-LibXML
** perl-Tie-IxHash
** perl-XML-Simple
** perl-Image-Base
** perl-Image-Xpm
** perl-Image-Xbm
** perl-Image-Info
** perl-AppConfig
** perl-Template-Toolkit
** perl-Template-Plugin-Class
** perl-TermReadKey
** perl-IO-Tty
** perl-IPC-Run
** perl-Class-MethodMaker
** perl-Term-ProgressBar
** perl-Unicode-String
** perl-Unicode-Map8
** perl-XML-XPathEngine
** perl-XML-Filter-BufferText
** perl-Text-Iconv
** perl-XML-SAX-Writer
** perl-XML-Twig
** perl-Test-NoWarnings
** perl-IO-Compress-Base
** perl-DBD-MySQL
** perl-Class-DBI-mysql
** mod_perl
** perl-DBD-XBase
** perl-SQL-Statement
** perl-AnyData
** perl-DBD-AnyData
** perl-SQL-Abstract-Limit
** perl-Class-DBI-AbstractSearch
** perl-Parse-Yapp
** perl-XML-XQL
** pilot-link
** perl-Class-DBI-Pg
** perl-Class-DBI-Loader
** perl-Class-DBI-Loader-Relationship
** perl-Mail-IMAPClient
** perl-Email-MIME-Modifier
** perl-User-Identity
* perl-Test-Harness
** perl-Socket6
** perl-IO-Socket-INET6
** perl-Array-Compare
** perl-Tree-DAG_Node
** perl-Test-Warn
** perl-Net-SSLeay
** perl-IO-Socket-SSL
** perl-Digest-BubbleBabble
** perl-Net-IP
** perl-Net-DNS
** spamassassin
** perl-Mail-Box (disable perl-Email-Abstract BR temporarily, then
rebuild when Email::Abstract is done)
** perl-Email-Abstract
** perl-Email-Date-Format
** perl-Email-Date
** perl-File-ReadBackwards
** perl-FreezeThaw
** perl-MLDBM
** perl-Spiffy
** perl-IO-All
** perl-Email-Simple-Creator
** perl-Email-MIME-Creator
** perl-File-MMagic
** perl-File-MMagic-XS
** perl-ExtUtils-PkgConfig
** perl-Class-DBI-Plugin-RetrieveAll
** perl-Return-Value
** perl-HTML-TableExtract
** perl-BSD-Resource
** perl-Class-DBI-FromCGI
** perl-Exporter-Lite
** perl-Class-DBI-Pager
** perl-HTTP-Body
** perl-ExtUtils-XSBuilder
** libapreq2
** perl-Test-Deep
** perl-Apache-Session
** perl-Apache-Session-Wrapper
** perl-Text-CSV_XS 
** perl-DBD-CSV
** perl-IPC-Shareable
** foomatic
** perl-Config-IniFiles
* perl-Pod-Simple
** perl-MIME-Lite
** perl-Mail-Sendmail
** perl-Mail-Sender
** perl-Log-Dispatch
** perl-Log-Dispatch-FileRotate
** perl-Text-Unidecode
** perl-File-Copy-Recursive
** perl-Carp-Clan (disable BR Object-Deadly, then rebuild)
** perl-Object-Deadly
** perl-Bit-Vector
* perl-Compress-Raw-Zlib
** perl-Image-ExifTool
** perl-CGI-Simple
** perl-Alien-wxWidgets
** perl-Error
** perl-WWW-Mechanize
** perl-ExtUtils-CBuilder
** subversion
** git
** perl-Geo-Constants
** perl-ExtUtils-Depends
** perl-Test-Number-Delta
** perl-Cairo
** perl-Glib
** perl-Inline-Files
** perl-Inline
* perl-Module-CoreList
** perl-Test-Prereq
** perl-OLE-Storage_Lite
** perl-IO-CaptureOutput
** perl-Locale-Maketext-Lexicon
** perl-Locale-Maketext-Simple
* perl-Module-Load
* perl-Module-Load-Conditional
* perl-IPC-Cmd
* perl-Archive-Extract
* perl-Log-Message
* perl-Log-Message-Simple
* perl-Term-UI
* perl-File-Fetch
* perl-CPANPLUS
* perl-Digest-SHA
** perl-Gtk2
** perl-libintl
** perl-Event
* perl-Params-Check
* perl-Module-Loaded
* perl-Package-Constants
** xchat
* perl-Object-Accessor
** rrdtool
** perl-Tk
** perl-GnuPG-Interface
** perl-Text-Template
** pgp-tools

(* means that it is provided by perl-5.10.0, and was not in the past. **
means that it isn't in base perl.)

I was able to successfully rebuild all of the packages in A against perl
5.10.0.

B) Secondary chains. With A done, I generated a list of the remaining
perl packages in Fedora, then generated a list of chained build
ordering, with the specific goal of enabling all remaining perl
dependent packages to rebuild with all of their perl dependencies met.
This means that when B is done, all the remaining perl dependent
packages can rebuild simultaneously, which is much faster.
With B, I was also able to identify some small closed build chains:

* perl-File-Next
* ack

* perl-Newt
* crypto-utils

* perl-SDL
* frozen-bubble

* perl-FileHandle-Unget
* perl-Mail-Mbox-MessageParser
* grepmail

* perl-Data-HexDump
* perl-Authen-Radius

* perl-GSSAPI
* perl-Authen-SASL
* perl-XML-Stream
* perl-Net-XMPP
* perl-Time-modules
* perl-Net-Jabber

* perl-Sys-Syscall
* perl-Danga-Socket
* perl-IO-AIO
X Perlbal
perl-Perlbal-XS-HTTPHeaders

* perl-Set-IntSpan
* perl-Business-Hours

* perl-Business-ISBN-Data
* perl-GD-Barcode
* perl-Business-ISBN

* perl-Geo-Functions
* perl-Geo-Ellipsoids
* perl-Geo-Inverse
* perl-Geo-Forward

* perl-Gearman-Server
* perl-Gearman
* perl-Gearman-Client-Async

(For this list, * represents items which successfully rebuilt against
perl 5.10.0, X represents unresolved failures to date, and unmarked
items are unbuilt packages due to failed dependencies. Perlbal has a bug
filed against it, which was unresolved at the time of this email.)

I also uncovered one massive chain, bigger than the whole of A (caveat,
there may be some smaller chains inside of this, but the intertwining
was such that I would have had to run several chains through to
completion in order to trigger other chains, so I represented them as an
ordered whole). There may also be mistakes with missing dependencies in
this chain, as I was unable to get beyond the IPC:: modules at the top:

X perl-IPC-ShareLite
X perl-IPC-SharedCache (failed on test build with patched IPC::ShareLite
that seemed to work on 32bit)
perl-HTML-Template
perl-HTML-Template-Expr
perl-Cache-Cache
perl-Ace
perl-HTML-Mason
perl-MasonX-Request-WithApacheSession
perl-Devel-Leak
perl-YAML-Syck
perl-Pugs-Compiler-Rule
perl-Test-YAML-Valid
perl-Test-YAML-Meta
perl-YAML-Tiny
perl-Config-General
perl-Config-Any
perl-Module-Find
perl-Archive-Any
perl-IO-Capture
perl-User
perl-Test-File
perl-WWW-Search
perl-Pod-Strip
perl-Module-ExtractUse
perl-Array-Diff
perl-CPAN-DistnameInfo
perl-Module-CPANTS-Analyse
perl-Sort-Versions
perl-ExtUtils-AutoInstall
perl-Parse-CPAN-Packages
perl-Data-Buffer
perl-Convert-ASN1
perl-Class-ErrorHandler
perl-File-NFSLock
perl-Heap
perl-Graph
perl-Cache
perl-URI-Fetch
perl-Feed-Find
perl-Crypt-CBC
perl-Crypt-Blowfish
perl-Crypt-DES
perl-Crypt-DES_EDE3
perl-Convert-PEM
perl-SVG
perl-GD-SVG
perl-Statistics-Descriptive
perl-Math-Derivative
perl-Math-Spline
perl-SVG-Graph
perl-XML-LibXSLT
perl-Data-Stag
perl-Convert-Binary-C
perl-Jcode
perl-Unicode-Map
perl-Proc-ProcessTable
perl-Spreadsheet-WriteExcel
perl-Spreadsheet-ParseExcel
perl-Spreadsheet-WriteExcel-Simple
perl-Spreadsheet-ParseExcel-Simple
perl-PostScript
perl-Set-Scalar
perl-SOAP-Lite
perl-Curses
perl-POE
perl-POE-Component-Client-DNS
perl-POE-Component-Client-Keepalive
perl-POE-Component-Client-HTTP
perl-POE-Component-Child
perl-Devel-Size
perl-POE-API-Peek
perl-XML-DOM-XPath
perl-Text-Shellwords
perl-AutoClass
perl-bioperl
perl-bioperl-run
perl-Pod-Tests
perl-Carp-Assert
perl-Carp-Assert-More
perl-File-chmod
perl-Algorithm-Dependency
perl-prefork
perl-File-Flat
perl-Class-Autouse
perl-Test-Inline
perl-Params-Coerce
perl-Wx
perl-PPI-Tester
perl-Want
perl-Contextual-Return
perl-Test-Class
perl-IO-Prompt
perl-Object-InsideOut
perl-Math-Random-MT-Auto
perl-Class-ReturnValue
perl-capitalization
perl-Cache-Simple-TimedExpiry
perl-DBIx-DBSchema
perl-DBIx-SearchBuilder
perl-Math-Round
perl-Locale-SubCountry
perl-DateTime-Format-HTTP
perl-DateTime-Format-Strptime
perl-DateTime-Format-Mail
perl-DateTime-Format-IBeat
perl-Class-Factory-Util
perl-DateTime-Format-Builder
perl-DateTime-Format-MySQL
perl-List-Compare
perl-WWW-Myspace
perl-Module-Refresh
perl-DBM-Deep
perl-Algorithm-C3
perl-Class-C3-XS
perl-Sub-Name
perl-Class-C3
perl-Class-C3-Componentised
perl-Sub-Identify
perl-SUPER
perl-Class-MOP
perl-aliased
perl-Declare-Constraints-Simple
perl-Test-LongString
perl-CSS-Squish
perl-Moose
perl-Moose-Policy
perl-MooseX-AttributeHelpers
perl-MooseX-Getopt
perl-MooseX-Object-Pluggable
perl-MooseX-Params-Validate
perl-HTTP-Server-Simple
perl-HTTP-Server-Simple-Mason
perl-Test-WWW-Mechanize
perl-Path-Class
perl-Tree-Simple
perl-Tree-Simple-VisitorFactory
perl-Digest-MD2
perl-File-Modified
perl-Data-Dump
perl-GTop
perl-Text-SimpleTable
perl-HTTP-Request-AsCGI
perl-Catalyst-Runtime
perl-Catalyst-Plugin-SubRequest
perl-Catalyst-Plugin-Static-Simple
perl-UNIVERSAL-isa
perl-UNIVERSAL-can
perl-Test-MockObject
perl-Test-use-ok
perl-Data-Visitor
perl-Catalyst-Action-RenderView
perl-Catalyst-Manual
perl-Catalyst-Plugin-ConfigLoader
perl-Module-ScanDeps
perl-Module-Install
perl-Catalyst-Devel
perl-Template-Alloy
perl-Hash-WithDefaults
perl-Hash-Case
perl-Config-IniHash
perl-JSON
perl-CGI-Ex
perl-CGI-FastTemplate
perl-CGI-Session
perl-CGI-FormBuilder
perl-Class-Prototyped
perl-CGI-Prototype
perl-MRO-Compat
perl-Class-Accessor-Grouped
perl-Crypt-OpenSSL-Bignum
perl-Crypt-OpenSSL-Random
perl-Crypt-OpenSSL-RSA
perl-Math-Pari
perl-Class-Loader
perl-Crypt-Random
perl-Crypt-Primes
perl-Convert-ASCII-Armour
perl-Tie-EncryptedHash
perl-Digest-MD4
perl-Crypt-SmbHash
perl-ExtUtils-MakeMaker-Coverage
perl-Scalar-Properties
perl-Set-Infinite
perl-DateTime-Set
perl-DateTime-Event-Recurrence
perl-DateTime-Event-ICal
perl-Convert-NLS_DATE_FORMAT
perl-Class-Gomor
perl-Expect
perl-Expect-Simple
perl-File-BaseDir
perl-Module-Signature
perl-Test-Distribution
perl-File-DesktopEntry
perl-Device-SerialPort
perl-Test-Portability-Files
perl-Regexp-Common
perl-Pod-Readme
perl-Gtk2-Ex-Utils
perl-File-Type
perl-gettext
perl-Crypt-SSLeay
perl-HTTP-Request-Params
perl-Image-Math-Constrain
perl-Affix-Infix2Postfix
perl-Compress-Raw-Bzip2
perl-PerlIO-via-dynamic
perl-Spoon
perl-Kwiki
perl-Kwiki-Revisions
perl-Kwiki-UserPreferences
perl-Kwiki-UserName
perl-NetAddr-IP
perl-Net-DNS-Resolver-Programmable
perl-Params-CallbackRequest
perl-File-chdir
perl-Module-Starter
perl-MogileFS-Client
perl-XML-Grove
perl-Crypt-OpenSSL-DSA
perl-XML-Dumper
perl-HTML-PrettyPrinter
perl-DateTime-Precise
perl-GPS-PRN
perl-Net-Libdnet
perl-Net-Write
perl-Net-IPv6Addr
perl-Net-Packet
perl-Net-SSH
perl-String-ShellQuote
perl-IO-Multiplex
perl-Crypt-RSA
perl-Crypt-DH
perl-Crypt-DSA
perl-Math-GMP
perl-Net-SSH-Perl
perl-Data-Structure-Util
perl-IO-Null
uuid-perl
perl-ExtUtils-F77
perl-Pipeline
perl-POE-Wheel-Null
perl-LDAP
perl-POE-Filter-IRCD
perl-POE-Filter-Zlib
perl-Log-Dispatch-Config
perl-POE-Component-SSLify
perl-POE-Component-Server-SimpleHTTP
perl-POE-Component-Server-HTTP
perl-Net-SNMP
net-snmp-perl
perl-Class-MakeMethods
perl-Class-Base
perl-Text-TabularDisplay
perl-Text-RecordParser
perl-GraphViz
perl-Log-Log4perl
perl-SVN-Simple
perl-Config-Record
perl-SVK
perl-Class-Inner
perl-Text-CharWidth
perl-Class-Factory
perl-DBD-Mock
perl-Class-Observable
perl-Math-BaseCnv
perl-XML-Tidy
perl-Gtk2-GladeXML
perl-Gnome2-Canvas
perl-Apache-LogRegex
perl-Imager
Sprog-0.14-12.fc6.src
perl-Date-Calc
perl-File-Tail
perl-Gtk2-TrayIcon
perl-Gtk2-Spell
perl-File-MimeInfo

C) All other modules which remain, can be rebuild independently of each
other in any possible order (after B is done). This is 260 additional
packages, not listed here.

Thus, IPC::ShareLite and IPC::SharedCache are pivotal to the perl
ecosystem, as represented in Fedora. The fact that I was able to
successfully get through all of A is a strong sign of the readiness of
perl 5.10.0, and I feel that the failures in IPC::ShareLite and
IPC::SharedCache are due to a combination of the lack of maintenance of
those modules and the changes in 5.10.0 upon which that code is
dependent. Also, unlike many other major Linux distributions (I
specifically checked Debian, Ubuntu, and Gentoo), Fedora requires that
packages run the test suite for perl modules as part of the build
process, and failed tests (when those tests are crafted properly, which
incidentally, in the case of IPC::ShareLite, they are not) fail the
build entirely. This means that Fedora is less likely to ship broken
modules which build, but do not actually function as intended.

OK. I know that was long. I'm sorry. Here is the TLDR Summary:

IPC::ShareLite and IPC::SharedCache are pivotal in the Fedora perl
package dependency chain because lots of packages (535) either depend on
them directly or indirectly (mostly indirectly).

Unfortunately, what this means is that if I cannot get these two modules
working properly soon, I won't have time to finish this 5.10.0 effort in
time for Fedora 9 (I need plenty of time to tackle any other failure
cases in the other 535 packages that remain unbuilt). Hence, the request
for help. :)

Thanks,

~spot


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About