Commit | Line | Data |
cfaf3de0 |
1 | package SQL::Translator; |
2 | |
3 | use strict; |
4 | use ExtUtils::MakeMaker; |
4b6a6341 |
5 | $|++; |
6 | |
7 | my %PREREQ_PM; |
8 | my %missing = ( |
9 | optional => [ ], |
10 | required => [ ], |
11 | ); |
12 | |
13 | print "Checking for required and recommended modules.\n"; |
14 | # Module Name Version Optional? |
15 | check_version('Class::Base' => 0 => 0); |
16 | check_version('File::Basename' => 0 => 0); |
17 | check_version('File::Spec' => 0 => 0); |
18 | check_version('GD' => 0 => 1); |
19 | check_version('GraphViz' => 0 => 1); |
20 | check_version('IO::Dir' => 0 => 0); |
21 | check_version('IO::File' => 0 => 0); |
22 | check_version('IO::Scalar' => 0 => 0); |
23 | check_version('Parse::RecDescent' => 1.94 => 0); |
24 | check_version('Pod::Usage' => 0 => 0); |
25 | check_version('Spreadsheet::ParseExcel' => 0 => 1); |
26 | check_version('Test::More' => 0 => 0); |
27 | check_version('Text::ParseWords' => 0 => 0); |
28 | check_version('Text::RecordParser' => 0.02 => 0); |
29 | check_version('XML::Writer' => 0 => 1); |
30 | |
31 | print "\n"; |
32 | |
33 | if (@{$missing{'optional'}} + @{$missing{'required'}}) { |
34 | print "Some components might not work correctly:\n"; |
35 | my $count; |
36 | if ($missing{'required'}) { |
37 | $count = scalar(@{$missing{'required'}}); |
38 | printf " You are missing %d required module%s: %s\n", |
39 | $count, |
40 | $count == 1 ? '' : 's', |
41 | join ', ', @{$missing{'required'}}; |
42 | } |
43 | if ($missing{'optional'}) { |
44 | $count = scalar(@{$missing{'optional'}}); |
45 | printf " You are missing %d optional module%s: %s\n", |
46 | $count, |
47 | $count == 1 ? '' : 's', |
48 | join ', ', @{$missing{'optional'}}; |
49 | } |
50 | |
51 | print "\n"; |
52 | } |
cfaf3de0 |
53 | |
54 | WriteMakefile( |
55 | 'NAME' => __PACKAGE__, |
d5a20e63 |
56 | 'VERSION_FROM' => 'lib/SQL/Translator.pm', |
cfaf3de0 |
57 | 'EXE_FILES' => [ |
9c6b150f |
58 | 'bin/sqlt-diagram.pl', |
4b6a6341 |
59 | 'bin/sqlt-dumper.pl', |
9c6b150f |
60 | 'bin/sqlt-graph.pl', |
cfaf3de0 |
61 | 'bin/sql_translator.pl', |
62 | ], |
4b6a6341 |
63 | 'PREREQ_PM' => \%PREREQ_PM, |
64 | 'clean' => { |
65 | FILES => '$(DISTVNAME).tar$(SUFFIX)', |
7a8e1f51 |
66 | }, |
cfaf3de0 |
67 | ); |
4b6a6341 |
68 | |
69 | # ---------------------------------------------------------------------- |
70 | # check_version($module, $version, $optional) |
71 | # |
72 | # Takes a module name, optional version number, and a flag indicating |
73 | # whether the module is optional (default is no). |
74 | # ---------------------------------------------------------------------- |
75 | sub check_version { |
76 | my ($module, $version, $optional) = @_; |
77 | my ($dots, $load); |
78 | |
79 | if ($version) { |
80 | $load = "$module $version"; |
81 | } |
82 | else { |
83 | $load = $module; |
84 | } |
85 | |
86 | $dots = '.' x (36 - length($load)); |
87 | |
88 | eval "use $load;"; |
89 | if ($@) { |
90 | if ($optional) { |
91 | push @{$missing{'optional'}}, $module; |
92 | } |
93 | else { |
94 | push @{$missing{'required'}}, $module; |
95 | } |
96 | print "$load $dots not found!"; |
97 | if ($optional) { |
98 | print optional('not found!'), "\n"; |
99 | return; |
100 | } |
101 | print required('not found!'); |
102 | print "\n"; |
103 | } |
104 | else { |
105 | no strict qw(refs); |
106 | my $version = ${"$module\::VERSION"}; |
107 | print "$load $dots $version"; |
108 | print $optional ? optional($version) : required($version); |
109 | print "\n"; |
110 | } |
111 | |
112 | $PREREQ_PM{$module} = $version; |
113 | } |
114 | |
115 | sub optional { return _message("[optional]", @_) } |
116 | sub required { return _message("", @_) } |
117 | |
118 | sub _message { |
119 | my ($message, $version) = @_; |
120 | my $size = 24 - (length "$version"); |
121 | my $fmt = '%' . $size . 's'; |
122 | sprintf $fmt => $message; |
123 | } |