Here's the patch:
==============
--- ori/Inline-0.48_01/Inline.pm 2011-04-11 06:10:06.000000000 -0400
+++ Inline-0.48_01/Inline.pm 2011-12-03 16:48:50.000000000 -0500
@@ -728,22 +728,33 @@
}
}
- $o->create_config_file($DIRECTORY)
- if not -e File::Spec->catfile($DIRECTORY, $configuration_file);
-
- open CONFIG, "< ".File::Spec->catfile($DIRECTORY, $configuration_file)
- or croak M17_config_open_failed($DIRECTORY);
- my $config = join '', <CONFIG>;
- close CONFIG;
-
- croak M62_invalid_config_file(File::Spec->catfile($DIRECTORY,
$configuration_file))
- unless $config =~ /^version :/;
- if(UNTAINT) {
- warn "In Inline::check_config_file(): Blindly untainting Inline
configuration file information.\n" unless
$o->{CONFIG}{NO_UNTAINT_WARN};
- ($config) = $config =~ /(.*)/s;
- }
-
- %config = Inline::denter->new()->undent($config);
+ my $load_cfg = sub {
+ $o->create_config_file($DIRECTORY)
+ if not -e File::Spec->catfile($DIRECTORY, $configuration_file);
+
+ open CONFIG, "< ".File::Spec->catfile($DIRECTORY,
$configuration_file)
+ or croak M17_config_open_failed($DIRECTORY);
+ my $config = join '', <CONFIG>;
+ close CONFIG;
+
+ croak
M62_invalid_config_file(File::Spec->catfile($DIRECTORY,
$configuration_file))
+ unless $config =~ /^version :/;
+ if(UNTAINT) {
+ warn "In Inline::check_config_file(): Blindly untainting
Inline configuration file information.\n" unless
$o->{CONFIG}{NO_UNTAINT_WARN};
+ ($config) = $config =~ /(.*)/s;
+ }
+
+ %config = Inline::denter->new()->undent($config);
+ } ;
+
+ $load_cfg->() ;
+ if (! defined $config{languages}->{$o->{API}{language_id}}){
+ my $unlink = unlink(File::Spec->catfile($DIRECTORY,
$configuration_file));
+ if(!$unlink) {warn "Failed to remove config file"}
+ else {warn "config file removed\n" if $o->{CONFIG}{_TESTING}}
+ $load_cfg->() ;
+ }
+
$Inline::languages = $config{languages};
{
=============
I ran the Inline test suite an it passed, but I'm not quite sure how
to exactly reproduce the problem.
Rob/David can you give it a try?
Patrick
On Sat, Dec 3, 2011 at 7:51 PM, Sisyphus <[email protected]> wrote:
>
> ----- Original Message ----- From: "Patrick LeBoutillier"
> <[email protected]>
> To: "Sisyphus" <[email protected]>
> Cc: "David Oswald" <[email protected]>; <[email protected]>
> Sent: Sunday, December 04, 2011 8:34 AM
> Subject: Re: Strategy for improving install success of Inline::CPP
>
>
>> Rob,
>>
>> It looks to me like %config is populated with the actual contents of
>> the config file,
>> so $config{languages}->{$o->{API}{language_id}} will never exist at that
>> point.
>
> Damn ... so my patch would have the config file unlinked and then re-created
> *every* time a script that uses that config file is run. We don't really
> want that to happen.
>
>> Looks like if the config doesn't contain the current language, you
>> need to recreate
>> it and try again. Then if it still doens't exist, give an error.
>
> Yes, that's what I was hoping my patch would achieve - by checking in
> advance whether the current language was in there or not.
> But if it puts the cart before the horse, then it's of somewhat limited use
> ;-)
>
>> I'll try to come up with a patch for you.
>
> Thanks - that would be good.
> David's not the only one who has come up against this problem. I don't know
> if your Inline::Java ever fails with cpan testers because of this, but the
> Inline::Python maintainer has also been bitten by this.
> That was why I stuck in a 'REWRITE_CONFIG_FILE' config option for module
> authors to use in their test scripts - to force the re-creation of the
> config file.
> But like David says, while that (probably) solves the issue with the cpan
> testers, the user may subsequently still come up against that
> M19_usage_language error when he runs his own scripts.
>
> One feels that, in this day and age, this issue should be handled a little
> better than is currently the case.
>
> Cheers,
> Rob
>
--
=====================
Patrick LeBoutillier
Rosemère, Québec, Canada