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); |
2b2601b5 |
26 | check_version('Template' => 2.10 => 1); |
4b6a6341 |
27 | check_version('Test::More' => 0 => 0); |
f74c6517 |
28 | check_version('Test::Exception' => 0 => 0); |
5d6b7412 |
29 | check_version('Test::Differences' => 0 => 0); |
4b6a6341 |
30 | check_version('Text::ParseWords' => 0 => 0); |
31 | check_version('Text::RecordParser' => 0.02 => 0); |
32 | check_version('XML::Writer' => 0 => 1); |
0d0a615b |
33 | check_version('XML::XPath' => 1.13 => 1); |
7dfd35ca |
34 | check_version('YAML' => 0 => 1); |
4b6a6341 |
35 | |
36 | print "\n"; |
37 | |
38 | if (@{$missing{'optional'}} + @{$missing{'required'}}) { |
39 | print "Some components might not work correctly:\n"; |
40 | my $count; |
1ea530d4 |
41 | if (@{$missing{'required'}}) { |
4b6a6341 |
42 | $count = scalar(@{$missing{'required'}}); |
43 | printf " You are missing %d required module%s: %s\n", |
44 | $count, |
45 | $count == 1 ? '' : 's', |
46 | join ', ', @{$missing{'required'}}; |
47 | } |
1ea530d4 |
48 | if (@{$missing{'optional'}}) { |
4b6a6341 |
49 | $count = scalar(@{$missing{'optional'}}); |
50 | printf " You are missing %d optional module%s: %s\n", |
51 | $count, |
52 | $count == 1 ? '' : 's', |
53 | join ', ', @{$missing{'optional'}}; |
54 | } |
55 | |
56 | print "\n"; |
57 | } |
cfaf3de0 |
58 | |
59 | WriteMakefile( |
60 | 'NAME' => __PACKAGE__, |
d5a20e63 |
61 | 'VERSION_FROM' => 'lib/SQL/Translator.pm', |
cfaf3de0 |
62 | 'EXE_FILES' => [ |
9e09fe5a |
63 | 'bin/sqlt-diagram', |
64 | 'bin/sqlt-dumper', |
65 | 'bin/sqlt-graph', |
66 | 'bin/sqlt', |
cfaf3de0 |
67 | ], |
4b6a6341 |
68 | 'PREREQ_PM' => \%PREREQ_PM, |
69 | 'clean' => { |
70 | FILES => '$(DISTVNAME).tar$(SUFFIX)', |
7a8e1f51 |
71 | }, |
cfaf3de0 |
72 | ); |
4b6a6341 |
73 | |
74 | # ---------------------------------------------------------------------- |
75 | # check_version($module, $version, $optional) |
76 | # |
77 | # Takes a module name, optional version number, and a flag indicating |
78 | # whether the module is optional (default is no). |
79 | # ---------------------------------------------------------------------- |
80 | sub check_version { |
81 | my ($module, $version, $optional) = @_; |
82 | my ($dots, $load); |
83 | |
84 | if ($version) { |
5d6b7412 |
85 | $version = sprintf "%.02f", $version; |
4b6a6341 |
86 | $load = "$module $version"; |
87 | } |
88 | else { |
89 | $load = $module; |
90 | } |
91 | |
92 | $dots = '.' x (36 - length($load)); |
93 | |
94 | eval "use $load;"; |
95 | if ($@) { |
96 | if ($optional) { |
97 | push @{$missing{'optional'}}, $module; |
98 | } |
99 | else { |
100 | push @{$missing{'required'}}, $module; |
101 | } |
102 | print "$load $dots not found!"; |
103 | if ($optional) { |
104 | print optional('not found!'), "\n"; |
105 | return; |
106 | } |
107 | print required('not found!'); |
108 | print "\n"; |
109 | } |
110 | else { |
111 | no strict qw(refs); |
5d6b7412 |
112 | my $ver = sprintf "%.02f" => ${"$module\::VERSION"}; |
113 | print "$load $dots $ver"; |
114 | print $optional ? optional($ver) : required($ver); |
4b6a6341 |
115 | print "\n"; |
5d6b7412 |
116 | $version = $ver; |
4b6a6341 |
117 | } |
118 | |
119 | $PREREQ_PM{$module} = $version; |
120 | } |
121 | |
122 | sub optional { return _message("[optional]", @_) } |
123 | sub required { return _message("", @_) } |
124 | |
125 | sub _message { |
126 | my ($message, $version) = @_; |
127 | my $size = 24 - (length "$version"); |
128 | my $fmt = '%' . $size . 's'; |
129 | sprintf $fmt => $message; |
130 | } |
c406ab33 |
131 | |
132 | package MY; |
133 | use File::Basename qw(basename); |
134 | |
135 | sub libscan { |
136 | my ($self, $file) = @_; |
137 | my $bfile = basename($file); |
138 | |
139 | return if $bfile =~ /^\.(?:cvs)?ignore$/; |
140 | return if $bfile =~ /\.swp$/; |
141 | |
142 | return $self->SUPER::libscan($file); |
143 | } |
144 | |