The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package PITA::Scheme::Perl5::Build;

# Class for implementing the perl5-build testing scheme

use 5.005;
use strict;
use Carp               ();
use File::Spec         ();
use File::Which        ();
use PITA::Scheme::Perl ();

use vars qw{$VERSION @ISA};
BEGIN {
	$VERSION = '0.43';
	@ISA     = 'PITA::Scheme::Perl';
}





#####################################################################
# Constructor

sub default_path {
	File::Which::which('perl') || '';
}

sub new {
	my $class = shift;
	my $self  = $class->SUPER::new(@_);

	### Additional checks, if any

	$self;
}





#####################################################################
# PITA::Scheme Methods

sub prepare_package {
	my $self = shift;

	# Do the generic unpacking
	$self->SUPER::prepare_package(@_);

	# Validate that the package has a Makefile.PL in the root
	unless ( -f $self->workarea_file('Build.PL') ) {
		Carp::croak("Package does not contain a Makefile.PL");
	}

	$self;
}

sub execute_all {
	my $self = shift;

	# Run the Makefile.PL
	$self->execute_buildpl or return '';

	# Run the make
	$self->execute_build or return '';

	# Run the tests
	$self->execute_buildtest or return '';

	1;
}

sub execute_buildpl {
	my $self = shift;
	unless ( -f $self->workarea_file('Build.PL') ) {
		Carp::croak("Cannot execute_makefilepl without a Build.PL");
	}

	# Run the Makefile.PL
	my $command = $self->execute_command('perl', 'Build.PL');

	# Did it create a make file
	if ( -f $self->workarea_file('Build') ) {
		# Worked as expected
		### Do we need to add stuff here later?
		return 1;
	}

	# Didn't work
	### Do we need to add stuff here later?
	return '';
}

sub execute_build {
	my $self = shift;
	unless ( -f $self->workarea_file('Build') ) {
		Carp::croak("Cannot execute_make without a Build file");
	}

	# Run the make
	my $command = $self->execute_command('perl', 'Build');

	# Did it create a blib directory?
	if ( -d $self->workarea_file('blib') ) {
		# Worked as expected
		### Do we need to add stuff here later?
		return 1;
	}

	# Didn't work
	### Do we need to add stuff here later?
	return '';
}

sub execute_buildtest {
	my $self = shift;
	unless ( -f $self->workarea_file('Build') ) {
		Carp::croak("Cannot execute_maketest without a Build file");
	}
	unless ( -d $self->workarea_file('blib') ) {
		Carp::croak("Cannot execute_maketest without a blib");
	}

	# Run the make test
	my $command = $self->execute_command('perl', 'Build', 'test');

	# Did it... erm...
	if ( 1 ) {
		# Worked as expected
		### Do we need to add stuff here later?
		return 1;
	}

	# Didn't work
	### Do we need to add stuff here later?
	return '';
}

1;