diff options
author | 2019-02-13 21:15:00 +0000 | |
---|---|---|
committer | 2019-02-13 21:15:00 +0000 | |
commit | 9f11ffb7133c203312a01e4b986886bc88c7d74b (patch) | |
tree | 6618511204c614b20256e4ef9dea39a7b311d638 /gnu/usr.bin/perl/t/porting | |
parent | Import perl-5.28.1 (diff) | |
download | wireguard-openbsd-9f11ffb7133c203312a01e4b986886bc88c7d74b.tar.xz wireguard-openbsd-9f11ffb7133c203312a01e4b986886bc88c7d74b.zip |
Fix merge issues, remove excess files - match perl-5.28.1 dist
looking good sthen@, Great! bluhm@
Diffstat (limited to 'gnu/usr.bin/perl/t/porting')
-rw-r--r-- | gnu/usr.bin/perl/t/porting/cmp_version.t | 10 | ||||
-rw-r--r-- | gnu/usr.bin/perl/t/porting/customized.dat | 207 | ||||
-rw-r--r-- | gnu/usr.bin/perl/t/porting/customized.t | 7 | ||||
-rwxr-xr-x | gnu/usr.bin/perl/t/porting/diag.t | 9 | ||||
-rw-r--r-- | gnu/usr.bin/perl/t/porting/dual-life.t | 12 | ||||
-rw-r--r-- | gnu/usr.bin/perl/t/porting/globvar.t | 11 | ||||
-rw-r--r-- | gnu/usr.bin/perl/t/porting/known_pod_issues.dat | 33 | ||||
-rwxr-xr-x | gnu/usr.bin/perl/t/porting/manifest.t | 7 | ||||
-rw-r--r-- | gnu/usr.bin/perl/t/porting/pod_rules.t | 2 | ||||
-rwxr-xr-x | gnu/usr.bin/perl/t/porting/podcheck.t | 717 | ||||
-rw-r--r-- | gnu/usr.bin/perl/t/porting/readme.t | 2 | ||||
-rw-r--r-- | gnu/usr.bin/perl/t/porting/regen.t | 27 | ||||
-rw-r--r-- | gnu/usr.bin/perl/t/porting/utils.t | 2 |
13 files changed, 595 insertions, 451 deletions
diff --git a/gnu/usr.bin/perl/t/porting/cmp_version.t b/gnu/usr.bin/perl/t/porting/cmp_version.t index 55b40035298..0573e2f81d1 100644 --- a/gnu/usr.bin/perl/t/porting/cmp_version.t +++ b/gnu/usr.bin/perl/t/porting/cmp_version.t @@ -9,14 +9,22 @@ # AND you should probably also nudge the upstream maintainer for # example by filing a bug, with a patch attached and linking to # the core change. +# +# This test script works by finding the last non-RC tagged commit, +# which it assumes was the last release, then for each module: +# if it has changed since that commit, but its version number is still the +# same as that commit, report it. +# +# There's also a module exclusion list in Porting/cmpVERSION.pl. BEGIN { @INC = '..' if -f '../TestInit.pm'; + @INC = '.' if -f './TestInit.pm'; } use TestInit qw(T A); # T is chdir to the top level, A makes paths absolute use strict; -require 't/test.pl'; +require './t/test.pl'; my $source = find_git_or_skip('all'); chdir $source or die "Can't chdir to $source: $!"; diff --git a/gnu/usr.bin/perl/t/porting/customized.dat b/gnu/usr.bin/perl/t/porting/customized.dat index 09b833d4380..70722d55317 100644 --- a/gnu/usr.bin/perl/t/porting/customized.dat +++ b/gnu/usr.bin/perl/t/porting/customized.dat @@ -1,183 +1,32 @@ -Digest::MD5 cpan/Digest-MD5/t/files.t f8fe234035918d3b7324eba05f73e7e903a45ca0 -Archive::Tar cpan/Archive-Tar/bin/ptar 5e9f3c6f565114193d98847ed8569cd0010c229c -Archive::Tar cpan/Archive-Tar/bin/ptardiff 5a9f4c01a0390bf98da7e63f1c0bbf5bc74d12c7 -Archive::Tar cpan/Archive-Tar/bin/ptargrep eb74056c434acf314ac5a122e33bdd2ef99e6edb -Archive::Tar cpan/Archive-Tar/lib/Archive/Tar.pm b7e13134a5bcabe8c33fb0729d2f2f80e924059a -Archive::Tar cpan/Archive-Tar/lib/Archive/Tar/Constant.pm 18af3e90665fcf2ab40c5b02c10ba0ea3ac34d0e -Archive::Tar cpan/Archive-Tar/lib/Archive/Tar/File.pm c0b849aa3d164305d7cb084ba3adf8d505971d6b -CPAN cpan/CPAN/lib/App/Cpan.pm b2a9928c41083c82e884f6dc6d4b7043a2b0e351 -CPAN cpan/CPAN/lib/CPAN.pm 27f0f5c41a81aba89dfc895e7671719716522544 -CPAN cpan/CPAN/scripts/cpan c43050c8c63153a205e4385e118e906d1ecadf06 +# Regenerate this file using: +# cd t +# ./perl -I../lib porting/customized.t --regen +Devel::PPPort dist/Devel-PPPort/parts/embed.fnc e030719d9c6921810554a8e2d398543348b4878c Digest cpan/Digest/Digest.pm 43f7f544cb11842b2f55c73e28930da50774e081 -Digest::SHA cpan/Digest-SHA/lib/Digest/SHA.pm 5841fcf70f7290e07befdd16f05093664c618a96 -Digest::SHA cpan/Digest-SHA/shasum f92faa37afc098e2a825e4ecda1097890492d957 -Encode cpan/Encode/bin/enc2xs 7bbd4ca8d81e0189b87d703aa058b95a837b97d3 -Encode cpan/Encode/bin/encguess f1e7a130995c4bad53bb6d3034dae625cfe61e32 -Encode cpan/Encode/bin/piconv 80ea7f9afff580e41c4b29f5ab214ed378274b49 -Encode cpan/Encode/bin/ucmlint 495862125269a60536b78fd0a7910d024c4d21fe -Encode cpan/Encode/bin/unidump 715f47c2fcc661268f3c6cd3de0d27c72b745cd2 -Encode cpan/Encode/Encode.pm e146861ff2e6aaa62defa4887eade68dd7b17c8e -Encode cpan/Encode/encoding.pm 51c19efc9bfe8467d6ae12a4654f6e7f980715bf -ExtUtils::Constant cpan/ExtUtils-Constant/t/Constant.t a0369c919e216fb02767a637666bb4577ad79b02 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/bin/instmodsh 5bc04a0173b8b787f465271b6186220326ae8eef -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm e3a372e07392179711ea9972087c1105a2780fad -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm b72721bd6aa9bf7ec328bda99a8fdb63cac6114d -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm 0e1e4c25eddb999fec6c4dc66593f76db34cfd16 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm bfd2aa00ca4ed251f342e1d1ad704abbaf5a615e -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm 5529ae3064365eafd99536621305d52f4ab31b45 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm bc88b275af73b8faac6abd59a9aad3f625925810 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod 062e5d14a803fbbec8d61803086a3d7997e8a473 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod a8a9cab7d67922ed3d6883c864e1fe29aaa6ad89 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm 0c970778ac7b437d9363b314dd0ab85b7d83c8cb -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm 987b7b5567b95a085a69037a7fa99af2b9bdf4df -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm 412e95c37fa10f007f3137e9e142ac30f3427d9f -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm 8559ef191b4371d0c381472464856a8a73825b2a -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm 09d579ed9daea95c3bf47de2e0b8fe3aa0ff6447 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm f720c13748293b792f7073aa96e7daecb590b183 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm 243649a399d293ae7ad0f26b7eab2668aa864ce8 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm b63c90129303b2c17d084fb828aa2c02a2ad85b8 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm cabd1c97eaa427067811d92807e34c17940c7350 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm 6a185d897a600c34615a6073f4de0ac2f54fef3e -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm fcf2f8e3461deb32e4b3f37a00002477bc8e976e -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm 1f5eb772eedfce56434161e2ff080e0cb03ee260 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm de777d7809c0d73e5d4622a29921731c7e5dff48 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm 01e8f08a82b5304009574e3ac0892b4066ff7639 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm 5340052b58557a6764f5ac9f8b807fefec404a06 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm 20a9e08add92f04ee97084dbc48876c18622613b -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm 40397f4cd2d49700b80b4ef490da98add24c5b37 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm 147e97fbabb74841f0733dbd5d1b9f3fa51f87c1 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm 3f13ed7045ff3443bcb4dd6c95c98b9bd705820f -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm 10b2a0651d14ec8b1367e986288533a40bac8380 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm 48e8a2fe1763ba0228a12a8d363af8d033817ba9 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm 6fefe99045b64459905d4721f3a494d8d50f7ab9 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm 172778ad21c065a89cd270668eb9f99a7364b41c -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/t/cd.t 0a71fbd646a7be8358b07b6f64f838243cc0aef4 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/t/echo.t 37aec8f794c52e037540757eb5b2556f79419ff7 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/NoXS.pm 371cdff1b2375017907cfbc9c8f4a31f5ad10582 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/t/prereq.t 53bda2c549fd13a6b6c13a070ca6bc79883081c0 -ExtUtils::MakeMaker cpan/ExtUtils-MakeMaker/t/vstrings.t 90035a2bdbf45f15b9c3196d072d7cba7e662871 -File::Fetch cpan/File-Fetch/lib/File/Fetch.pm bd0b64a1d8ee2ffac39e017f9fa9f78f95514b4d -File::Path cpan/File-Path/lib/File/Path.pm 7837c0a6c26609714b4fad0deeb82808409b83fe -File::Path cpan/File-Path/t/Path_win32.t bec8cc294d10f141ecdb7f165ef297a2dc27ba2f -HTTP::Tiny cpan/HTTP-Tiny/lib/HTTP/Tiny.pm 3c899ab6938b588f6a2823a6aa59edc81fc2a387 -IO-Compress cpan/IO-Compress/bin/zipdetails 381ba2a6ae5bd21c8d2e994316e3e13f2f0a4f41 -IO-Compress cpan/IO-Compress/lib/Compress/Zlib.pm 58ddedd36889463706d4060589d0c5e6dc497b86 -IO-Compress cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm 871432b8a9ab1ec0535c17a3f2b8cd49ad657e38 -IO-Compress cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm 8f17ecfcd34ff4bec15cc505133dccddd63023ea -IO-Compress cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm fe231e107be84089a16d4890baa306ba1b033fb1 -IO-Compress cpan/IO-Compress/lib/IO/Compress/Base.pm 908f2264231c5f3b9a946f01c76b9498414a8100 -IO-Compress cpan/IO-Compress/lib/IO/Compress/Base/Common.pm 7773ccaf2d4202dff720f31315f5cec92e021803 -IO-Compress cpan/IO-Compress/lib/IO/Compress/Bzip2.pm fc5a19657c3a4ba5c4fff5cfb0236f7fb7130bd7 -IO-Compress cpan/IO-Compress/lib/IO/Compress/Deflate.pm d41b030df81327d595357353e44ef0bd19569c41 -IO-Compress cpan/IO-Compress/lib/IO/Compress/Gzip.pm 723dd26824de6a777645a5d5f010f033ad07301e -IO-Compress cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm a4779d16ba73ae8917ceb3886449d4d132c87175 -IO-Compress cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm 4cd31ab73417c3c17574770c2bbd58238aaf214e -IO-Compress cpan/IO-Compress/lib/IO/Compress/Zip.pm 84fe2c1c8f4f5b7d3adbe84994b2b4e7f21252cc -IO-Compress cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm 253cedf65b9ece96cca1f5c0797aa08cbb26d009 -IO-Compress cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm 68e6adf8e5f806a1620b510810343a3816d70e40 -IO-Compress cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm 078a4ed7258530d11a13abafa84791f7c3c26518 -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm 49d0acc3b95eefcfe3842f4a4b10bb85d676bfe5 -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm 29347c2d945b2ddbb67cf640d89aa23f34edce48 -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm f6d7ae62136ef37bf27a47bf072105d601dd8a9b -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm 8c3de66922bcdd5b70a14737860d1ffe97883fed -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm d53e94d5da3462bb979c4f46c5c7ec62775775c2 -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/Base.pm 0e512c2c6c1863760f4ea795a823d43018903391 -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm 7fda33207940bdabb0a2c43d4db7a09ad6686e33 -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm eb220d4b455b509a1e3864e476baf4b2cd0bbc60 -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm 4ed964c2df4116a43c637eab339a051af6f5ac45 -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm 9d8231e49631c2a2860ba4c6b724872409d3b034 -IO-Compress cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm 78a9b534f1c400073c27b433c21afbd440922b26 -IPC::Cmd cpan/IPC-Cmd/lib/IPC/Cmd.pm d76a3537902c2a3097c07e41242e2c01fa8f3288 -IPC::SysV cpan/IPC-SysV/lib/IPC/Msg.pm 88865a2c7a06351cf10e08addd077bbdea02fb60 -IPC::SysV cpan/IPC-SysV/lib/IPC/Semaphore.pm 04f0d11b7d0babf8e41ccc917cccecc4a3ff9050 -IPC::SysV cpan/IPC-SysV/lib/IPC/SharedMem.pm 85dea09a5bb625fc1fdda433909633fda05ea831 -IPC::SysV cpan/IPC-SysV/lib/IPC/SysV.pm 9a0d1c3dcd67321ef1322f29102a1bc7eb91c61c -IPC::SysV cpan/IPC-SysV/t/ipcsysv.t ee2c95e846ea201afe13c9ec53b09cef62c8ac68 -JSON::PP cpan/JSON-PP/bin/json_pp 22e1b3760ec2b2cfd7ff0d2165f6e88907b94c70 -JSON::PP cpan/JSON-PP/lib/JSON/PP.pm 817730a21b9be855d844e4d26023758960039e99 +Encode cpan/Encode/t/truncated_utf8.t 36e6780c20f1d22ed7c97b1a388a63629617451f Locale::Maketext::Simple cpan/Locale-Maketext-Simple/lib/Locale/Maketext/Simple.pm 57ed38905791a17c150210cd6f42ead22a7707b6 -Math::BigRat cpan/Math-BigRat/lib/Math/BigRat.pm 6eabc68e04f67694f6fe523e64eb013fc337ca5b +Math::Complex cpan/Math-Complex/lib/Math/Complex.pm 198ea6c6c584f5ea79a0fd7e9d411d0878f3b2af +Math::Complex cpan/Math-Complex/t/Complex.t 4f307ed6fc59f1e5fb0e6b11103fc631b6bdb335 +Math::Complex cpan/Math-Complex/t/Trig.t 2682526e23a161d54732c2a66393fe4a234d1865 Memoize cpan/Memoize/Memoize.pm 902092ff91cdec9c7b4bd06202eb179e1ce26ca2 -Parse::CPAN::Meta cpan/Parse-CPAN-Meta/lib/Parse/CPAN/Meta.pm 2de9f411463eda2bd5f57163c12edab9a00dc598 -Parse::CPAN::Meta cpan/Parse-CPAN-Meta/t/02_api.t a692c9a7e52b08a14a954d6c405a22c0dab1cd43 -Pod::Perldoc cpan/Pod-Perldoc/lib/Pod/Perldoc.pm ba3072a6af793b410b02594ed8fe109ac16a1d43 -Scalar-List-Utils cpan/Scalar-List-Utils/lib/List/Util.pm 3b501b7332480b34929bc4df5d48581df3307267 -Scalar-List-Utils cpan/Scalar-List-Utils/lib/List/Util/XS.pm ebd169113d3df79d31ad5535dbd7a538a8c14fd2 -Scalar-List-Utils cpan/Scalar-List-Utils/lib/Scalar/Util.pm def601405bac7a4d6690b8c4207e0f05d65eb4ca -Scalar-List-Utils cpan/Scalar-List-Utils/lib/Sub/Util.pm 1187d6cd9bccf1264bd53b3a65ea96fad7520068 -Scalar-List-Utils cpan/Scalar-List-Utils/ListUtil.xs 6128584ecb0ae69bb21b16b22daceeffc92df9d9 -Scalar-List-Utils cpan/Scalar-List-Utils/t/product.t 99bf424804f055b99ff2a18b7dcf25bb8b6d2463 -Socket cpan/Socket/Socket.pm 98e38176d745c38282907f391c077298f5a3d0ba -Socket cpan/Socket/Socket.xs edd4fed212785f11c5c2095a75941dad27d586d9 -Sys::Syslog cpan/Sys-Syslog/Syslog.pm 181d7541a6aa2a0a4d15f5beec32d16c17c76caf -Test::Harness cpan/Test-Harness/bin/prove 9b2866928cb1125de2c68f9773b25723e02c54c0 -Test::Harness cpan/Test-Harness/lib/App/Prove.pm a312bbbc97860d5051f06056eb30b985b15ee57c -Test::Harness cpan/Test-Harness/lib/App/Prove/State.pm f4f7d11878eae1fd81d9c3d82097ddfd43b679a1 -Test::Harness cpan/Test-Harness/lib/App/Prove/State/Result.pm 374f5be770e2709c744ddf77927b73ab0f644219 -Test::Harness cpan/Test-Harness/lib/App/Prove/State/Result/Test.pm d3a2ef3916946e0880ffd00356b3ed0feb589029 -Test::Harness cpan/Test-Harness/lib/TAP/Base.pm 38c1bbc33e1e28919dd905ee7f416c2f1cd2014b -Test::Harness cpan/Test-Harness/lib/TAP/Formatter/Base.pm 92783e20c15f982a25025c1fd7dc512071aa2671 -Test::Harness cpan/Test-Harness/lib/TAP/Formatter/Color.pm f4f02b5a4f8f11c0e9fa95d06e9bc8f14a172555 -Test::Harness cpan/Test-Harness/lib/TAP/Formatter/Console.pm 36fec1e9ca70e359cf1cf110cbdf86040686e635 -Test::Harness cpan/Test-Harness/lib/TAP/Formatter/Console/ParallelSession.pm 579df1507c22c5a6c8116943ba7b084dd557a2a3 -Test::Harness cpan/Test-Harness/lib/TAP/Formatter/Console/Session.pm 98f620cadecbe7529b62addf35e16be72b066bcf -Test::Harness cpan/Test-Harness/lib/TAP/Formatter/File.pm 531f646edd5d5768a02728be5c3c1786df17a328 -Test::Harness cpan/Test-Harness/lib/TAP/Formatter/File/Session.pm cb8b1dd0039381c41b11ba186ed25969fd33b654 -Test::Harness cpan/Test-Harness/lib/TAP/Formatter/Session.pm ce57cb909e8e9b1a8263939da1b4eac6ac5df6e5 -Test::Harness cpan/Test-Harness/lib/TAP/Harness.pm dbbeef74569163d00c8befccf9f2670bafa2dc2f -Test::Harness cpan/Test-Harness/lib/TAP/Harness/Env.pm 7743d40504d23867fe5f6b3967f7c907c530074f -Test::Harness cpan/Test-Harness/lib/TAP/Object.pm 19b27d7e30f6e69c3ffaec939418978ba7b0bc7c -Test::Harness cpan/Test-Harness/lib/TAP/Parser.pm a97c90c41959194ad828511a2b5f6ad068fd2f23 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Aggregator.pm bf32f2c834f5242af1db2b5f02419451e87c3b68 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Grammar.pm 2626f555bcf238e4c6a5a0e07eb016f38520d705 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Iterator.pm 6b2729f8883718683b0a2d7cd75d734501360e7b -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Iterator/Array.pm c4ebe427ef24bfbcfcf74459cb74249bf84ec92a -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Iterator/Process.pm 43c08c6ba2a2e599f503cfec086f8ac9b2b8a8f1 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Iterator/Stream.pm f28ccf211ebdb527b558a83d6969d96ba13414af -Test::Harness cpan/Test-Harness/lib/TAP/Parser/IteratorFactory.pm 561ba7be34786134f70b67e73e604de1c934f9bb -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Multiplexer.pm 7417eede2c1554b94dfbbbce5a90dc6e4d8bbbe6 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Result.pm be74c62222a90404d2d6586f77a4f66bafee2879 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Result/Bailout.pm 89a3c49f5b03501813b5a6133ca2ca3fa25f8648 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Result/Comment.pm e49dde84304dc1a034fd1a5c38f18bed99c1b4d4 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Result/Plan.pm cf334e85a8e77fe6f830744f70e4c9c1a24c36a5 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Result/Pragma.pm b1587f903cc7937190789b1de8bdf20d6e30ff28 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Result/Test.pm dff1422b7cc8ea0c24aedef020fc2266144eb1ea -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Result/Unknown.pm 0959ff5602d340f92be31f01ee2f890028784a8d -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Result/Version.pm 8491bba7a07568374cafd8fc40cb08d9b4458e9b -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Result/YAML.pm 7dc7b96d882dce5e20696305705f4f0e7462d8bc -Test::Harness cpan/Test-Harness/lib/TAP/Parser/ResultFactory.pm 1f64e8390990ad99eea3d0fb202487ba973e9a2d -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Scheduler.pm 471ea7d1db535364dd86ab106771c652742c0c05 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Scheduler/Job.pm 3d7ee9db8277b50fcebcf239898a8023791b8654 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Scheduler/Spinner.pm 1c04e88f45719f92961821d9ed65e80800986893 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/Source.pm c820d95e2a4797893eb717c07b72742e6e0a1542 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/SourceHandler.pm b25f8e7d1a9f2215175618a989df39d78a878df5 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Executable.pm 5f542b39c98ebe3ee6d906e38b8944abbac5188b -Test::Harness cpan/Test-Harness/lib/TAP/Parser/SourceHandler/File.pm 6aa5762461cb06f3db57d13de0fc771d5563c871 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Handle.pm edc91794e1fbefbbf8e919658fe7a5bbd7c84916 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Perl.pm 809d6d6779c2aed829a9a087ecb219fbcc7fbfb5 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/SourceHandler/RawTAP.pm d01e1e2a87733ab45f387e34803f821ed184e5cc -Test::Harness cpan/Test-Harness/lib/TAP/Parser/YAMLish/Reader.pm 76771092dd2b87a2adb7ff20b7ae77cbae7d0563 -Test::Harness cpan/Test-Harness/lib/TAP/Parser/YAMLish/Writer.pm bf1fbfff9720330886651f183959a5db56daeea0 -Test::Harness cpan/Test-Harness/lib/Test/Harness.pm da2d76ba673372da129060c9d0adb8cf0d91f9f7 +NEXT cpan/NEXT/lib/NEXT.pm 2c83d03ee361816e53ccb931137d314ab878d19f +NEXT cpan/NEXT/t/next.t 66fd60eb0f75b6f3eea95d1dee745f9a7a348146 +Net::Ping dist/Net-Ping/t/000_load.t deff5dc2ca54dae28cb19d3631427db127279ac2 +Net::Ping dist/Net-Ping/t/001_new.t 90c9d63509b3efc8941449fbd1ca8b807fa42040 +Net::Ping dist/Net-Ping/t/500_ping_icmp.t a003daa5eaf215e58234786bb1fbfbebf669bf44 +Pod::Checker cpan/Pod-Checker/t/pod/contains_bad_pod.xr 73538fd80dfe6e19ad561fe034009b44460208f6 +Pod::Checker cpan/Pod-Checker/t/pod/selfcheck.t 8ce3cfd38e4b9bcf5bc7fe7f2a14195e49aed7d8 +Pod::Checker cpan/Pod-Checker/t/pod/testcmp.pl a0cd5c8eca775c7753f4464eee96fa916e3d8a16 +Pod::Checker cpan/Pod-Checker/t/pod/testpchk.pl b2072c7f4379fd050e15424175d7cac5facf5b3b +Pod::Perldoc cpan/Pod-Perldoc/lib/Pod/Perldoc.pm 582be34c077c9ff44d99914724a0cc2140bcd48c +autodie cpan/autodie/lib/autodie/exception.pm b99e4e35a9ed36de94d54437888822ced4936207 +autodie cpan/autodie/lib/autodie/hints.pm e1998fec61fb4e82fe46585bd82c73200be6f262 +autodie cpan/autodie/t/exceptions.t ad315a208f875e06b0964012ce8d65daa438c036 +autodie cpan/autodie/t/lib/Hints_pod_examples.pm 6944c218e9754b3613c8d0c90a5ae8aceccb5c99 autodie cpan/autodie/t/mkdir.t 9e70d2282a3cc7d76a78bf8144fccba20fb37dac -bignum cpan/bignum/lib/bigint.pm 56330354995409dab5073ea92d749f8727e265db -version vutil.c 45ff345c3d8424ba63e130a223848f5b336bd87b -bignum cpan/bignum/lib/bignum.pm e999973f78e6be12282c11bb6328246b31a9576b -bignum cpan/bignum/lib/bigrat.pm 7fccc9df30e43dbbae6e5ea91b26c8046545c9a9 -bignum cpan/bignum/lib/Math/BigFloat/Trace.pm a6b4b995e18f4083252e6dc72e9bef69671893dd -bignum cpan/bignum/lib/Math/BigInt/Trace.pm d9596963673760cae3eeeb752c1eeeec50bb2290 -libnet cpan/libnet/lib/Net/Cmd.pm a44a10c939a4c35f923c4638054178c32f1d283a -libnet cpan/libnet/lib/Net/Config.pm 9bd49bf4de0dc438bceee0ef4baf8ba7a6633327 -libnet cpan/libnet/lib/Net/Domain.pm 1bbed50f70fd1ff3e1cdf087b19a9349cddfaced -libnet cpan/libnet/lib/Net/FTP.pm 40dba553c8d44e1530daec2d07a6e50910401f2e -libnet cpan/libnet/lib/Net/FTP/A.pm c570b10730b168990034dcf9cb00e305a100f336 -libnet cpan/libnet/lib/Net/FTP/dataconn.pm ebb554781e74b37dbd57883cff3b668f436dcfe4 -libnet cpan/libnet/lib/Net/FTP/E.pm 1ec473a8601f7c8d1584c833202f90744b471f41 -libnet cpan/libnet/lib/Net/FTP/I.pm b1d50346092915ca177af988917dbae54b1bd000 -libnet cpan/libnet/lib/Net/FTP/L.pm ac1599c775faee0474710e4f75051c8949f13df2 -libnet cpan/libnet/lib/Net/Netrc.pm 009cfc08f8a5bf247257acb64a21e1b6ad8b2c9c -libnet cpan/libnet/lib/Net/NNTP.pm 6325fc05fd9ef81dc8d461a77b2a3f56ad1ae114 -libnet cpan/libnet/lib/Net/POP3.pm 2d8065646df80061dae5a9e3465a36a6557165fd -libnet cpan/libnet/lib/Net/SMTP.pm f3ed7a177b49ee0ba65ac1c414de797cdbbe6886 -libnet cpan/libnet/lib/Net/Time.pm b3df8bbaa3bc253fbf77e8386c59a1b2aae13627 -version cpan/version/lib/version.pm ff75e2076be10bd4c05133cd979fda0b38ca8653 +experimental cpan/experimental/t/basic.t a073ea03ccc98dec496569f3648ab01a5fe1c7a0 +perlfaq cpan/perlfaq/lib/perlfaq5.pod bcc1b6af3b6dff3973643acf8d5e741463374123 +perlfaq cpan/perlfaq/lib/perlfaq8.pod bffbc0c8fa828aead24e0891a5e789369a8e0743 +podlators pod/perlpodstyle.pod c6500c9950b46e8228d4adbc09a3ee2ef23de2d0 +version cpan/version/lib/version.pm a61f969d55dd73ae2d7a604f2c9bbef1ea82b820 +version vxs.inc f26c23f0279fb64c77ad814af906c04930cff81c diff --git a/gnu/usr.bin/perl/t/porting/customized.t b/gnu/usr.bin/perl/t/porting/customized.t index 45fcafb1009..d425e5b775a 100644 --- a/gnu/usr.bin/perl/t/porting/customized.t +++ b/gnu/usr.bin/perl/t/porting/customized.t @@ -13,6 +13,7 @@ BEGIN { @INC = qw(lib Porting t); require 'test.pl'; skip_all("pre-computed SHA1 won't match under EBCDIC") if $::IS_EBCDIC; + skip_all("This distro may have modified some files in cpan/. Skipping validation.") if $ENV{'PERL_BUILD_PACKAGING'}; } use strict; @@ -73,10 +74,16 @@ my $data_fh; if ( $regen ) { open $data_fh, '>:raw', $customised or die "Can't open $customised"; + print $data_fh <<'#'; +# Regenerate this file using: +# cd t +# ./perl -I../lib porting/customized.t --regen +# } else { open $data_fh, '<:raw', $customised or die "Can't open $customised"; while (<$data_fh>) { + next if /^#/; chomp; my ($module,$file,$sha) = split ' '; $customised{ $module }->{ $file } = $sha; diff --git a/gnu/usr.bin/perl/t/porting/diag.t b/gnu/usr.bin/perl/t/porting/diag.t index ccde8cb13f9..22cde90a9cf 100755 --- a/gnu/usr.bin/perl/t/porting/diag.t +++ b/gnu/usr.bin/perl/t/porting/diag.t @@ -9,7 +9,7 @@ use warnings; use strict; use Config; -require 't/test.pl'; +require './t/test.pl'; if ( $Config{usecrosscompile} ) { skip_all( "Not all files are available during cross-compilation" ); @@ -26,7 +26,7 @@ plan('no_plan'); my $make_exceptions_list = ($ARGV[0]||'') eq '--make-exceptions-list' and shift; -require 'regen/embed_lib.pl'; +require './regen/embed_lib.pl'; # Look for functions that look like they could be diagnostic ones. my @functions; @@ -49,7 +49,7 @@ my $source_msg_re = "(?<routine>\\bDIE\\b|$function_re)"; my $text_re = '"(?<text>(?:\\\\"|[^"]|"\s*[A-Z_]+\s*")*)"'; my $source_msg_call_re = qr/$source_msg_re(?:_nocontext)? \s* - \((?:aTHX_)? \s* + \( (?: \s* Perl_form \( )? (?:aTHX_)? \s* (?:packWARN\d*\((?<category>.*?)\),)? \s* $text_re /x; my $bad_version_re = qr{BADVERSION\([^"]*$text_re}; @@ -305,6 +305,8 @@ sub check_file { # Sometimes the regexp will pick up too much for the category # e.g., WARN_UNINITIALIZED), PL_warn_uninit_sv ... up to the next ) $category && $category =~ s/\).*//s; + # Special-case yywarn + /yywarn/ and $category = 'syntax'; if (/win32_croak_not_implemented\(/) { $name .= " not implemented!" } @@ -685,7 +687,6 @@ Usage: VMS::Filespec::unixrealpath(spec) Usage: VMS::Filespec::vmsify(spec) Usage: VMS::Filespec::vmspath(spec) Usage: VMS::Filespec::vmsrealpath(spec) -Use of inherited AUTOLOAD for non-method %s::%s() is deprecated utf8 "\x%X" does not map to Unicode Value of logical "%s" too long. Truncating to %i bytes waitpid: process %x is not a child of process %x diff --git a/gnu/usr.bin/perl/t/porting/dual-life.t b/gnu/usr.bin/perl/t/porting/dual-life.t index 9aa60c2ea6f..4ad2256ef29 100644 --- a/gnu/usr.bin/perl/t/porting/dual-life.t +++ b/gnu/usr.bin/perl/t/porting/dual-life.t @@ -24,12 +24,6 @@ use File::Spec::Functions; # Exceptions that are found in dual-life bin dirs but aren't # installed by default; some occur only during testing: my $not_installed = qr{^(?: - \.\./cpan/Archive-Tar/bin/ptar.* - | - \.\./cpan/JSON-PP/bin/json_pp - | - \.\./cpan/IO-Compress/bin/zipdetails - | \.\./cpan/Encode/bin/u(?:cm(?:2table|lint|sort)|nidump) | \.\./cpan/Module-(?:Metadata|Build) @@ -72,9 +66,11 @@ for my $f ( @programs ) { next if $f =~ $not_installed; my $bn = basename($f); if(grep { /\A(?i:$bn)\z/ } keys %dist_dir_exe) { - ok( -f "$dist_dir_exe{lc $bn}$ext", $f); + my $exe_file = "$dist_dir_exe{lc $bn}$ext"; + ok( -f $exe_file, "Verify -f '$exe_file'"); } else { - ok( -f catfile('..', 'utils', "$bn$ext"), $f ); + my $utils_file = catfile('..', 'utils', "$bn$ext"); + ok( -f $utils_file, "Verify -f '$utils_file'" ); } } diff --git a/gnu/usr.bin/perl/t/porting/globvar.t b/gnu/usr.bin/perl/t/porting/globvar.t index bc0203a3b57..1db0ae7ffee 100644 --- a/gnu/usr.bin/perl/t/porting/globvar.t +++ b/gnu/usr.bin/perl/t/porting/globvar.t @@ -4,7 +4,7 @@ use TestInit qw(T); use strict; use Config; -require 't/test.pl'; +require './t/test.pl'; skip_all("Code to read symbols not ported to $^O") if $^O eq 'VMS' or $^O eq 'MSWin32'; @@ -15,7 +15,7 @@ my %skip = map { ("PL_$_", 1) } qw( DBcv bitcount cshname force_link_funcs generation lastgotoprobe mod_latin1_uc modcount no_symref_sv uudmap - watchaddr watchok warn_uninit_sv + watchaddr watchok warn_uninit_sv hash_chars ); $skip{PL_hash_rand_bits}= $skip{PL_hash_rand_bits_enabled}= 1; # we can be compiled without these, so skip testing them @@ -61,6 +61,13 @@ foreach my $file (map {$_ . $Config{_o}} qw(globals regcomp)) { close $fh or die "Problem running nm $file"; } +unless ($Config{d_double_has_inf}) { + $skip{PL_inf}++; +} +unless ($Config{d_double_has_nan}) { + $skip{PL_nan}++; +} + foreach (sort keys %exported) { SKIP: { skip("We dont't export '$_' (Perl not built with this enabled?)",1) if $skip{$_}; diff --git a/gnu/usr.bin/perl/t/porting/known_pod_issues.dat b/gnu/usr.bin/perl/t/porting/known_pod_issues.dat index 162de81cbc0..e89d5c02a13 100644 --- a/gnu/usr.bin/perl/t/porting/known_pod_issues.dat +++ b/gnu/usr.bin/perl/t/porting/known_pod_issues.dat @@ -17,7 +17,9 @@ access(2) Algorithm::C3 Algorithm::Permute AnyEvent +Apache::DProf Apache::MP3 +Apache::SmallProf Archive::Extract Array::Base atan2(3) @@ -48,12 +50,14 @@ Class::Tiny Class::Tiny::Antlers Classic::Perl clearerr(3) +clock(3) Clone closedir(2) connect(2) Coro cpan2dist(1) CPAN::Changes::Spec +CPAN::Uploader cpanp(1) CPANPLUS crypt(3) @@ -68,6 +72,7 @@ Data::Float Data::Structure::Util Data::Types Data::Util +Date::Parse Date::Pcalc DateTime DB_File(3) @@ -75,6 +80,7 @@ DBI DBIx::Profile dbm(3) dbm_open(3) +Devel::Apache::Profiler Devel::CallParser Devel::Callsite Devel::Cover @@ -82,6 +88,7 @@ Devel::DProf Devel::DTrace::Provider Devel::InnerPackage Devel::NYTProf +Devel::NYTProf::Apache Devel::PPPort Devel::SawAmpersand Devel::Spy @@ -107,6 +114,7 @@ File::Findgrep File::Map File::MMagic File::ShareDir +Filter::Encoding find(1) flock(2) flock(3) @@ -139,6 +147,7 @@ ioctl(2) IPC::Run IPC::Shareable IPC::Signal +ispunct(2) kill(3) langinfo(3) LaTeX::Encode @@ -151,8 +160,8 @@ Lingua::ZH::Romanize::Pinyin List::Gather listen(2) local::lib +localeconv(3) lockf(3) -Log::Agent Log::Message Log::Message::Config Log::Message::Handlers @@ -160,7 +169,9 @@ Log::Message::Item Log::Message::Simple lseek(2) LWP::ConsoleLogger +Mail::Mailer Mail::Send +Mail::Sendmail Mail::SpamAssassin man(5) man(7) @@ -173,6 +184,7 @@ Math::Random::MT::Perl Math::Random::Secure Math::TrulyRandom md5sum(1) +Method::Signatures mmap(2) Module::Build Module::CPANTS::Analyse @@ -226,10 +238,10 @@ prctl(2) printenv(1) printf(3) provide -pstruct ptar(1) ptargrep(1) pwd_mkdb(8) +querylocale(3) RDF::Trine read(2) Readonly @@ -267,6 +279,7 @@ SOM splain sprintf(3) stat(2) +strftime(3) strictures String::Base String::Scanf @@ -312,19 +325,24 @@ Want wget(1) Win32::Locale write(2) +WWW::Mechanize XML::LibXML YAML YAML::Syck YAML::Tiny +dist/data-dumper/changes Verbatim line length including indents exceeds 79 by 1 dist/data-dumper/dumper.pm ? Should you be using L<...> instead of 1 +dist/devel-ppport/parts/inc/ppphdoc Unknown directive: =dontwarn 1 +dist/devel-ppport/parts/inc/ppphdoc Unknown directive: =implementation 1 +dist/devel-ppport/parts/inc/ppphdoc Unknown directive: =provides 1 +dist/exporter/lib/exporter.pm Verbatim line length including indents exceeds 79 by 2 +dist/net-ping/lib/net/ping.pm Apparent broken link 1 ext/amiga-exec/exec.pm Verbatim line length including indents exceeds 79 by 1 -ext/devel-peek/peek.pm ? Should you be using L<...> instead of 2 ext/dynaloader/dynaloader.pm Verbatim line length including indents exceeds 79 by 1 ext/hash-util/lib/hash/util.pm Verbatim line length including indents exceeds 79 by 2 ext/pod-html/testdir/perlpodspec-copy.pod Verbatim line length including indents exceeds 79 by 2 ext/pod-html/testdir/perlvar-copy.pod ? Should you be using L<...> instead of 3 ext/pod-html/testdir/perlvar-copy.pod Verbatim line length including indents exceeds 79 by 6 -ext/vms-dclsym/dclsym.pm ? Should you be using L<...> instead of 1 ext/vms-filespec/lib/vms/filespec.pm Verbatim line length including indents exceeds 79 by 1 install ? Should you be using F<...> or maybe L<...> instead of 1 pod/perl.pod Verbatim line length including indents exceeds 79 by 8 @@ -334,15 +352,16 @@ pod/perlce.pod Verbatim line length including indents exceeds 79 by 3 pod/perldebguts.pod Verbatim line length including indents exceeds 79 by 27 pod/perldebtut.pod Verbatim line length including indents exceeds 79 by 3 pod/perldtrace.pod Verbatim line length including indents exceeds 79 by 7 +pod/perlgit.pod ? Should you be using F<...> or maybe L<...> instead of 1 pod/perlgit.pod Verbatim line length including indents exceeds 79 by 1 pod/perlguts.pod ? Should you be using L<...> instead of 1 pod/perlhack.pod ? Should you be using L<...> instead of 1 +pod/perlhack.pod Verbatim line length including indents exceeds 79 by 2 pod/perlhist.pod Verbatim line length including indents exceeds 79 by 1 pod/perlhpux.pod Verbatim line length including indents exceeds 79 by 1 pod/perlinterp.pod ? Should you be using L<...> instead of 1 pod/perlirix.pod Verbatim line length including indents exceeds 79 by 1 pod/perlmacosx.pod Verbatim line length including indents exceeds 79 by 3 -pod/perlmodlib.pod Verbatim line length including indents exceeds 79 by 3 pod/perlmroapi.pod ? Should you be using L<...> instead of 1 pod/perlos2.pod ? Should you be using L<...> instead of 2 pod/perlos2.pod Verbatim line length including indents exceeds 79 by 5 @@ -354,9 +373,9 @@ pod/perlsolaris.pod Verbatim line length including indents exceeds 79 by 13 pod/perltie.pod Verbatim line length including indents exceeds 79 by 3 pod/perltru64.pod Verbatim line length including indents exceeds 79 by 1 pod/perlwin32.pod Verbatim line length including indents exceeds 79 by 7 -porting/epigraphs.pod Verbatim line length including indents exceeds 79 by 16 +porting/epigraphs.pod Verbatim line length including indents exceeds 79 by -1 porting/release_managers_guide.pod Verbatim line length including indents exceeds 79 by 1 -utils/encguess There is no NAME 1 +porting/todo.pod ? Should you be using F<...> or maybe L<...> instead of 1 lib/benchmark.pm Verbatim line length including indents exceeds 79 by 2 lib/config.pod ? Should you be using L<...> instead of -1 lib/perl5db.pl ? Should you be using L<...> instead of 1 diff --git a/gnu/usr.bin/perl/t/porting/manifest.t b/gnu/usr.bin/perl/t/porting/manifest.t index e7f205b6933..7adb06198de 100755 --- a/gnu/usr.bin/perl/t/porting/manifest.t +++ b/gnu/usr.bin/perl/t/porting/manifest.t @@ -19,7 +19,7 @@ # which will output "'MANIFEST' is NOT sorted properly" but which will # correct the problem; or: # -# make manifest +# make manisort # # which will output "WARNING: re-sorting MANIFEST" but which will also # correct the problem. @@ -30,7 +30,7 @@ BEGIN { } use TestInit qw(T); # T is chdir to the top level -require 't/test.pl'; +require './t/test.pl'; skip_all("Cross-compiling, the entire source might not be available") if $Config{usecrosscompile}; @@ -85,7 +85,8 @@ SKIP: { SKIP: { find_git_or_skip(6); - chomp(my @repo= grep { !/\.gitignore$/ } `git ls-files`); + my %seen; # De-dup ls-files output (can appear more than once) + chomp(my @repo= grep { !/\.gitignore$/ && !$seen{$_}++ } `git ls-files`); skip("git ls-files didnt work",3) if !@repo; is( 0+@repo, 0+@files, "git ls-files gives the same number of files as MANIFEST lists"); diff --git a/gnu/usr.bin/perl/t/porting/pod_rules.t b/gnu/usr.bin/perl/t/porting/pod_rules.t index 46a01140038..894b153e88e 100644 --- a/gnu/usr.bin/perl/t/porting/pod_rules.t +++ b/gnu/usr.bin/perl/t/porting/pod_rules.t @@ -25,7 +25,7 @@ BEGIN { chdir '..'; } @INC = qw(lib .); # Special @INC. - require 't/test.pl'; + require './t/test.pl'; } use strict; diff --git a/gnu/usr.bin/perl/t/porting/podcheck.t b/gnu/usr.bin/perl/t/porting/podcheck.t index 8b049e4f103..da52e26f5d2 100755 --- a/gnu/usr.bin/perl/t/porting/podcheck.t +++ b/gnu/usr.bin/perl/t/porting/podcheck.t @@ -1,5 +1,7 @@ #!/usr/bin/perl -w +package main; + BEGIN { chdir 't'; @INC = "../lib"; @@ -27,6 +29,10 @@ BEGIN { print "1..0 # $^O cannot handle this test\n"; exit(0); } + if ( $ENV{'PERL_BUILD_PACKAGING'} ) { + print "1..0 # This distro may have modified some files in cpan/. Skipping validation. \n"; + exit 0; + } require '../regen/regen_lib.pl'; } @@ -56,8 +62,7 @@ pods in the distribution workspace, except certain known special ones (specified below). It does additional checking beyond that done by Pod::Checker, and keeps a database of known potential problems, and will fail a pod only if the number of such problems differs from that given in the -database. It also suppresses the C<(section) deprecated> message from -Pod::Checker, since specifying the man page section number is quite proper to do. +database. The additional checks it always makes are: @@ -92,10 +97,10 @@ missing from the C<LE<lt>E<gt>> pod command. A pod can't be linked to unless it has a unique name. And a NAME should have a dash and short description after it. -=item =encoding statement issues +=item Occurrences of the Unicode replacement character -This indicates if an C<=encoding> statement should be present, or moved to the -front of the pod. +L<Pod::Simple> replaces bytes that aren't valid according to the document's +encoding (declared or auto-detected) with C<\N{REPLACEMENT CHARACTER}>. =back @@ -363,10 +368,9 @@ my $broken_link = "Apparent broken link"; my $broken_internal_link = "Apparent internal link is missing its forward slash"; my $multiple_targets = "There is more than one target"; my $duplicate_name = "Pod NAME already used"; -my $need_encoding = "Should have =encoding statement because have non-ASCII"; -my $encoding_first = "=encoding must be first command (if present)"; my $no_name = "There is no NAME"; my $missing_name_description = "The NAME should have a dash and short description after it"; +my $replacement_character = "Unicode replacement character found"; # the pedantic warnings messages my $line_length = "Verbatim line length including indents exceeds $MAX_LINE_LENGTH by"; my $C_not_linked = "? Should you be using L<...> instead of"; @@ -385,9 +389,6 @@ my $dl_ext = $Config{'dlext'}; $dl_ext =~ tr/.//d; my %excluded_files = ( canonicalize("lib/unicore/mktables") => 1, canonicalize("Porting/make-rmg-checklist") => 1, - # this one is a POD, but unfinished, so skip - # it for now - canonicalize("Porting/perl5200delta.pod") => 1, canonicalize("Porting/perldelta_template.pod") => 1, canonicalize("regen/feature.pl") => 1, canonicalize("regen/warnings.pl") => 1, @@ -431,14 +432,39 @@ my $non_pods = qr/ (?: \. | $dl_ext # dynamic libraries | gif # GIF images (example files from CGI.pm) | eg # examples from libnet + | core .* ) $ ) | ~$ | \ \(Autosaved\)\.txt$ # Other editor droppings | ^cxx\$demangler_db\.$ # VMS name mangler database | ^typemap\.?$ # typemap files | ^(?i:Makefile\.PL)$ + | ^core (?: $ | \. .* ) /x; +# Matches something that looks like a file name, but is enclosed in C<...> +my $C_path_re = qr{ ^ + # exclude various things that have slashes + # in them but aren't paths + (?! + (?: (?: s | qr | m | tr | y ) / ) # regexes + | \d+/\d+ \b # probable fractions + | (?: [LF] < )+ + | OS/2 \b + | Perl/Tk \b + | origin/blead \b + | origin/maint \b + + ) + /? # Optional initial slash + \w+ # First component of path, doesn't begin with + # a minus + (?: / [-\w]+ )+ # Subsequent path components + (?: \. \w+ )? # Optional trailing dot and suffix + >* # Any enclosed L< F< have matching closing > + $ + }x; + # '.PL' files should be excluded, as they aren't final pods, but often contain # material used in generating pods, and so can look like a pod. We can't use # the regexp above because case sensisitivity is important for these, as some @@ -464,20 +490,19 @@ close $manifest_fh, or die "Can't close $MANIFEST"; # Pod::Checker messages to suppress my @suppressed_messages = ( - "(section) in", # Checker is wrong to flag this - "multiple occurrence of link target", # We catch independently the ones - # that are real problems. - "unescaped <>", - "Entity number out of range", # Checker outputs this for anything above - # 255, but in fact all Unicode is valid - "No items in =over", # ie a blockquote + # We catch independently the ones that are real problems. + qr/multiple occurrences \(\d+\) of link target/, + + "unescaped <>", # Not every '<' or '>' need be escaped + qr/No items in =over/, # i.e., a blockquote, which we consider legal ); sub suppressed { # Returns bool as to if input message is one that is to be suppressed my $message = shift; - return grep { $message =~ /^\Q$_/i } @suppressed_messages; + + return grep { $message =~ /^$_/i } @suppressed_messages; } { # Closure to contain a simple subset of test.pl. This is to get rid of the @@ -518,16 +543,20 @@ sub suppressed { last SKIP; } - sub note { - my $message = shift; + sub _note { + my ($andle, $message) = @_; chomp $message; - print $message =~ s/^/# /mgr; - print "\n"; + print $andle $message =~ s/^/# /mgr; + print $andle "\n"; return; } + sub note { unshift @_, \*STDOUT; goto &_note } + + sub diag { unshift @_, \*STDERR; goto &_note } + END { if ($planned && $planned != $current_test) { print STDERR @@ -627,37 +656,54 @@ package My::Pod::Checker { # Extend Pod::Checker # Uses inside out hash to protect from typos # For new fields, remember to add to destructor DESTROY() - my %indents; # Stack of indents from =over's in effect for - # current line + my %CFL_text; # The text comprising the current C<>, F<>, or L<> + my %C_text; # If defined, are in a C<> section, and includes + # the accumulated text from that my %current_indent; # Current line's indent my %filename; # The pod is store in this file - my %skip; # is SKIP set for this pod + my %in_CFL; # count of stacked C<>, F<>, L<> directives + my %indents; # Stack of indents from =over's in effect for + # current line + my %in_for; # true if in a =for or =begin my %in_NAME; # true if within NAME section my %in_begin; # true if within =begin section + my %in_X; # true if in a X<> my %linkable_item; # Bool: if the latest =item is linkable. It isn't # for bullet and number lists my %linkable_nodes; # Pod::Checker adds all =items to its node list, # but not all =items are linkable to - my %seen_encoding_cmd; # true if have =encoding earlier + my %running_CFL_text; # The current text that is being accumulated until + # an end_FOO is found, and this includes any C<>, + # F<>, or L<> directives. + my %running_simple_text; # The currentt text that is being accumulated + # until an end_FOO is found, and all directives + # have been expanded into plain text my %command_count; # Number of commands seen my %seen_pod_cmd; # true if have =pod earlier - my %warned_encoding; # true if already have warned about =encoding - # problems + my %skip; # is SKIP set for this pod + my %start_line; # the first input line number in the the thing + # currently being worked on sub DESTROY { my $addr = Scalar::Util::refaddr $_[0]; + delete $CFL_text{$addr}; + delete $C_text{$addr}; delete $command_count{$addr}; delete $current_indent{$addr}; delete $filename{$addr}; delete $in_begin{$addr}; + delete $in_CFL{$addr}; delete $indents{$addr}; + delete $in_for{$addr}; delete $in_NAME{$addr}; + delete $in_X{$addr}; delete $linkable_item{$addr}; delete $linkable_nodes{$addr}; - delete $seen_encoding_cmd{$addr}; + delete $running_CFL_text{$addr}; + delete $running_simple_text{$addr}; delete $seen_pod_cmd{$addr}; delete $skip{$addr}; - delete $warned_encoding{$addr}; + delete $start_line{$addr}; return; } @@ -672,11 +718,11 @@ package My::Pod::Checker { # Extend Pod::Checker $current_indent{$addr} = 0; $filename{$addr} = $filename; $in_begin{$addr} = 0; + $in_X{$addr} = 0; + $in_CFL{$addr} = 0; $in_NAME{$addr} = 0; $linkable_item{$addr} = 0; - $seen_encoding_cmd{$addr} = 0; $seen_pod_cmd{$addr} = 0; - $warned_encoding{$addr} = 0; return $self; } @@ -778,105 +824,173 @@ package My::Pod::Checker { # Extend Pod::Checker #push @{$problems{$self->get_filename}{$message}}, $opts; } - sub check_encoding { # Does it need an =encoding statement? - my ($self, $paragraph, $line_num, $pod_para) = @_; + # In the next subroutines, we keep track of the text of the current + # innermost thing, like F<fooC<bar>baz>. The things we care about raising + # messages about in this program all come from a single sequence of + # characters uninterrupted by other pod commands. Therefore we don't have + # to worry about recursion, and we can just set the string we care about + # to empty on entrance to each command. + + sub handle_text { + # This is called by the parent class to deal with any straight text. + # We mostly just append this to the running current value which will + # be dealt with upon the end of the current construct, like a + # paragraph. But certain things don't contribute to checking the pod + # and are ignored. We also have set flags to indicate this text is + # going towards constructing certain constructs, and handle those + # specially. - # Do nothing if there is an =encoding in the file, or if the line - # doesn't require an =encoding, or have already warned. + my $self = shift; my $addr = Scalar::Util::refaddr $self; - return if $seen_encoding_cmd{$addr} - || $warned_encoding{$addr} - || $paragraph !~ /\P{ASCII}/; - - $warned_encoding{$addr} = 1; - my ($file, $line) = $pod_para->file_line; - $self->poderror({ -line => $line, -file => $file, - -msg => $need_encoding - }); - return; - } - sub verbatim { - my ($self, $paragraph, $line_num, $pod_para) = @_; - $self->check_encoding($paragraph, $line_num, $pod_para); + my $return = $self->SUPER::handle_text(@_); - $self->SUPER::verbatim($paragraph, $line_num, $pod_para); + if ($in_X{$addr} || $in_for{$addr}) { # ignore + return $return; + } - my $addr = Scalar::Util::refaddr $self; + my $text = join "\n", @_; + $running_simple_text{$addr} .= $text; - # Pick up the name, since the parent class doesn't in verbatim - # NAMEs; so treat as non-verbatim. The parent class only allows one - # paragraph in a NAME section, so if there is an extra blank line, it - # will trigger a message, but such a blank line is harmless, so skip - # in that case. - if ($in_NAME{$addr} && $paragraph =~ /\S/) { - $self->textblock($paragraph, $line_num, $pod_para); + # Keep separate tabs on C<>, F<>, and L<> directives, and one + # especially for C<> ones. + if ($in_CFL{$addr}) { + $CFL_text{$addr} .= $text; + $C_text{$addr} .= $text if defined $C_text{$addr}; + } + else { + # This variable is updated instead in the corresponding C, F, or L + # handler. + $running_CFL_text{$addr} .= $text; } - my @lines = split /^/, $paragraph; - for my $i (0 .. @lines - 1) { - if ( my $encoding = $seen_encoding_cmd{$addr} ) { - require Encode; - $lines[$i] = Encode::decode($encoding, $lines[$i]); - } - $lines[$i] =~ s/\s+$//; - my $indent = $self->get_current_indent; - - if ($pedantic) { # TODO: this check should be moved higher - # to avoid more unnecessary work - my $exceeds = length(Text::Tabs::expand($lines[$i])) - + $indent - $MAX_LINE_LENGTH; - next unless $exceeds > 0; - my ($file, $line) = $pod_para->file_line; - $self->poderror({ -line => $line + $i, -file => $file, - -msg => $line_length, - parameter => "+$exceeds (including " . ($indent - $INDENT) . " from =over's)", + # do this line-by-line so we can get the right line number + my @lines = split /^/, $running_simple_text{$addr}; + for my $i (0..$#lines) { + if ($lines[$i] =~ m/\N{REPLACEMENT CHARACTER}/) { + $self->poderror({ -line => $start_line{$addr} + $i, + -msg => $replacement_character, + parameter => "possibly invalid ". $self->encoding . " input at character " . pos $lines[$i], }); } } + return $return; } - sub textblock { - my ($self, $paragraph, $line_num, $pod_para) = @_; - $self->check_encoding($paragraph, $line_num, $pod_para); + # The start_FOO routines check that somehow a C<> construct hasn't escaped + # without being checked, and initialize things, and call the parent + # class's equivalent routine. + + # The end_FOO routines close things off, and check the text that has been + # accumulated for FOO, then call the parent's corresponding routine. - $self->SUPER::textblock($paragraph, $line_num, $pod_para); + sub start_Para { + my $self = shift; + check_see_but_not_link($self); - my ($file, $line) = $pod_para->file_line; my $addr = Scalar::Util::refaddr $self; - if ($in_NAME{$addr}) { - if (! $self->name) { - my $text = $self->interpolate($paragraph, $line_num); - if ($text =~ /^\s*(\S+?)\s*$/) { - $self->name($1); - $self->poderror({ -line => $line, -file => $file, - -msg => $missing_name_description, - parameter => $1}); - } - } + $start_line{$addr} = $_[0]->{start_line}; + $running_CFL_text{$addr} = ""; + $running_simple_text{$addr} = ""; + return $self->SUPER::start_Para(@_); + } + + sub start_item_text { + my $self = shift; + check_see_but_not_link($self); + + my $addr = Scalar::Util::refaddr $self; + $start_line{$addr} = $_[0]->{start_line}; + $running_CFL_text{$addr} = ""; + $running_simple_text{$addr} = ""; + + # This is the only =item that is linkable + $linkable_item{$addr} = 1; + + return $self->SUPER::start_item_text(@_); + } + + sub start_item_number { + my $self = shift; + check_see_but_not_link($self); + + my $addr = Scalar::Util::refaddr $self; + $start_line{$addr} = $_[0]->{start_line}; + $running_CFL_text{$addr} = ""; + $running_simple_text{$addr} = ""; + + return $self->SUPER::start_item_number(@_); + } + + sub start_item_bullet { + my $self = shift; + check_see_but_not_link($self); + + my $addr = Scalar::Util::refaddr $self; + $start_line{$addr} = $_[0]->{start_line}; + $running_CFL_text{$addr} = ""; + $running_simple_text{$addr} = ""; + + return $self->SUPER::start_item_bullet(@_); + } + + sub end_item { # No difference in =item types endings + my $self = shift; + check_see_but_not_link($self); + return $self->SUPER::end_item(@_); + } + + sub start_over { + my $self = shift; + check_see_but_not_link($self); + + my $addr = Scalar::Util::refaddr $self; + $start_line{$addr} = $_[0]->{start_line}; + $running_CFL_text{$addr} = ""; + $running_simple_text{$addr} = ""; + + # Save this indent on a stack, and keep track of total indent + my $indent = $_[0]{'indent'}; + push @{$indents{$addr}}, $indent; + $current_indent{$addr} += $indent; + + return $self->SUPER::start_over(@_); + } + + sub end_over_bullet { shift->end_over(@_) } + sub end_over_number { shift->end_over(@_) } + sub end_over_text { shift->end_over(@_) } + sub end_over_block { shift->end_over(@_) } + sub end_over_empty { shift->end_over(@_) } + sub end_over { + my $self = shift; + check_see_but_not_link($self); + + my $addr = Scalar::Util::refaddr $self; + + # Pop current indent + if (@{$indents{$addr}}) { + $current_indent{$addr} -= pop @{$indents{$addr}}; + } + else { + # =back without corresponding =over, but should have + # warned already + $current_indent{$addr} = 0; } - $paragraph = join " ", split /^/, $paragraph; - - # Matches something that looks like a file name, but is enclosed in - # C<...> - my $C_path_re = qr{ \b ( C< - # exclude various things that have slashes - # in them but aren't paths - (?! - (?: (?: s | qr | m) / ) # regexes - | \d+/\d+> # probable fractions - | OS/2> - | Perl/Tk> - | origin/blead> - | origin/maint - | - # File names don't begin with "-" - ) - [-\w]+ (?: / [-\w]+ )+ (?: \. \w+ )? > ) - }x; - - # If looks like a reference to other documentation by containing the - # word 'See' and then a likely pod directive, warn. - while ($paragraph =~ m{ + } + + sub check_see_but_not_link { + + # Looks through accumulated text for current element that includes the + # C<>, F<>, and L<> directives for ones that look like they are + # C<link> instead of L<link>. + + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + return unless defined $running_CFL_text{$addr}; + + while ($running_CFL_text{$addr} =~ m{ ( (?: \w+ \s+ )* ) # The phrase before, if any \b [Ss]ee \s+ ( ( [^L] ) @@ -885,7 +999,8 @@ package My::Pod::Checker { # Extend Pod::Checker > ) ( \s+ (?: under | in ) \s+ L< )? - }xg) { + }xg) + { my $prefix = $1 // ""; my $construct = $2; # The whole thing, like C<...> my $type = $3; @@ -902,25 +1017,13 @@ package My::Pod::Checker { # Extend Pod::Checker # construct would be if it actually has L<> syntax. If it # doesn't have that syntax, will set the module to the entire # interior. - $interior =~ m/ ^ - (?: [^|]+ \| )? # Optional arbitrary text ending - # in "|" - ( .+? ) # module, etc. name - (?: \/ .+ )? # target within module - $ - /xs; - my $module = $1; if (! defined $trailing # not referring to something in another # section && $interior !~ /$non_pods/ - # C<> that look like files have their own message below, so - # exclude them - && $construct !~ /$C_path_re/g - # There can't be spaces (I think) in module names or man # pages - && $module !~ / \s /x + && $interior !~ / \s /x # F<> that end in eg \.pl are almost certainly ok, as are # those that look like a path with multiple "/" chars @@ -931,139 +1034,266 @@ package My::Pod::Checker { # Extend Pod::Checker ) ) { # TODO: move the checking of $pedantic higher up - $self->poderror({ -line => $line, -file => $file, + $self->poderror({ -line => $start_line{$addr}, -msg => $C_not_linked, parameter => $construct - }) if $pedantic; + }); } } } - while ($paragraph =~ m/$C_path_re/g) { - my $construct = $1; - # TODO: move the checking of $pedantic higher up - $self->poderror({ -line => $line, -file => $file, - -msg => $C_with_slash, - parameter => $construct - }) if $pedantic; - } - return; + + undef $running_CFL_text{$addr}; } - sub command { - my ($self, $cmd, $paragraph, $line_num, $pod_para) = @_; + sub end_Para { + my $self = shift; + check_see_but_not_link($self); + my $addr = Scalar::Util::refaddr $self; - if ($cmd eq "pod") { - $seen_pod_cmd{$addr}++; - } - elsif ($cmd eq "encoding") { - my ($file, $line) = $pod_para->file_line; - $seen_encoding_cmd{$addr} = $paragraph; # for later decoding - if ($command_count{$addr} != 1 && $seen_pod_cmd{$addr}) { - $self->poderror({ -line => $line, -file => $file, - -msg => $encoding_first - }); + if ($in_NAME{$addr}) { + if ($running_simple_text{$addr} =~ /^\s*(\S+?)\s*$/) { + $self->poderror({ -line => $start_line{$addr}, + -msg => $missing_name_description, + parameter => $1}); } + $in_NAME{$addr} = 0; } - $self->check_encoding($paragraph, $line_num, $pod_para); - - # Pod::Check treats all =items as linkable, but the bullet and - # numbered lists really aren't. So keep our own list. This has to be - # processed before SUPER is called so that the list is started before - # the rest of it gets parsed. - if ($cmd eq 'item') { # Not linkable if item begins with * or a digit - $linkable_item{$addr} = ($paragraph !~ / ^ \s* - (?: [*] - | \d+ \.? (?: \$ | \s+ ) - )/x) - ? 1 - : 0; + $self->SUPER::end_Para(@_); + } + + sub start_head1 { + my $self = shift; + check_see_but_not_link($self); + my $addr = Scalar::Util::refaddr $self; + $start_line{$addr} = $_[0]->{start_line}; + $running_CFL_text{$addr} = ""; + $running_simple_text{$addr} = ""; + + return $self->SUPER::start_head1(@_); + } + + sub end_head1 { # This is called at the end of the =head line. + my $self = shift; + check_see_but_not_link($self); + + my $addr = Scalar::Util::refaddr $self; + + $in_NAME{$addr} = 1 if $running_simple_text{$addr} eq 'NAME'; + return $self->SUPER::end_head(@_); + } + + sub start_Verbatim { + my $self = shift; + check_see_but_not_link($self); + + my $addr = Scalar::Util::refaddr $self; + $running_simple_text{$addr} = ""; + $start_line{$addr} = $_[0]->{start_line}; + return $self->SUPER::start_Verbatim(@_); + } + + sub end_Verbatim { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + # Pick up the name if it looks like one, since the parent class + # doesn't handle verbatim NAMEs + if ($in_NAME{$addr} + && $running_simple_text{$addr} =~ /^\s*(\S+?)\s*[,-]/) + { + $self->name($1); } - $self->SUPER::command($cmd, $paragraph, $line_num, $pod_para); - - $command_count{$addr}++; - - $in_NAME{$addr} = 0; # Will change to 1 below if necessary - $in_begin{$addr} = 0; # ibid - if ($cmd eq 'over') { - my $text = $self->interpolate($paragraph, $line_num); - my $indent = 4; # default - $indent = $1 if $text && $text =~ /^\s*(\d+)\s*$/; - push @{$indents{$addr}}, $indent; - $current_indent{$addr} += $indent; + + my $indent = $self->get_current_indent; + + # Look at each line to verify it is short enough + my @lines = split /^/, $running_simple_text{$addr}; + for my $i (0 .. @lines - 1) { + $lines[$i] =~ s/\s+$//; + my $exceeds = length(Text::Tabs::expand($lines[$i])) + + $indent - $MAX_LINE_LENGTH; + next unless $exceeds > 0; + + $self->poderror({ -line => $start_line{$addr} + $i, + -msg => $line_length, + parameter => "+$exceeds (including " . ($indent - $INDENT) . " from =over's)", + }); } - elsif ($cmd eq 'back') { - if (@{$indents{$addr}}) { - $current_indent{$addr} -= pop @{$indents{$addr}}; + + undef $running_simple_text{$addr}; + + # Parent class didn't bother to define this + #return $self->SUPER::SUPER::end_Verbatim(@_); + } + + sub start_C { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + $C_text{$addr} = ""; + + # If not in a stacked set of C<>, F<> and L<>, initialize the text for + # them. + $CFL_text{$addr} = "" if ! $in_CFL{$addr}; + $in_CFL{$addr}++; + + return $self->SUPER::start_C(@_); + } + + sub start_F { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + $CFL_text{$addr} = "" if ! $in_CFL{$addr}; + $in_CFL{$addr}++; + return $self->SUPER::start_F(@_); + } + + sub start_L { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + $CFL_text{$addr} = "" if ! $in_CFL{$addr}; + $in_CFL{$addr}++; + return $self->SUPER::start_L(@_); + } + + sub end_C { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + # Warn if looks like a file or link enclosed instead by this C<> + if ($C_text{$addr} =~ qr/^ $C_path_re $/x) { + # Here it does look like it could be be a file path or a link. + # But some varieties of regex patterns could also fit with what we + # have so far. Weed those out as best we can. '/foo/' is almost + # certainly meant to be a pattern, as is '/foo/g'. + my $is_pattern; + if ($C_text{$addr} !~ qr| ^ / [^/]* / ( [msixpodualngcr]* ) $ |x) { + $is_pattern = 0; } else { - # =back without corresponding =over, but should have - # warned already - $current_indent{$addr} = 0; - } - } - elsif ($cmd =~ /^head/) { - if (! $in_begin{$addr}) { - # If a particular formatter, then this command doesn't really - # apply - $current_indent{$addr} = 0; - undef @{$indents{$addr}}; + # Here, it looks like a pattern potentially followed by some + # modifiers. To make doubly sure, don't count as patterns + # those constructs which have more occurrences (generally 1) + # of a modifier than is legal. + my %counts; + map { $counts{$_}++ } split "", $1; + foreach my $modifier (keys %counts) { + if ($counts{$modifier} > (($modifier eq 'a') + ? 2 + : 1)) + { + $is_pattern = 0; + last; + } + } + $is_pattern = 1 unless defined $is_pattern; } - my $text = $self->interpolate($paragraph, $line_num); - $in_NAME{$addr} = 1 if $cmd eq 'head1' - && $text && $text =~ /^NAME\b/; - } - elsif ($cmd eq 'begin') { - $in_begin{$addr} = 1; + unless ($is_pattern) { + $self->poderror({ -line => $start_line{$addr}, + -msg => $C_with_slash, + parameter => "C<$C_text{$addr}>" + }); + } } + undef $C_text{$addr}; + + # Add the current text to the running total. This was not done in + # handle_text(), because it just sees the plain text of the innermost + # stacked directive. We want to keep all the directive names + # enclosing the text. Otherwise the fact that C<L<foobar>> is to a + # link would be lost, as the L<> would be gone. + $CFL_text{$addr} = "C<$CFL_text{$addr}>"; + + # Add this text to the the whole running total only if popping this + # directive off the stack leaves it empty. As long as something is on + # the stack, it gets added to $CFL_text (just above). It is only + # entirely constructed when the stack is empty. + $in_CFL{$addr}--; + $running_CFL_text{$addr} .= $CFL_text{$addr} if ! $in_CFL{$addr}; + + return $self->SUPER::end_C(@_); + } - return; + sub end_F { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + $CFL_text{$addr} = "F<$CFL_text{$addr}>"; + $in_CFL{$addr}--; + $running_CFL_text{$addr} .= $CFL_text{$addr} if ! $in_CFL{$addr}; + return $self->SUPER::end_F(@_); } - sub hyperlink { + sub end_L { my $self = shift; + my $addr = Scalar::Util::refaddr $self; - my $page; - if ($_[0] && ($page = $_[0][1]{'-page'})) { - my $node = $_[0][1]{'-node'}; - - if ($node) { - $_[0][1]{'-node'} = $node = do { - my $expand_seq = sub { - my (undef, $seq) = @_; - my $arg = join '', $seq->parse_tree->children; - if ($seq->name eq 'E') { - $arg = - $arg eq 'sol' ? '/' : - $arg eq 'verbar' ? '|' : - $arg eq 'lt' ? '<' : - $arg eq 'gt' ? '>' : - die "Not implemented: E<$arg>"; - } - return $arg; - }; - my $ptree = $self->parse_text({ -expand_seq => $expand_seq }, $node, $_[0][0]); - join '', $ptree->children - }; - - # If the hyperlink is to an interior node of another page, save it - # so that we can see if we need to parse normally skipped files. - $has_referred_to_node{$page} = 1; - } + $CFL_text{$addr} = "L<$CFL_text{$addr}>"; + $in_CFL{$addr}--; + $running_CFL_text{$addr} .= $CFL_text{$addr} if ! $in_CFL{$addr}; + return $self->SUPER::end_L(@_); + } + + sub start_X { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + $in_X{$addr} = 1; + return $self->SUPER::start_X(@_); + } + + sub end_X { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + $in_X{$addr} = 0; + return $self->SUPER::end_X(@_); + } + + sub start_for { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + $in_for{$addr} = 1; + return $self->SUPER::start_for(@_); + } + + sub end_for { + my $self = shift; + my $addr = Scalar::Util::refaddr $self; + + $in_for{$addr} = 0; + return $self->SUPER::end_for(@_); + } + + sub hyperlink { + my ($self, $link) = @_; + + if ($link && $link->type eq 'pod') { + my $page = $link->page; + my $node = $link->node; + + # If the hyperlink is to an interior node of another page, save it + # so that we can see if we need to parse normally skipped files. + $has_referred_to_node{$page} = 1 if $node; # Ignore certain placeholder links in perldelta. Check if the # link is page-level, and also check if to a node within the page - if ($self->name && $self->name eq "perldelta" - && ((grep { $page eq $_ } @perldelta_ignore_links) - || ($node + if ( $self->name && $self->name eq "perldelta" + && (( grep { $page eq $_ } @perldelta_ignore_links) + || ( $node && (grep { "$page/$node" eq $_ } @perldelta_ignore_links) ))) { return; } } - return $self->SUPER::hyperlink($_[0]); + + return $self->SUPER::hyperlink($link); } sub node { @@ -1117,7 +1347,7 @@ package My::Pod::Checker { # Extend Pod::Checker # ignores 2nd param, which is output file. Always uses undef if (open my $in_fh, '<:bytes', $filename) { - $self->SUPER::parse_from_filehandle($in_fh, undef); + $self->SUPER::parse_from_file($in_fh, undef); close $in_fh; return 1; } @@ -1323,6 +1553,7 @@ sub my_safer_print { # print, with error checking for outputting to db sub extract_pod { # Extracts just the pod from a file; returns undef if file # doesn't exist my $filename = shift; + use Pod::Parser; my @pod; @@ -1764,21 +1995,24 @@ foreach my $filename (@files) { if (! $has_input_files) { foreach my $filename (@files) { next if $filename_to_checker{$filename}->get_skip; + my $checker = $filename_to_checker{$filename}; - foreach my $link ($checker->hyperlink) { - my $linked_to_page = $link->[1]->page; + foreach my $link ($checker->hyperlinks()) { + my $linked_to_page = $link->page; next unless $linked_to_page; # intra-file checks are handled by std # Pod::Checker + # Currently, we assume all external links are valid + next if $link->type eq 'url'; # Initialize the potential message. my %problem = ( -msg => $broken_link, - -line => $link->[0], + -line => $link->line, parameter => "to \"$linked_to_page\"", ); # See if we have found the linked-to_file in our parse if (exists $nodes{$linked_to_page}) { - my $node = $link->[1]->node; + my $node = $link->node; # If link is only to the page-level, already have it next if ! $node; @@ -1802,7 +2036,7 @@ if (! $has_input_files) { } } # Linked-to-file not in parse; maybe is in exception list - elsif (! exists $valid_modules{$link->[1]->page}) { + elsif (! exists $valid_modules{$link->page}) { # Here, is a link to a target that we can't find. Check if # there is an internal link on the page with the target name. @@ -1887,7 +2121,8 @@ foreach my $filename (@files) { $diagnostic .= " " if $problem_count == 1; $diagnostic .= "\n$indent$indent"; $diagnostic .= "$problem->{parameter}" if $problem->{parameter}; - $diagnostic .= " near line $problem->{-line}"; + $diagnostic .= " near line $problem->{-line} of " + . $filename; $diagnostic .= " $problem->{comment}" if $problem->{comment}; } $diagnostic .= "\n"; @@ -1925,7 +2160,7 @@ foreach my $filename (@files) { } ok(@diagnostics == $thankful_diagnostics, $output); if (@diagnostics) { - note(join "", @diagnostics, + diag(join "", @diagnostics, "See end of this test output for your options on silencing this"); } @@ -1957,7 +2192,7 @@ if (%files_with_unknown_issues) { : "were $were_count_files files"; my $message = <<EOF; -HOW TO GET THIS .t TO PASS +HOW TO GET ${\__FILE__} TO PASS There $were_count_files that had new potential problems identified. Some of them may be real, and some of them may be false positives because @@ -1996,9 +2231,9 @@ EOF and change the count of known potential problems to -1. EOF - note($message); + diag($message); } elsif (%files_with_fixes) { - note(<<EOF + diag(<<EOF To teach this test script that the potential problems have been fixed, $how_to EOF @@ -2009,3 +2244,5 @@ if ($regen) { chdir $original_dir || die "Can't change directories to $original_dir"; close_and_rename($copy_fh); } + +1; diff --git a/gnu/usr.bin/perl/t/porting/readme.t b/gnu/usr.bin/perl/t/porting/readme.t index e127920b907..232a45fc18e 100644 --- a/gnu/usr.bin/perl/t/porting/readme.t +++ b/gnu/usr.bin/perl/t/porting/readme.t @@ -10,7 +10,7 @@ BEGIN { use TestInit qw(T); # T is chdir to the top level use strict; use warnings; -require 't/test.pl'; +require './t/test.pl'; my @porting_files; open my $man, "MANIFEST" or die "Can't open MANIFEST: $!"; diff --git a/gnu/usr.bin/perl/t/porting/regen.t b/gnu/usr.bin/perl/t/porting/regen.t index 5d085181cea..762e7407840 100644 --- a/gnu/usr.bin/perl/t/porting/regen.t +++ b/gnu/usr.bin/perl/t/porting/regen.t @@ -8,8 +8,8 @@ BEGIN { use TestInit qw(T A); # T is chdir to the top level, A makes paths absolute use strict; -require 'regen/regen_lib.pl'; -require 't/test.pl'; +require './regen/regen_lib.pl'; +require './t/test.pl'; $::NO_ENDING = $::NO_ENDING = 1; if ( $^O eq "VMS" ) { @@ -26,7 +26,7 @@ if ( $Config{usecrosscompile} ) { skip_all( "Not all files are available during cross-compilation" ); } -my $tests = 26; # I can't see a clean way to calculate this automatically. +my $tests = 27; # 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)], @@ -35,6 +35,19 @@ my %skip = ("regen_perly.pl" => [qw(perly.act perly.h perly.tab)], "regen/regcharclass.pl" => [qw(regcharclass.h)], ); +my %other_requirement = ( + "regen_perly.pl" => "requires bison", + "regen/keywords.pl" => "requires Devel::Tokenizer::C", + "regen/mk_invlists.pl" => "needs the Perl you've just built", + "regen/regcharclass.pl" => "needs the Perl you've just built", +); + +my %skippable_script_for_target; +for my $script (keys %other_requirement) { + $skippable_script_for_target{$_} = $script + for @{ $skip{$script} }; +} + my @files = map {@$_} sort values %skip; open my $fh, '<', 'regen.pl' @@ -49,6 +62,7 @@ die "Can't find __END__ in regen.pl" foreach (qw(embed_lib.pl regen_lib.pl uconfig_h.pl regcharclass_multi_char_folds.pl charset_translations.pl + mph.pl ), map {chomp $_; $_} <$fh>) { ++$skip{"regen/$_"}; @@ -83,10 +97,15 @@ OUTER: foreach my $file (@files) { push @bad, $2 unless $digest eq $1; } is("@bad", '', "generated $file is up to date"); + if (@bad && (my $skippable_script = $skippable_script_for_target{$file})) { + my $reason = delete $other_requirement{$skippable_script}; + diag("Note: $skippable_script must be run manually, because it $reason") + if $reason; + } } foreach (@progs) { - my $command = "$^X $_ --tap"; + my $command = "$^X -I. $_ --tap"; system $command and die "Failed to run $command: $?"; } diff --git a/gnu/usr.bin/perl/t/porting/utils.t b/gnu/usr.bin/perl/t/porting/utils.t index 475380d4169..92eafbd3b9a 100644 --- a/gnu/usr.bin/perl/t/porting/utils.t +++ b/gnu/usr.bin/perl/t/porting/utils.t @@ -22,7 +22,7 @@ BEGIN { use TestInit qw(T); # T is chdir to the top level use strict; -require 't/test.pl'; +require './t/test.pl'; # It turns out that, since the default @INC will include your old 5.x libs, if # you have them, the Porting utils might load a library that no longer compiles |