Re: [Module::Build] You underestimate the problem
Status: Beta
Brought to you by:
kwilliams
From: demerphq <dem...@gm...> - 2006-04-25 13:40:16
|
On 4/25/06, Adam Kennedy <ad...@ph...> wrote: > Grr, stupid mailing list. > > I can subscribe to it, but it's not sending me messages. > > > As long as it's a mini-language that can be parsed safely, then having > > some expressiveness is fine. Most of where this will crop up is in > > module dependencies anyway, and the number of variables there is > > relatively contained: > > > > * platforms (in some set) > > * perl versions (in some set of ranges of versions) > > * module versions (in some set of ranges of versions) > > I think you underestimate the problem. > > Firstly, define "platform". Is it the processor arch? The string in $^O? > If it's 'Win32' then which Win32? Win95? Win98? What if I have a > dependency that needs something specifically on Windows XP only. Or only > works for Server versions of Win32. > > What about environment variables? > > There are already modules that add extra dependencies if > $ENV{AUTOMATED_TESTING} is true, so that under testing they can do more > thorough tests than would normally be done. > > Then there's optional dependencies based on installed programs. > > Module::Signature looks for the binary program 'gpg'. If it cannot find > it, it adds an extra 20 modules to the dep chain. > > What version of Perl? 5.6 with threads, without threads? > > So you need branch logic, you need to interact with the environment > outside of the process (at least in a read-only manner) so you can't > sandbox whatever is running the logic, you probably need a full range of > boolean logic operators, which means you also need precedence support, > and you are probably going to want subsections (i.e. subroutines) and > probably inclusion of other files for reuse (i.e. modules) and you will > inevitably want something like loops. Also, some of these are going to > be host-specific, so you STILL can't run them anywhere but the current > machine. > > You just can't fit the richness required into a data structure, which > means you can't fit it into META.yml. > > The alternative of a mini-language is dangerous. I've seen the only one > proposed so far and it is a very heavy language. > > With META.yml on one side (data) and Makefile.PL on the other (code) I > have trouble seeing that you can find ANY place in the middle that is > usefully complete. I'd love to be convinced otherwise, but I'd like to > see someone demonstrate a WORKING solution that can handle even the > Bundle::CPAN subset of module before you commit to incorporating it. > > > Use case: Create an index of all dependencies for all distributions on > > the Win32 platform without running Makefile|Build.PL for all > > distributions. (E.g. for a potential "CP-PAN" i.e. "CamelPack-PAN") > > There is no such thing as a single fixed "Win32 Platform". That's not to > say it isn't possible under some extremely tight controlled conditions, > just that it doesn't exist in the real world that CPAN applies to. > > If someone were to come up with a suitably framed bet, I'd probably be > willing to put down serious money to say it is unsolvable. > > In Perl, dependencies are ultimately programmatic. You can only > approximate the dependencies in advance in an advisory way. Which is > what we do already in META.yml. I have to say I pretty strongly agree with Adam here. A mini-language is a bad solution to this problem in comparison to simply generating the META.yml on the installation host. Yves -- perl -Mre=3Ddebug -e "/just|another|perl|hacker/" |