Skip to content

Commit

Permalink
Generate the lib/ cleanup rules in Makefile.SH automatically from MAN…
Browse files Browse the repository at this point in the history
…IFEST.
  • Loading branch information
nwc10 committed Jul 24, 2013
1 parent 5daeb5b commit 727d4ce
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 35 deletions.
67 changes: 36 additions & 31 deletions Makefile.SH
Original file line number Diff line number Diff line change
Expand Up @@ -1240,37 +1240,42 @@ _cleaner2:
rm -rf pod/perlfunc pod/perlipc
-rmdir ext/B/lib
rm -f so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR)
rm -rf lib/Encode lib/Compress lib/Hash lib/re
rm -rf lib/TAP lib/Module/Pluggable lib/App
rm -rf lib/mro
rm -rf lib/IO/Compress lib/IO/Uncompress
rm -fr lib/B
rm -fr lib/CPAN
rm -fr lib/ExtUtils/CBuilder
-rmdir lib/Archive/Tar lib/Archive lib/Attribute
-rmdir lib/CGI lib/Carp
-rmdir lib/Data lib/Devel lib/Digest
-rmdir lib/ExtUtils/Command lib/ExtUtils/Constant lib/ExtUtils/Liblist lib/ExtUtils/MakeMaker
-rmdir lib/File/Spec lib/Filter/Util lib/Filter
-rmdir lib/I18N/LangTags lib/IO/Socket lib/IO lib/IPC
-rmdir lib/List/Util lib/List
-rmdir lib/Locale/Maketext lib/Locale
-rmdir lib/Log/Message lib/Log
-rmdir lib/Math/Big* lib/Math
-rmdir lib/Memoize lib/MIME
-rmdir lib/Module/Build/Platform lib/Module/Build lib/Module/Load lib/Module
-rmdir lib/Net/FTP lib/Object
-rmdir lib/Parse/CPAN lib/Parse
-rmdir lib/PerlIO/via lib/PerlIO
-rmdir lib/Package lib/Params
-rmdir lib/Pod/Perldoc lib/Pod/Simple lib/Pod/Text
-rmdir lib/Sys lib/Scalar/Util lib/Scalar
-rmdir lib/Term/UI lib/Thread lib/Tie/Hash
-rmdir lib/Test/Builder/Tester lib/Test/Builder lib/Test
-rmdir lib/Unicode/Collate lib/version
-rmdir lib/XS/APItest lib/XS
-rmdir lib/inc/latest lib/inc
-rmdir lib/autodie/exception lib/autodie lib/encoding lib/threads
-rmdir lib/version lib/threads lib/inc/latest lib/inc lib/encoding
-rmdir lib/autodie/exception lib/autodie lib/XS lib/Win32API lib/VMS
-rmdir lib/Unicode/Collate/Locale lib/Unicode/Collate/CJK
-rmdir lib/Unicode/Collate lib/Tie/Hash lib/Thread lib/Text
-rmdir lib/Test/Builder/Tester lib/Test/Builder lib/Test lib/Term
-rmdir lib/TAP/Parser/YAMLish lib/TAP/Parser/SourceHandler
-rmdir lib/TAP/Parser/Scheduler lib/TAP/Parser/Result
-rmdir lib/TAP/Parser/Iterator lib/TAP/Parser lib/TAP/Harness
-rmdir lib/TAP/Formatter/File lib/TAP/Formatter/Console
-rmdir lib/TAP/Formatter lib/TAP lib/Sys/Syslog lib/Sys lib/Search
-rmdir lib/Scalar lib/Pod/Text lib/Pod/Simple lib/Pod/Perldoc
-rmdir lib/PerlIO/via lib/PerlIO lib/Perl lib/Parse/CPAN lib/Parse
-rmdir lib/Params lib/Package lib/Net/FTP lib/Module/Load
-rmdir lib/Module/CoreList lib/Module/Build/Platform lib/Module/Build
-rmdir lib/Module lib/Memoize lib/Math/BigInt lib/Math/BigFloat
-rmdir lib/Math lib/MIME lib/Locale/Maketext lib/Locale/Codes
-rmdir lib/Locale lib/List/Util lib/List lib/JSON/PP lib/JSON lib/IPC
-rmdir lib/IO/Uncompress/Adapter lib/IO/Uncompress lib/IO/Socket
-rmdir lib/IO/Compress/Zlib lib/IO/Compress/Zip lib/IO/Compress/Gzip
-rmdir lib/IO/Compress/Base lib/IO/Compress/Adapter lib/IO/Compress
-rmdir lib/IO lib/I18N/LangTags lib/I18N lib/Hash/Util lib/Hash
-rmdir lib/HTTP lib/Filter/Util lib/Filter lib/File/Spec
-rmdir lib/ExtUtils/Typemaps lib/ExtUtils/ParseXS
-rmdir lib/ExtUtils/MakeMaker lib/ExtUtils/Liblist
-rmdir lib/ExtUtils/Constant lib/ExtUtils/Command
-rmdir lib/ExtUtils/CBuilder/Platform/Windows
-rmdir lib/ExtUtils/CBuilder/Platform lib/ExtUtils/CBuilder
-rmdir lib/Exporter lib/Encode/Unicode lib/Encode/MIME/Header
-rmdir lib/Encode/MIME lib/Encode/KR lib/Encode/JP lib/Encode/CN
-rmdir lib/Encode lib/Digest lib/Devel lib/Data lib/Config/Perl
-rmdir lib/Compress/Raw lib/Compress lib/Carp lib/CPAN/Meta
-rmdir lib/CPAN/LWP lib/CPAN/Kwalify lib/CPAN/HTTP lib/CPAN/FTP
-rmdir lib/CPAN/Exception lib/CPAN/API lib/CPAN lib/CGI lib/B
-rmdir lib/Attribute lib/Archive/Tar lib/Archive
-rmdir lib/App/Prove/State/Result lib/App/Prove/State lib/App/Prove
-rmdir lib/App
_realcleaner:
@$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=distclean
Expand Down
36 changes: 33 additions & 3 deletions regen/lib_cleanup.pl
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#!perl -w
use strict;
require 'regen/regen_lib.pl';
use vars '$TAP';
require 'Porting/pod_lib.pl';
use vars qw($TAP $Verbose);

# For processing later
my @ext;
Expand All @@ -15,7 +16,7 @@
if (m<^((?:cpan|dist|ext)/[^/]+/ # In an extension directory
(?!t/|private/|corpus/|demo/|testdir/) # but not a test or similar
\S+ # filename characters
(?:\.pm|\.pod|_pm\.PL|_pod\.PL)) # useful ending
(?:\.pm|\.pod|_pm\.PL|_pod\.PL|\.yml)) # useful ending
(?:\s|$) # whitespace or end of line
>x) {
push @ext, $1;
Expand All @@ -37,13 +38,18 @@

# Lines we need in lib/.gitignore
my %ignore;
# Directories that the Makfiles should remove
# With a special case already :-(
my %rmdir = ('lib/Unicode/Collate/Locale' => 1);

FILE:
foreach my $file (@ext) {
my ($extname, $path) = $file =~ m!^(?:cpan|dist|ext)/([^/]+)/(.*)!
or die "Can't parse '$file'";

if ($path =~ /\.pod$/) {
if ($path =~ /\.yml$/) {
next unless $path =~ s!^lib/!!;
} elsif ($path =~ /\.pod$/) {
unless ($path =~ s!^lib/!!) {
# ExtUtils::MakeMaker will install it to a path based on the
# extension name:
Expand Down Expand Up @@ -90,6 +96,12 @@
if (!$libdirs{$prefix}) {
# It is a directory that we will create. Ignore everything in it:
++$ignore{"/$prefix/"};
++$rmdir{"lib/$prefix"};
pop @parts;
while (@parts) {
$prefix .= '/' . shift @parts;
++$rmdir{"lib/$prefix"};
}
next FILE;
}
$prefix .= '/' . shift @parts;
Expand All @@ -101,6 +113,24 @@
++$ignore{"/$path"};
}

sub edit_makefile_SH {
my ($desc, $contents) = @_;
my $start_re = qr/(\trm -f so_locations[^\n]+)/;
my ($start) = $contents =~ $start_re;
$contents = verify_contiguous($desc, $contents,
qr/$start_re\n(?:\t-rmdir [^\n]+\n)+/sm,
'lib directory rmdir rules');
# Reverse sort ensures that any subdirectories are deleted first.
$contents =~ s{\0}
{"$start\n"
. wrap(79, "\t-rmdir ", "\t-rmdir ", reverse sort keys %rmdir)
. "\n"}e;
$contents;
}

process('Makefile.SH', 'Makefile.SH', \&edit_makefile_SH, $TAP && '', $Verbose);

# This must come last as it can exit early:
if ($TAP && !-d '.git' && !-f 'lib/.gitignore') {
print "ok # skip not being run from a git checkout, hence no lib/.gitignore\n";
exit 0;
Expand Down
2 changes: 1 addition & 1 deletion t/porting/regen.t
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ if ( $^O eq "VMS" ) {
skip_all( "- regen.pl needs porting." );
}

my $tests = 23; # I can't see a clean way to calculate this automatically.
my $tests = 24; # I can't see a clean way to calculate this automatically.

my %skip = ("regen_perly.pl" => [qw(perly.act perly.h perly.tab)],
"regen/keywords.pl" => [qw(keywords.c keywords.h)],
Expand Down

0 comments on commit 727d4ce

Please sign in to comment.