On Sep 10, 2009, at 12:57 PM, David Golden wrote:

(1a) Should bundling modules into inc/ happen in $source or $distdir?

$distdir. The same should be true of MANIFEST, META.yml, and other generated files, AFAIC.

(1b) For either choice in #1a, how should the behavior of “bundle_inc”
change depending on whether $source/inc exists or is missing?

Not at the first cut of the feature. Perhaps later $source/inc could be copied to $distdir/inc and updated as appropriate for a distribution.

(2a) Should inc::latest work for any module at any depth in a
directory bundled in inc/?  (E.g., use inc::latest
‘File::Spec::Functions’)  Or should inc::latest only be allowed for a
“top-level” module?  (e.g. use inc::latest ‘File::Spec’)

Any level, just like `use`. People often don't realize that they're not requiring a top-level module (better name: primary distribution module, since there may be other modules in a distribution that are in different packages).

(2b) Should modules to bundle be based on configure_requires or
modules actually loaded by inc::latest or by some other specification?
How does this depend on the answer to #2a?

<snip />

If inc::latest works for a module of any depth, then the requested
module does not necessarily directly map to a distribution, and thus
it’s more difficult to determine the set of modules that should be
bundled from the list loaded by inc::latest.  In this case,
configure_requires could be used to indicate the ‘distribution’
equivalents to bundle, even if inc::latest loads a deeper module.
E.g. configure_requires could have File::Spec even though inc::latest
is loading File::Spec::Functions.  (This becomes relevent for M::B if
someone want to use inc::latest ‘Module::Build::Functions’ instead of
Module::Build)

I think that this would be confusing. I should be able to say `inc::latest File::Spec::Functions` and Module::Build can find the distribution and bundle it. I may not even know what the distribution module name is -- or care.

(3) How should we map from a module name to bundle to a set of module files?

Whether derived from configure_requires or inc::latest loaded modules,
we have a list of module names but need a set of related module files
that must be copied to the right place in inc/.

The purest solution would use a CPAN index to identify the
distribution that provides the given module name.  Then that
distribution could be bundled in a variety of ways.

+1

A pragmatic solution would be to recursively copy all files under the
top-level module name.

You'll miss stuff that way. And don't forget dependencies!

This would be the reason to support a $source/inc that gets copied to $distdir/inc and updated there. So If I have $source/inc/inc_File-Spec- Function that just has the one module, then my inc::latest File::Spec::Function calls would find it there and not bother to try to download or install anything else.


(4) Should inc::latest emulate “require” or “use”?  If “use”, should
it be able to handle the full semantics of “use MODULE VERSION LIST”
and how?

Right now, inc::latest require()’s the module and calls import() with
zero or more arguments.  It does not support *not* calling import and
does not support VERSION checking.  Are these important?  Not getting
default imports() could be important.  Should that just be an explicit
undef?  “use inc::latest ‘Foo::Bar’ => undef”

You should be able to tell it not to call `import`. The version number shouldn't be important, since I bundled it!

That's all from me for now.  For anyone who read this far, thank you.
Your thoughts and reactions are greatly appreciated.

HTH,

David

Reply via email to