The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use ExtUtils::MakeMaker;

##
# Constants
##


my $NAME = 'Cache::Cache';
my $VERSION_FROM = 'lib/Cache/Cache.pm';
my $COMPRESS = 'gzip';
my $SUFFIX = '.gz';
my $DEFAULT_PREREQ_PM = {
                         'Digest::SHA1' => '2.02',
                         'File::Spec' => '0.82',
                         'Storable' => '1.014',
                         'IPC::ShareLite' => '0.09',
                         'Error' => '0.15'
                        };

my @NON_IPC_TESTS = ( 't/1_test_cache_interface.t',
                      't/2_test_memory_cache.t',
                      't/3_test_file_cache.t',
                      't/5_test_size_aware_file_cache.t',
                      't/6_test_size_aware_memory_cache.t' );

##
# Main
##


Main( );


##
# Subroutines
##


sub Main
{
  my %options;

  $options{NAME} = $NAME;
  $options{VERSION_FROM} = $VERSION_FROM;
  $options{dist} = { COMPRESS => $COMPRESS, SUFFIX => $SUFFIX };
  $options{PREREQ_PM} = $DEFAULT_PREREQ_PM;

  if ( not Has_Module( 'IPC::ShareLite' ) )
  {
    Print_ShareLite_Missing_Message( );
    $options{test} = { TESTS => join( ' ', @NON_IPC_TESTS ) };
    delete $options{PREREQ_PM}->{'IPC::ShareLite'};
  }

  WriteMakefile( %options );

  Print_Make_Test_Message( );
}


sub Has_Module
{
  my ( $module ) = @_;

  print "Checking for $module... ";

  my $has_module = ( eval "require $module"  && ! $@ );

  print ( $has_module ? "found\n" : "not found\n" );

  return $has_module;
}


sub Print_ShareLite_Missing_Message
{
  print <<END

  NOTE: Your system does not seem to have IPC::ShareLite installed.
  This module is a prerequisite for the SharedMemoryCache
  implementations.  However, since it is not available on all
  platforms, the Cache::Cache module does not list it as an explicit
  dependency.  If you are able to build IPC::ShareLite (available on
  CPAN), please install it now and re run this Makefile.PL.
  Automatically disabling the tests for the SharedMemoryCache.

END
}


sub Print_Make_Test_Message
{
  print <<END
------------------------------------------------------------------
Please be patient while running "make test" as the full test suite
takes roughly two minutes to complete.
------------------------------------------------------------------
END
}