xref: /openbsd-src/gnu/usr.bin/perl/t/porting/dual-life.t (revision fac98b93b71777a71b1e912ccaf68ce33d7b87c4)
1#!/perl -w
2use 5.010;
3use strict;
4
5# This tests properties of dual-life modules:
6#
7# * Are all dual-life programs being generated in utils/?
8# ... or in the module-specific locations where they are built.
9
10chdir 't';
11require './test.pl';
12
13use Config;
14if ( $Config{usecrosscompile} ) {
15  skip_all( "Not all files are available during cross-compilation" );
16}
17
18plan('no_plan');
19
20use File::Basename;
21use File::Find;
22use File::Spec::Functions;
23
24# Exceptions that are found in dual-life bin dirs but aren't
25# installed by default; some occur only during testing:
26my $not_installed = qr{^(?:
27  \.\./cpan/Archive-Tar/bin/ptar.*
28   |
29  \.\./cpan/JSON-PP/bin/json_pp
30   |
31  \.\./cpan/IO-Compress/bin/zipdetails
32   |
33  \.\./cpan/Encode/bin/u(?:cm(?:2table|lint|sort)|nidump)
34   |
35  \.\./cpan/Module-(?:Metadata|Build)
36                               /MB-[\w\d]+/Simple/(?:test_install/)?bin/.*
37)\z}ix;
38
39my %dist_dir_exe;
40
41$dist_dir_exe{lc "podselect.PL"} = "../cpan/Pod-Parser/podselect";
42$dist_dir_exe{lc "podchecker.PL"} = "../cpan/Pod-Checker/podchecker";
43$dist_dir_exe{lc "pod2usage.PL"} = "../cpan/Pod-Usage/pod2usage";
44
45foreach (qw (pod2man pod2text)) {
46    $dist_dir_exe{lc "$_.PL"} = "../cpan/podlators/scripts/$_";
47    # redundant but necessary given use of scripts/ for both
48    # built version and .PL.
49    $dist_dir_exe{lc $_} = "../cpan/podlators/scripts/$_";
50};
51$dist_dir_exe{'pod2html.pl'} = '../ext/Pod-Html';
52
53my @programs;
54
55my $ext = $^O eq 'VMS' ? '.com' : '';
56
57find(
58  { no_chdir => 1, wanted => sub {
59    my $name = $File::Find::name;
60    return if $name =~ /blib/;
61    return unless $name =~ m{/(?:bin|scripts?)/\S+\z} && $name !~ m{/t/};
62    $name =~ s/${ext}\z//;
63
64    push @programs, $name;
65  }},
66  qw( ../cpan ../dist ../ext ),
67);
68
69
70for my $f ( sort @programs ) {
71  $f =~ s/\.\z// if $^O eq 'VMS';
72  next if $f =~ $not_installed;
73  my $bn = basename($f);
74  if(grep { /\A(?i:$bn)\z/ } keys %dist_dir_exe) {
75    my $exe_file = "$dist_dir_exe{lc $bn}$ext";
76    ok( -f $exe_file, "Verify -f '$exe_file'");
77  } else {
78    my $utils_file = catfile('..', 'utils', "$bn$ext");
79    ok( -f $utils_file, "Verify -f '$utils_file'" );
80  }
81}
82
83