The attached patch replaces the _cbuilder method with a public cbuilder method, as discussed.
-zefram
--- Module-Build-0.2808_01.mod0/lib/Module/Build/Base.pm 2007-10-25 19:22:56.264034077 +0100 +++ Module-Build-0.2808_01.mod1/lib/Module/Build/Base.pm 2007-10-25 19:30:46.107001947 +0100 @@ -3907,13 +3907,14 @@ AutoSplit::autosplit($file, $dir); } -sub _cbuilder { +sub cbuilder { # Returns a CBuilder object my $self = shift; my $p = $self->{properties}; return $p->{_cbuilder} if $p->{_cbuilder}; - return unless $self->_mb_feature('C_support'); + die "Module::Build is not configured with C_support" + unless $self->_mb_feature('C_support'); require ExtUtils::CBuilder; return $p->{_cbuilder} = ExtUtils::CBuilder->new(config => $self->config); @@ -3926,7 +3927,7 @@ return $p->{have_compiler} if defined $p->{have_compiler}; $self->log_verbose("Checking if compiler tools configured... "); - my $b = $self->_cbuilder; + my $b = eval { $self->cbuilder }; my $have = $b && $b->have_compiler; $self->log_verbose($have ? "ok.\n" : "failed.\n"); return $p->{have_compiler} = $have; @@ -3934,8 +3935,7 @@ sub compile_c { my ($self, $file, %args) = @_; - my $b = $self->_cbuilder - or die "Module::Build is not configured with C_support"; + my $b = $self->cbuilder; my $obj_file = $b->object_file($file); $self->add_to_cleanup($obj_file); @@ -3968,9 +3968,7 @@ my $module_name = $self->module_name; $module_name ||= $spec->{module_name}; - my $b = $self->_cbuilder - or die "Module::Build is not configured with C_support"; - $b->link( + $self->cbuilder->link( module_name => $module_name, objects => [$spec->{obj_file}, @$objects], lib_file => $spec->{lib_file},