[Date Prev][Date Next][Thread Prev][Thread Next] [Search] [Date Index] [Thread Index]

Re: [MacPerl-Porters] Identifying Ported Modules




On Tue, 11 Jan 2000, Peter Prymmer wrote:

> While I recognize the ease of use ideal that you are expressing a
> desire for I'd say that unfortunately there may be too many variables
> in trying to provide a really comprehensive binary solution.  In
> particular consider just the combinatorial explosion of supporting:
> Mac OS 7.1.* .. 9.* .. X across 68k and PowerPC, consider the possible
> differences in porting a module to the MacPerl app versus the MPW
> tool.  System DLLs have changed across such a broad range of OSes and
> architectures.  You would need a large build farm to test out
> everything and package it (something you alluded to later on).

Things aren't so hopelessly complex as you fear, because perfection need
not be attained.  Just because there is no way to write large bug-free
systems of code doesn't mean we junk our computers.

For example, consider that we _already_ support that combinatorial
explosion of systems you mention:  from MacOS 7.x to 9.x, 68K to PPC, MPW
and MP app.  I'm glad it wasn't considered too daunting to make MacPerl
(5) in the first place!

As you know, all that is really relevant for most modules is what flavor
of 68K versus PPC.  As far as I'm concerned, CPAN makes no sense for
statically compiled installations.  Also, IMNSHO, 68K is very close to
obsolete, but perhaps CFM68K has a year or two of life left.

Finally, the build farm I alluded to is not a cathedral, it's a bazaar! :)  
(apologies to Eric Allman and Larry Wall, for different reasons)  What I
mean is, if you want to see binaries for your platform, hitch up your own
server!  (Subject to signup and verification, so at least a system of
digital signatures come into play.)  No one site would _build_ all the
binaries, though it might store what's available.

Furthermore, for an even greater touch of reality, there's no requirement
that a build for any given platform happen in realtime.  If a platform
still requires significant porting work, the CGI queues up a binary
request.  When the binary is built, it gets distributed and cached,
alongside binaries for other platforms which can get built in
semi-realtime.  If there are platforms that entirely scorn pre-built
binaries (even Solaris would probably not do this, and certainly not
Solaris x86), then no binaries would be available or auto-built for them.
If you prefer to build your own binaries, fine.  The raw dist is available
as always.


> > Ah, I hadn't thought of cases where XS modules could still work without
> > binaries.  Would this be where the module provides an alternate, non-XS
> > API?
> 
> For example the re module (pragma) in perl 5.005_03++.

How does this work in terms of a makefile?  Does the "make install" target
include a binary or not?  If it does, then I contend the Mac
make_install() should fail just as Unix does, when the binary is not
found.  If not, then both should succeed.

I'm mystified why this is controversial, though hopefully I'll find out
tomorrow.

> > I guess we'll have to wait for ActiveState to pioneer something that works
> > under Windows (which I understand is also grappling with binary issues),
> > and then try to port it to the Mac.  There's something to be said for
> > paying people to advance the platform.  
> 
> I agree with you here.  When Dick Hardt first proposed a packaged solution I 
> thought that it was a Windows specific hack to replicate the functionality of 
> CPAN.pm.  I was wrong.  The Perl Package Manager is quite helpful for 
> compiler-less PC users to install XS based modules off the net (specifically 
> the activestate site).  It has its limitations though: you'll be hard pressed 
> to find any Alpha NT based ppm packages for example.  That said, I do think 
> that the work Chris has put into installme and porting CPAN.pm goes a long 
> way toward helping with this situation.  It is further enhanced by mmp and 
> cpan-testers.  

Absolutely!  CPAN.pm and installme are both giant steps forward for
MacPerl, just as CPAN.pm provides extension capabilities for Perl beyond
any other language I can think of.  I am eager to see them improved
precisely because they are so useful and important (to me, at least--it
seems few others share my eagerness to put effort into them).


> Do you think a cross-platform version of ppm would be helpful?  

I don't know.  I haven't had much opportunity to work with ActiveState
perl or ppm.  To be honest, I didn't know ppm already existed.

> How about resurrecting the `make uninstall` target for MakeMaker
> generated Makefiles?  That is something that would be helpful for perl
> site management even on Unix.  Unfortunately to `make uninstall`
> Foo::Module version 0.05 (in order to prepare for installation of
> Foo::Module v 0.06) I would need to either have my original Makefile
> saved or at least the package replete with Makefile.PL and not
> everyone keeps a hold of everything like that (as it is CPAN now
> exceeds the capacity of a 650 MB CD-ROM).  

IMO, if Foo::Module v0.06 _needs_ v0.05 uninstalled before it can proceed,
it would have to include v0.05 install info, and do the uninstall itself.

In general, that shouldn't be necessary.  All you need to know is which
files will be replaced by Foo::Module v0.06, whether from Foo::Module or
from anything else.  Save them in the uninstall archive, along with a list
of files installed by Foo::Module v0.06.  This last list of files affected
will also need to get added to a master undelete file.

A key piece to this is the uninstall cache.  Uninstall capability is only
available for a rolling set of installs; how big a set is determined by
how much space you are willing to devote to the uninstall cache.  CPAN.pm
already has caching in place for the source and build caches.

Last, it is obvious that packages installed before the uninstall-capable
CPAN.pm cannot be uninstalled.  

> Another problem with package management is static linking only
> platforms: they rebuild their perl binaries in order to link in an XS
> based module and doing a `make uninstall` for them is *really* tough
> (Mac OS and Windows are not so affected of course).

See one of my other rambling posts about handling this.  Either don't try
to handle it, or save the whole monster binary for each install.  It
actually makes caching easier, though much less space efficient.  But hey,
static linkers weren't trying to save space in the first place, right?


> That is not a bad way to try to do things, but who will provide such a thing?

Whoever wants a binary, or is willing to provide binaries for their
platform.  Or for other platforms, given a cross-compiler.  If no one
steps up for a given platform, it gets left out.  Such a platform is no
worse off than now.

It is quite possible that for now, only MacOS and Windows have a broad
enough user base to really desire this system.  (But again I note the
popularity of RPMs for Linux.)  Even though small in numbers compared to
Unix users of Perl, the Perl users on consumer OSes are already more
diverse.  There are people on the MacPerl mailing list who are intimidated
by any Unix, much less by compiling and installing software on Unix.  
These people already fall outside the scope of Unix perl users.  Rather
than hoping they go away, or somehow geek up with the arrival of MacOS X,
I think we should embrace them.  Everybody on this list (except me, I
guess) has already done excellent work in this regard.

I never meant to minimize the excellent work done by others.  But, at the
same time, I am bold enough to think there is room for improvement, and
even bolder to think I can see a few such places.


--
MattLangford 


==== Want to unsubscribe from this list?
==== Send mail with body "unsubscribe" to macperl-porters-request@macperl.org