logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

Re: [Module::Build] requires_one_of: msg#00030

Subject: Re: [Module::Build] requires_one_of
Ken Williams wrote:

On Jul 18, 2004, at 10:08 AM, David Wheeler wrote:

On Jul 17, 2004, at 8:57 PM, David Wheeler wrote:

Agreed. I'm racking my brains (and the brains of those around me), but I'm not coming up with anything. I like finding the right language for things, though, so I'll have to think about it...


Hrm, I kind of like Smylers' suggested term, "abstract". Maybe abstract_requires in Module::Build?


Sorry I haven't had a lot of time to chime in - we had the baby niece & nephew over the weekend.

Unfortunately "abstract" is already taken in the META.yml: it's a short descriptive phrase of the module.

Regarding the concept-formerly-known-as "virtual packages", I think I'd like them to tie into the "features" concept more. I think perhaps it's time to write that boolean requirement specification stuff, and then we can use that both in the "normal" requirement specs and the requirement specs for a declared feature.

The idea would look something like this:

 -------- in the Build.PL ------------------
 features => {
              # Old-style requirement spec
              'yaml_support' => {
description => "Can read & write YAML files",
                                 requires => { 'YAML' => 0.13 },
                                 recommends => { 'YAML' => 0.49 },
                                },
              # New-style requirement mini-language spec
              'dbi_support' => {
description => "Can read & write databases",
                                 requires => q{
                                      DBI >= 1.0 ,
                                      (DBD::mysql >= 1.5 || DBD::Postgres)
                                 },
                                },


This method will require a complete expression parser, which is admittably easy to implement. It just seems a little more error prone. Also, expressions can be arbitrarily complex which can make it more difficult to write expressions in a human readable format (David's example hints at that complexity). That's why I liked extending the existing format: less parsing for humans and machines.

features => {
  ...
  dbi_support => {
    description => "Can read & write databases",
    requires => {
      DBI >= 1.0,
      db_driver => q{ [mysql] || [pg] },
      [mysql] => {
        DBD::mysql => 1.5,
        DataTime::Format::mysql => 0
      },
      [pg] => {
        DBD::Pg => 0,
        DataTime::Format::Pg => 0
      },
    },
},

This way most of the parsing is already done; Most all the terms are already broken down into indivisible fields. It's more human readable (IMO), though, perhaps a little more verbose. The macros help diffuse the complexity of expressions.

Randy.


-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click


<Prev in Thread] Current Thread [Next in Thread>