latest version from core
[bioperl-db.git] / Makefile.PL
blob127adcd7feccb0b4913ce5d9e6785ed8197a1469
1 ## --Makefile.PL for Bioperl core module distribution--##
2 ## ----------------------------------------------------##
3 ## $Id$
4 ##----------------------------------------------------
6 # This still works, but has been superceded by Build.PL
7 # Please use Build.PL in preference
9 warn <<'WARN';
10 !--
11   Bioperl is transitioning from Makefile.PL-based installations to Build.PL
13   This Makefile.PL should still work fine, but please try Build.PL instead,
14   especially if you run into any non-test-related problems:
16   perl Build.PL
17   ./Build test
18   ./Build install
19   
20   If you're seeing this message whilst installing with CPAN, consider
21   stopping this installation and changing your CPAN configuration before
22   trying to install again:
23   
24   cpan>install CPAN
25   cpan>reload CPAN
26   cpan>install Module::Build
27   cpan>o conf prefer_installer MB
28   cpan>o conf commit
29   cpan>q
30   
31   Otherwise, if you would like to install the optional dependencies,
32   install Bundle::BioPerl v2.1.8 or greater
34 --!
36 WARN
38 for (1..5) {
39   local $| = 1;
40   print ". ";
41   sleep(1);
43 print "\n";
47 # Start with object preamble and setup of variables that might need changing
48 # in the future
51 require 5.006_001;
52 use strict;
53 use warnings;
54 use File::Spec::Functions;
55 use ExtUtils::MakeMaker;
56 use Cwd;
58 my $VERSION = 1.005002_100;
59 $VERSION = eval $VERSION;
61 # All Bioperl dependencies on external modules are defined here
62 # (these are mostly considered optional)
63 my %packages = (
64  'DBI'                                                          => '0.0/Database Access/basic functionality/Everything',
65  'Bio::Root::Version'   => '1.005002/Bioperl/basic functionality/Everything',
68 # We don't want CPAN, Bundle::BioPerl et al. to know about these for various
69 # reasons (eg. because they would cause a circular dependency), so will exclude
70 # them from PREREQ_PM later on
71 my %exclude_from_prereqs = (
72   
75 # These are really required and deserve a clearer warning
76 my %required = (
77         'Bio::Root::Version' => 1,
78         'DBI' => 1
83 # Main code
86 # generate string for makefile that allows show_tests and make test_<testname>
87 # to work
88 opendir(DIR,"t") || die "No test directory. Cannot continue.";
89 my @files = readdir(DIR);
90 shift @files;
91 shift @files;
92 my ($tline, $tset);
93 foreach my $file (@files) {
94   $file =~ /(\w+)\.t/ || next;
95   $file = $1;
96   my $path = catfile('t', $file);
97   my $line = "test_$file :: pure_all\n\tPERL_DL_NONLAZY=1 \$(FULLPERL) -I\$(INST_ARCHLIB) -I\$(INST_LIB) -I\$(PERL_ARCHLIB) -I\$(PERL_LIB) -e \'use Test::Harness qw(&runtests \$\$verbose); \$\$verbose=\$(TEST_VERBOSE); runtests \@ARGV;\' $path.t\n";
98   $tline .= $line;
99   $tset  .= " $file \\\n";
101 $tline = "show_tests :\n\t\@echo \'type make test_<subtest> to run\'\n\t\@echo '$tset'\n$tline\n";
102 print STDERR "Generated sub tests. go make show_tests to see available subtests\n";
104 # we may end up creating extra files we would want to clean later; note them here
105 my @should_be_cleaned;
107 # ask questions about optional stuff to install/test
110 # notify about optional modules that haven't been installed, and generate hash
111 # for prereqs needed later in WriteMakefile
112 my %prereq;
113 my $error = 0;
114 print "\n*** Optional dependencies section ***\n";
115 while (my ($name, $value) = each %packages) {
116   my ($ver, $desc, $expl, $module) = split( /\// , $value);
117         no strict 'refs';
118   if (! eval "require $name;" || (${$name.'::VERSION'} || 0) < $ver) {
119     my @modules = split(',', $module);
120     my $modules = join("\n * ", @modules);
121     print "External Module '$name' >= $ver ($desc) is not installed on this computer.\n The following Bioperl-run modules need it for $expl:\n * $modules\n";
122     $error = 1;
123     
124     if (exists $exclude_from_prereqs{$name}) {
125       print "Additionally, it will not be considered a pre-requisite\n(and therefore will not be automatically installed by CPAN) because:\n $exclude_from_prereqs{$name}.\n\n";
126     }
127                 elsif (exists $required{$name}) {
128                         print "Additionally, it is absolutely required and therefore most if not all tests will fail!\n\n";
129                 }
130     else {
131       print "\n";
132     }
133   }
134         
135   unless (exists $exclude_from_prereqs{$name}) {
136     $prereq{$name} = $ver;
137   }
139 if ($error == 1) {
140   print <<QQ_ERROR_QQ;
141 Information:
143   Some perl modules are missing, listed above and below. The only
144   functionality that will be affected is described above;
145   the rest of bioperl will work fine without them.
147   The installation of these external packages is very simple. You
148   can read more about bioperl external dependencies in the INSTALL
149   file or at:
151   http://bioperl.org/wiki/Installing_BioPerl
153   Enjoy the rest of bioperl, which you can use after going 'make install'
155 QQ_ERROR_QQ
157 else {
158         print "All dependencies are installed\n\n";
160 print "NB: BioSQL also needs to be installed for this package to work; see the INSTALL file\n\n";
162 # write the makefile
163 WriteMakefile(
164   NAME         => 'Bio',
165   DISTNAME     => 'bioperl-db',
166   VERSION      => $VERSION,
167   dist         => { COMPRESS     => 'gzip -9f',
168                     SUFFIX       => '.gz',
169                     DIST_DEFAULT => 'all tardist'
170                   },
171   'AUTHOR'     => 'Bioperl Team (bioperl-l@bioperl.org)',
172   'ABSTRACT'   => 'bioperl-db - package for biological databases',
173   # clean() is overridden and also gets rid of @should_be_cleaned
174   realclean    => { FILES => join(' ', @should_be_cleaned) },
175   PREREQ_PM    => \%prereq,
176   # Once 'nmake ppd' has been issued, the PPD needs to be modified for use with PPM4
177   # In addition, non-critical prereq's should be moved to a Bundle::BioPerl PPD
178   # A bit of a pain, but better to have all the prereq's in the same place initially
179   # TODO I'll (Nathan Haigh) added updated details to the wiki for doing this
182 exit;
186 # subroutines
191 # override MakeMaker methods
194 sub MY::postamble {
195   $tline;
198 package MY;
200 sub MY::clean {
201   return shift->SUPER::clean(@_) . <<END;
202 \t-rm -rf @should_be_cleaned