source: xas-spooler/trunk/Build.PL @ 3c651a38b0570c0fe06f05654572086f95800b65

Revision 3c651a38b0570c0fe06f05654572086f95800b65, 9.2 KB checked in by Kevin L. Esteb <kevin@…>, 3 years ago (diff)

fixed a dependence and updated version number

  • Property mode set to 100644
Line 
1use strict;
2use warnings FATAL => 'all';
3use Module::Build;
4
5my $requires = {
6    'perl'                 => 5.008_08,
7    'XAS'                  => 0.08,
8    'XAS::Model'           => 0.01,
9    'POE::Component::Cron' => 0.21,
10};
11   
12my $sysconfig = ( -e '/etc/default' ) ? '/etc/default' : '/etc/sysconfig';
13my $install_path = {
14    etc           => '/etc/xas',
15    sbin          => '/usr/sbin',
16    script        => '/usr/bin',
17    sysconfig     => $sysconfig,
18    'init.d'      => '/etc/init.d',
19    'profile.d'   => '/etc/profile.d',
20    'logrotate.d' => '/etc/logrotate.d'
21};
22
23if ($^O eq 'MSWin32') {
24
25    my $path = defined($ENV{XAS_ROOT}) ? $ENV{XAS_ROOT} : 'C:\\xas';
26
27    my $install_path = {
28        etc            => $path . '\\etc',
29        sbin          => $path . '\\sbin',
30        script        => $path . '\\bin',
31        sysconfig     => $path . '\\etc\\sysconfig',
32        'init.d'      => $path . '\\etc\\init.d',
33        'profile.d'   => $path . '\\etc\\profile.d',
34        'logrotate.d' => $path . '\\etc\\logrotate.d'
35    };
36
37}
38
39my $class = Module::Build->subclass(code => <<'EOC');
40
41    use strict;
42    use warnings;
43
44    use IO::File;
45    use File::Copy;
46    use File::Find;
47    use File::Basename;
48    use File::Spec::Functions qw( catfile catdir rel2abs );
49
50    # override and add a few things
51
52    sub new {
53        my $class = shift;
54
55        my $self = $class->SUPER::new(@_);
56
57        my $blib = $self->{properties}{blib};
58        my $sbin = catfile($blib, 'sbin');
59        $self->{properties}{sbindoc_dirs} = [ $sbin ];
60
61        return $self;
62
63    }
64
65    # create man pages for files within sbin
66
67    sub manify_sbin_pods {
68        my $self    = shift;
69
70        my $files  = $self->_find_pods( 
71            $self->{properties}{sbindoc_dirs},
72            exclude => [ $self->file_qr('\.bat$') ] 
73        );
74
75        return unless keys %$files;
76
77        my $mandir = File::Spec->catdir( $self->blib, 'bindoc' );
78        File::Path::mkpath( $mandir, 0, oct(777) );
79
80        require Pod::Man;
81
82        foreach my $file (keys %$files) {
83
84            # Pod::Simple based parsers only support one document per instance.
85            # This is expected to change in a future version
86            # (Pod::Simple > 3.03).
87
88            # binaries go in section 1p
89
90            my $parser  = Pod::Man->new( section => '1p' ); 
91            my $manpage = $self->man1page_name( $file ) . '.' .
92                $self->config( 'man1ext' );
93
94            my $outfile = File::Spec->catfile($mandir, $manpage);
95
96            next if $self->up_to_date( $file, $outfile );
97
98            $self->log_verbose("Manifying $file -> $outfile\n");
99
100            eval { $parser->parse_from_file( $file, $outfile ); 1 }
101                 or $self->log_warn("Error creating '$outfile': $@\n");
102         
103            $files->{$file} = $outfile;
104
105        }
106
107    }
108
109    # remove redhat stuff when installing to debian
110
111    sub ACTION_debian {
112        my $self = shift;
113
114        # cleanup the init.d directory
115
116        my $destdir = $self->destdir;
117        my @files = ('xas-spooler', 'xas-collector'); 
118        my @names = map { catfile($destdir, 'etc', 'init.d', $_ . '.rhel') } @files;
119
120        foreach my $file (@names) {
121
122            unlink $file if (-e $file);
123
124        }
125
126        @names = map { catfile($destdir, 'etc', 'init.d', $_ . '.debian') } @files;
127
128        foreach my $file (@names) {
129
130            if ( -e $file) {
131
132                my ($name, $path, $ext) = fileparse($file, qr/\.[^.]*/);
133                my $new = catfile($path, $name);
134
135                move($file, $new);
136
137            }
138
139        }
140
141    }
142
143    # remove debian stuff when installing to redhat
144
145    sub ACTION_redhat {
146        my $self = shift;
147
148        # cleanup the init.d directory
149
150        my $destdir = $self->destdir;
151        my @files = ('xas-spooler', 'xas-collector'); 
152        my @names = map { catfile($destdir, 'etc',  'init.d', $_ . '.debian') } @files;
153
154        foreach my $file (@names) {
155
156            unlink $file if (-e $file);
157
158        }
159
160        @names = map { catfile($destdir, 'etc', 'init.d', $_ . '.rhel') } @files;
161
162        foreach my $file (@names) {
163
164            if ( -e $file) {
165
166                my ($name, $path, $ext) = fileparse($file, qr/\.[^.]*/);
167                my $new = catfile($path, $name);
168
169                move($file, $new);
170
171            }
172
173        }
174
175    }
176
177    # correctly process additional directories
178
179    sub process_etc_files {
180        my $self = shift;
181
182        my $result;
183        my $dir = catfile('blib', 'etc');
184        my $files = $self->find_etc_files;
185
186        mkdir $dir unless (-e $dir);
187
188        while (my ($from, $to) = each %$files) {
189
190            $to = catfile('blib', $to);
191            $result = $self->copy_if_modified(from => $from, to => $to);
192
193        }
194
195        return $self;
196
197    }
198
199    sub process_sbin_files {
200        my $self = shift;
201
202        my $result;
203        my $dir = catfile('blib', 'sbin');
204        my $files = $self->find_sbin_files;
205
206        mkdir $dir unless (-e $dir);
207
208        while (my ($from, $to) = each %$files) {
209
210            $to = catfile('blib', $to);
211            $result = $self->copy_if_modified(from => $from, to => $to) or next;
212            $self->fix_shebang_line($result) unless $self->is_vmsish;
213            $self->make_executable($result);
214
215        }
216
217        $self->manify_sbin_pods();
218        return $self;
219
220    }
221
222    sub process_initd_files {
223        my $self = shift;
224
225        my $result;
226        my $dir = catfile('blib', 'init.d');
227        my $files = $self->find_initd_files;
228
229        mkdir $dir unless (-e $dir);
230
231        while (my ($from, $to) = each %$files) {
232
233            $to = catfile('blib', $to);
234            $result = $self->copy_if_modified(from => $from, to => $to) or next;
235            $self->make_executable($result);
236
237        }
238
239        return $self;
240
241    }
242
243    sub process_sysconf_files {
244        my $self = shift;
245
246        my $result;
247        my $dir = catfile('blib', 'sysconfig');
248        my $files = $self->find_sysconf_files;
249
250        mkdir $dir unless (-e $dir);
251
252        while (my ($from, $to) = each %$files) {
253
254            $to = catfile('blib', $to);
255            $result = $self->copy_if_modified(from => $from, to => $to);
256
257        }
258
259        return $self;
260
261    }
262
263    sub process_profiled_files {
264        my $self = shift;
265
266        my $result;
267        my $dir = catfile('blib', 'profile.d');
268        my $files = $self->find_profiled_files;
269
270        mkdir $dir unless (-e $dir);
271
272        while (my ($from, $to) = each %$files) {
273
274            $to = catfile('blib', $to);
275            $result = $self->copy_if_modified(from => $from, to => $to) or next;
276            $self->make_executable($result);
277
278        }
279
280        return $self;
281
282    }
283
284    sub process_logrotated_files {
285        my $self = shift;
286
287        my $result;
288        my $dir = catfile('blib', 'logrotate.d');
289        my $files = $self->find_logrotated_files;
290
291        mkdir $dir unless (-e $dir);
292
293        while (my ($from, $to) = each %$files) {
294
295            $to = catfile('blib', $to);
296            $result = $self->copy_if_modified(from => $from, to => $to);
297
298        }
299
300        return $self;
301
302    }
303
304    sub find_etc_files { shift->find_all_files_no_scm('etc'); }
305    sub find_sbin_files { shift->find_all_files_no_scm('sbin'); }
306    sub find_initd_files { shift->find_all_files_no_scm('init.d'); }
307    sub find_sysconf_files { shift->find_all_files_no_scm('sysconfig'); }
308    sub find_profiled_files { shift->find_all_files_no_scm('profile.d'); }
309    sub find_logrotated_files { shift->find_all_files_no_scm('logrotate.d'); }
310
311    sub find_all_files_no_scm {
312        my ($self, $dir) = @_;
313
314        my $sub = sub {
315            return ((($File::Find::name !~ /SVN/i)  and
316                     ($File::Find::name !~ /GIT/i)) and
317                    ( -f $File::Find::name));
318        };
319
320        return { map {$_, $_} @{ $self->rscan_dir($dir, $sub) } };
321
322    }
323
324    # fix for scm files in the script directory
325
326    sub _files_in {
327        my ($self, $dir) = @_;
328        return unless -d $dir;
329
330        local *DH;
331        opendir DH, $dir or die "Can't read directory $dir: $!";
332
333        my @files;
334        while (defined (my $file = readdir DH)) {
335           my $full_path = File::Spec->catfile($dir, $file);
336           next if -d $full_path;
337           next if (($file =~ /SVN/i) or ($file =~ /GIT/i));
338           push @files, $full_path;
339       }
340       return @files;
341    }
342EOC
343
344my $builder = $class->new(
345    module_name         => 'XAS::Spooler',
346    license             => 'artistic_2',
347    dist_author         => q{Kevin L. Esteb <kevin@kesteb.us>},
348    dist_version_from   => 'lib/XAS/Spooler.pm',
349    release_status      => 'stable',
350    configure_requires => {
351        'Module::Build' => 0,
352    },
353    build_requires => {
354        'Test::More' => 0,
355    },
356    meta_add => {
357        resources => {
358            homepage   => 'http://scm.kesteb.us/trac',
359            repository => 'http://scm.kesteb.us/git/XAS-Spooler',
360        },
361    },
362    add_to_cleanup     => [ 'XAS-Spooler-*' ],
363    create_makefile_pl => 'traditional',
364    install_path       => $install_path,
365    requires           => $requires
366);
367
368$builder->add_build_element('etc');
369$builder->add_build_element('msg');
370$builder->add_build_element('sbin');
371$builder->add_build_element('initd');
372$builder->add_build_element('sysconf');
373$builder->add_build_element('logrotated');
374
375$builder->create_build_script();
376
Note: See TracBrowser for help on using the repository browser.