>> 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?"). 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. 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. 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 :) 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. --Geoff