In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/e3f631a2ef048ba2143d89876faec9463d40382b?hp=64932d37c5a8b9005067c98f8618708778bb005e>
- Log ----------------------------------------------------------------- commit e3f631a2ef048ba2143d89876faec9463d40382b Merge: 64932d3 7afc975 Author: Nicholas Clark <[email protected]> Date: Wed Jul 24 09:36:18 2013 +0200 Merge work automating generation of lib/.gitignore and lib/ subdir cleanup. This makes no changes to any installed code. commit 7afc975352a5b293c8c80f132f1e3d80fb349dd4 Author: Nicholas Clark <[email protected]> Date: Tue Jul 23 10:16:08 2013 +0200 Generate the lib/ cleanup rules in the Win32 Makefiles from MANIFEST. M regen/lib_cleanup.pl M t/porting/regen.t M win32/Makefile M win32/makefile.mk commit 727d4ce653261272b0d555f474cf1c25d9eda827 Author: Nicholas Clark <[email protected]> Date: Mon Jul 22 22:10:09 2013 +0200 Generate the lib/ cleanup rules in Makefile.SH automatically from MANIFEST. M Makefile.SH M regen/lib_cleanup.pl M t/porting/regen.t commit 5daeb5b0949c8927e159000017a70c6fc5545030 Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 21:18:05 2013 +0200 Re-order clean-up rules to give a line for regen/lib_cleanup.pl to key off. The Win32 line C<-del /f *.def *.map> and the start of the Unix line C<rm -f so_locations> are unlikely to change. M Makefile.SH M win32/Makefile M win32/makefile.mk commit f31bacf34c8f49647bd051b0e1b3b0a9eb6e18e5 Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 21:04:16 2013 +0200 Remove the EXTUTILSDIR macro from the Win32 makefiles. It hasn't been used since commit e3160748789c8366 in Sept 2009 eliminated the XSUBPP macro. M win32/Makefile M win32/makefile.mk commit 6c5f38cbe28485127c852caf26b14f275ed0435a Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 21:02:56 2013 +0200 Delete obsolete clean rules from Makefile.SH Rules to clean lib/ExtUtils/CBuilder/t and lib/ExtUtils/ParseXS/t haven't been needed since the modules were moved to cpan/ and dist/ M Makefile.SH commit 244a7751704d2650c851a1e8b2c9e417b13ac388 Author: Nicholas Clark <[email protected]> Date: Mon Jul 22 21:23:11 2013 +0200 Move process() from Porting/pod_rules.pl to Porting/pod_lib.pl And document it. M Porting/pod_lib.pl M Porting/pod_rules.pl commit 236456498cbab73aa2d8ff6729448443f8c8d978 Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 22:46:34 2013 +0200 Some tidying of Porting/pod_rules.pl Iterate over the files in sorted order, instead of hash iteration order. This means that in TAP mode test failures will have consistent numbers. Provide a description for the first test when outputting TAP. Use clearer variable names in process(), and avoid using // as this code will soon be exposed to pre-5.10 M Porting/pod_rules.pl commit a2b7b21f41ac0887a480d1c81ce6e1ecc2176156 Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 22:08:37 2013 +0200 Extract the main processing loop of Porting/pod_rules/pl into process(). M Porting/pod_rules.pl commit 93b1bf68f495436d6f0326f484506f7df36213a9 Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 16:55:37 2013 +0200 Move verify_contiguous() from Porting/pod_rules.pl to Porting/pod_lib.pl And document it. M Porting/pod_lib.pl M Porting/pod_rules.pl commit 8f55fd2157412bc3ed0766fb2883c8ee581595b0 Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 16:46:02 2013 +0200 Refactor the use of verify_contiguous() in pod_rules.pl Move the substitution from the callers in into verify_contiguous(). Pass in a regex object for the substitution. Return the modified file contents from verify_contiguous(). Load Carp when verify_contiguous() is called, instead of at compile time. M Porting/pod_rules.pl commit 4d12fcfe86ee09995fda6faeedc7ef28f04a368f Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 14:08:41 2013 +0200 Remove 3 redundant lines from .gitignore These test files are no longer generated in directories beneath lib/ M .gitignore commit e275ec0ef0d02006b4a792a1b346696f49808284 Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 12:50:21 2013 +0200 Generate lib/.gitignore from MANIFEST. It's possible to programmatically determine almost all the files and directories which will be created in lib/ by building the extensions. Hence add a new script regen/lib_cleanup.pl to do this. This saves having to manually update lib/.gitignore to reflect changes in the build products of extensions, which has become a small but reoccurring instance of scut-work. M MANIFEST M lib/.gitignore A regen/lib_cleanup.pl commit e206599ac5717a273d976ec79a65f25cf6246226 Author: Nicholas Clark <[email protected]> Date: Mon Jul 22 09:26:24 2013 +0200 On failure, regen_lib.pl now generates diagnostics, not just "not ok". We have to stop using File::Compare's compare(), as it doesn't return diagnostics about what went wrong. M regen/regen_lib.pl commit 020a5f5fd939288c1ef0a8336a233d1aa5c1254d Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 11:08:53 2013 +0200 Move all the "special case" build products from lib/.gitignore to .gitignore These are all the build products that we can't programmatically infer will be generated from extensions in ext, dist and cpan. M .gitignore M lib/.gitignore commit f8a1725b2c30a67a3aa1346fd339bd635b6f900f Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 10:33:00 2013 +0200 Make .gitignore and lib/.gitignore more consistent. Move the ignore of lib/App/, lib/mro.pm, lib/TAP/, lib/Test/Harness.pm, lib/File/DosGlob.pm, lib/inc/, Win32.pm, Win32API/ and Win32Core.pm from .gitignore to lib/.gitignore, where they more logically belong. Consistently use trailing / for ignored directories. Add a leading / to the ignore of unicore/TestProp.pl (The line was added by commit 3df51b85ce4a5664 in Nov 2009, and it's not clear why it did not have a leading / from the start.) Re-sort lib/.gitignore lexically. M .gitignore M lib/.gitignore commit f2b380a8e0ec5a3f7be425aaff2316ebeb102c94 Author: Nicholas Clark <[email protected]> Date: Sat Jul 20 10:10:12 2013 +0200 Prune some .gitignore files. Class::ISA was removed by 3df51b85ce4a5664 in April 2010. Module::Pluggable was removed by commit 482cac4d574f8c6c in May 2013. Module/Build/ConfigData.pm was moved from lib/ to cpan/ by commit 0b93a7997e668a67 in Nov 2009. Pod::Plainer was removed by commit afbe215fcafe7a92 in April 2010. Shell was removed by commit a1e75797c204ade8 in June 2011. Switch was removed by commit 75108aefc8b50fcf in April 2010. M .gitignore M lib/.gitignore ----------------------------------------------------------------------- Summary of changes: .gitignore | 39 ++++--- MANIFEST | 1 + Makefile.SH | 74 ++++++------ Porting/pod_lib.pl | 114 +++++++++++++++++++ Porting/pod_rules.pl | 61 +++------- lib/.gitignore | 310 ++++++++++++++------------------------------------- regen/lib_cleanup.pl | 180 ++++++++++++++++++++++++++++++ regen/regen_lib.pl | 35 +++++- t/porting/regen.t | 2 +- win32/Makefile | 28 +++-- win32/makefile.mk | 28 +++-- 11 files changed, 520 insertions(+), 352 deletions(-) create mode 100644 regen/lib_cleanup.pl diff --git a/.gitignore b/.gitignore index 06a5f51..7356473 100644 --- a/.gitignore +++ b/.gitignore @@ -93,22 +93,32 @@ MYMETA.* /bitcount.h /mg_data.h -lib/inc/ -lib/Win32.pm -lib/Win32API/ -lib/Win32CORE.pm +# Build products that we can't infer are generated by conventional extensions +# (ie all the special cases that would take more code than just adding them +# here): lib/CORE/ +lib/Config_git.pl +lib/Config_heavy.pl +lib/Config.pm +lib/Config.pod +lib/Cross.pm +lib/ExtUtils/MANIFEST.SKIP +lib/ExtUtils/xsubpp +lib/auto/ +lib/buildcustomize.pl +lib/unicore/CombiningClass.pl +lib/unicore/Decomposition.pl +lib/unicore/Heavy.pl +lib/unicore/Name.pl +lib/unicore/Name.pm +lib/unicore/TestProp.pl +lib/unicore/To/ +lib/unicore/UCD.pl +lib/unicore/lib/ +lib/unicore/mktables.lst # test byproducts ext/Test-Harness/t/ext/ -lib/App/ -lib/Archive/Tar/t/src/long/foo.tbz -lib/Archive/Tar/t/src/short/foo.tbz -lib/IPC/Cmd/t/src/x.tgz -lib/mro.pm -lib/TAP/ -lib/Test/Harness.pm -lib/File/DosGlob.pm t/rantests t/tmp* t/perl @@ -156,8 +166,3 @@ MANIFEST.new # generated by the top level install.html target. XXX Why does it need this? /vms/README_vms.pod - -#stuff to ignore from Module::Pluggable: -cpan/Module-Pluggable/t/lib/EditorJunk/Plugin/#Bar.pm# -cpan/Module-Pluggable/t/lib/OddTest/Plugin/-Dodgy.pm - diff --git a/MANIFEST b/MANIFEST index a128a43..e7e153c 100644 --- a/MANIFEST +++ b/MANIFEST @@ -4763,6 +4763,7 @@ regen/embed.pl Produces {embed,embedvar,proto}.h regen/feature.pl Generates feature.pm regen/genpacksizetables.pl Generate the size tables for pack/unpack regen/keywords.pl Program to write keywords.h +regen/lib_cleanup.pl Generate lib/.gitignore from MANIFEST regen/mg_vtable.pl generate mg_vtable.h regen/miniperlmain.pl generate miniperlmain.c regen/mk_invlists.pl Generates charclass_invlists.h diff --git a/Makefile.SH b/Makefile.SH index d661c92..15b32fd 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -1227,7 +1227,6 @@ _cleaner2: rm -f core *perl.core t/core t/*perl.core core.* t/core.* rm -f t/$(PERL_EXE) t/rantests rm -rf t/tmp* - rm -f so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR) rm -rf $(addedbyconf) rm -f $(FIRSTMAKEFILE) $(FIRSTMAKEFILE).old makefile.old utils/Makefile rm -f $(private) @@ -1237,45 +1236,46 @@ _cleaner2: rm -f h2ph.man pstruct rm -rf .config rm -f preload - 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 -f lib/ExtUtils/ParseXS/t/XSTest.c - rm -f lib/ExtUtils/ParseXS/t/XSTest$(OBJ_EXT) - rm -f lib/ExtUtils/ParseXS/t/XSTest$(DLSUFFIX) - rm -fr lib/B - rm -fr lib/CPAN - rm -fr lib/ExtUtils/CBuilder rm -f pod2htmd.tmp rm -rf pod/perlfunc pod/perlipc -rmdir ext/B/lib - -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 - -rm -f lib/ExtUtils/CBuilder/t/libcompilet.dll.a - -rm -f lib/ExtUtils/ParseXS/t/libXSTest.dll.a + rm -f so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR) + -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 diff --git a/Porting/pod_lib.pl b/Porting/pod_lib.pl index 8c5ac21..06c3294 100644 --- a/Porting/pod_lib.pl +++ b/Porting/pod_lib.pl @@ -160,6 +160,120 @@ sub write_or_die { close $fh or die "Can't close $filename: $!"; } +=head2 C<verify_contiguous()> + +=over 4 + +=item * Purpose + +Verify that a file contains exactly one contiguous run of lines which matches +the passed in pattern. C<croak()>s if the pattern is not found, or found in +more than one place. + +=item * Arguments + +=over 4 + +=item * Name of file + +=item * Contents of file + +=item * Pattern of interest + +=item * Name to report on error + +=back + +=item * Return Value + +The contents of the file, with C<qr/\0+/> substituted for the pattern. + +=back + +=cut + +sub verify_contiguous { + my ($name, $content, $re, $what) = @_; + require Carp; + $content =~ s/$re/\0/g; + my $sections = () = $content =~ m/\0+/g; + Carp::croak("$0: $name contains no $what") if $sections < 1; + Carp::croak("$0: $name contains discontiguous $what") if $sections > 1; + return $content; +} + +=head2 C<process()> + +=over 4 + +=item * Purpose + +Read a file from disk, pass the contents to the callback, and either update +the file on disk (if changed) or generate TAP output to confirm that the +version on disk is up to date. C<die>s if the file contains any C<NUL> bytes. +This permits the callback routine to use C<NUL> bytes as placeholders while +manipulating the file's contents. + +=item * Arguments + +=over 4 + +=item * Description for use in error messages + +=item * Name of file + +=item * Callback + +Passed description and file contents, should return updated file contents. + +=item * Test number + +If defined, generate TAP output to C<STDOUT>. If defined and false, generate +an unnumbered test. Otherwise this is the test number in the I<ok> line. + +=item * Verbose flag + +If true, generate verbose output. + +=back + +=item * Return Value + +Does not return anything. + +=back + +=cut + +sub process { + my ($desc, $filename, $callback, $test, $verbose) = @_; + + print "Now processing $filename\n" if $verbose; + my $orig = slurp_or_die($filename); + my_die "$filename contains NUL bytes" if $orig =~ /\0/; + + my $new = $callback->($desc, $orig); + + if (defined $test) { + printf "%s%s # $filename is up to date\n", + ($new eq $orig ? 'ok' : 'not ok'), ($test ? " $test" : ''); + return; + } elsif ($new eq $orig) { + print "Was not modified\n" + if $verbose; + return; + } + + my $mode = (stat $filename)[2]; + my_die "Can't stat $filename: $!" + unless defined $mode; + rename $filename, "$filename.old" + or my_die "Can't rename $filename to $filename.old: $!"; + + write_or_die($filename, $new); + chmod $mode & 0777, $filename or my_die "can't chmod $mode $filename: $!"; +} + =head2 C<pods_to_install()> =over 4 diff --git a/Porting/pod_rules.pl b/Porting/pod_rules.pl index f0b72ed..18abe87 100644 --- a/Porting/pod_rules.pl +++ b/Porting/pod_rules.pl @@ -5,7 +5,6 @@ use vars qw(%Build %Targets $Verbose $Test); use Text::Tabs; use Text::Wrap; use Getopt::Long; -use Carp; # Generate the sections of files listed in %Targets from pod/perl.pod # Mostly these are rules in Makefiles @@ -58,7 +57,7 @@ sub my_die; } if ($Verbose) { - print "I will be building $_\n" foreach keys %Build; + print "I will be building $_\n" foreach sort keys %Build; } my $test = 1; @@ -69,10 +68,10 @@ my $state = $Test ? get_pod_metadata(0, sub { printf "1..%d\n", 1 + scalar keys %Build; if (@_) { - print "not ok $test\n"; + print "not ok $test # got Pod metadata\n"; die @_; } - print "ok $test\n"; + print "ok $test # got Pod metadata\n"; }) : get_pod_metadata(1, sub { warn @_ if @_ }, values %Build); @@ -130,13 +129,6 @@ sub generate_pod_mak { $line; } -sub verify_contiguous { - my ($name, $content, $what) = @_; - my $sections = () = $content =~ m/\0+/g; - croak("$0: $name contains no $what") if $sections < 1; - croak("$0: $name contains discontiguous $what") if $sections > 1; -} - sub do_manifest { my ($name, $prev) = @_; my @manifest = @@ -154,8 +146,8 @@ sub do_manifest { sub do_nmake { my ($name, $makefile) = @_; - $makefile =~ s/^\tcopy \.\.\\README.*\n/\0/gm; - verify_contiguous($name, $makefile, 'README copies'); + my $re = qr/^\tcopy \.\.\\README[^\n]*\n/sm; + $makefile = verify_contiguous($name, $makefile, $re, 'README copies'); # Now remove the other copies that follow 1 while $makefile =~ s/\0\tcopy .*\n/\0/gm; $makefile =~ s/\0+/join ("", &generate_nmake_1)/se; @@ -184,9 +176,9 @@ sub do_vms { # Looking for the macro defining the current perldelta: #PERLDELTA_CURRENT = [.pod]perl5139delta.pod - $makefile =~ s{\nPERLDELTA_CURRENT\s+=\s+\Q[.pod]perl\E\d+delta\.pod\n} - {\0}sx; - verify_contiguous($name, $makefile, 'current perldelta macro'); + my $re = qr{\nPERLDELTA_CURRENT\s+=\s+\Q[.pod]perl\E\d+delta\.pod\n}smx; + $makefile + = verify_contiguous($name, $makefile, $re, 'current perldelta macro'); $makefile =~ s/\0+/join "\n", '', "PERLDELTA_CURRENT = [.pod]$state->{delta_target}", ''/se; $makefile; @@ -207,13 +199,12 @@ sub do_unix { # although it seems that HP-UX make gets confused, always tried to # regenerate the symlink, and then the ln -s fails, as the target exists. - $makefile_SH =~ s!( + my $re = qr{( pod/perl[a-z0-9_]+\.pod: pod/perl[a-z0-9_]+\.pod \$\(RMS\) pod/perl[a-z0-9_]+\.pod \$\(LNS\) perl[a-z0-9_]+\.pod pod/perl[a-z0-9_]+\.pod -)+!\0!gm; - - verify_contiguous($name, $makefile_SH, 'copy rules'); +)+}sm; + $makefile_SH = verify_contiguous($name, $makefile_SH, $re, 'copy rules'); my @copy_rules = map " pod/$_: pod/$state->{copies}{$_} @@ -226,34 +217,8 @@ pod/$_: pod/$state->{copies}{$_} } # Do stuff -while (my ($target, $name) = each %Build) { - print "Now processing $name\n" if $Verbose; - - my $orig = slurp_or_die($name); - my_die "$name contains NUL bytes" if $orig =~ /\0/; - - my $new = do { - no strict 'refs'; - &{"do_$target"}($target, $orig); - }; - - if ($Test) { - printf "%s %d # $name is up to date\n", - $new eq $orig ? 'ok' : 'not ok', - ++$test; - next; - } elsif ($new eq $orig) { - print "Was not modified\n" - if $Verbose; - next; - } - - my $mode = (stat $name)[2] // my_die "Can't stat $name: $!"; - rename $name, "$name.old" or my_die "Can't rename $name to $name.old: $!"; - - write_or_die($name, $new); - chmod $mode & 0777, $name or my_die "can't chmod $mode $name: $!"; -} +process($_, $Build{$_}, main->can("do_$_"), $Test && ++$test, $Verbose) + foreach sort keys %Build; # Local variables: # cperl-indent-level: 4 diff --git a/lib/.gitignore b/lib/.gitignore index 138f495..8337da0 100644 --- a/lib/.gitignore +++ b/lib/.gitignore @@ -1,102 +1,52 @@ -/Archive/Tar.pm -/Archive/Tar/Constant.pm -/Archive/Tar/File.pm -/Attribute +# -*- buffer-read-only: t -*- +# !!!!!!! DO NOT EDIT THIS FILE !!!!!!! +# This file is built by regen/lib_cleanup.pl from MANIFEST and parsing files +# in cpan/ dist/ and ext/. +# Any changes made here will be lost! + +# If this generated file has problems, it may be simpler to add more special +# cases to the top level .gitignore than to code one-off logic into the +# generation script regen/lib_cleanup.pl + +/App/ +/Archive/ +/Attribute/ /AutoLoader.pm /AutoSplit.pm -/B /B.pm -/CGI +/B/ /CGI.pm -/CPAN +/CGI/ /CPAN.pm -/CPAN/API -/CPAN/API/HOWTO.pod -/CPAN/Author.pm -/CPAN/Bundle.pm -/CPAN/CacheMgr.pm -/CPAN/Complete.pm -/CPAN/Debug.pm -/CPAN/DeferredCode.pm -/CPAN/Distribution.pm -/CPAN/Distroprefs.pm -/CPAN/Distrostatus.pm -/CPAN/Exception -/CPAN/Exception/RecursiveDependency.pm -/CPAN/Exception/blocked_urllist.pm -/CPAN/Exception/yaml_not_installed.pm -/CPAN/FTP -/CPAN/FTP.pm -/CPAN/FTP/netrc.pm -/CPAN/FirstTime.pm -/CPAN/HandleConfig.pm -/CPAN/Index.pm -/CPAN/InfoObj.pm -/CPAN/Kwalify -/CPAN/Kwalify.pm -/CPAN/Kwalify/distroprefs.dd -/CPAN/Kwalify/distroprefs.yml -/CPAN/LWP -/CPAN/LWP/UserAgent.pm -/CPAN/Meta -/CPAN/Meta.pm -/CPAN/Module.pm -/CPAN/Nox.pm -/CPAN/PAUSE2003.pub -/CPAN/PAUSE2005.pub -/CPAN/PAUSE2007.pub -/CPAN/PAUSE2009.pub -/CPAN/Prompt.pm -/CPAN/Queue.pm -/CPAN/SIGNATURE -/CPAN/Shell.pm -/CPAN/Tarzip.pm -/CPAN/URL.pm -/CPAN/Version.pm +/CPAN/ /Carp.pm -/Carp/Heavy.pm -/Class/ISA.pm -/Compress -/Config.pm -/Config.pod -/Config/Perl -/Config/Perl/V.pm -/Config_git.pl -/Config_heavy.pl -/Cross.pm +/Carp/ +/Compress/ +/Config/Perl/ /Cwd.pm /DB_File.pm -/Data -/Devel/DProf.pm -/Devel/DProf/ -/Devel/InnerPackage.pm -/Devel/PPPort.pm -/Devel/Peek.pm -/Devel/SelfStubber.pm +/Data/ +/Devel/ /Digest.pm -/Digest/MD5.pm -/Digest/SHA.pm -/Digest/base.pm -/Digest/file.pm +/Digest/ /Dumpvalue.pm /DynaLoader.pm -/Encode /Encode.pm +/Encode/ /Env.pm /Errno.pm /Exporter.pm -/Exporter/Heavy.pm +/Exporter/ /ExtUtils/CBuilder.pm /ExtUtils/CBuilder/ /ExtUtils/Command.pm -/ExtUtils/Command/MM.pm -/ExtUtils/Constant +/ExtUtils/Command/ /ExtUtils/Constant.pm +/ExtUtils/Constant/ /ExtUtils/Install.pm /ExtUtils/Installed.pm /ExtUtils/Liblist.pm -/ExtUtils/Liblist/Kid.pm -/ExtUtils/MANIFEST.SKIP +/ExtUtils/Liblist/ /ExtUtils/MM.pm /ExtUtils/MM_AIX.pm /ExtUtils/MM_Any.pm @@ -116,14 +66,12 @@ /ExtUtils/MM_Win95.pm /ExtUtils/MY.pm /ExtUtils/MakeMaker.pm -/ExtUtils/MakeMaker/Config.pm -/ExtUtils/MakeMaker/FAQ.pod -/ExtUtils/MakeMaker/YAML.pm -/ExtUtils/MakeMaker/Tutorial.pod +/ExtUtils/MakeMaker/ /ExtUtils/Manifest.pm /ExtUtils/Miniperl.pm /ExtUtils/Mkbootstrap.pm /ExtUtils/Mksymlists.pm +/ExtUtils/Myconst2perl.pm /ExtUtils/Packlist.pm /ExtUtils/ParseXS.pm /ExtUtils/ParseXS.pod @@ -131,116 +79,42 @@ /ExtUtils/Typemaps.pm /ExtUtils/Typemaps/ /ExtUtils/testlib.pm -/ExtUtils/xsubpp /Fatal.pm /Fcntl.pm -/File/CheckTree.pm +/File/DosGlob.pm /File/Fetch.pm /File/Find.pm /File/Glob.pm /File/GlobMapper.pm /File/Path.pm -/File/Spec/ /File/Spec.pm +/File/Spec/ /File/Temp.pm /FileCache.pm -/Filter/Simple.pm -/Filter/Util +/Filter/ /GDBM_File.pm -/Hash -/I18N/Collate.pm -/I18N/LangTags -/I18N/LangTags.pm -/I18N/Langinfo.pm -/IO.pm -/IO/Compress -/IO/Dir.pm -/IO/File.pm -/IO/Handle.pm -/IO/Pipe.pm -/IO/Poll.pm -/IO/Seekable.pm -/IO/Select.pm -/IO/Socket -/IO/Socket.pm -/IO/Uncompress -/IO/Zlib.pm -/IPC/Cmd.pm -/IPC/Msg.pm -/IPC/Open2.pm -/IPC/Open3.pm -/IPC/Semaphore.pm -/IPC/SharedMem.pm -/IPC/SysV.pm -/HTTP/Tiny.pm -/JSON/PP.pm -/JSON/PP/Boolean.pm /Getopt/Long.pm -/List -/Locale -/Locale/Constants.pm -/Locale/Constants.pod -/Locale/Country.pm -/Locale/Country.pod -/Locale/Currency.pm -/Locale/Currency.pod -/Locale/Language.pm -/Locale/Language.pod -/Locale/Maketext -/Locale/Maketext.pm -/Locale/Maketext.pod -/Locale/Maketext/Guts.pm -/Locale/Maketext/GutsLoader.pm -/Locale/Maketext/Simple.pm -/Locale/Maketext/TPJ13.pod -/Locale/Script.pm -/Locale/Script.pod -/MIME -/Math -/Math/BigFloat -/Math/BigFloat.pm -/Math/BigFloat/Trace.pm -/Math/BigInt -/Math/BigInt.pm -/Math/BigInt/Calc.pm -/Math/BigInt/CalcEmu.pm -/Math/BigInt/FastCalc.pm -/Math/BigInt/Trace.pm -/Math/BigRat.pm -/Math/Complex.pm -/Math/Trig.pm -/Memoize +/HTTP/ +/Hash/ +/I18N/ +/IO.pm +/IO/ +/IPC/ +/JSON/ +/List/ +/Locale/ +/MIME/ +/Math/ /Memoize.pm -/Memoize/AnyDBM_File.pm -/Memoize/Expire.pm -/Memoize/ExpireFile.pm -/Memoize/ExpireTest.pm -/Memoize/NDBM_File.pm -/Memoize/SDBM_File.pm -/Memoize/Storable.pm -/Module/Build -/Module/Build.pm -!/Module/Build/ConfigData.pm -/Module/CoreList -/Module/CoreList.pm -/Module/CoreList.pod -/Module/CoreList/TieHashDelta.pm -/Module/Load.pm -/Module/Load/Conditional.pm -/Module/Loaded.pm -/Module/Metadata.pm +/Memoize/ +/Module/ /NDBM_File.pm /NEXT.pm /Net/Cmd.pm /Net/Config.pm /Net/Domain.pm -/Net/FTP /Net/FTP.pm -/Net/FTP/A.pm -/Net/FTP/E.pm -/Net/FTP/I.pm -/Net/FTP/L.pm -/Net/FTP/dataconn.pm +/Net/FTP/ /Net/NNTP.pm /Net/Netrc.pm /Net/POP3.pm @@ -253,68 +127,48 @@ /Opcode.pm /POSIX.pm /POSIX.pod -/Package/Constants.pm -/Params/Check.pm -/Parse/CPAN/ -/Perl/OSType.pm -/PerlIO/encoding.pm -/PerlIO/mmap.pm -/PerlIO/scalar.pm -/PerlIO/via.pm -/PerlIO/via/QuotedPrint.pm +/Package/ +/Params/ +/Parse/ +/Perl/ +/PerlIO/ /Pod/Checker.pm /Pod/Escapes.pm -/Pod/Functions.pm /Pod/Find.pm +/Pod/Functions.pm /Pod/Html.pm /Pod/InputObjects.pm /Pod/Man.pm /Pod/ParseLink.pm /Pod/ParseUtils.pm /Pod/Parser.pm -/Pod/Perldoc /Pod/Perldoc.pm +/Pod/Perldoc/ /Pod/PlainText.pm -/Pod/Plainer.pm /Pod/Select.pm -/Pod/Simple /Pod/Simple.pm /Pod/Simple.pod -/Pod/Simple/t/corpus/2202jp.txt -/Pod/Simple/t/corpus/2202jpx.txt -/Pod/Simple/t/corpus/2202jpy.txt -/Pod/Simple/t/corpus2/polish_utf16be_bom.txt -/Pod/Simple/t/corpus2/polish_utf16le_bom.txt +/Pod/Simple/ /Pod/Text.pm /Pod/Text/ /Pod/Usage.pm /Pod/perldoc.pod /SDBM_File.pm /Safe.pm -/Scalar +/Scalar/ /Search/ /SelfLoader.pm -/Shell.pm /Socket.pm /Storable.pm -/Switch.pm -/Sys -/Term +/Sys/ +/TAP/ +/Term/ /Test.pm -/Test/Builder -/Test/Builder.pm -/Test/More.pm -/Test/Simple.pm -/Test/Tutorial.pod -/Text/Balanced.pm -/Text/ParseWords.pm -/Text/Soundex.pm -/Text/Tabs.pm -/Text/Wrap.pm -/Text/Abbrev.pm -/Thread +/Test/ +/Text/ +/Thread/ /Tie/File.pm -/Tie/Hash/NamedCapture.pm +/Tie/Hash/ /Tie/Memoize.pm /Tie/RefHash.pm /Time/HiRes.pm @@ -324,45 +178,51 @@ /Unicode/Collate.pm /Unicode/Collate/ /Unicode/Normalize.pm -/XS +/VMS/ +/Win32.pm +/Win32API/ +/Win32CORE.pm +/XS/ /XSLoader.pm /arybase.pm /attributes.pm -/auto -/autodie /autodie.pm +/autodie/ /autouse.pm /base.pm /bigint.pm /bignum.pm /bigrat.pm -/buildcustomize.pl /constant.pm -/encoding /encoding.pm +/encoding/ /fields.pm /if.pm +/inc/ /lib.pm +/mro.pm /ops.pm /parent.pm -/perlfaq* +/perlfaq.pm +/perlfaq.pod +/perlfaq1.pod +/perlfaq2.pod +/perlfaq3.pod +/perlfaq4.pod +/perlfaq5.pod +/perlfaq6.pod +/perlfaq7.pod +/perlfaq8.pod +/perlfaq9.pod /perlglossary.pod /perlxs.pod /perlxstut.pod /perlxstypemap.pod /re.pm -/threads /threads.pm -/unicore/CombiningClass.pl -/unicore/Decomposition.pl -/unicore/Heavy.pl -/unicore/mktables.lst -/unicore/Name.pl -/unicore/Name.pm -unicore/TestProp.pl -/unicore/To -/unicore/UCD.pl -/unicore/lib +/threads/ /version.pm /version.pod /version/ + +# ex: set ro: diff --git a/regen/lib_cleanup.pl b/regen/lib_cleanup.pl new file mode 100644 index 0000000..c9d6e43 --- /dev/null +++ b/regen/lib_cleanup.pl @@ -0,0 +1,180 @@ +#!perl -w +use strict; +require 'regen/regen_lib.pl'; +require 'Porting/pod_lib.pl'; +use vars qw($TAP $Verbose); + +# For processing later +my @ext; +# Lookup hash of all directories in lib/ in a clean distribution +my %libdirs; + +open my $fh, '<', 'MANIFEST' + or die "Can't open MANIFEST: $!"; + +while (<$fh>) { + 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|\.yml)) # useful ending + (?:\s|$) # whitespace or end of line + >x) { + push @ext, $1; + } elsif (m!^lib/([^ \t\n]+)/[^/ \t\n]+!) { + # All we are interested in are shipped directories in lib/ + # leafnames (and package names) are actually irrelevant. + my $dirs = $1; + do { + # lib/Pod/t is in MANIFEST, but lib/Pod is not. Rather than + # special-casing this, generalise the code to ensure that all + # parent directories of anything add are also added: + ++$libdirs{$dirs} + } while ($dirs =~ s!/.*!!); + } +} + +close $fh + or die "Can't close MANIFEST: $!"; + +# Lines we need in lib/.gitignore +my %ignore; +# Directories that the Makfiles should remove +# With a special case already :-( +my %rmdir_s = my %rmdir = ('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 =~ /\.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: + if ($extname =~ s!-[^-]+$!!) { + $extname =~ tr!-!/!; + $path = "$extname/$path"; + } + } + } elsif ($extname eq 'Unicode-Collate' # Trust the package lines + || $extname eq 'Encode' # Trust the package lines + || $path eq 'win32/Win32.pm' # Trust the package line + || ($path !~ tr!/!! # No path + && $path ne 'DB_File.pm' # ... but has multiple package lines + )) { + # Too many special cases to encode, so just open the file and figure it + # out: + my $package; + open my $fh, '<', $file + or die "Can't open $file: $!"; + while (<$fh>) { + if (/^\s*package\s+([A-Za-z0-9_:]+)/) { + $package = $1; + last; + } + } + close $fh + or die "Can't close $file: $!"; + die "Can't locate package statement in $file" + unless defined $package; + $package =~ s!::!/!g; + $path = "$package.pm"; + } else { + if ($path =~ s/\.PL$//) { + # .PL files generate other files. By convention the output filename + # has the .PL stripped, and any preceding _ changed to ., to comply + # with historical VMS filename rules that only permit one . + $path =~ s!_([^_/]+)$!.$1!; + } + $path =~ s!^lib/!!; + } + my @parts = split '/', $path; + my $prefix = shift @parts; + while (@parts) { + if (!$libdirs{$prefix}) { + # It is a directory that we will create. Ignore everything in it: + ++$ignore{"/$prefix/"}; + ++$rmdir{$prefix}; + ++$rmdir_s{$prefix}; + pop @parts; + while (@parts) { + $prefix .= '/' . shift @parts; + ++$rmdir{$prefix}; + } + next FILE; + } + $prefix .= '/' . shift @parts; + # If we've just shifted the leafname back onto $prefix, then @parts is + # empty, so we should terminate this loop. + } + # We are creating a file in an existing directory. We must ignore the file + # explicitly: + ++$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. + # The extensions themselves delete files with the MakeMaker generated clean + # targets. + $contents =~ s{\0} + {"$start\n" + . wrap(79, "\t-rmdir ", "\t-rmdir ", + map {"lib/$_"} reverse sort keys %rmdir) + . "\n"}e; + $contents; +} + +sub edit_win32_makefile { + my ($desc, $contents) = @_; + my $start = "\t-del /f *.def *.map"; + my $start_re = quotemeta($start); + $contents = verify_contiguous($desc, $contents, + qr!$start_re\n(?:\t-if exist (\$\(LIBDIR\)\\\S+) rmdir /s /q \1\n)+!sm, + 'Win32 lib directory rmdir rules'); + # Win32 is (currently) using rmdir /s /q which deletes recursively + # (seems to be analogous to rm -r) so we don't explicitly list + # subdirectories to delete, and don't need to ensure that subdirectories are + # deleted before their parents. + # Might be able to rely on MakeMaker generated clean targets to clean + # everything, but not in a position to test this. + my $lines = join '', map { + tr!/!\\!; + "\t-if exist \$(LIBDIR)\\$_ rmdir /s /q \$(LIBDIR)\\$_\n" + } sort {lc $a cmp lc $b} keys %rmdir_s; + $contents =~ s/\0/$start\n$lines/; + $contents; +} + +process('Makefile.SH', 'Makefile.SH', \&edit_makefile_SH, $TAP && '', $Verbose); +foreach ('win32/Makefile', 'win32/makefile.mk') { + process($_, $_, \&edit_win32_makefile, $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; +} + +$fh = open_new('lib/.gitignore', '>', + { by => $0, + from => 'MANIFEST and parsing files in cpan/ dist/ and ext/'}); + +print $fh <<"EOT"; +# If this generated file has problems, it may be simpler to add more special +# cases to the top level .gitignore than to code one-off logic into the +# generation script $0 + +EOT + +print $fh "$_\n" foreach sort keys %ignore; + +read_only_bottom_close_and_rename($fh); diff --git a/regen/regen_lib.pl b/regen/regen_lib.pl index 9e79f69..b64e0b0 100644 --- a/regen/regen_lib.pl +++ b/regen/regen_lib.pl @@ -67,8 +67,39 @@ sub close_and_rename { close $fh or die "Error closing $name: $!"; if ($TAP) { - my $not = compare($name, $final_name) ? 'not ' : ''; - print STDOUT $not . "ok - $0 $final_name\n"; + # Don't use compare beacuse if there are errors it doesn't give any + # way to generate diagnostics about what went wrong. + # These files are small enough to read into memory. + local $/; + # This is the file we just closed, so it should open cleanly: + open $fh, '<', $name + or die "Can't open '$name': $!"; + my $want = <$fh>; + die "Can't read '$name': $!" + unless defined $want; + close $fh + or die "Can't close '$name': $!"; + + my $fail; + if (!open $fh, '<', $final_name) { + $fail = "Can't open '$final_name': $!"; + } else { + my $have = <$fh>; + if (!defined $have) { + $fail = "Can't read '$final_name': $!"; + close $fh; + } elsif (!close $fh) { + $fail = "Can't close '$final_name': $!"; + } elsif ($want ne $have) { + $fail = "'$name' and '$final_name' differ"; + } + } + if ($fail) { + print STDOUT "not ok - $0 $final_name\n"; + print STDERR "$fail\n"; + } else { + print STDOUT "ok - $0 $final_name\n"; + } safer_unlink($name); return; } diff --git a/t/porting/regen.t b/t/porting/regen.t index f7ec411..7450613 100644 --- a/t/porting/regen.t +++ b/t/porting/regen.t @@ -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 = 26; # 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)], diff --git a/win32/Makefile b/win32/Makefile index 36968e3..0583c81 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -391,7 +391,6 @@ EXTDIR = ..\ext DISTDIR = ..\dist CPANDIR = ..\cpan PODDIR = ..\pod -EXTUTILSDIR = $(LIBDIR)\ExtUtils HTMLDIR = .\html # @@ -1163,7 +1162,6 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile distclean: realclean -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \ $(PERLIMPLIB) ..\miniperl.lib $(PERLEXESTATIC) $(PERLSTATICLIB) - -del /f *.def *.map -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm @@ -1183,62 +1181,70 @@ distclean: realclean -del /f $(LIBDIR)\Win32API\File\cFile.pc -del /f $(LIBDIR)\buildcustomize.pl -del /f $(DISTDIR)\XSLoader\XSLoader.pm + -del /f *.def *.map -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B + -if exist $(LIBDIR)\Carp rmdir /s /q $(LIBDIR)\Carp -if exist $(LIBDIR)\CGI rmdir /s /q $(LIBDIR)\CGI - -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress + -if exist $(LIBDIR)\Config\Perl rmdir /s /q $(LIBDIR)\Config\Perl + -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding + -if exist $(LIBDIR)\Exporter rmdir /s /q $(LIBDIR)\Exporter -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker + -if exist $(LIBDIR)\ExtUtils\ParseXS rmdir /s /q $(LIBDIR)\ExtUtils\ParseXS + -if exist $(LIBDIR)\ExtUtils\Typemaps rmdir /s /q $(LIBDIR)\ExtUtils\Typemaps -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash - -if exist $(LIBDIR)\I18N\LangTags rmdir /s /q $(LIBDIR)\I18N\LangTags + -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP + -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc - -if exist $(LIBDIR)\Module\Pluggable rmdir /s /q $(LIBDIR)\Module\Pluggable -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC + -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale - -if exist $(LIBDIR)\Log rmdir /s /q $(LIBDIR)\Log -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module - -if exist $(LIBDIR)\mro rmdir /s /q $(LIBDIR)\mro -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP - -if exist $(LIBDIR)\Object rmdir /s /q $(LIBDIR)\Object -if exist $(LIBDIR)\Package rmdir /s /q $(LIBDIR)\Package -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse + -if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text - -if exist $(LIBDIR)\re rmdir /s /q $(LIBDIR)\re -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar + -if exist $(LIBDIR)\Search rmdir /s /q $(LIBDIR)\Search -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP - -if exist $(LIBDIR)\Term\UI rmdir /s /q $(LIBDIR)\Term\UI + -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test + -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate + -if exist $(LIBDIR)\Unicode\Collate\Locale rmdir /s /q $(LIBDIR)\Unicode\Collate\Locale -if exist $(LIBDIR)\version rmdir /s /q $(LIBDIR)\version - -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS + -if exist $(LIBDIR)\VMS rmdir /s /q $(LIBDIR)\VMS -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API + -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ perl5193delta.pod perlaix.pod perlamiga.pod perlapi.pod \ perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod perldos.pod \ diff --git a/win32/makefile.mk b/win32/makefile.mk index bdbf436..ce0a655 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -372,7 +372,6 @@ EXTDIR = ..\ext DISTDIR = ..\dist CPANDIR = ..\cpan PODDIR = ..\pod -EXTUTILSDIR = $(LIBDIR)\ExtUtils HTMLDIR = .\html # @@ -1341,7 +1340,6 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile distclean: realclean -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \ $(PERLIMPLIB) ..\miniperl$(a) $(PERLEXESTATIC) $(PERLSTATICLIB) - -del /f *.def *.map -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm @@ -1361,62 +1359,70 @@ distclean: realclean -del /f $(LIBDIR)\Win32API\File\cFile.pc -del /f $(LIBDIR)\buildcustomize.pl -del /f $(DISTDIR)\XSLoader\XSLoader.pm + -del /f *.def *.map -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B + -if exist $(LIBDIR)\Carp rmdir /s /q $(LIBDIR)\Carp -if exist $(LIBDIR)\CGI rmdir /s /q $(LIBDIR)\CGI - -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress + -if exist $(LIBDIR)\Config\Perl rmdir /s /q $(LIBDIR)\Config\Perl + -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding + -if exist $(LIBDIR)\Exporter rmdir /s /q $(LIBDIR)\Exporter -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker + -if exist $(LIBDIR)\ExtUtils\ParseXS rmdir /s /q $(LIBDIR)\ExtUtils\ParseXS + -if exist $(LIBDIR)\ExtUtils\Typemaps rmdir /s /q $(LIBDIR)\ExtUtils\Typemaps -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash - -if exist $(LIBDIR)\I18N\LangTags rmdir /s /q $(LIBDIR)\I18N\LangTags + -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP + -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc - -if exist $(LIBDIR)\Module\Pluggable rmdir /s /q $(LIBDIR)\Module\Pluggable -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC + -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale - -if exist $(LIBDIR)\Log rmdir /s /q $(LIBDIR)\Log -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module - -if exist $(LIBDIR)\mro rmdir /s /q $(LIBDIR)\mro -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP - -if exist $(LIBDIR)\Object rmdir /s /q $(LIBDIR)\Object -if exist $(LIBDIR)\Package rmdir /s /q $(LIBDIR)\Package -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse + -if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text - -if exist $(LIBDIR)\re rmdir /s /q $(LIBDIR)\re -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar + -if exist $(LIBDIR)\Search rmdir /s /q $(LIBDIR)\Search -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP - -if exist $(LIBDIR)\Term\UI rmdir /s /q $(LIBDIR)\Term\UI + -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test + -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate + -if exist $(LIBDIR)\Unicode\Collate\Locale rmdir /s /q $(LIBDIR)\Unicode\Collate\Locale -if exist $(LIBDIR)\version rmdir /s /q $(LIBDIR)\version - -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS + -if exist $(LIBDIR)\VMS rmdir /s /q $(LIBDIR)\VMS -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API + -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ perl5193delta.pod perlaix.pod perlamiga.pod perlapi.pod \ perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod perldos.pod \ -- Perl5 Master Repository
