#!/usr/local/bin/perl use strict; $| = 1; my $mtime_makefile = (stat('Makefile'))[9] || 0; my $fresh_makefile = ($mtime_makefile > time() - 1200) ? 1 : 0; my $necessary_modules = { # 'Apache' => 'Make sure your installation of mod_perl is complete', 'Class::Struct' => "Apache::ASP->Loader() precompile scripts functionality", 'MLDBM' => 'This is used for reading and writing multi-level hashes on disk', 'MLDBM::Sync 0.25' => 'Support for State dbms like $Session & $Application', 'SDBM_File' => 'Internal databases used for state files, like $Session', 'Data::Dumper' => 'Serializes data for MLDBM', 'Fcntl' => 'Used for file locking constants', 'File::Basename' => "Used for tests during 'make test'", 'Digest::MD5' => '32 byte hash algorithm for cookie session-id', 'Carp' => 'Provides critical error messaging with confess()', }; my $optional_modules = { 'Devel::Symdump' => 'Used for StatINC setting, which reloads modules dynamically', 'Win32::OLE' => { test => '$^O eq \'MSWin32\'', message => 'Required for access to ActiveX objects on Win32, like ADO.', }, 'CGI' => 'Required for file upload, make test, and command line ./cgi/asp script', 'Compress::Zlib' => "Required for html gzip text compression for browsers that support it", # 'DB_File' => 'Optional module for StateDB & CacheDB config options', 'MLDBM::Sync::SDBM_File' => 'Optional module for StateDB config option that is faster than DB_File on Linux. Also default CacheDB for XSLT caching, but DB_File may also be used as well as Tie::TextDir.', 'HTML::Clean' => 'Compress text/html with Clean config or $Response->{Clean} set to 1-9', 'HTML::FillInForm' => 'Enables FormFill feature which will auto fill forms from $Request->Form data', 'Apache::Filter' => 'Full SSI support via Apache::Filter & Apache::SSI', 'Apache::SSI' => 'Full SSI support via Apache::Filter & Apache::SSI', 'Net::SMTP' => 'Runtime errors can be mailed to the webmaster with MailErrorTo config', 'Net::Config' => 'Config options for use with Net::SMTP', 'Time::HiRes' => 'Sub second Apache::ASP response timing with Debug 3/-3 turned on.', # 'Tie::TextDir .04' => 'Fast cache for CacheDB setting for things like large XSLT transformations.', 'XML::XSLT 0.32' => 'XSLT, written in perl so makes for an easy install after installing Bundle::XML from CPAN.', 'XML::Sablotron' => 'XSLT that is 10 times faster than XML::XSLT', 'XML::LibXSLT' => 'XSLT that is 2 times faster than XML::Sablotron', }; print "Checking for the REQUIRED modules...\n"; my($errors, $warnings); for(sort keys %$necessary_modules) { eval 'use ' . $_ ; my $module_display = $_; $module_display =~ s/( [\d\.]+)$/ \>\=$1/isg; if($@) { $errors++; print " !!! you need the module: $module_display\n"; print " WHY: $necessary_modules->{$_}\n"; } else { print " ... found $module_display !\n"; } } print "\n"; if(! $errors) { print "GOOD NEWS! You have all the required modules installed for Apache::ASP.\n"; } else { print "OTHER MODULES NEEDED! You need to install the above required modules before installing Apache::ASP.\n"; } print "\n"; sleep(2) unless $fresh_makefile; print "Checking for the OPTIONAL modules...\n"; sleep(2) unless $fresh_makefile; for(sort keys %$optional_modules) { my $data = $optional_modules->{$_}; my $message = ref($data) ? $data->{message} : $data; # if there is a test for this module run it and if returns false # skip this module's message, first so UNIX users don't see # message about Win32::OLE if(ref($data) && $data->{test} && ! eval($data->{test})) { next; } { local $SIG{__DIE__} = sub { die(@_); }; eval 'use ' . $_ ; my $module_display = $_; $module_display =~ s/( [\d\.]+)$/ \>\=$1/isg; if($@) { $warnings++; print " ??? you may want module: $module_display\n"; print " WHY: $optional_modules->{$_}\n"; # print " ERROR: $@\n"; } else { print " ... found $module_display !\n"; } } } if($warnings) { print "\n--- OPTIONAL modules missing. You can install Apache::ASP without these. ---\n"; sleep(2) unless $fresh_makefile; } my $CPAN = < perl -MCPAN -eshell Then to install any required modules, like MLDBM::Sync cpan> install MLDBM::Sync To install the modules commonly used with Apache::ASP, do: cpan> install Bundle::Apache::ASP and cpan will do all the work for you. For more information, please view the CPAN docs with > perldoc CPAN =-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-= CPAN ; if($errors) { print "\n"; print $CPAN; print "\n"; print "** You do not have the required modules for Apache::ASP. Do not run 'make install' **\n\n"; } else { if($warnings) { print $CPAN; } print "+++ Looks good! You are ready to install Apache::ASP! +++ \n\n"; } use ExtUtils::MakeMaker; &WriteMakefile( 'NAME' => "Apache::ASP", 'VERSION_FROM' => 'CHANGES', # finds $VERSION 'PREREQ_PM' => { 'Carp' => 0, 'Class::Struct' => 0, 'Data::Dumper' => 0, 'Fcntl' => 0, 'File::Basename' => 0, 'Digest::MD5' => 0, 'MLDBM' => 0, 'SDBM_File' => 0, 'MLDBM::Sync' => 0, }, 'EXE_FILES' => [ 'asp-perl' ], 'clean' => { FILES => 't/long_directory_path_test t/.cache t/.state t/session_events/.state t/null/.state Makefile.old' }, );