1 package ExtUtils::Command::MM;
7 use vars qw($VERSION @ISA @EXPORT);
10 @EXPORT = qw(test_harness pod2man perllocal_install uninstall
11 warn_if_old_packlist);
14 my $Is_VMS = $^O eq 'VMS';
19 ExtUtils::Command::MM - Commands for the MM's to use in Makefiles
23 perl "-MExtUtils::Command::MM" -e "function" "--" arguments...
28 B<FOR INTERNAL USE ONLY!> The interface is not stable.
30 ExtUtils::Command::MM encapsulates code which would otherwise have to
31 be done with large "one" liners.
33 Any $(FOO) used in the examples are make variables, not Perl.
39 test_harness($verbose, @test_libs);
41 Runs the tests on @ARGV via Test::Harness passing through the $verbose
42 flag. Any @test_libs will be unshifted onto the test's @INC.
44 @test_libs are run in alphabetical order.
49 require Test::Harness;
52 $Test::Harness::verbose = shift;
54 # Because Windows doesn't do this for us and listing all the *.t files
55 # out on the command line can blow over its exec limit.
56 require ExtUtils::Command;
57 my @argv = ExtUtils::Command::expand_wildcards(@ARGV);
60 unshift @INC, map { File::Spec->rel2abs($_) } @_;
61 Test::Harness::runtests(sort { lc $a cmp lc $b } @argv);
68 pod2man( '--option=value',
69 $podfile1 => $manpage1,
70 $podfile2 => $manpage2,
76 pod2man() is a function performing most of the duties of the pod2man
77 program. Its arguments are exactly the same as pod2man as of 5.8.0
80 --perm_rw octal permission to set the resulting manpage to
87 If no arguments are given to pod2man it will read from @ARGV.
97 # We will cheat and just use Getopt::Long. We fool it by putting
98 # our arguments into @ARGV. Should be safe.
99 local @ARGV = @_ ? @_ : @ARGV;
100 Getopt::Long::config ('bundling_override');
101 Getopt::Long::GetOptions (\%options,
102 'section|s=s', 'release|r=s', 'center|c=s',
103 'date|d=s', 'fixed=s', 'fixedbold=s', 'fixeditalic=s',
104 'fixedbolditalic=s', 'official|o', 'quotes|q=s', 'lax|l',
105 'name|n=s', 'perm_rw:i'
108 # If there's no files, don't bother going further.
109 return 0 unless @ARGV;
111 # Official sets --center, but don't override things explicitly set.
112 if ($options{official} && !defined $options{center}) {
113 $options{center} = q[Perl Programmer's Reference Guide];
116 # This isn't a valid Pod::Man option and is only accepted for backwards
118 delete $options{lax};
120 do {{ # so 'next' works
121 my ($pod, $man) = splice(@ARGV, 0, 2);
123 next if ((-e $man) &&
124 (-M $man < -M $pod) &&
125 (-M $man < -M "Makefile"));
127 print "Manifying $man\n";
129 my $parser = Pod::Man->new(%options);
130 $parser->parse_from_file($pod, $man)
131 or do { warn("Could not install $man\n"); next };
133 if (length $options{perm_rw}) {
134 chmod(oct($options{perm_rw}), $man)
135 or do { warn("chmod $options{perm_rw} $man: $!\n"); next };
143 =item B<warn_if_old_packlist>
145 perl "-MExtUtils::Command::MM" -e warn_if_old_packlist <somefile>
147 Displays a warning that an old packlist file was found. Reads the
152 sub warn_if_old_packlist {
153 my $packlist = $ARGV[0];
155 return unless -f $packlist;
156 print <<"PACKLIST_WARNING";
157 WARNING: I have found an old package in
159 Please make sure the two installations are not conflicting
165 =item B<perllocal_install>
167 perl "-MExtUtils::Command::MM" -e perllocal_install
168 <type> <module name> <key> <value> ...
170 # VMS only, key|value pairs come on STDIN
171 perl "-MExtUtils::Command::MM" -e perllocal_install
172 <type> <module name> < <key>|<value> ...
174 Prints a fragment of POD suitable for appending to perllocal.pod.
175 Arguments are read from @ARGV.
177 'type' is the type of what you're installing. Usually 'Module'.
179 'module name' is simply the name of your module. (Foo::Bar)
181 Key/value pairs are extra information about the module. Fields include:
183 installed into which directory your module was out into
184 LINKTYPE dynamic or static linking
185 VERSION module version number
186 EXE_FILES any executables installed in a space seperated
191 sub perllocal_install {
192 my($type, $name) = splice(@ARGV, 0, 2);
194 # VMS feeds args as a piped file on STDIN since it usually can't
195 # fit all the args on a single command line.
196 @ARGV = split /\|/, <STDIN> if $Is_VMS;
199 $pod = sprintf <<POD, scalar localtime;
200 =head2 %s: C<$type> L<$name|$name>
207 my($key, $val) = splice(@ARGV, 0, 2);
227 perl "-MExtUtils::Command::MM" -e uninstall <packlist>
229 A wrapper around ExtUtils::Install::uninstall(). Warns that
230 uninstallation is deprecated and doesn't actually perform the
236 my($packlist) = shift @ARGV;
238 require ExtUtils::Install;
242 Uninstall is unsafe and deprecated, the uninstallation was not performed.
243 We will show what would have been done.
247 ExtUtils::Install::uninstall($packlist, 1, 1);
251 Uninstall is unsafe and deprecated, the uninstallation was not performed.
252 Please check the list above carefully, there may be errors.
253 Remove the appropriate files manually.
254 Sorry for the inconvenience.