On Thursday, 19 April 2012 18:45:59 Fred Moyer wrote:
> > Apparently MUTABLE_CV doesn't exist under 5.8.8
> 
> Verified. Thoughts? +1 to ship as is. 5.8.8 isn't being shipped with
> any new Linux or other OS distributions as far as I know.

I think the central question is how many perl versions back we want to 
support. This has been discussed a few times already. Perl itself has settled 
on support for the current stable version plus one back. Current stable is 
5.14. So, they support 5.14 and 5.12. But support for 5.12 will end soon as 
5.16 is approaching. See L<perlpolicy>.

As for modperl, I am not sure if we should bind our compatibility policy to a 
fixed number of perl/httpd versions. But something like "for 2.0.7 we are 
dropping support for perl versions older than 5.12, httpd versions older than 
... and APR versions older than ..." in the beginning of the dev cycle would 
be good. Then we have to make sure that trunk is tested against the supported 
versions on a regular basis. Or perhaps we should make it a white list like 
2.0.7 will support perl 5.12 .. 5.16, httpd 2.2.x, apr 1.4.x. Modperl 2.1 will 
support perl ..., httpd 2.4.x, ...

If we cannot assure testing trunk against those versions regularly we must 
change that statement *before* RC1 is rolled.

Producing release candidates is someone's work and time. Testing them is so, 
too. I understand that there must be a RC(n+1) if RCn introduced a bug while 
fixing another. But if RCn (with say n>2) has a compatibility issue that comes 
up only because modperl was first tested in the environment at that stage I 
think that does not qualify for another RC.

If the interest in 5.8.8 compatibility is great enough to fix the issue (I 
don't say it is a bug) and Fred wants to roll another RC I'll test it. But 
IMHO RC5 is good enough to be 2.0.6.


Here is what MUTABLE_SV does (from handy.h in perl source):

/* The MUTABLE_*() macros cast pointers to the types shown, in such a way
 * (compiler permitting) that casting away const-ness will give a warning;
 * e.g.:
 *
 * const SV *sv = ...;
 * AV *av1 = (AV*)sv;        <== BAD:  the const has been silently cast away
 * AV *av2 = MUTABLE_AV(sv); <== GOOD: it may warn
 */

#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
#  define MUTABLE_PTR(p) ({ void *_p = (p); _p; })
#else
#  define MUTABLE_PTR(p) ((void *) (p))
#endif

So the solution for the problem is simple:

# ifdef MUTABLE_SV
  SV *sv=MUTABLE_SV(...);
# else
  SV *sv=(SV*)...
# endif

Torsten Förtsch

-- 
Need professional modperl support? Hire me! (http://foertsch.name)

Like fantasy? http://kabatinte.net


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@perl.apache.org
For additional commands, e-mail: dev-h...@perl.apache.org

Reply via email to