Geoffrey Young wrote: >>>as a community we really ought to figure out the "right" way to do this >>>and abstract it into something everyone can just cut-and-paste. or, >>>better, include it as a package in both mp1 and mp2. >> >> >>I think the "best" way might be to look to Apache::Test. Figuring out >>which one to use at run time is easy and well documented but the >>install/testing time is the tricky bit. I don't know if it's currently >>available, but is there a way to query Apache::Test to find out which >>version of mod_perl it will run against (since A::T figures this out >>when it's installed right)? > > > well, kinda. > > what Apache-Test does is cache the data you entered when you ran 'make > test'. for example, if you built Apache-Test as > > $ perl Makefile.PL -apxs /my/httpd-2.1-binary > > then A-T would never again ask you "what httpd do you want to use?" when, > say, a CPAN module uses A-T for its tests and the user forgets to specify > -apxs. of course, insert -httpd, APACHE_TEST_HTTPD, etc for -apxs. > > now, I've always maintained that this is a very bad idea whose > implementation is still the source of the occasional frustrated user > (besides myself), but I won't go into that here :) but I think it's even > worse for what you're after. > > what we all want is a way for 'perl Makefile.PL' to know whether it's being > built against mp1 or mp2 for the (rare) module that cares at build-time. a > good example is for directive handlers, which are 100% runtime for mp2 but > require build-time XS-fu for mp1. if a user has mp1 and mp2 on the same > box, A-T will likely come from mp2 which would cause build-time inspection > of A-T libraries to fail for mp1 installs if we chose the A-T route. worse, > there will be no clear path for a confused user to follow when things don't > go as they wish ("what does Apache-Test have to do with where Apache::Foo > from CPAN installs?").
I would argue that there is another case that is not as rare; dependencies. If a user tries to install my module via CPAN I would like it to be able to determine what other things need to be tracked down. And these dependencies may be different depending on the target mod_perl API version. > it also assumes that your mp1 user will actually have A-T installed. next > time we get together I'll need to rant a bit about how I can't stand modules > that refuse to _build_ because my @INC lack things they need only for their > _test_ environment. Oh, I completely agree. I like M::B's idea of 'build_requires' and it would be nice if it also had a 'test_requires' as well. > in short, using a test-environment variable to affect build or runtime > environments breaks all sorts rules, if only those that I've made up and > believe in myself :) > > that said, my personal preference would be a ModPerl::MM library that was > distributed with both mp1 _and_ mp2. modules that are mp2-based could > enforce mp2 via what they should already be doing: > > ModPerl::MM::WriteMakefile(NAME => 'My::MP2::Foo'); > > modules that are both mp1 and mp2 but need to know at build-time should be > able to do something as simple as > > my $version = ModPerl::MM::Query::version_query(); > > before the call to WriteMakfile(), which would launch an interactive > dialogue saying something like > > this module can be installed for either mod_perl 1.0 or mod_perl 2.0 > but you need to choose now: [1/2] > > and then leave you do do what you require. Ooohhh, that would be nice :) > mp1-only modules or modules that require no build-time interaction could > simply forget about querying all together. > > anyway, IIRC dorian has done some work on this front. probably not like > what I've just described, but he's done _something_ which is a start :) I don't have a lot of time right now to help, but if he has any ideas or something that partially works, I'd be willing to be a sounding/testing board. > of course, there's nothing preventing you from using Apache::TestConfigData > etc now yourself. however, I don't think that is a viable or wise long-term > solution to the issue at hand. I think you convinced me of how bad an idea this is, so I turn my head and walk the other way :) -- Michael Peters Developer Plus Three, LP