From c5add2ea5067382269ae6f19e345fda0b9a7bd21 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 20 Nov 2012 18:08:54 +0000 Subject: perl 5.16.2, compiled without optimization for Windows (from siep) git-svn-id: svn://tug.org/texlive/trunk@28315 c570f23f-e606-0410-a88d-b1316a301751 --- Master/tlpkg/tlperl/lib/.packlist | 4279 +- Master/tlpkg/tlperl/lib/AnyDBM_File.pm | 9 +- Master/tlpkg/tlperl/lib/App/Cpan.pm | 302 +- Master/tlpkg/tlperl/lib/Archive/Extract.pm | 281 +- Master/tlpkg/tlperl/lib/Archive/Tar.pm | 84 +- Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm | 16 +- Master/tlpkg/tlperl/lib/Archive/Tar/File.pm | 115 +- Master/tlpkg/tlperl/lib/Attribute/Handlers.pm | 501 +- Master/tlpkg/tlperl/lib/AutoLoader.pm | 8 +- Master/tlpkg/tlperl/lib/B.pm | 107 +- Master/tlpkg/tlperl/lib/B/Concise.pm | 38 +- Master/tlpkg/tlperl/lib/B/Debug.pm | 4 +- Master/tlpkg/tlperl/lib/B/Deparse.pm | 803 +- Master/tlpkg/tlperl/lib/B/Lint.pm | 2 +- Master/tlpkg/tlperl/lib/B/Lint/Debug.pm | 17 +- Master/tlpkg/tlperl/lib/B/Terse.pm | 12 +- Master/tlpkg/tlperl/lib/B/Xref.pm | 52 +- Master/tlpkg/tlperl/lib/Benchmark.pm | 4 +- Master/tlpkg/tlperl/lib/CGI.pm | 101 +- Master/tlpkg/tlperl/lib/CGI/Fast.pm | 30 +- Master/tlpkg/tlperl/lib/CGI/Util.pm | 88 +- Master/tlpkg/tlperl/lib/CORE.pod | 30 +- Master/tlpkg/tlperl/lib/CORE/XSUB.h | 42 +- Master/tlpkg/tlperl/lib/CORE/av.h | 2 + Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h | 533 + Master/tlpkg/tlperl/lib/CORE/config.h | 2402 +- Master/tlpkg/tlperl/lib/CORE/cop.h | 80 +- Master/tlpkg/tlperl/lib/CORE/cv.h | 45 +- Master/tlpkg/tlperl/lib/CORE/dosish.h | 9 +- Master/tlpkg/tlperl/lib/CORE/embed.h | 208 +- Master/tlpkg/tlperl/lib/CORE/embedvar.h | 467 +- Master/tlpkg/tlperl/lib/CORE/feature.h | 127 + Master/tlpkg/tlperl/lib/CORE/form.h | 38 +- Master/tlpkg/tlperl/lib/CORE/gv.h | 36 +- Master/tlpkg/tlperl/lib/CORE/handy.h | 231 +- Master/tlpkg/tlperl/lib/CORE/hv.h | 62 +- Master/tlpkg/tlperl/lib/CORE/intrpvar.h | 778 +- Master/tlpkg/tlperl/lib/CORE/keywords.h | 499 +- Master/tlpkg/tlperl/lib/CORE/l1_char_class_tab.h | 238 +- Master/tlpkg/tlperl/lib/CORE/libperl514.a | Bin 882018 -> 0 bytes Master/tlpkg/tlperl/lib/CORE/libperl516.a | Bin 0 -> 910066 bytes Master/tlpkg/tlperl/lib/CORE/metaconfig.h | 22 +- Master/tlpkg/tlperl/lib/CORE/mg.h | 2 + Master/tlpkg/tlperl/lib/CORE/mg_data.h | 299 + Master/tlpkg/tlperl/lib/CORE/mg_raw.h | 92 + Master/tlpkg/tlperl/lib/CORE/mg_vtable.h | 235 + Master/tlpkg/tlperl/lib/CORE/mydtrace.h | 35 +- Master/tlpkg/tlperl/lib/CORE/op.h | 130 +- Master/tlpkg/tlperl/lib/CORE/op_reg_common.h | 8 +- Master/tlpkg/tlperl/lib/CORE/opcode.h | 81 +- Master/tlpkg/tlperl/lib/CORE/opnames.h | 687 +- Master/tlpkg/tlperl/lib/CORE/pad.h | 64 +- Master/tlpkg/tlperl/lib/CORE/parser.h | 16 +- Master/tlpkg/tlperl/lib/CORE/patchlevel.h | 4 +- Master/tlpkg/tlperl/lib/CORE/perl.h | 911 +- Master/tlpkg/tlperl/lib/CORE/perlapi.h | 52 +- Master/tlpkg/tlperl/lib/CORE/perlhost.h | 28 +- Master/tlpkg/tlperl/lib/CORE/perliol.h | 14 - Master/tlpkg/tlperl/lib/CORE/perlvars.h | 211 +- Master/tlpkg/tlperl/lib/CORE/perly.h | 268 +- Master/tlpkg/tlperl/lib/CORE/pp.h | 36 +- Master/tlpkg/tlperl/lib/CORE/pp_proto.h | 5 +- Master/tlpkg/tlperl/lib/CORE/proto.h | 847 +- Master/tlpkg/tlperl/lib/CORE/regcharclass.h | 4 +- Master/tlpkg/tlperl/lib/CORE/regcomp.h | 6 +- Master/tlpkg/tlperl/lib/CORE/regexp.h | 19 +- Master/tlpkg/tlperl/lib/CORE/regnodes.h | 265 +- Master/tlpkg/tlperl/lib/CORE/scope.h | 9 +- Master/tlpkg/tlperl/lib/CORE/sv.h | 311 +- Master/tlpkg/tlperl/lib/CORE/sys/socket.h | 101 + Master/tlpkg/tlperl/lib/CORE/uconfig.h | 2430 +- Master/tlpkg/tlperl/lib/CORE/unixish.h | 3 +- Master/tlpkg/tlperl/lib/CORE/utf8.h | 149 +- Master/tlpkg/tlperl/lib/CORE/utfebcdic.h | 11 +- Master/tlpkg/tlperl/lib/CORE/win32.h | 32 - Master/tlpkg/tlperl/lib/CORE/win32iop-o.h | 9 - Master/tlpkg/tlperl/lib/CORE/win32iop.h | 10 +- Master/tlpkg/tlperl/lib/CORE/win32thread.h | 15 +- Master/tlpkg/tlperl/lib/CPAN.pm | 84 +- Master/tlpkg/tlperl/lib/CPAN/CacheMgr.pm | 1 + Master/tlpkg/tlperl/lib/CPAN/Distribution.pm | 94 +- Master/tlpkg/tlperl/lib/CPAN/Distroprefs.pm | 8 +- .../lib/CPAN/Exception/yaml_not_installed.pm | 50 - .../lib/CPAN/Exception/yaml_process_error.pm | 53 + Master/tlpkg/tlperl/lib/CPAN/FTP.pm | 12 +- Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm | 48 +- Master/tlpkg/tlperl/lib/CPAN/HTTP/Client.pm | 6 +- Master/tlpkg/tlperl/lib/CPAN/HandleConfig.pm | 22 +- Master/tlpkg/tlperl/lib/CPAN/Index.pm | 12 +- Master/tlpkg/tlperl/lib/CPAN/Meta.pm | 50 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Converter.pm | 118 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Feature.pm | 9 +- Master/tlpkg/tlperl/lib/CPAN/Meta/History.pm | 12 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Prereqs.pm | 27 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Requirements.pm | 680 + Master/tlpkg/tlperl/lib/CPAN/Meta/Spec.pm | 44 +- Master/tlpkg/tlperl/lib/CPAN/Meta/Validator.pm | 105 +- Master/tlpkg/tlperl/lib/CPAN/Meta/YAML.pm | 62 +- Master/tlpkg/tlperl/lib/CPAN/Mirrors.pm | 439 +- Master/tlpkg/tlperl/lib/CPAN/Shell.pm | 9 +- Master/tlpkg/tlperl/lib/CPANPLUS.pm | 38 +- Master/tlpkg/tlperl/lib/CPANPLUS/Backend.pm | 148 +- Master/tlpkg/tlperl/lib/CPANPLUS/Backend/RV.pm | 8 +- Master/tlpkg/tlperl/lib/CPANPLUS/Config.pm | 160 +- Master/tlpkg/tlperl/lib/CPANPLUS/Configure.pm | 140 +- .../tlpkg/tlperl/lib/CPANPLUS/Configure/Setup.pm | 184 +- Master/tlpkg/tlperl/lib/CPANPLUS/Dist.pm | 20 +- .../tlpkg/tlperl/lib/CPANPLUS/Dist/Autobundle.pm | 36 +- Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Base.pm | 74 +- Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Build.pm | 132 +- .../tlperl/lib/CPANPLUS/Dist/Build/Constants.pm | 19 +- Master/tlpkg/tlperl/lib/CPANPLUS/Dist/MM.pm | 506 +- Master/tlpkg/tlperl/lib/CPANPLUS/Error.pm | 13 +- Master/tlpkg/tlperl/lib/CPANPLUS/FAQ.pod | 8 +- Master/tlpkg/tlperl/lib/CPANPLUS/Hacking.pod | 10 +- Master/tlpkg/tlperl/lib/CPANPLUS/Internals.pm | 66 +- .../tlperl/lib/CPANPLUS/Internals/Constants.pm | 165 +- .../lib/CPANPLUS/Internals/Constants/Report.pm | 89 +- .../tlpkg/tlperl/lib/CPANPLUS/Internals/Extract.pm | 82 +- .../tlpkg/tlperl/lib/CPANPLUS/Internals/Fetch.pm | 122 +- .../tlpkg/tlperl/lib/CPANPLUS/Internals/Report.pm | 36 +- .../tlpkg/tlperl/lib/CPANPLUS/Internals/Search.pm | 22 +- .../tlpkg/tlperl/lib/CPANPLUS/Internals/Source.pm | 346 +- .../tlperl/lib/CPANPLUS/Internals/Source/Memory.pm | 66 +- .../tlperl/lib/CPANPLUS/Internals/Source/SQLite.pm | 122 +- .../lib/CPANPLUS/Internals/Source/SQLite/Tie.pm | 32 +- .../tlpkg/tlperl/lib/CPANPLUS/Internals/Utils.pm | 162 +- Master/tlpkg/tlperl/lib/CPANPLUS/Module.pm | 227 +- Master/tlpkg/tlperl/lib/CPANPLUS/Module/Author.pm | 4 +- .../tlperl/lib/CPANPLUS/Module/Author/Fake.pm | 4 +- .../tlpkg/tlperl/lib/CPANPLUS/Module/Checksums.pm | 6 +- Master/tlpkg/tlperl/lib/CPANPLUS/Module/Fake.pm | 26 +- Master/tlpkg/tlperl/lib/CPANPLUS/Selfupdate.pm | 172 +- Master/tlpkg/tlperl/lib/CPANPLUS/Shell.pm | 20 +- Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Classic.pm | 4 +- Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default.pm | 333 +- .../CPANPLUS/Shell/Default/Plugins/CustomSource.pm | 76 +- .../lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod | 28 +- .../lib/CPANPLUS/Shell/Default/Plugins/Remote.pm | 20 +- .../lib/CPANPLUS/Shell/Default/Plugins/Source.pm | 22 +- Master/tlpkg/tlperl/lib/Carp.pm | 111 +- Master/tlpkg/tlperl/lib/Carp/Heavy.pm | 11 +- Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm | 33 +- Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm | 187 +- Master/tlpkg/tlperl/lib/Compress/Zlib.pm | 28 +- Master/tlpkg/tlperl/lib/Config.pm | 8 +- Master/tlpkg/tlperl/lib/Config.pm.orig | 20 +- Master/tlpkg/tlperl/lib/Config.pod | 74 +- Master/tlpkg/tlperl/lib/Config_heavy.pl | 47 +- Master/tlpkg/tlperl/lib/Config_heavy.pl.orig | 129 +- Master/tlpkg/tlperl/lib/Cwd.pm | 27 +- Master/tlpkg/tlperl/lib/DB.pm | 4 +- Master/tlpkg/tlperl/lib/Data/Dumper.pm | 103 +- Master/tlpkg/tlperl/lib/Devel/DProf.pm | 247 - Master/tlpkg/tlperl/lib/Devel/DProf/V.pm | 63 - Master/tlpkg/tlperl/lib/Devel/DProf/test1_t | 18 - Master/tlpkg/tlperl/lib/Devel/DProf/test1_v | 24 - Master/tlpkg/tlperl/lib/Devel/DProf/test2_t | 21 - Master/tlpkg/tlperl/lib/Devel/DProf/test2_v | 36 - Master/tlpkg/tlperl/lib/Devel/DProf/test3_t | 19 - Master/tlpkg/tlperl/lib/Devel/DProf/test3_v | 29 - Master/tlpkg/tlperl/lib/Devel/DProf/test4_t | 24 - Master/tlpkg/tlperl/lib/Devel/DProf/test4_v | 36 - Master/tlpkg/tlperl/lib/Devel/DProf/test5_t | 25 - Master/tlpkg/tlperl/lib/Devel/DProf/test5_v | 15 - Master/tlpkg/tlperl/lib/Devel/DProf/test6_t | 29 - Master/tlpkg/tlperl/lib/Devel/DProf/test6_v | 16 - Master/tlpkg/tlperl/lib/Devel/DProf/test7_t | 9 - Master/tlpkg/tlperl/lib/Devel/DProf/test7_v | 10 - Master/tlpkg/tlperl/lib/Devel/DProf/test8_t | 15 - Master/tlpkg/tlperl/lib/Devel/DProf/test8_v | 11 - Master/tlpkg/tlperl/lib/Devel/InnerPackage.pm | 6 +- Master/tlpkg/tlperl/lib/Devel/PPPort.pm | 731 +- Master/tlpkg/tlperl/lib/Devel/Peek.pm | 9 +- Master/tlpkg/tlperl/lib/Digest.pm | 35 +- Master/tlpkg/tlperl/lib/Digest/SHA.pm | 58 +- Master/tlpkg/tlperl/lib/Dumpvalue.pm | 6 +- Master/tlpkg/tlperl/lib/DynaLoader.pm | 2 +- Master/tlpkg/tlperl/lib/Encode.pm | 531 +- Master/tlpkg/tlperl/lib/Encode/Alias.pm | 6 +- Master/tlpkg/tlperl/lib/Encode/Encoder.pm | 6 +- Master/tlpkg/tlperl/lib/Encode/Guess.pm | 4 +- Master/tlpkg/tlperl/lib/English.pm | 4 +- Master/tlpkg/tlperl/lib/Env.pm | 2 +- Master/tlpkg/tlperl/lib/Errno.pm | 2 +- Master/tlpkg/tlperl/lib/Exporter.pm | 3 +- Master/tlpkg/tlperl/lib/ExtUtils/CBuilder.pm | 15 +- Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Base.pm | 10 +- .../tlperl/lib/ExtUtils/CBuilder/Platform/Unix.pm | 2 +- .../tlperl/lib/ExtUtils/CBuilder/Platform/VMS.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/Windows.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm | 2 +- .../tlperl/lib/ExtUtils/CBuilder/Platform/aix.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/cygwin.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/darwin.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/dec_osf.pm | 2 +- .../tlperl/lib/ExtUtils/CBuilder/Platform/os2.pm | 6 +- Master/tlpkg/tlperl/lib/ExtUtils/Command/MM.pm | 4 +- Master/tlpkg/tlperl/lib/ExtUtils/Install.pm | 8 +- Master/tlpkg/tlperl/lib/ExtUtils/Installed.pm | 21 +- Master/tlpkg/tlperl/lib/ExtUtils/Liblist.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/Liblist/Kid.pm | 994 +- Master/tlpkg/tlperl/lib/ExtUtils/MM.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_AIX.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Any.pm | 447 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_BeOS.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Cygwin.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_DOS.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Darwin.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_MacOS.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_NW5.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_OS2.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_QNX.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_UWIN.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Unix.pm | 40 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_VMS.pm | 91 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_VOS.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Win32.pm | 125 +- Master/tlpkg/tlperl/lib/ExtUtils/MM_Win95.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MY.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker.pm | 132 +- .../tlpkg/tlperl/lib/ExtUtils/MakeMaker/Config.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/FAQ.pod | 2 +- .../tlperl/lib/ExtUtils/MakeMaker/Tutorial.pod | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/YAML.pm | 658 - Master/tlpkg/tlperl/lib/ExtUtils/Manifest.pm | 35 +- Master/tlpkg/tlperl/lib/ExtUtils/Miniperl.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/Mkbootstrap.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/Mksymlists.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/Packlist.pm | 7 +- Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pm | 2913 +- Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pod | 161 + .../tlpkg/tlperl/lib/ExtUtils/ParseXS/Constants.pm | 42 + .../tlperl/lib/ExtUtils/ParseXS/CountLines.pm | 54 + .../tlpkg/tlperl/lib/ExtUtils/ParseXS/Utilities.pm | 924 + Master/tlpkg/tlperl/lib/ExtUtils/Typemaps.pm | 1031 + Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Cmd.pm | 168 + .../tlpkg/tlperl/lib/ExtUtils/Typemaps/InputMap.pm | 116 + .../tlperl/lib/ExtUtils/Typemaps/OutputMap.pm | 195 + Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Type.pm | 121 + Master/tlpkg/tlperl/lib/ExtUtils/testlib.pm | 2 +- Master/tlpkg/tlperl/lib/ExtUtils/typemap | 75 +- Master/tlpkg/tlperl/lib/ExtUtils/xsubpp | 29 +- Master/tlpkg/tlperl/lib/Fatal.pm | 3 +- Master/tlpkg/tlperl/lib/File/Basename.pm | 6 +- Master/tlpkg/tlperl/lib/File/Copy.pm | 4 +- Master/tlpkg/tlperl/lib/File/DosGlob.pm | 52 +- Master/tlpkg/tlperl/lib/File/Find.pm | 4 +- Master/tlpkg/tlperl/lib/File/Glob.pm | 166 +- Master/tlpkg/tlperl/lib/File/Spec.pm | 10 +- Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm | 4 +- Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm | 4 +- Master/tlpkg/tlperl/lib/File/Spec/Functions.pm | 4 +- Master/tlpkg/tlperl/lib/File/Spec/Mac.pm | 27 +- Master/tlpkg/tlperl/lib/File/Spec/OS2.pm | 4 +- Master/tlpkg/tlperl/lib/File/Spec/Unix.pm | 12 +- Master/tlpkg/tlperl/lib/File/Spec/VMS.pm | 643 +- Master/tlpkg/tlperl/lib/File/Spec/Win32.pm | 9 +- Master/tlpkg/tlperl/lib/Filter/Simple.pm | 25 +- Master/tlpkg/tlperl/lib/Filter/Util/Call.pm | 7 +- Master/tlpkg/tlperl/lib/FindBin.pm | 41 +- Master/tlpkg/tlperl/lib/Getopt/Std.pm | 4 +- Master/tlpkg/tlperl/lib/HTTP/Tiny.pm | 314 +- Master/tlpkg/tlperl/lib/Hash/Util/FieldHash.pm | 12 +- Master/tlpkg/tlperl/lib/I18N/LangTags.pm | 32 +- Master/tlpkg/tlperl/lib/IO.pm | 6 +- .../tlpkg/tlperl/lib/IO/Compress/Adapter/Bzip2.pm | 22 +- .../tlperl/lib/IO/Compress/Adapter/Deflate.pm | 18 +- .../tlperl/lib/IO/Compress/Adapter/Identity.pm | 4 +- Master/tlpkg/tlperl/lib/IO/Compress/Base.pm | 91 +- Master/tlpkg/tlperl/lib/IO/Compress/Base/Common.pm | 111 +- Master/tlpkg/tlperl/lib/IO/Compress/Bzip2.pm | 10 +- Master/tlpkg/tlperl/lib/IO/Compress/Deflate.pm | 23 +- Master/tlpkg/tlperl/lib/IO/Compress/FAQ.pod | 597 + Master/tlpkg/tlperl/lib/IO/Compress/Gzip.pm | 33 +- .../tlpkg/tlperl/lib/IO/Compress/Gzip/Constants.pm | 2 +- Master/tlpkg/tlperl/lib/IO/Compress/RawDeflate.pm | 49 +- Master/tlpkg/tlperl/lib/IO/Compress/Zip.pm | 486 +- .../tlpkg/tlperl/lib/IO/Compress/Zip/Constants.pm | 34 +- .../tlpkg/tlperl/lib/IO/Compress/Zlib/Constants.pm | 2 +- Master/tlpkg/tlperl/lib/IO/Compress/Zlib/Extra.pm | 41 +- Master/tlpkg/tlperl/lib/IO/Dir.pm | 6 +- Master/tlpkg/tlperl/lib/IO/File.pm | 3 +- Master/tlpkg/tlperl/lib/IO/Handle.pm | 10 +- Master/tlpkg/tlperl/lib/IO/Pipe.pm | 4 +- Master/tlpkg/tlperl/lib/IO/Poll.pm | 4 +- Master/tlpkg/tlperl/lib/IO/Select.pm | 4 +- Master/tlpkg/tlperl/lib/IO/Socket.pm | 18 +- Master/tlpkg/tlperl/lib/IO/Socket/INET.pm | 50 +- Master/tlpkg/tlperl/lib/IO/Socket/UNIX.pm | 4 +- .../tlperl/lib/IO/Uncompress/Adapter/Bunzip2.pm | 6 +- .../tlperl/lib/IO/Uncompress/Adapter/Identity.pm | 121 +- .../tlperl/lib/IO/Uncompress/Adapter/Inflate.pm | 6 +- .../tlpkg/tlperl/lib/IO/Uncompress/AnyInflate.pm | 24 +- .../tlperl/lib/IO/Uncompress/AnyUncompress.pm | 46 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Base.pm | 150 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Bunzip2.pm | 10 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Gunzip.pm | 24 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Inflate.pm | 14 +- .../tlpkg/tlperl/lib/IO/Uncompress/RawInflate.pm | 16 +- Master/tlpkg/tlperl/lib/IO/Uncompress/Unzip.pm | 373 +- Master/tlpkg/tlperl/lib/IPC/Cmd.pm | 430 +- Master/tlpkg/tlperl/lib/IPC/Open2.pm | 5 +- Master/tlpkg/tlperl/lib/IPC/Open3.pm | 238 +- Master/tlpkg/tlperl/lib/JSON/PP.pm | 21 +- Master/tlpkg/tlperl/lib/List/Util.pm | 31 +- Master/tlpkg/tlperl/lib/List/Util/PP.pm | 83 - Master/tlpkg/tlperl/lib/List/Util/XS.pm | 14 +- Master/tlpkg/tlperl/lib/Locale/Codes.pm | 201 +- Master/tlpkg/tlperl/lib/Locale/Codes.pod | 469 +- Master/tlpkg/tlperl/lib/Locale/Codes/API.pod | 320 + Master/tlpkg/tlperl/lib/Locale/Codes/Changes.pod | 425 +- Master/tlpkg/tlperl/lib/Locale/Codes/Constants.pm | 133 + Master/tlpkg/tlperl/lib/Locale/Codes/Constants.pod | 41 + Master/tlpkg/tlperl/lib/Locale/Codes/Country.pm | 9788 +- Master/tlpkg/tlperl/lib/Locale/Codes/Country.pod | 214 + .../tlpkg/tlperl/lib/Locale/Codes/Country_Codes.pm | 9552 ++ .../tlperl/lib/Locale/Codes/Country_Retired.pm | 429 + Master/tlpkg/tlperl/lib/Locale/Codes/Currency.pm | 3036 +- Master/tlpkg/tlperl/lib/Locale/Codes/Currency.pod | 127 + .../tlperl/lib/Locale/Codes/Currency_Codes.pm | 3107 + .../tlperl/lib/Locale/Codes/Currency_Retired.pm | 172 + Master/tlpkg/tlperl/lib/Locale/Codes/LangExt.pm | 95 + Master/tlpkg/tlperl/lib/Locale/Codes/LangExt.pod | 116 + .../tlpkg/tlperl/lib/Locale/Codes/LangExt_Codes.pm | 2825 + .../tlperl/lib/Locale/Codes/LangExt_Retired.pm | 49 + Master/tlpkg/tlperl/lib/Locale/Codes/LangFam.pm | 95 + Master/tlpkg/tlperl/lib/Locale/Codes/LangFam.pod | 116 + .../tlpkg/tlperl/lib/Locale/Codes/LangFam_Codes.pm | 1428 + .../tlperl/lib/Locale/Codes/LangFam_Retired.pm | 49 + Master/tlpkg/tlperl/lib/Locale/Codes/LangVar.pm | 96 + Master/tlpkg/tlperl/lib/Locale/Codes/LangVar.pod | 118 + .../tlpkg/tlperl/lib/Locale/Codes/LangVar_Codes.pm | 828 + .../tlperl/lib/Locale/Codes/LangVar_Retired.pm | 49 + Master/tlpkg/tlperl/lib/Locale/Codes/Language.pm | 7386 +- Master/tlpkg/tlperl/lib/Locale/Codes/Language.pod | 137 + .../tlperl/lib/Locale/Codes/Language_Codes.pm | 96273 +++++++++++++++++++ .../tlperl/lib/Locale/Codes/Language_Retired.pm | 176 + Master/tlpkg/tlperl/lib/Locale/Codes/Script.pm | 2781 +- Master/tlpkg/tlperl/lib/Locale/Codes/Script.pod | 131 + .../tlpkg/tlperl/lib/Locale/Codes/Script_Codes.pm | 3105 + .../tlperl/lib/Locale/Codes/Script_Retired.pm | 89 + Master/tlpkg/tlperl/lib/Locale/Constants.pm | 80 - Master/tlpkg/tlperl/lib/Locale/Constants.pod | 41 - Master/tlpkg/tlperl/lib/Locale/Country.pm | 302 +- Master/tlpkg/tlperl/lib/Locale/Country.pod | 52 +- Master/tlpkg/tlperl/lib/Locale/Currency.pm | 276 +- Master/tlpkg/tlperl/lib/Locale/Currency.pod | 28 +- Master/tlpkg/tlperl/lib/Locale/Language.pm | 276 +- Master/tlpkg/tlperl/lib/Locale/Language.pod | 50 +- Master/tlpkg/tlperl/lib/Locale/Maketext.pm | 2 +- Master/tlpkg/tlperl/lib/Locale/Maketext.pod | 13 +- Master/tlpkg/tlperl/lib/Locale/Maketext/Guts.pm | 2 +- .../tlpkg/tlperl/lib/Locale/Maketext/GutsLoader.pm | 2 +- Master/tlpkg/tlperl/lib/Locale/Maketext/TPJ13.pod | 4 +- Master/tlpkg/tlperl/lib/Locale/Script.pm | 276 +- Master/tlpkg/tlperl/lib/Locale/Script.pod | 35 +- Master/tlpkg/tlperl/lib/Math/BigFloat.pm | 342 +- Master/tlpkg/tlperl/lib/Math/BigFloat/Trace.pm | 2 +- Master/tlpkg/tlperl/lib/Math/BigInt.pm | 549 +- Master/tlpkg/tlperl/lib/Math/BigInt/Calc.pm | 2 +- Master/tlpkg/tlperl/lib/Math/BigInt/CalcEmu.pm | 2 +- Master/tlpkg/tlperl/lib/Math/BigInt/FastCalc.pm | 4 +- Master/tlpkg/tlperl/lib/Math/BigInt/Trace.pm | 2 +- Master/tlpkg/tlperl/lib/Math/BigRat.pm | 4 +- Master/tlpkg/tlperl/lib/Math/Complex.pm | 43 +- Master/tlpkg/tlperl/lib/Math/Trig.pm | 37 +- Master/tlpkg/tlperl/lib/Module/Build.pm | 4 +- Master/tlpkg/tlperl/lib/Module/Build/Base.pm | 13 +- Master/tlpkg/tlperl/lib/Module/Build/Compat.pm | 2 +- Master/tlpkg/tlperl/lib/Module/Build/Config.pm | 2 +- Master/tlpkg/tlperl/lib/Module/Build/Cookbook.pm | 2 +- Master/tlpkg/tlperl/lib/Module/Build/Dumper.pm | 2 +- Master/tlpkg/tlperl/lib/Module/Build/ModuleInfo.pm | 2 +- Master/tlpkg/tlperl/lib/Module/Build/Notes.pm | 2 +- Master/tlpkg/tlperl/lib/Module/Build/PPMMaker.pm | 2 +- .../tlperl/lib/Module/Build/Platform/Amiga.pm | 2 +- .../tlperl/lib/Module/Build/Platform/Default.pm | 2 +- .../tlperl/lib/Module/Build/Platform/EBCDIC.pm | 2 +- .../tlperl/lib/Module/Build/Platform/MPEiX.pm | 2 +- .../tlperl/lib/Module/Build/Platform/MacOS.pm | 2 +- .../tlperl/lib/Module/Build/Platform/RiscOS.pm | 2 +- .../tlpkg/tlperl/lib/Module/Build/Platform/Unix.pm | 2 +- .../tlpkg/tlperl/lib/Module/Build/Platform/VMS.pm | 2 +- .../tlpkg/tlperl/lib/Module/Build/Platform/VOS.pm | 2 +- .../tlperl/lib/Module/Build/Platform/Windows.pm | 2 +- .../tlpkg/tlperl/lib/Module/Build/Platform/aix.pm | 2 +- .../tlperl/lib/Module/Build/Platform/cygwin.pm | 2 +- .../tlperl/lib/Module/Build/Platform/darwin.pm | 2 +- .../tlpkg/tlperl/lib/Module/Build/Platform/os2.pm | 2 +- Master/tlpkg/tlperl/lib/Module/Build/PodParser.pm | 50 +- Master/tlpkg/tlperl/lib/Module/CoreList.pm | 32794 ++----- Master/tlpkg/tlperl/lib/Module/CoreList.pod | 214 + .../tlperl/lib/Module/CoreList/TieHashDelta.pm | 74 + Master/tlpkg/tlperl/lib/Module/Load.pm | 23 +- Master/tlpkg/tlperl/lib/Module/Load/Conditional.pm | 4 +- Master/tlpkg/tlperl/lib/Module/Loaded.pm | 36 +- Master/tlpkg/tlperl/lib/Module/Metadata.pm | 266 +- Master/tlpkg/tlperl/lib/Module/Pluggable.pm | 2 +- Master/tlpkg/tlperl/lib/Object/Accessor.pm | 172 +- Master/tlpkg/tlperl/lib/Opcode.pm | 10 +- Master/tlpkg/tlperl/lib/POSIX.pm | 979 +- Master/tlpkg/tlperl/lib/POSIX.pod | 15 +- Master/tlpkg/tlperl/lib/Params/Check.pm | 30 +- Master/tlpkg/tlperl/lib/Parse/CPAN/Meta.pm | 22 +- Master/tlpkg/tlperl/lib/PerlIO.pm | 29 +- Master/tlpkg/tlperl/lib/PerlIO/encoding.pm | 2 +- Master/tlpkg/tlperl/lib/PerlIO/mmap.pm | 30 + Master/tlpkg/tlperl/lib/PerlIO/scalar.pm | 2 +- Master/tlpkg/tlperl/lib/PerlIO/via.pm | 6 +- Master/tlpkg/tlperl/lib/Pod/Checker.pm | 65 +- Master/tlpkg/tlperl/lib/Pod/Find.pm | 28 +- Master/tlpkg/tlperl/lib/Pod/Functions.pm | 213 +- Master/tlpkg/tlperl/lib/Pod/Html.pm | 2244 +- Master/tlpkg/tlperl/lib/Pod/InputObjects.pm | 12 +- Master/tlpkg/tlperl/lib/Pod/LaTeX.pm | 18 +- Master/tlpkg/tlperl/lib/Pod/ParseUtils.pm | 4 +- Master/tlpkg/tlperl/lib/Pod/Parser.pm | 15 +- Master/tlpkg/tlperl/lib/Pod/Perldoc.pm | 1100 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/BaseTo.pm | 79 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/GetOptsOO.pm | 63 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToANSI.pm | 96 + Master/tlpkg/tlperl/lib/Pod/Perldoc/ToChecker.pm | 11 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToMan.pm | 595 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToNroff.pm | 18 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToPod.pm | 31 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToRtf.pm | 25 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToTerm.pm | 90 + Master/tlpkg/tlperl/lib/Pod/Perldoc/ToText.pm | 17 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToTk.pm | 64 +- Master/tlpkg/tlperl/lib/Pod/Perldoc/ToXml.pm | 17 +- Master/tlpkg/tlperl/lib/Pod/PlainText.pm | 14 +- Master/tlpkg/tlperl/lib/Pod/Select.pm | 4 +- Master/tlpkg/tlperl/lib/Pod/Simple.pm | 34 +- Master/tlpkg/tlperl/lib/Pod/Simple.pod | 127 +- Master/tlpkg/tlperl/lib/Pod/Simple/BlackBox.pm | 89 +- Master/tlpkg/tlperl/lib/Pod/Simple/Checker.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/Debug.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/DumpAsText.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/DumpAsXML.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/HTML.pm | 9 +- Master/tlpkg/tlperl/lib/Pod/Simple/HTMLBatch.pm | 6 +- Master/tlpkg/tlperl/lib/Pod/Simple/LinkSection.pm | 4 +- Master/tlpkg/tlperl/lib/Pod/Simple/Methody.pm | 4 +- Master/tlpkg/tlperl/lib/Pod/Simple/Progress.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/PullParser.pm | 4 +- .../tlperl/lib/Pod/Simple/PullParserEndToken.pm | 2 +- .../tlperl/lib/Pod/Simple/PullParserStartToken.pm | 2 +- .../tlperl/lib/Pod/Simple/PullParserTextToken.pm | 2 +- .../tlpkg/tlperl/lib/Pod/Simple/PullParserToken.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/RTF.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/Search.pm | 16 +- Master/tlpkg/tlperl/lib/Pod/Simple/SimpleTree.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/Subclassing.pod | 157 +- Master/tlpkg/tlperl/lib/Pod/Simple/Text.pm | 4 +- Master/tlpkg/tlperl/lib/Pod/Simple/TextContent.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/TiedOutFH.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/Transcode.pm | 2 +- .../tlpkg/tlperl/lib/Pod/Simple/TranscodeDumb.pm | 2 +- .../tlpkg/tlperl/lib/Pod/Simple/TranscodeSmart.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Simple/XHTML.pm | 68 +- Master/tlpkg/tlperl/lib/Pod/Simple/XMLOutStream.pm | 2 +- Master/tlpkg/tlperl/lib/Pod/Usage.pm | 23 +- Master/tlpkg/tlperl/lib/Safe.pm | 36 +- Master/tlpkg/tlperl/lib/Scalar/Util.pm | 52 +- Master/tlpkg/tlperl/lib/Scalar/Util/PP.pm | 108 - Master/tlpkg/tlperl/lib/Search/Dict.pm | 4 +- Master/tlpkg/tlperl/lib/SelfLoader.pm | 6 +- Master/tlpkg/tlperl/lib/Shell.pm | 272 - Master/tlpkg/tlperl/lib/Socket.pm | 1062 +- Master/tlpkg/tlperl/lib/Storable.pm | 11 +- Master/tlpkg/tlperl/lib/Term/ANSIColor.pm | 32 +- Master/tlpkg/tlperl/lib/Term/Cap.pm | 8 +- Master/tlpkg/tlperl/lib/Term/ReadLine.pm | 149 +- Master/tlpkg/tlperl/lib/Term/UI.pm | 114 +- Master/tlpkg/tlperl/lib/Term/UI/History.pm | 14 +- Master/tlpkg/tlperl/lib/Text/Abbrev.pm | 4 +- Master/tlpkg/tlperl/lib/Tie/Array.pm | 5 +- Master/tlpkg/tlperl/lib/Tie/File.pm | 13 +- Master/tlpkg/tlperl/lib/Time/HiRes.pm | 17 +- Master/tlpkg/tlperl/lib/UNIVERSAL.pm | 14 +- Master/tlpkg/tlperl/lib/Unicode/Collate.pm | 190 +- .../tlpkg/tlperl/lib/Unicode/Collate/CJK/Korean.pm | 26 +- .../tlpkg/tlperl/lib/Unicode/Collate/CJK/Pinyin.pm | 5006 +- .../tlpkg/tlperl/lib/Unicode/Collate/CJK/Stroke.pm | 3765 +- Master/tlpkg/tlperl/lib/Unicode/Collate/Locale.pm | 243 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/af.pl | 5 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ar.pl | 16 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/as.pl | 10 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/az.pl | 93 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/be.pl | 43 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/bg.pl | 45 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/bn.pl | 8 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ca.pl | 27 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/cs.pl | 43 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/cy.pl | 51 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/da.pl | 143 +- .../tlperl/lib/Unicode/Collate/Locale/de_phone.pl | 51 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/eo.pl | 51 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/es.pl | 11 +- .../tlperl/lib/Unicode/Collate/Locale/es_trad.pl | 23 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/et.pl | 99 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fa.pl | 50 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fi.pl | 119 +- .../tlperl/lib/Unicode/Collate/Locale/fi_phone.pl | 62 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fil.pl | 17 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fo.pl | 143 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/fr.pl | 1 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/gu.pl | 8 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ha.pl | 21 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/haw.pl | 65 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/hi.pl | 8 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/hr.pl | 93 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/hu.pl | 295 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/hy.pl | 7 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ig.pl | 101 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/is.pl | 151 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ja.pl | 3073 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/kk.pl | 91 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/kl.pl | 139 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/kn.pl | 9 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ko.pl | 643 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/kok.pl | 11 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ln.pl | 12 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/lt.pl | 64 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/lv.pl | 68 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/mk.pl | 45 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ml.pl | 23 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/mr.pl | 12 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/mt.pl | 51 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/nb.pl | 138 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/nn.pl | 138 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/nso.pl | 67 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/om.pl | 37 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/or.pl | 10 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/pa.pl | 27 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/pl.pl | 95 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ro.pl | 107 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ru.pl | 74 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sa.pl | 12 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/se.pl | 287 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/si.pl | 9 + .../tlperl/lib/Unicode/Collate/Locale/si_dict.pl | 8 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sk.pl | 79 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sl.pl | 28 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sq.pl | 91 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sr.pl | 49 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sv.pl | 167 +- .../tlperl/lib/Unicode/Collate/Locale/sv_refo.pl | 85 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/sw.pl | 28 - .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ta.pl | 31 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/te.pl | 8 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/th.pl | 16 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/tn.pl | 67 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/to.pl | 117 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/tr.pl | 85 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/uk.pl | 47 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/ur.pl | 89 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/vi.pl | 419 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/wae.pl | 24 + .../tlpkg/tlperl/lib/Unicode/Collate/Locale/wo.pl | 55 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/yo.pl | 45 +- .../tlpkg/tlperl/lib/Unicode/Collate/Locale/zh.pl | 415 +- .../tlperl/lib/Unicode/Collate/Locale/zh_big5.pl | 1147 +- .../tlperl/lib/Unicode/Collate/Locale/zh_gb.pl | 824 +- .../tlperl/lib/Unicode/Collate/Locale/zh_pin.pl | 1799 +- .../tlperl/lib/Unicode/Collate/Locale/zh_strk.pl | 1791 +- .../tlpkg/tlperl/lib/Unicode/Collate/allkeys.txt | 48055 ++++----- Master/tlpkg/tlperl/lib/Unicode/Normalize.pm | 9 +- Master/tlpkg/tlperl/lib/Unicode/UCD.pm | 2218 +- Master/tlpkg/tlperl/lib/Win32API/File.pm | 18 +- Master/tlpkg/tlperl/lib/XSLoader.pm | 21 +- Master/tlpkg/tlperl/lib/_charnames.pm | 764 + Master/tlpkg/tlperl/lib/abbrev.pl | 46 - Master/tlpkg/tlperl/lib/arybase.pm | 98 + Master/tlpkg/tlperl/lib/assert.pl | 63 - Master/tlpkg/tlperl/lib/attributes.pm | 39 +- Master/tlpkg/tlperl/lib/auto/B/B.bs | 0 Master/tlpkg/tlperl/lib/auto/B/B.dll | Bin 56832 -> 71168 bytes .../tlperl/lib/auto/Compress/Raw/Bzip2/Bzip2.bs | 0 .../tlperl/lib/auto/Compress/Raw/Bzip2/Bzip2.dll | Bin 78848 -> 101376 bytes .../tlperl/lib/auto/Compress/Raw/Zlib/Zlib.bs | 0 .../tlperl/lib/auto/Compress/Raw/Zlib/Zlib.dll | Bin 123904 -> 157696 bytes Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.bs | 0 Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.dll | Bin 12288 -> 12288 bytes Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.bs | 0 .../tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.dll | Bin 33792 -> 37376 bytes Master/tlpkg/tlperl/lib/auto/Devel/DProf/DProf.dll | Bin 16384 -> 0 bytes .../tlpkg/tlperl/lib/auto/Devel/PPPort/PPPort.bs | 0 .../tlpkg/tlperl/lib/auto/Devel/PPPort/PPPort.dll | Bin 95744 -> 129024 bytes Master/tlpkg/tlperl/lib/auto/Devel/Peek/Peek.bs | 0 Master/tlpkg/tlperl/lib/auto/Devel/Peek/Peek.dll | Bin 16384 -> 18432 bytes Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.bs | 0 Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.dll | Bin 18432 -> 20992 bytes Master/tlpkg/tlperl/lib/auto/Digest/SHA/SHA.bs | 0 Master/tlpkg/tlperl/lib/auto/Digest/SHA/SHA.dll | Bin 45568 -> 52736 bytes Master/tlpkg/tlperl/lib/auto/Digest/SHA1/.packlist | 6 +- Master/tlpkg/tlperl/lib/auto/Digest/SHA1/SHA1.dll | Bin 17408 -> 20480 bytes Master/tlpkg/tlperl/lib/auto/Encode/Byte/Byte.bs | 0 Master/tlpkg/tlperl/lib/auto/Encode/Byte/Byte.dll | Bin 111104 -> 112128 bytes Master/tlpkg/tlperl/lib/auto/Encode/CN/CN.bs | 0 Master/tlpkg/tlperl/lib/auto/Encode/CN/CN.dll | Bin 743424 -> 743424 bytes .../tlpkg/tlperl/lib/auto/Encode/EBCDIC/EBCDIC.bs | 0 .../tlpkg/tlperl/lib/auto/Encode/EBCDIC/EBCDIC.dll | Bin 18944 -> 19456 bytes Master/tlpkg/tlperl/lib/auto/Encode/Encode.bs | 0 Master/tlpkg/tlperl/lib/auto/Encode/Encode.dll | Bin 31744 -> 34816 bytes Master/tlpkg/tlperl/lib/auto/Encode/JP/JP.bs | 0 Master/tlpkg/tlperl/lib/auto/Encode/JP/JP.dll | Bin 859648 -> 859648 bytes Master/tlpkg/tlperl/lib/auto/Encode/KR/KR.bs | 0 Master/tlpkg/tlperl/lib/auto/Encode/KR/KR.dll | Bin 814592 -> 815104 bytes .../tlpkg/tlperl/lib/auto/Encode/Locale/.packlist | 2 +- .../tlpkg/tlperl/lib/auto/Encode/Symbol/Symbol.bs | 0 .../tlpkg/tlperl/lib/auto/Encode/Symbol/Symbol.dll | Bin 22528 -> 23040 bytes Master/tlpkg/tlperl/lib/auto/Encode/TW/TW.bs | 0 Master/tlpkg/tlperl/lib/auto/Encode/TW/TW.dll | Bin 760832 -> 760832 bytes .../tlperl/lib/auto/Encode/Unicode/Unicode.bs | 0 .../tlperl/lib/auto/Encode/Unicode/Unicode.dll | Bin 21504 -> 22528 bytes Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.bs | 0 Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.dll | Bin 15872 -> 16384 bytes Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.bs | 0 Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.dll | Bin 17408 -> 25600 bytes .../tlpkg/tlperl/lib/auto/File/Listing/.packlist | 2 +- .../tlpkg/tlperl/lib/auto/Filter/Util/Call/Call.bs | 0 .../tlperl/lib/auto/Filter/Util/Call/Call.dll | Bin 13312 -> 13824 bytes Master/tlpkg/tlperl/lib/auto/HTML/Parser/.packlist | 18 +- .../tlpkg/tlperl/lib/auto/HTML/Parser/Parser.dll | Bin 44544 -> 52736 bytes Master/tlpkg/tlperl/lib/auto/HTML/Tagset/.packlist | 2 +- .../tlpkg/tlperl/lib/auto/HTTP/Cookies/.packlist | 6 +- Master/tlpkg/tlperl/lib/auto/HTTP/Daemon/.packlist | 2 +- Master/tlpkg/tlperl/lib/auto/HTTP/Date/.packlist | 2 +- .../tlpkg/tlperl/lib/auto/HTTP/Message/.packlist | 20 +- .../tlpkg/tlperl/lib/auto/HTTP/Negotiate/.packlist | 2 +- .../lib/auto/Hash/Util/FieldHash/FieldHash.bs | 0 .../lib/auto/Hash/Util/FieldHash/FieldHash.dll | Bin 17408 -> 18432 bytes Master/tlpkg/tlperl/lib/auto/Hash/Util/Util.bs | 0 Master/tlpkg/tlperl/lib/auto/Hash/Util/Util.dll | Bin 10752 -> 11264 bytes Master/tlpkg/tlperl/lib/auto/IO/IO.bs | 0 Master/tlpkg/tlperl/lib/auto/IO/IO.dll | Bin 16896 -> 19968 bytes Master/tlpkg/tlperl/lib/auto/IO/String/.packlist | 2 +- Master/tlpkg/tlperl/lib/auto/LWP/.packlist | 66 +- .../tlpkg/tlperl/lib/auto/LWP/MediaTypes/.packlist | 4 +- Master/tlpkg/tlperl/lib/auto/List/Util/Util.bs | 0 Master/tlpkg/tlperl/lib/auto/List/Util/Util.dll | Bin 21504 -> 26112 bytes Master/tlpkg/tlperl/lib/auto/MIME/Base64/Base64.bs | 0 .../tlpkg/tlperl/lib/auto/MIME/Base64/Base64.dll | Bin 14848 -> 15360 bytes .../lib/auto/Math/BigInt/FastCalc/FastCalc.bs | 0 .../lib/auto/Math/BigInt/FastCalc/FastCalc.dll | Bin 16384 -> 17408 bytes Master/tlpkg/tlperl/lib/auto/Net/HTTP/.packlist | 8 +- Master/tlpkg/tlperl/lib/auto/Opcode/Opcode.bs | 0 Master/tlpkg/tlperl/lib/auto/Opcode/Opcode.dll | Bin 19968 -> 22528 bytes Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.bs | 0 Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.dll | Bin 68608 -> 73728 bytes .../tlpkg/tlperl/lib/auto/POSIX/SigAction/flags.al | 9 - .../tlperl/lib/auto/POSIX/SigAction/handler.al | 9 - .../tlpkg/tlperl/lib/auto/POSIX/SigAction/mask.al | 9 - .../tlpkg/tlperl/lib/auto/POSIX/SigAction/new.al | 11 - .../tlpkg/tlperl/lib/auto/POSIX/SigAction/safe.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/CLEAR.al | 9 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/DELETE.al | 9 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/EXISTS.al | 9 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/FETCH.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/SCALAR.al | 9 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/STORE.al | 9 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/_check.al | 15 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/_croak.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/_exist.al | 14 - .../tlpkg/tlperl/lib/auto/POSIX/SigRt/_getsig.al | 17 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/_init.al | 14 - Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/new.al | 17 - Master/tlpkg/tlperl/lib/auto/POSIX/abs.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/alarm.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/assert.al | 15 - Master/tlpkg/tlperl/lib/auto/POSIX/atan2.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/atexit.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/atof.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/atoi.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/atol.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/autosplit.ix | 173 - Master/tlpkg/tlperl/lib/auto/POSIX/bsearch.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/calloc.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/chdir.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/chmod.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/chown.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/clearerr.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/closedir.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/cos.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/creat.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/div.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/errno.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/execl.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/execle.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/execlp.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/execv.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/execve.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/execvp.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/exit.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/exp.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/fabs.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/fclose.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fcntl.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/fdopen.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/feof.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/ferror.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fflush.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fgetc.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fgetpos.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fgets.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fileno.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fopen.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fork.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/fprintf.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fputc.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fputs.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fread.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/free.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/freopen.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fscanf.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fseek.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fsetpos.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fstat.al | 17 - Master/tlpkg/tlperl/lib/auto/POSIX/fsync.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/ftell.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/fwrite.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/getc.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getchar.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getegid.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getenv.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/geteuid.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getgid.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getgrgid.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getgrnam.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getgroups.al | 14 - Master/tlpkg/tlperl/lib/auto/POSIX/getlogin.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getpgrp.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getpid.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getppid.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getpwnam.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getpwuid.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/gets.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/getuid.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/gmtime.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/isatty.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/kill.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/labs.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/ldiv.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/link.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/load_imports.al | 231 - Master/tlpkg/tlperl/lib/auto/POSIX/localtime.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/log.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/longjmp.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/malloc.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/memchr.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/memcmp.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/memcpy.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/memmove.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/memset.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/mkdir.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/offsetof.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/opendir.al | 16 - Master/tlpkg/tlperl/lib/auto/POSIX/perror.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/pow.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/printf.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/putc.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/putchar.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/puts.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/qsort.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/raise.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/rand.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/readdir.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/realloc.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/redef.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/remove.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/rename.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/rewind.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/rewinddir.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/rmdir.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/scanf.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/setbuf.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/setjmp.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/setvbuf.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/siglongjmp.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/sigsetjmp.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/sin.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/sleep.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/sprintf.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/sqrt.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/srand.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/sscanf.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/stat.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/strcat.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strchr.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strcmp.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strcpy.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strcspn.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strerror.al | 14 - Master/tlpkg/tlperl/lib/auto/POSIX/strlen.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strncat.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strncmp.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strncpy.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strpbrk.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strrchr.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strspn.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/strstr.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/strtok.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/system.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/time.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/tmpfile.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/tolower.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/toupper.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/umask.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/ungetc.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/unimpl.al | 14 - Master/tlpkg/tlperl/lib/auto/POSIX/unlink.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/usage.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/utime.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/vfprintf.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/vprintf.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/vsprintf.al | 12 - Master/tlpkg/tlperl/lib/auto/POSIX/wait.al | 13 - Master/tlpkg/tlperl/lib/auto/POSIX/waitpid.al | 13 - .../tlperl/lib/auto/PerlIO/encoding/encoding.bs | 0 .../tlperl/lib/auto/PerlIO/encoding/encoding.dll | Bin 21504 -> 24064 bytes Master/tlpkg/tlperl/lib/auto/PerlIO/mmap/mmap.bs | 0 Master/tlpkg/tlperl/lib/auto/PerlIO/mmap/mmap.dll | Bin 0 -> 8704 bytes .../tlpkg/tlperl/lib/auto/PerlIO/scalar/scalar.bs | 0 .../tlpkg/tlperl/lib/auto/PerlIO/scalar/scalar.dll | Bin 13312 -> 14336 bytes Master/tlpkg/tlperl/lib/auto/PerlIO/via/via.bs | 0 Master/tlpkg/tlperl/lib/auto/PerlIO/via/via.dll | Bin 18944 -> 20480 bytes .../tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.bs | 0 .../tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.dll | Bin 26624 -> 29696 bytes Master/tlpkg/tlperl/lib/auto/Socket/Socket.bs | 0 Master/tlpkg/tlperl/lib/auto/Socket/Socket.dll | Bin 22016 -> 25088 bytes Master/tlpkg/tlperl/lib/auto/Storable/Storable.bs | 0 Master/tlpkg/tlperl/lib/auto/Storable/Storable.dll | Bin 75264 -> 104448 bytes .../tlpkg/tlperl/lib/auto/Sys/Hostname/Hostname.bs | 0 .../tlperl/lib/auto/Sys/Hostname/Hostname.dll | Bin 9216 -> 9216 bytes .../tlpkg/tlperl/lib/auto/Text/Soundex/Soundex.bs | 0 .../tlpkg/tlperl/lib/auto/Text/Soundex/Soundex.dll | Bin 10240 -> 10752 bytes .../lib/auto/Tie/Hash/NamedCapture/NamedCapture.bs | 0 .../auto/Tie/Hash/NamedCapture/NamedCapture.dll | Bin 12288 -> 12800 bytes Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.bs | 0 Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.dll | Bin 18432 -> 22016 bytes Master/tlpkg/tlperl/lib/auto/Time/Piece/Piece.bs | 0 Master/tlpkg/tlperl/lib/auto/Time/Piece/Piece.dll | Bin 22528 -> 27136 bytes Master/tlpkg/tlperl/lib/auto/Tk/.packlist | 1324 +- Master/tlpkg/tlperl/lib/auto/Tk/Canvas/Canvas.dll | Bin 174080 -> 202240 bytes .../tlpkg/tlperl/lib/auto/Tk/Compound/Compound.dll | Bin 22016 -> 24064 bytes .../lib/auto/Tk/DragDrop/Win32Site/Win32Site.dll | Bin 12288 -> 13312 bytes Master/tlpkg/tlperl/lib/auto/Tk/Entry/Entry.dll | Bin 44544 -> 51200 bytes Master/tlpkg/tlperl/lib/auto/Tk/Event/Event.dll | Bin 54784 -> 65024 bytes Master/tlpkg/tlperl/lib/auto/Tk/HList/HList.dll | Bin 58368 -> 67584 bytes Master/tlpkg/tlperl/lib/auto/Tk/IO/IO.dll | Bin 10240 -> 13824 bytes Master/tlpkg/tlperl/lib/auto/Tk/JPEG/JPEG.dll | Bin 134144 -> 136192 bytes .../tlpkg/tlperl/lib/auto/Tk/Listbox/Listbox.dll | Bin 34304 -> 38912 bytes .../tlperl/lib/auto/Tk/Menubutton/Menubutton.dll | Bin 23040 -> 24576 bytes .../tlpkg/tlperl/lib/auto/Tk/NBFrame/NBFrame.dll | Bin 23552 -> 27136 bytes Master/tlpkg/tlperl/lib/auto/Tk/PNG/PNG.dll | Bin 200192 -> 200704 bytes Master/tlpkg/tlperl/lib/auto/Tk/Pixmap/Pixmap.dll | Bin 27648 -> 30208 bytes Master/tlpkg/tlperl/lib/auto/Tk/Scale/Scale.dll | Bin 27136 -> 30208 bytes .../tlperl/lib/auto/Tk/Scrollbar/Scrollbar.dll | Bin 23552 -> 25600 bytes Master/tlpkg/tlperl/lib/auto/Tk/TList/TList.dll | Bin 32256 -> 36352 bytes Master/tlpkg/tlperl/lib/auto/Tk/Text/Text.dll | Bin 123392 -> 136192 bytes .../tlpkg/tlperl/lib/auto/Tk/TixGrid/TixGrid.dll | Bin 56320 -> 65536 bytes Master/tlpkg/tlperl/lib/auto/Tk/Tk.dll | Bin 871936 -> 975872 bytes Master/tlpkg/tlperl/lib/auto/Tk/X/X.dll | Bin 26112 -> 34304 bytes Master/tlpkg/tlperl/lib/auto/Tk/Xlib/Xlib.dll | Bin 27136 -> 32256 bytes Master/tlpkg/tlperl/lib/auto/URI/.packlist | 104 +- .../tlperl/lib/auto/Unicode/Collate/Collate.bs | 0 .../tlperl/lib/auto/Unicode/Collate/Collate.dll | Bin 542720 -> 561664 bytes .../tlperl/lib/auto/Unicode/Normalize/Normalize.bs | 0 .../lib/auto/Unicode/Normalize/Normalize.dll | Bin 202752 -> 212480 bytes .../tlpkg/tlperl/lib/auto/WWW/RobotRules/.packlist | 4 +- Master/tlpkg/tlperl/lib/auto/Win32/API/.packlist | 18 +- Master/tlpkg/tlperl/lib/auto/Win32/API/API.dll | Bin 20992 -> 25600 bytes .../lib/auto/Win32/API/Callback/Callback.dll | Bin 15872 -> 18944 bytes .../tlperl/lib/auto/Win32/Process/Info/.packlist | 8 +- .../tlpkg/tlperl/lib/auto/Win32/Shortcut/.packlist | 6 +- .../tlperl/lib/auto/Win32/Shortcut/Shortcut.dll | Bin 23552 -> 29696 bytes .../tlperl/lib/auto/Win32/TieRegistry/.packlist | 4 +- Master/tlpkg/tlperl/lib/auto/Win32/Win32.bs | 0 Master/tlpkg/tlperl/lib/auto/Win32/Win32.dll | Bin 44544 -> 49664 bytes Master/tlpkg/tlperl/lib/auto/Win32API/File/File.bs | 0 .../tlpkg/tlperl/lib/auto/Win32API/File/File.dll | Bin 71680 -> 102912 bytes .../tlperl/lib/auto/Win32API/Registry/.packlist | 8 +- .../tlperl/lib/auto/Win32API/Registry/Registry.dll | Bin 157696 -> 223744 bytes Master/tlpkg/tlperl/lib/auto/arybase/arybase.bs | 0 Master/tlpkg/tlperl/lib/auto/arybase/arybase.dll | Bin 0 -> 22016 bytes .../tlpkg/tlperl/lib/auto/attributes/attributes.bs | 0 .../tlperl/lib/auto/attributes/attributes.dll | Bin 11264 -> 12288 bytes Master/tlpkg/tlperl/lib/auto/mro/mro.bs | 0 Master/tlpkg/tlperl/lib/auto/mro/mro.dll | Bin 18944 -> 22016 bytes Master/tlpkg/tlperl/lib/auto/re/re.bs | 0 Master/tlpkg/tlperl/lib/auto/re/re.dll | Bin 344576 -> 391680 bytes .../tlpkg/tlperl/lib/auto/threads/shared/shared.bs | 0 .../tlperl/lib/auto/threads/shared/shared.dll | Bin 31744 -> 36864 bytes Master/tlpkg/tlperl/lib/auto/threads/threads.bs | 0 Master/tlpkg/tlperl/lib/auto/threads/threads.dll | Bin 30208 -> 35840 bytes Master/tlpkg/tlperl/lib/autodie.pm | 2 +- Master/tlpkg/tlperl/lib/autodie/exception.pm | 2 +- .../tlpkg/tlperl/lib/autodie/exception/system.pm | 2 +- Master/tlpkg/tlperl/lib/autodie/hints.pm | 2 +- Master/tlpkg/tlperl/lib/autouse.pm | 2 +- Master/tlpkg/tlperl/lib/base.pm | 42 +- Master/tlpkg/tlperl/lib/bigfloat.pl | 258 - Master/tlpkg/tlperl/lib/bigint.pl | 324 - Master/tlpkg/tlperl/lib/bigint.pm | 8 +- Master/tlpkg/tlperl/lib/bignum.pm | 6 +- Master/tlpkg/tlperl/lib/bigrat.pl | 159 - Master/tlpkg/tlperl/lib/bigrat.pm | 2 +- Master/tlpkg/tlperl/lib/cacheout.pl | 59 - Master/tlpkg/tlperl/lib/charnames.pm | 1245 +- Master/tlpkg/tlperl/lib/complete.pl | 124 - Master/tlpkg/tlperl/lib/constant.pm | 25 +- Master/tlpkg/tlperl/lib/ctime.pl | 63 - Master/tlpkg/tlperl/lib/diagnostics.pm | 66 +- Master/tlpkg/tlperl/lib/dotsh.pl | 78 - Master/tlpkg/tlperl/lib/dumpvar.pl | 16 +- Master/tlpkg/tlperl/lib/encoding.pm | 4 +- Master/tlpkg/tlperl/lib/exceptions.pl | 64 - Master/tlpkg/tlperl/lib/fastcwd.pl | 47 - Master/tlpkg/tlperl/lib/feature.pm | 334 +- Master/tlpkg/tlperl/lib/fields.pm | 6 +- Master/tlpkg/tlperl/lib/find.pl | 54 - Master/tlpkg/tlperl/lib/finddepth.pl | 53 - Master/tlpkg/tlperl/lib/flush.pl | 36 - Master/tlpkg/tlperl/lib/getcwd.pl | 74 - Master/tlpkg/tlperl/lib/getopt.pl | 52 - Master/tlpkg/tlperl/lib/getopts.pl | 67 - Master/tlpkg/tlperl/lib/hostname.pl | 35 - Master/tlpkg/tlperl/lib/if.pm | 4 +- Master/tlpkg/tlperl/lib/importenv.pl | 21 - Master/tlpkg/tlperl/lib/inc/latest.pm | 2 +- Master/tlpkg/tlperl/lib/inc/latest/private.pm | 2 +- Master/tlpkg/tlperl/lib/locale.pm | 62 +- Master/tlpkg/tlperl/lib/look.pl | 54 - Master/tlpkg/tlperl/lib/mro.pm | 12 +- Master/tlpkg/tlperl/lib/newgetopt.pl | 77 - Master/tlpkg/tlperl/lib/open.pm | 20 +- Master/tlpkg/tlperl/lib/open2.pl | 17 - Master/tlpkg/tlperl/lib/open3.pl | 17 - Master/tlpkg/tlperl/lib/overload.pm | 147 +- Master/tlpkg/tlperl/lib/overloading.pm | 6 +- Master/tlpkg/tlperl/lib/perl5db.pl | 563 +- Master/tlpkg/tlperl/lib/perlfaq.pm | 6 + Master/tlpkg/tlperl/lib/perllocal.pod | 88 +- Master/tlpkg/tlperl/lib/pods/perl.pod | 87 +- Master/tlpkg/tlperl/lib/pods/perl5004delta.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perl5005delta.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perl5100delta.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perl5101delta.pod | 3 +- Master/tlpkg/tlperl/lib/pods/perl5110delta.pod | 1624 - Master/tlpkg/tlperl/lib/pods/perl5111delta.pod | 365 - Master/tlpkg/tlperl/lib/pods/perl5112delta.pod | 348 - Master/tlpkg/tlperl/lib/pods/perl5113delta.pod | 558 - Master/tlpkg/tlperl/lib/pods/perl5114delta.pod | 278 - Master/tlpkg/tlperl/lib/pods/perl5115delta.pod | 327 - Master/tlpkg/tlperl/lib/pods/perl5120delta.pod | 10 +- Master/tlpkg/tlperl/lib/pods/perl5121delta.pod | 5 +- Master/tlpkg/tlperl/lib/pods/perl5122delta.pod | 3 +- Master/tlpkg/tlperl/lib/pods/perl5123delta.pod | 3 +- Master/tlpkg/tlperl/lib/pods/perl5124delta.pod | 108 + Master/tlpkg/tlperl/lib/pods/perl5130delta.pod | 133 - Master/tlpkg/tlperl/lib/pods/perl51310delta.pod | 814 - Master/tlpkg/tlperl/lib/pods/perl51311delta.pod | 513 - Master/tlpkg/tlperl/lib/pods/perl5131delta.pod | 287 - Master/tlpkg/tlperl/lib/pods/perl5132delta.pod | 409 - Master/tlpkg/tlperl/lib/pods/perl5133delta.pod | 667 - Master/tlpkg/tlperl/lib/pods/perl5134delta.pod | 542 - Master/tlpkg/tlperl/lib/pods/perl5135delta.pod | 592 - Master/tlpkg/tlperl/lib/pods/perl5136delta.pod | 799 - Master/tlpkg/tlperl/lib/pods/perl5137delta.pod | 945 - Master/tlpkg/tlperl/lib/pods/perl5138delta.pod | 912 - Master/tlpkg/tlperl/lib/pods/perl5139delta.pod | 646 - Master/tlpkg/tlperl/lib/pods/perl5140delta.pod | 16 +- Master/tlpkg/tlperl/lib/pods/perl5142delta.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perl5143delta.pod | 291 + Master/tlpkg/tlperl/lib/pods/perl5160delta.pod | 4314 + Master/tlpkg/tlperl/lib/pods/perl5161delta.pod | 198 + Master/tlpkg/tlperl/lib/pods/perl5162delta.pod | 125 + Master/tlpkg/tlperl/lib/pods/perl561delta.pod | 7 +- Master/tlpkg/tlperl/lib/pods/perl56delta.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perl570delta.pod | 899 - Master/tlpkg/tlperl/lib/pods/perl571delta.pod | 1075 - Master/tlpkg/tlperl/lib/pods/perl572delta.pod | 831 - Master/tlpkg/tlperl/lib/pods/perl573delta.pod | 246 - Master/tlpkg/tlperl/lib/pods/perl589delta.pod | 7 +- Master/tlpkg/tlperl/lib/pods/perl58delta.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perl590delta.pod | 1015 - Master/tlpkg/tlperl/lib/pods/perl591delta.pod | 323 - Master/tlpkg/tlperl/lib/pods/perl592delta.pod | 342 - Master/tlpkg/tlperl/lib/pods/perl593delta.pod | 551 - Master/tlpkg/tlperl/lib/pods/perl594delta.pod | 382 - Master/tlpkg/tlperl/lib/pods/perl595delta.pod | 587 - Master/tlpkg/tlperl/lib/pods/perlaix.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlapi.pod | 2168 +- Master/tlpkg/tlperl/lib/pods/perlapio.pod | 3 +- Master/tlpkg/tlperl/lib/pods/perlbeos.pod | 10 +- Master/tlpkg/tlperl/lib/pods/perlbook.pod | 11 +- Master/tlpkg/tlperl/lib/pods/perlboot.pod | 884 +- Master/tlpkg/tlperl/lib/pods/perlbot.pod | 535 +- Master/tlpkg/tlperl/lib/pods/perlbs2000.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perlcall.pod | 5 +- Master/tlpkg/tlperl/lib/pods/perlce.pod | 70 +- Master/tlpkg/tlperl/lib/pods/perlcheat.pod | 118 +- Master/tlpkg/tlperl/lib/pods/perlcn.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlcompile.pod | 293 - Master/tlpkg/tlperl/lib/pods/perlcygwin.pod | 157 +- Master/tlpkg/tlperl/lib/pods/perldata.pod | 58 +- Master/tlpkg/tlperl/lib/pods/perldbmfilter.pod | 1 - Master/tlpkg/tlperl/lib/pods/perldebguts.pod | 16 +- Master/tlpkg/tlperl/lib/pods/perldebtut.pod | 1 - Master/tlpkg/tlperl/lib/pods/perldebug.pod | 88 +- Master/tlpkg/tlperl/lib/pods/perldelta.pod | 207 +- Master/tlpkg/tlperl/lib/pods/perldiag.pod | 1282 +- Master/tlpkg/tlperl/lib/pods/perldoc.pod | 66 +- Master/tlpkg/tlperl/lib/pods/perldtrace.pod | 179 + Master/tlpkg/tlperl/lib/pods/perlebcdic.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlembed.pod | 16 +- Master/tlpkg/tlperl/lib/pods/perlepoc.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlexperiment.pod | 305 + Master/tlpkg/tlperl/lib/pods/perlfaq.pod | 239 +- Master/tlpkg/tlperl/lib/pods/perlfaq1.pod | 241 +- Master/tlpkg/tlperl/lib/pods/perlfaq2.pod | 369 +- Master/tlpkg/tlperl/lib/pods/perlfaq3.pod | 688 +- Master/tlpkg/tlperl/lib/pods/perlfaq4.pod | 2102 +- Master/tlpkg/tlperl/lib/pods/perlfaq5.pod | 1082 +- Master/tlpkg/tlperl/lib/pods/perlfaq6.pod | 769 +- Master/tlpkg/tlperl/lib/pods/perlfaq7.pod | 739 +- Master/tlpkg/tlperl/lib/pods/perlfaq8.pod | 962 +- Master/tlpkg/tlperl/lib/pods/perlfaq9.pod | 741 +- Master/tlpkg/tlperl/lib/pods/perlfork.pod | 12 +- Master/tlpkg/tlperl/lib/pods/perlform.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perlfreebsd.pod | 11 +- Master/tlpkg/tlperl/lib/pods/perlfunc.pod | 2051 +- Master/tlpkg/tlperl/lib/pods/perlgit.pod | 260 +- Master/tlpkg/tlperl/lib/pods/perlglossary.pod | 46 +- Master/tlpkg/tlperl/lib/pods/perlgpl.pod | 21 +- Master/tlpkg/tlperl/lib/pods/perlguts.pod | 284 +- Master/tlpkg/tlperl/lib/pods/perlhack.pod | 78 +- Master/tlpkg/tlperl/lib/pods/perlhacktips.pod | 12 +- Master/tlpkg/tlperl/lib/pods/perlhaiku.pod | 12 +- Master/tlpkg/tlperl/lib/pods/perlhist.pod | 40 +- Master/tlpkg/tlperl/lib/pods/perlhpux.pod | 29 +- Master/tlpkg/tlperl/lib/pods/perlhurd.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlintern.pod | 2010 +- Master/tlpkg/tlperl/lib/pods/perlinterp.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlintro.pod | 31 +- Master/tlpkg/tlperl/lib/pods/perliol.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlipc.pod | 127 +- Master/tlpkg/tlperl/lib/pods/perlirix.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlko.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perllexwarn.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perllinux.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perllocale.pod | 450 +- Master/tlpkg/tlperl/lib/pods/perllol.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlmacos.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlmacosx.pod | 16 +- Master/tlpkg/tlperl/lib/pods/perlmod.pod | 79 +- Master/tlpkg/tlperl/lib/pods/perlmodinstall.pod | 17 +- Master/tlpkg/tlperl/lib/pods/perlmodlib.pod | 1109 +- Master/tlpkg/tlperl/lib/pods/perlmodstyle.pod | 43 +- Master/tlpkg/tlperl/lib/pods/perlmpeix.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlmroapi.pod | 6 +- Master/tlpkg/tlperl/lib/pods/perlobj.pod | 1422 +- Master/tlpkg/tlperl/lib/pods/perlootut.pod | 741 + Master/tlpkg/tlperl/lib/pods/perlop.pod | 627 +- Master/tlpkg/tlperl/lib/pods/perlopenbsd.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlos2.pod | 52 +- Master/tlpkg/tlperl/lib/pods/perlos390.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perlos400.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlpacktut.pod | 3 +- Master/tlpkg/tlperl/lib/pods/perlperf.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perlpod.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlpodspec.pod | 10 +- Master/tlpkg/tlperl/lib/pods/perlpodstyle.pod | 97 +- Master/tlpkg/tlperl/lib/pods/perlpolicy.pod | 62 +- Master/tlpkg/tlperl/lib/pods/perlport.pod | 15 +- Master/tlpkg/tlperl/lib/pods/perlpragma.pod | 24 +- Master/tlpkg/tlperl/lib/pods/perlqnx.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlre.pod | 365 +- Master/tlpkg/tlperl/lib/pods/perlreapi.pod | 14 +- Master/tlpkg/tlperl/lib/pods/perlrebackslash.pod | 39 +- Master/tlpkg/tlperl/lib/pods/perlrecharclass.pod | 291 +- Master/tlpkg/tlperl/lib/pods/perlref.pod | 85 +- Master/tlpkg/tlperl/lib/pods/perlreftut.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perlrequick.pod | 5 +- Master/tlpkg/tlperl/lib/pods/perlreref.pod | 15 +- Master/tlpkg/tlperl/lib/pods/perlretut.pod | 78 +- Master/tlpkg/tlperl/lib/pods/perlriscos.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlrun.pod | 61 +- Master/tlpkg/tlperl/lib/pods/perlsec.pod | 1 + Master/tlpkg/tlperl/lib/pods/perlsolaris.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlsource.pod | 121 +- Master/tlpkg/tlperl/lib/pods/perlsub.pod | 72 +- Master/tlpkg/tlperl/lib/pods/perlsymbian.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perlsyn.pod | 983 +- Master/tlpkg/tlperl/lib/pods/perlthrtut.pod | 6 +- Master/tlpkg/tlperl/lib/pods/perltie.pod | 9 +- Master/tlpkg/tlperl/lib/pods/perltoc.pod | 24506 +++-- Master/tlpkg/tlperl/lib/pods/perltodo.pod | 1278 +- Master/tlpkg/tlperl/lib/pods/perltooc.pod | 1342 +- Master/tlpkg/tlperl/lib/pods/perltoot.pod | 1836 +- Master/tlpkg/tlperl/lib/pods/perltrap.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perltru64.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perltw.pod | 134 +- Master/tlpkg/tlperl/lib/pods/perlunicode.pod | 605 +- Master/tlpkg/tlperl/lib/pods/perlunifaq.pod | 3 +- Master/tlpkg/tlperl/lib/pods/perluniintro.pod | 89 +- Master/tlpkg/tlperl/lib/pods/perluniprops.pod | 3294 +- Master/tlpkg/tlperl/lib/pods/perlutil.pod | 25 +- Master/tlpkg/tlperl/lib/pods/perlvar.pod | 1661 +- Master/tlpkg/tlperl/lib/pods/perlvmesa.pod | 4 +- Master/tlpkg/tlperl/lib/pods/perlvms.pod | 3 +- Master/tlpkg/tlperl/lib/pods/perlvos.pod | 2 +- Master/tlpkg/tlperl/lib/pods/perlwin32.pod | 81 +- Master/tlpkg/tlperl/lib/pods/perlxs.pod | 195 +- Master/tlpkg/tlperl/lib/pods/perlxstut.pod | 49 +- Master/tlpkg/tlperl/lib/pods/perlxstypemap.pod | 699 + Master/tlpkg/tlperl/lib/pwd.pl | 71 - Master/tlpkg/tlperl/lib/re.pm | 8 +- Master/tlpkg/tlperl/lib/shellwords.pl | 19 - Master/tlpkg/tlperl/lib/sigtrap.pm | 4 +- Master/tlpkg/tlperl/lib/stat.pl | 35 - Master/tlpkg/tlperl/lib/strict.pm | 32 +- Master/tlpkg/tlperl/lib/subs.pm | 4 +- Master/tlpkg/tlperl/lib/syslog.pl | 201 - Master/tlpkg/tlperl/lib/tainted.pl | 14 - Master/tlpkg/tlperl/lib/termcap.pl | 183 - Master/tlpkg/tlperl/lib/threads.pm | 36 +- Master/tlpkg/tlperl/lib/threads/shared.pm | 13 +- Master/tlpkg/tlperl/lib/timelocal.pl | 23 - Master/tlpkg/tlperl/lib/unicore/Blocks.txt | 17 +- Master/tlpkg/tlperl/lib/unicore/CaseFolding.txt | 21 +- Master/tlpkg/tlperl/lib/unicore/CombiningClass.pl | 35 +- Master/tlpkg/tlperl/lib/unicore/Decomposition.pl | 163 +- Master/tlpkg/tlperl/lib/unicore/Heavy.pl | 7007 +- Master/tlpkg/tlperl/lib/unicore/Name.pl | 1482 +- Master/tlpkg/tlperl/lib/unicore/Name.pm | 415 + Master/tlpkg/tlperl/lib/unicore/NamedSequences.txt | 13 +- Master/tlpkg/tlperl/lib/unicore/SpecialCasing.txt | 10 +- Master/tlpkg/tlperl/lib/unicore/To/Age.pl | 98 +- Master/tlpkg/tlperl/lib/unicore/To/Bc.pl | 72 +- Master/tlpkg/tlperl/lib/unicore/To/Bmg.pl | 16 +- Master/tlpkg/tlperl/lib/unicore/To/Cf.pl | 767 + Master/tlpkg/tlperl/lib/unicore/To/Digit.pl | 52 +- Master/tlpkg/tlperl/lib/unicore/To/Dt.pl | 759 - Master/tlpkg/tlperl/lib/unicore/To/Ea.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/To/Fold.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/To/GCB.pl | 83 +- Master/tlpkg/tlperl/lib/unicore/To/Gc.pl | 186 +- Master/tlpkg/tlperl/lib/unicore/To/Hst.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/To/Isc.pl | 19 + Master/tlpkg/tlperl/lib/unicore/To/Jg.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/To/Jt.pl | 42 +- Master/tlpkg/tlperl/lib/unicore/To/Lb.pl | 206 +- Master/tlpkg/tlperl/lib/unicore/To/Lc.pl | 652 + Master/tlpkg/tlperl/lib/unicore/To/Lower.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/To/NFCQC.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/To/NFDQC.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/To/NFKCCF.pl | 167 +- Master/tlpkg/tlperl/lib/unicore/To/NFKCQC.pl | 48 +- Master/tlpkg/tlperl/lib/unicore/To/NFKDQC.pl | 48 +- Master/tlpkg/tlperl/lib/unicore/To/Na1.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/To/NameAlia.pl | 468 + Master/tlpkg/tlperl/lib/unicore/To/Nt.pl | 14 +- Master/tlpkg/tlperl/lib/unicore/To/Nv.pl | 989 +- Master/tlpkg/tlperl/lib/unicore/To/PerlDeci.pl | 67 + Master/tlpkg/tlperl/lib/unicore/To/SB.pl | 118 +- Master/tlpkg/tlperl/lib/unicore/To/Sc.pl | 128 +- Master/tlpkg/tlperl/lib/unicore/To/Scx.pl | 773 + Master/tlpkg/tlperl/lib/unicore/To/Tc.pl | 707 + Master/tlpkg/tlperl/lib/unicore/To/Title.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/To/Uc.pl | 761 + Master/tlpkg/tlperl/lib/unicore/To/Upper.pl | 20 +- Master/tlpkg/tlperl/lib/unicore/To/WB.pl | 101 +- Master/tlpkg/tlperl/lib/unicore/To/_slc.pl | 46 - Master/tlpkg/tlperl/lib/unicore/To/_stc.pl | 45 - Master/tlpkg/tlperl/lib/unicore/To/_suc.pl | 45 - Master/tlpkg/tlperl/lib/unicore/UCD.pl | 7960 ++ Master/tlpkg/tlperl/lib/unicore/lib/AHex/N.pl | 16 - Master/tlpkg/tlperl/lib/unicore/lib/AHex/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Age/1_1.pl | 300 - Master/tlpkg/tlperl/lib/unicore/lib/Age/2_0.pl | 41 - Master/tlpkg/tlperl/lib/unicore/lib/Age/2_1.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Age/3_0.pl | 133 - Master/tlpkg/tlperl/lib/unicore/lib/Age/3_1.pl | 48 - Master/tlpkg/tlperl/lib/unicore/lib/Age/3_2.pl | 71 - Master/tlpkg/tlperl/lib/unicore/lib/Age/4_0.pl | 89 - Master/tlpkg/tlperl/lib/unicore/lib/Age/4_1.pl | 98 - Master/tlpkg/tlperl/lib/unicore/lib/Age/5_0.pl | 47 - Master/tlpkg/tlperl/lib/unicore/lib/Age/5_1.pl | 101 - Master/tlpkg/tlperl/lib/unicore/lib/Age/5_2.pl | 102 - Master/tlpkg/tlperl/lib/unicore/lib/Age/6_0.pl | 118 - Master/tlpkg/tlperl/lib/unicore/lib/Age/NA.pl | 560 + .../tlpkg/tlperl/lib/unicore/lib/Age/Unassign.pl | 522 - Master/tlpkg/tlperl/lib/unicore/lib/Age/V11.pl | 300 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V20.pl | 41 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V21.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V30.pl | 133 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V31.pl | 48 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V32.pl | 71 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V40.pl | 89 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V41.pl | 98 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V50.pl | 47 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V51.pl | 101 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V52.pl | 102 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V60.pl | 118 + Master/tlpkg/tlperl/lib/unicore/lib/Age/V61.pl | 101 + Master/tlpkg/tlperl/lib/unicore/lib/Alpha/N.pl | 499 - Master/tlpkg/tlperl/lib/unicore/lib/Alpha/Y.pl | 90 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/AL.pl | 14 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/AN.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/B.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/BN.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/CS.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/EN.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/ES.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/ET.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/L.pl | 63 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/LRE.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/LRO.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/NSM.pl | 29 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/ON.pl | 36 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/PDF.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/R.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/RLE.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/RLO.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/S.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Bc/WS.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/BidiC/N.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/BidiC/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/BidiM/N.pl | 124 - Master/tlpkg/tlperl/lib/unicore/lib/BidiM/Y.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/ASCII.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/AegeanNu.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Alchemic.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Alphabet.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Ancient2.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/AncientG.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/AncientS.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Arabic.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/ArabicEx.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/ArabicMa.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/ArabicP2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/ArabicPF.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/ArabicPr.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/ArabicSu.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Armenian.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Arrows.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Avestan.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Balinese.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Bamum.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/BamumSup.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Batak.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Bengali.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/BlockEle.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Bopomof2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Bopomofo.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/BoxDrawi.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Brahmi.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/BrailleP.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Buginese.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Buhid.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Byzantin.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJK.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKComp2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKComp3.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKComp4.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKCompa.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKExtA.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKExtB.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKExtC.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKExtD.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKRadic.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKStrok.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKSymbo.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnif2.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnif3.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnif4.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnif5.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnifi.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Canadian.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/Carian.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Chakma.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/Cham.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Cherokee.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Combini2.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Combini3.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Combini4.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Combinin.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/CommonIn.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/CompatJa.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/ControlP.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Coptic.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Counting.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Cuneifo2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Cuneifor.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Currency.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/CypriotS.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Cyrilli2.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Cyrilli3.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Cyrilli4.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Cyrillic.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Deseret.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Devanag2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Devanaga.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Diacrit2.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Diacrit3.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Diacriti.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Dingbats.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Domino.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/DominoTi.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Egyptian.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Emoticon.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Enclose2.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Enclose3.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Enclose4.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Enclosed.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Ethiopi2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Ethiopi3.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Ethiopi4.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Ethiopic.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/GeneralP.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Geometri.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Georgia2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Georgian.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Glagolit.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Gothic.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Greek.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/GreekExt.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Gujarati.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Gurmukhi.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/HalfAndF.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/HalfMark.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Halfwidt.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/Hangul.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/HangulCo.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/HangulJ2.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/HangulJ3.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/HangulJa.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/HangulSy.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/Hanunoo.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Hebrew.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/HighPUSu.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/HighPriv.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/HighSurr.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Hiragana.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/IDC.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/IPAExt.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/IPAExten.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Ideograp.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Imperial.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/IndicNum.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Inscrip2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Inscript.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Jamo.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/JamoExtA.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/JamoExtB.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Javanese.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Kaithi.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/KanaSup.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/KanaSupp.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/Kanbun.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Kangxi.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/KangxiRa.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/Kannada.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Katakan2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Katakana.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/KayahLi.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Kharosht.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Khmer.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/KhmerSym.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Lao.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Latin1.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/LatinEx2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/LatinEx3.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/LatinEx4.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/LatinEx5.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/LatinExt.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Lepcha.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Letterli.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Limbu.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/LinearBI.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/LinearBS.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Lisu.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/LowSurro.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Lycian.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Lydian.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Mahjong.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MahjongT.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Malayala.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Mandaic.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/MathAlph.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MathOper.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Mathema2.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Mathemat.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/MeeteiM2.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MeeteiMa.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Meroitic.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/Miao.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MiscArro.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MiscMat2.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MiscMath.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MiscPict.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MiscSymb.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MiscTech.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Miscell2.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Miscell3.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Miscell4.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Miscell5.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Miscell6.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Miscella.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Modifie2.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Modifier.pl | 10 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Mongolia.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Music.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/MusicalS.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/Myanmar.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/MyanmarE.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/NB.pl | 48 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/NKo.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/NewTaiLu.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/NoBlock.pl | 45 - .../tlpkg/tlperl/lib/unicore/lib/Blk/NumberFo.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/OCR.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/Ogham.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/OlChiki.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/OldItali.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/OldPersi.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/OldSouth.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/OldTurki.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/OpticalC.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/Oriya.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Osmanya.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/PUA.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/PhagsPa.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Phaistos.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Phoenici.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Phoneti2.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Phonetic.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/PlayingC.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/PrivateU.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Punctuat.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/Rejang.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Rumi.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/RumiNume.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/Runic.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Samarita.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Saurasht.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Sharada.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/Shavian.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/Sinhala.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/SmallFor.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/SoraSomp.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/SpacingM.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Specials.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Sundane2.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Sundanes.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/SupArro2.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/SupArrow.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/SupMathO.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/SupPUAA.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/SupPUAB.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/SupPunct.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/SuperAnd.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Superscr.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Supplem2.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Supplem3.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Supplem4.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Supplem5.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Supplem6.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Suppleme.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/SylotiNa.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Syriac.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Tagalog.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Tagbanwa.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Tags.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/TaiLe.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/TaiTham.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/TaiViet.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/TaiXuanJ.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Takri.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/Tamil.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Telugu.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Thaana.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Thai.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Tibetan.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Tifinagh.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Transpor.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/UCAS.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/UCASExt.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/Ugaritic.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/UnifiedC.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Blk/VS.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/VSSup.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Blk/Vai.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Variati2.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/Variatio.pl | 13 - .../tlpkg/tlperl/lib/unicore/lib/Blk/VedicExt.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/Vertical.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/YiRadica.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Blk/YiSyllab.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Blk/Yijing.pl | 13 + .../tlpkg/tlperl/lib/unicore/lib/Blk/YijingHe.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/CE/N.pl | 46 - Master/tlpkg/tlperl/lib/unicore/lib/CE/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/CI/N.pl | 290 - Master/tlpkg/tlperl/lib/unicore/lib/CI/Y.pl | 36 +- Master/tlpkg/tlperl/lib/unicore/lib/CWCF/N.pl | 590 - Master/tlpkg/tlperl/lib/unicore/lib/CWCF/Y.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/CWCM/N.pl | 112 - Master/tlpkg/tlperl/lib/unicore/lib/CWCM/Y.pl | 19 +- Master/tlpkg/tlperl/lib/unicore/lib/CWKCF/N.pl | 765 - Master/tlpkg/tlperl/lib/unicore/lib/CWKCF/Y.pl | 51 +- Master/tlpkg/tlperl/lib/unicore/lib/CWL/N.pl | 579 - Master/tlpkg/tlperl/lib/unicore/lib/CWL/Y.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/CWT/N.pl | 596 - Master/tlpkg/tlperl/lib/unicore/lib/CWT/Y.pl | 14 +- Master/tlpkg/tlperl/lib/unicore/lib/CWU/N.pl | 595 - Master/tlpkg/tlperl/lib/unicore/lib/CWU/Y.pl | 14 +- Master/tlpkg/tlperl/lib/unicore/lib/Cased/N.pl | 125 - Master/tlpkg/tlperl/lib/unicore/lib/Cased/Y.pl | 23 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/10.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/103.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/107.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/11.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/118.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/12.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/122.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/129.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/13.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/130.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/132.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/14.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/15.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/16.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/17.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/18.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/19.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/20.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/21.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/22.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/23.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/24.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/25.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/26.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/27.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/28.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/29.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/30.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/31.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/32.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/33.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/34.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/35.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/36.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/84.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/91.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/A.pl | 19 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/AL.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/AR.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/ATA.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/ATAR.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/ATB.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/ATBL.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Ccc/B.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/BL.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/BR.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC10.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC103.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC107.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC11.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC118.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC12.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC122.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC129.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC13.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC130.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC132.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC14.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC15.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC16.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC17.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC18.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC19.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC20.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC21.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC22.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC23.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC24.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC25.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC26.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC27.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC28.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC29.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC30.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC31.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC32.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC33.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC34.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC35.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC36.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC84.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC91.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Ccc/DA.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/DB.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/IS.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/KV.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/L.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/NK.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/NR.pl | 30 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/OV.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/R.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ccc/VR.pl | 14 +- Master/tlpkg/tlperl/lib/unicore/lib/CompEx/N.pl | 87 - Master/tlpkg/tlperl/lib/unicore/lib/CompEx/Y.pl | 11 +- Master/tlpkg/tlperl/lib/unicore/lib/DI/N.pl | 28 - Master/tlpkg/tlperl/lib/unicore/lib/DI/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dash/N.pl | 32 - Master/tlpkg/tlperl/lib/unicore/lib/Dash/Y.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Dep/N.pl | 22 - Master/tlpkg/tlperl/lib/unicore/lib/Dep/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dia/N.pl | 130 - Master/tlpkg/tlperl/lib/unicore/lib/Dia/Y.pl | 18 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Com.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Enc.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Fin.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Font.pl | 41 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Fra.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Init.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Iso.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Med.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Nar.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Nb.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/NonCanon.pl | 43 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/None.pl | 53 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Sml.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Sqr.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Sub.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Sup.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Dt/Vert.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/A.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/F.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/H.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/N.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/Na.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ea/W.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ext/N.pl | 33 - Master/tlpkg/tlperl/lib/unicore/lib/Ext/Y.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/CN.pl | 21 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/CR.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/GCB/EX.pl | 27 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/L.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/GCB/LF.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/GCB/LV.pl | 411 - Master/tlpkg/tlperl/lib/unicore/lib/GCB/LVT.pl | 411 - Master/tlpkg/tlperl/lib/unicore/lib/GCB/PP.pl | 17 - Master/tlpkg/tlperl/lib/unicore/lib/GCB/SM.pl | 45 +- Master/tlpkg/tlperl/lib/unicore/lib/GCB/T.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/GCB/V.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/GCB/XX.pl | 86 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/C.pl | 127 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Cc.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Cf.pl | 11 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Cn.pl | 128 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Co.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Cs.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/L.pl | 81 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/LC.pl | 23 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Ll.pl | 18 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Lm.pl | 15 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Lo.pl | 70 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Lu.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/M.pl | 27 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Mc.pl | 23 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Me.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Mn.pl | 29 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/N.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Nd.pl | 54 + Master/tlpkg/tlperl/lib/unicore/lib/Gc/Nl.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/No.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/P.pl | 23 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pc.pl | 18 + Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pd.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pe.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pf.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pi.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Po.pl | 23 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Ps.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/S.pl | 42 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Sc.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Sk.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Sm.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/So.pl | 35 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Z.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Zl.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Zp.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Gc/Zs.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/GrBase/N.pl | 609 - Master/tlpkg/tlperl/lib/unicore/lib/GrBase/Y.pl | 121 +- Master/tlpkg/tlperl/lib/unicore/lib/GrExt/N.pl | 228 - Master/tlpkg/tlperl/lib/unicore/lib/Hex/N.pl | 19 - Master/tlpkg/tlperl/lib/unicore/lib/Hex/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Hst/NA.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Hyphen/N.pl | 23 - Master/tlpkg/tlperl/lib/unicore/lib/Hyphen/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/IDC/N.pl | 527 - Master/tlpkg/tlperl/lib/unicore/lib/IDC/Y.pl | 96 +- Master/tlpkg/tlperl/lib/unicore/lib/IDS/N.pl | 450 - Master/tlpkg/tlperl/lib/unicore/lib/IDS/Y.pl | 81 +- Master/tlpkg/tlperl/lib/unicore/lib/IDSB/N.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/IDSB/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/IDST/N.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/IDST/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Ideo/N.pl | 25 - Master/tlpkg/tlperl/lib/unicore/lib/Ideo/Y.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/In/2_0.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/2_1.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/3_0.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/3_1.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/3_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/4_0.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/4_1.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/5_0.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/5_1.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/5_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/6_0.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/In/6_1.pl | 561 + Master/tlpkg/tlperl/lib/unicore/lib/Jg/Ain.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Alaph.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Alef.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Beh.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Beth.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Burushas.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Dal.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/DalathRi.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/E.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/FarsiYeh.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Fe.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Feh.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/FinalSem.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Gaf.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Gamal.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Hah.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/HamzaOnH.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Jg/He.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Heh.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/HehGoal.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Heth.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Kaf.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Kaph.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Khaph.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/KnottedH.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Lam.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Lamadh.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Meem.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Mim.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/NoJoinin.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Noon.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Nun.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Nya.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Pe.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Qaf.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Qaph.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Reh.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Reversed.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Rohingya.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Jg/Sad.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Sadhe.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Seen.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Semkath.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Shin.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/SwashKaf.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/SyriacWa.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Tah.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Taw.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/TehMarb2.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Jg/TehMarbu.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Teth.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Waw.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Yeh.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/YehBarre.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/YehWithT.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Yudh.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/YudhHe.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Zain.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jg/Zhain.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/JoinC/N.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/JoinC/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/C.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/D.pl | 15 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/R.pl | 14 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/T.pl | 28 +- Master/tlpkg/tlperl/lib/unicore/lib/Jt/U.pl | 45 +- Master/tlpkg/tlperl/lib/unicore/lib/LOE/N.pl | 18 - Master/tlpkg/tlperl/lib/unicore/lib/LOE/Y.pl | 17 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/AI.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/AL.pl | 112 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/B2.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/BA.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/BB.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/BK.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/CB.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/CJ.pl | 37 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/CL.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/CM.pl | 25 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/CP.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/CR.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/EX.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/GL.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/H2.pl | 411 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/H3.pl | 411 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/HL.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/HY.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/ID.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/IN.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/IS.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/JL.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/JT.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/JV.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/LF.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Lb/NL.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/NS.pl | 36 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/NU.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/OP.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/PO.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/PR.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/QU.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/SA.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/SG.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/SP.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/SY.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/WJ.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/XX.pl | 125 +- Master/tlpkg/tlperl/lib/unicore/lib/Lb/ZW.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Lower/N.pl | 625 - Master/tlpkg/tlperl/lib/unicore/lib/Lower/Y.pl | 18 +- Master/tlpkg/tlperl/lib/unicore/lib/Math/N.pl | 119 - Master/tlpkg/tlperl/lib/unicore/lib/Math/Y.pl | 46 +- Master/tlpkg/tlperl/lib/unicore/lib/NChar/N.pl | 30 - Master/tlpkg/tlperl/lib/unicore/lib/NChar/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/NFCQC/Y.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/NFDQC/N.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/NFDQC/Y.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/NFKCQC/M.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/NFKCQC/N.pl | 46 +- Master/tlpkg/tlperl/lib/unicore/lib/NFKCQC/Y.pl | 53 +- Master/tlpkg/tlperl/lib/unicore/lib/NFKDQC/N.pl | 47 +- Master/tlpkg/tlperl/lib/unicore/lib/Nt/De.pl | 50 - Master/tlpkg/tlperl/lib/unicore/lib/Nt/Di.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nt/Nu.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/0.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/10.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/100.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/10000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/100000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/10000000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/10000002.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/11.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/11_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/12.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/13.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/13_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/14.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/15.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/15_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/16.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/17.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/17_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/18.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/19.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_10.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_16.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_3.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_4.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_5.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_6.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_7.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_8.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/1_9.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/2.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/20.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/200.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/2000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/20000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/21.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/22.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/23.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/24.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/25.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/26.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/27.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/28.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/29.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/2_3.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/2_5.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/3.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/30.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/300.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/3000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/30000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/31.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/32.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/33.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/34.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/35.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/36.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/37.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/38.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/39.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/3_16.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/3_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/3_4.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/3_5.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/3_8.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/4.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/40.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/400.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/4000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/40000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/41.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/42.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/43.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/44.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/45.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/46.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/47.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/48.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/49.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/4_5.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/5.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/50.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/500.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/5000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/50000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/5_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/5_6.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/5_8.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/6.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/60.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/600.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/6000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/60000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/7.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/70.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/700.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/7000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/70000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/7_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/7_8.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/8.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/80.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/800.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/8000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/80000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/9.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/90.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/900.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/9000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/90000.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/9_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/NaN.pl | 17 +- Master/tlpkg/tlperl/lib/unicore/lib/Nv/_1_2.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/OAlpha/N.pl | 158 - Master/tlpkg/tlperl/lib/unicore/lib/OAlpha/Y.pl | 157 - Master/tlpkg/tlperl/lib/unicore/lib/ODI/N.pl | 23 - Master/tlpkg/tlperl/lib/unicore/lib/ODI/Y.pl | 22 - Master/tlpkg/tlperl/lib/unicore/lib/OGrExt/N.pl | 29 - Master/tlpkg/tlperl/lib/unicore/lib/OGrExt/Y.pl | 28 - Master/tlpkg/tlperl/lib/unicore/lib/OIDC/N.pl | 17 - Master/tlpkg/tlperl/lib/unicore/lib/OIDC/Y.pl | 16 - Master/tlpkg/tlperl/lib/unicore/lib/OIDS/N.pl | 16 - Master/tlpkg/tlperl/lib/unicore/lib/OIDS/Y.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/OLower/N.pl | 26 - Master/tlpkg/tlperl/lib/unicore/lib/OLower/Y.pl | 25 - Master/tlpkg/tlperl/lib/unicore/lib/OMath/N.pl | 113 - Master/tlpkg/tlperl/lib/unicore/lib/OMath/Y.pl | 112 - Master/tlpkg/tlperl/lib/unicore/lib/OUpper/N.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/OUpper/Y.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/PatSyn/N.pl | 41 - Master/tlpkg/tlperl/lib/unicore/lib/PatSyn/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/PatWS/N.pl | 18 - Master/tlpkg/tlperl/lib/unicore/lib/PatWS/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Alnum.pl | 93 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Any.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/Assigned.pl | 124 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Blank.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Graph.pl | 124 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PerlSpac.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PerlWord.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixAln.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixAlp.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixBla.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixCnt.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixDig.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixGra.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixLow.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixPri.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixPun.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixSpa.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/PosixUpp.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Print.pl | 124 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/SpacePer.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Title.pl | 8 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/VertSpac.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Perl/Word.pl | 96 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/XPosixPu.pl | 23 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlIDS.pl | 509 + .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlNon.pl | 40 + .../tlpkg/tlperl/lib/unicore/lib/Perl/_PerlQuo.pl | 49 + .../tlpkg/tlperl/lib/unicore/lib/Perl/_XBegin.pl | 25 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_XExtend.pl | 55 +- .../tlpkg/tlperl/lib/unicore/lib/Perl/_XLVLVTV.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/QMark/N.pl | 25 - Master/tlpkg/tlperl/lib/unicore/lib/QMark/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Radical/N.pl | 16 - Master/tlpkg/tlperl/lib/unicore/lib/Radical/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/AT.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/CL.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/EX.pl | 27 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/FO.pl | 11 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/LE.pl | 73 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/LO.pl | 18 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/SC.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/SE.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/ST.pl | 11 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/Sp.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/UP.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/SB/XX.pl | 103 +- Master/tlpkg/tlperl/lib/unicore/lib/SD/N.pl | 44 - Master/tlpkg/tlperl/lib/unicore/lib/SD/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/STerm/N.pl | 60 - Master/tlpkg/tlperl/lib/unicore/lib/STerm/Y.pl | 11 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Arab.pl | 47 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Armi.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Armn.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Avst.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Bali.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Bamu.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Batk.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Beng.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Bopo.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Brah.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Bugi.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Buhd.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cans.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cari.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cham.pl | 16 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cher.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Copt.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cprt.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cyrl.pl | 19 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Deva.pl | 11 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Egyp.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Ethi.pl | 44 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Geor.pl | 14 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Glag.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Goth.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Grek.pl | 45 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Gujr.pl | 11 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Guru.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Han.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hang.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hano.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hebr.pl | 21 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hira.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Ital.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Java.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Kana.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Khar.pl | 20 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Khmr.pl | 16 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Knda.pl | 26 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Kthi.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lana.pl | 17 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lao.pl | 30 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Latn.pl | 42 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lepc.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Limb.pl | 17 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Linb.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lyci.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lydi.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mand.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mlym.pl | 23 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mong.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mtei.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mymr.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Nko.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Ogam.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Orkh.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Orya.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Osma.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Phag.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Phli.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Phnx.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Prti.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Rjng.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Runr.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Samr.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Saur.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Sinh.pl | 23 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Sund.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Sylo.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Syrc.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tagb.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Takr.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tale.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Talu.pl | 16 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Taml.pl | 28 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tavt.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Telu.pl | 26 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tfng.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tglg.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Thaa.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Thai.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tibt.pl | 19 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Ugar.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Vai.pl | 13 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Xpeo.pl | 14 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Xsux.pl | 15 - Master/tlpkg/tlperl/lib/unicore/lib/Sc/Yi.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Zinh.pl | 9 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Zyyy.pl | 34 +- Master/tlpkg/tlperl/lib/unicore/lib/Sc/Zzzz.pl | 511 - Master/tlpkg/tlperl/lib/unicore/lib/Scx/Arab.pl | 63 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Armi.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Armn.pl | 18 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Avst.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Bali.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Bamu.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Batk.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Beng.pl | 27 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Bopo.pl | 32 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Brah.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Brai.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Bugi.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Buhd.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cakm.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cans.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cari.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cham.pl | 16 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cher.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Copt.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cprt.pl | 21 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cyrl.pl | 19 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Deva.pl | 17 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Dsrt.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Egyp.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Ethi.pl | 44 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Geor.pl | 21 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Glag.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Goth.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Grek.pl | 45 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Gujr.pl | 26 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Guru.pl | 30 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Han.pl | 40 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hang.pl | 41 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hano.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hebr.pl | 21 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hira.pl | 36 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Ital.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Java.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Kali.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Kana.pl | 34 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Khar.pl | 20 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Khmr.pl | 16 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Knda.pl | 26 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Kthi.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lana.pl | 17 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lao.pl | 30 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Latn.pl | 42 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lepc.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Limb.pl | 17 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Linb.pl | 22 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lisu.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lyci.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lydi.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mand.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Merc.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mero.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Miao.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mlym.pl | 23 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mong.pl | 16 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mtei.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mymr.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Nko.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Ogam.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Olck.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Orkh.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Orya.pl | 27 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Osma.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Phag.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Phli.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Phnx.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Prti.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Rjng.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Runr.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Samr.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sarb.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Saur.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Shaw.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Shrd.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sinh.pl | 23 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sora.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sund.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sylo.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Syrc.pl | 21 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tagb.pl | 16 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Takr.pl | 16 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tale.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Talu.pl | 16 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Taml.pl | 28 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tavt.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Telu.pl | 26 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tfng.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tglg.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Thaa.pl | 19 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Thai.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tibt.pl | 19 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Ugar.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Vai.pl | 13 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Xpeo.pl | 14 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Xsux.pl | 15 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Yi.pl | 19 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Zinh.pl | 33 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Zyyy.pl | 152 + Master/tlpkg/tlperl/lib/unicore/lib/Scx/Zzzz.pl | 549 + Master/tlpkg/tlperl/lib/unicore/lib/Space/N.pl | 24 - Master/tlpkg/tlperl/lib/unicore/lib/Space/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/Term/N.pl | 80 - Master/tlpkg/tlperl/lib/unicore/lib/Term/Y.pl | 11 +- Master/tlpkg/tlperl/lib/unicore/lib/UIdeo/N.pl | 25 - Master/tlpkg/tlperl/lib/unicore/lib/UIdeo/Y.pl | 10 +- Master/tlpkg/tlperl/lib/unicore/lib/Upper/N.pl | 618 - Master/tlpkg/tlperl/lib/unicore/lib/Upper/Y.pl | 13 +- Master/tlpkg/tlperl/lib/unicore/lib/VS/N.pl | 16 - Master/tlpkg/tlperl/lib/unicore/lib/VS/Y.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/EX.pl | 18 - Master/tlpkg/tlperl/lib/unicore/lib/WB/FO.pl | 11 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/KA.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/LE.pl | 74 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/MB.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/ML.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/MN.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/NL.pl | 8 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/NU.pl | 12 +- Master/tlpkg/tlperl/lib/unicore/lib/WB/XX.pl | 98 +- Master/tlpkg/tlperl/lib/unicore/lib/XIDC/N.pl | 534 - Master/tlpkg/tlperl/lib/unicore/lib/XIDC/Y.pl | 96 +- Master/tlpkg/tlperl/lib/unicore/lib/XIDS/N.pl | 457 - Master/tlpkg/tlperl/lib/unicore/lib/XIDS/Y.pl | 81 +- Master/tlpkg/tlperl/lib/unicore/version | 2 +- Master/tlpkg/tlperl/lib/utf8_heavy.pl | 227 +- Master/tlpkg/tlperl/lib/validate.pl | 104 - Master/tlpkg/tlperl/lib/version.pm | 2 +- Master/tlpkg/tlperl/lib/version.pod | 19 +- Master/tlpkg/tlperl/lib/version/Internals.pod | 34 +- Master/tlpkg/tlperl/lib/version/Requirements.pm | 21 +- Master/tlpkg/tlperl/lib/vmsish.pm | 6 +- Master/tlpkg/tlperl/lib/warnings.pm | 9 +- 2264 files changed, 270593 insertions(+), 185323 deletions(-) create mode 100644 Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h create mode 100644 Master/tlpkg/tlperl/lib/CORE/feature.h delete mode 100644 Master/tlpkg/tlperl/lib/CORE/libperl514.a create mode 100644 Master/tlpkg/tlperl/lib/CORE/libperl516.a create mode 100644 Master/tlpkg/tlperl/lib/CORE/mg_data.h create mode 100644 Master/tlpkg/tlperl/lib/CORE/mg_raw.h create mode 100644 Master/tlpkg/tlperl/lib/CORE/mg_vtable.h create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Exception/yaml_process_error.pm create mode 100644 Master/tlpkg/tlperl/lib/CPAN/Meta/Requirements.pm delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf.pm delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/V.pm delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test1_t delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test1_v delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test2_t delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test2_v delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test3_t delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test3_v delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test4_t delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test4_v delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test5_t delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test5_v delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test6_t delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test6_v delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test7_t delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test7_v delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test8_t delete mode 100644 Master/tlpkg/tlperl/lib/Devel/DProf/test8_v delete mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/YAML.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pod create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Constants.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/CountLines.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Utilities.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/Typemaps.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Cmd.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/InputMap.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/OutputMap.pm create mode 100644 Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Type.pm create mode 100644 Master/tlpkg/tlperl/lib/IO/Compress/FAQ.pod delete mode 100644 Master/tlpkg/tlperl/lib/List/Util/PP.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/API.pod create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Constants.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Constants.pod create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Country.pod create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Country_Codes.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Country_Retired.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Currency.pod create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Currency_Codes.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Currency_Retired.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangExt.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangExt.pod create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangExt_Codes.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangExt_Retired.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangFam.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangFam.pod create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangFam_Codes.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangFam_Retired.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangVar.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangVar.pod create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangVar_Codes.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/LangVar_Retired.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Language.pod create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Language_Codes.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Language_Retired.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Script.pod create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Script_Codes.pm create mode 100644 Master/tlpkg/tlperl/lib/Locale/Codes/Script_Retired.pm delete mode 100644 Master/tlpkg/tlperl/lib/Locale/Constants.pm delete mode 100644 Master/tlpkg/tlperl/lib/Locale/Constants.pod create mode 100644 Master/tlpkg/tlperl/lib/Module/CoreList.pod create mode 100644 Master/tlpkg/tlperl/lib/Module/CoreList/TieHashDelta.pm create mode 100644 Master/tlpkg/tlperl/lib/PerlIO/mmap.pm create mode 100644 Master/tlpkg/tlperl/lib/Pod/Perldoc/ToANSI.pm create mode 100644 Master/tlpkg/tlperl/lib/Pod/Perldoc/ToTerm.pm delete mode 100644 Master/tlpkg/tlperl/lib/Scalar/Util/PP.pm delete mode 100644 Master/tlpkg/tlperl/lib/Shell.pm create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/as.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/be.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/bg.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/bn.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/fa.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/fi_phone.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/gu.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/hi.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/kn.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/kok.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ln.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/mk.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ml.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/mr.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/or.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/pa.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sa.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/si.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/si_dict.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sr.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sv_refo.pl delete mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/sw.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ta.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/te.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/th.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/ur.pl create mode 100644 Master/tlpkg/tlperl/lib/Unicode/Collate/Locale/wae.pl create mode 100644 Master/tlpkg/tlperl/lib/_charnames.pm delete mode 100644 Master/tlpkg/tlperl/lib/abbrev.pl create mode 100644 Master/tlpkg/tlperl/lib/arybase.pm delete mode 100644 Master/tlpkg/tlperl/lib/assert.pl create mode 100644 Master/tlpkg/tlperl/lib/auto/B/B.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Compress/Raw/Bzip2/Bzip2.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Compress/Raw/Zlib/Zlib.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Cwd/Cwd.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Data/Dumper/Dumper.bs delete mode 100755 Master/tlpkg/tlperl/lib/auto/Devel/DProf/DProf.dll create mode 100644 Master/tlpkg/tlperl/lib/auto/Devel/PPPort/PPPort.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Devel/Peek/Peek.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Digest/MD5/MD5.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Digest/SHA/SHA.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/Byte/Byte.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/CN/CN.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/EBCDIC/EBCDIC.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/Encode.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/JP/JP.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/KR/KR.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/Symbol/Symbol.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/TW/TW.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Encode/Unicode/Unicode.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Fcntl/Fcntl.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/File/Glob/Glob.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Filter/Util/Call/Call.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Hash/Util/FieldHash/FieldHash.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Hash/Util/Util.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/IO/IO.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/List/Util/Util.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/MIME/Base64/Base64.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Math/BigInt/FastCalc/FastCalc.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Opcode/Opcode.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/POSIX.bs delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/flags.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/handler.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/mask.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/new.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigAction/safe.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/CLEAR.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/DELETE.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/EXISTS.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/FETCH.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/SCALAR.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/STORE.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/_check.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/_croak.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/_exist.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/_getsig.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/_init.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/SigRt/new.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/abs.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/alarm.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/assert.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/atan2.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/atexit.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/atof.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/atoi.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/atol.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/autosplit.ix delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/bsearch.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/calloc.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/chdir.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/chmod.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/chown.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/clearerr.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/closedir.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/cos.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/creat.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/div.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/errno.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/execl.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/execle.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/execlp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/execv.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/execve.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/execvp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/exit.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/exp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fabs.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fclose.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fcntl.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fdopen.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/feof.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/ferror.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fflush.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fgetc.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fgetpos.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fgets.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fileno.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fopen.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fork.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fprintf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fputc.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fputs.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fread.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/free.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/freopen.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fscanf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fseek.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fsetpos.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fstat.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fsync.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/ftell.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/fwrite.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getc.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getchar.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getegid.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getenv.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/geteuid.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getgid.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getgrgid.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getgrnam.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getgroups.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getlogin.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getpgrp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getpid.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getppid.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getpwnam.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getpwuid.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/gets.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/getuid.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/gmtime.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/isatty.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/kill.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/labs.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/ldiv.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/link.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/load_imports.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/localtime.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/log.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/longjmp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/malloc.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/memchr.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/memcmp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/memcpy.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/memmove.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/memset.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/mkdir.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/offsetof.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/opendir.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/perror.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/pow.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/printf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/putc.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/putchar.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/puts.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/qsort.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/raise.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/rand.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/readdir.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/realloc.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/redef.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/remove.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/rename.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/rewind.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/rewinddir.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/rmdir.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/scanf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/setbuf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/setjmp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/setvbuf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/siglongjmp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/sigsetjmp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/sin.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/sleep.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/sprintf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/sqrt.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/srand.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/sscanf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/stat.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strcat.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strchr.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strcmp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strcpy.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strcspn.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strerror.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strlen.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strncat.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strncmp.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strncpy.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strpbrk.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strrchr.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strspn.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strstr.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/strtok.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/system.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/time.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/tmpfile.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/tolower.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/toupper.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/umask.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/ungetc.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/unimpl.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/unlink.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/usage.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/utime.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/vfprintf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/vprintf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/vsprintf.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/wait.al delete mode 100644 Master/tlpkg/tlperl/lib/auto/POSIX/waitpid.al create mode 100644 Master/tlpkg/tlperl/lib/auto/PerlIO/encoding/encoding.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/PerlIO/mmap/mmap.bs create mode 100755 Master/tlpkg/tlperl/lib/auto/PerlIO/mmap/mmap.dll create mode 100644 Master/tlpkg/tlperl/lib/auto/PerlIO/scalar/scalar.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/PerlIO/via/via.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/SDBM_File/SDBM_File.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Socket/Socket.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Storable/Storable.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Sys/Hostname/Hostname.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Text/Soundex/Soundex.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Tie/Hash/NamedCapture/NamedCapture.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Time/HiRes/HiRes.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Time/Piece/Piece.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Unicode/Collate/Collate.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Unicode/Normalize/Normalize.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Win32/Win32.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/Win32API/File/File.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/arybase/arybase.bs create mode 100755 Master/tlpkg/tlperl/lib/auto/arybase/arybase.dll create mode 100644 Master/tlpkg/tlperl/lib/auto/attributes/attributes.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/mro/mro.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/re/re.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/threads/shared/shared.bs create mode 100644 Master/tlpkg/tlperl/lib/auto/threads/threads.bs delete mode 100644 Master/tlpkg/tlperl/lib/bigfloat.pl delete mode 100644 Master/tlpkg/tlperl/lib/bigint.pl delete mode 100644 Master/tlpkg/tlperl/lib/bigrat.pl delete mode 100644 Master/tlpkg/tlperl/lib/cacheout.pl delete mode 100644 Master/tlpkg/tlperl/lib/complete.pl delete mode 100644 Master/tlpkg/tlperl/lib/ctime.pl delete mode 100644 Master/tlpkg/tlperl/lib/dotsh.pl delete mode 100644 Master/tlpkg/tlperl/lib/exceptions.pl delete mode 100644 Master/tlpkg/tlperl/lib/fastcwd.pl delete mode 100644 Master/tlpkg/tlperl/lib/find.pl delete mode 100644 Master/tlpkg/tlperl/lib/finddepth.pl delete mode 100644 Master/tlpkg/tlperl/lib/flush.pl delete mode 100644 Master/tlpkg/tlperl/lib/getcwd.pl delete mode 100644 Master/tlpkg/tlperl/lib/getopt.pl delete mode 100644 Master/tlpkg/tlperl/lib/getopts.pl delete mode 100644 Master/tlpkg/tlperl/lib/hostname.pl delete mode 100644 Master/tlpkg/tlperl/lib/importenv.pl delete mode 100644 Master/tlpkg/tlperl/lib/look.pl delete mode 100644 Master/tlpkg/tlperl/lib/newgetopt.pl delete mode 100644 Master/tlpkg/tlperl/lib/open2.pl delete mode 100644 Master/tlpkg/tlperl/lib/open3.pl create mode 100644 Master/tlpkg/tlperl/lib/perlfaq.pm delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5110delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5111delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5112delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5113delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5114delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5115delta.pod create mode 100644 Master/tlpkg/tlperl/lib/pods/perl5124delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5130delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl51310delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl51311delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5131delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5132delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5133delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5134delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5135delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5136delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5137delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5138delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl5139delta.pod create mode 100644 Master/tlpkg/tlperl/lib/pods/perl5143delta.pod create mode 100644 Master/tlpkg/tlperl/lib/pods/perl5160delta.pod create mode 100644 Master/tlpkg/tlperl/lib/pods/perl5161delta.pod create mode 100644 Master/tlpkg/tlperl/lib/pods/perl5162delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl570delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl571delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl572delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl573delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl590delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl591delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl592delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl593delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl594delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perl595delta.pod delete mode 100644 Master/tlpkg/tlperl/lib/pods/perlcompile.pod create mode 100644 Master/tlpkg/tlperl/lib/pods/perldtrace.pod create mode 100644 Master/tlpkg/tlperl/lib/pods/perlexperiment.pod create mode 100644 Master/tlpkg/tlperl/lib/pods/perlootut.pod create mode 100644 Master/tlpkg/tlperl/lib/pods/perlxstypemap.pod delete mode 100644 Master/tlpkg/tlperl/lib/pwd.pl delete mode 100644 Master/tlpkg/tlperl/lib/shellwords.pl delete mode 100644 Master/tlpkg/tlperl/lib/stat.pl delete mode 100644 Master/tlpkg/tlperl/lib/syslog.pl delete mode 100644 Master/tlpkg/tlperl/lib/tainted.pl delete mode 100644 Master/tlpkg/tlperl/lib/termcap.pl delete mode 100644 Master/tlpkg/tlperl/lib/timelocal.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/Name.pm create mode 100644 Master/tlpkg/tlperl/lib/unicore/To/Cf.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/To/Dt.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/To/Isc.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/To/Lc.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/To/NameAlia.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/To/PerlDeci.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/To/Scx.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/To/Tc.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/To/Uc.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/To/_slc.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/To/_stc.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/To/_suc.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/UCD.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/AHex/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/1_1.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/2_0.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/2_1.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/3_0.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/3_1.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/3_2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/4_0.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/4_1.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/5_0.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/5_1.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/5_2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/6_0.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/NA.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/Unassign.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V11.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V20.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V21.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V30.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V31.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V32.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V40.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V41.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V50.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V51.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V52.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V60.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Age/V61.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Alpha/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/BidiC/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/BidiM/N.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/ArabicEx.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/ArabicMa.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/ArabicPF.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/ArabicPr.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/BrailleP.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJK.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKExtA.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKExtB.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKExtC.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKExtD.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnif2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnif3.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnif4.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnif5.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CJKUnifi.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Canadian.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Chakma.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Combini2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Combini3.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Combini4.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Combinin.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CommonIn.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/CompatJa.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Deseret.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Diacrit2.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Diacrit3.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Diacriti.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Domino.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/DominoTi.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/GeneralP.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/HalfAndF.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/HalfMark.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Halfwidt.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Hangul.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/HangulCo.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/HangulJ2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/HangulJ3.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/HangulJa.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/HangulSy.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/HighPUSu.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/HighPriv.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/IDC.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/IPAExt.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/IPAExten.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Ideograp.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/IndicNum.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Jamo.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/JamoExtA.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/JamoExtB.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/KanaSup.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/KanaSupp.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Kangxi.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/KangxiRa.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/KayahLi.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Lisu.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Mahjong.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MahjongT.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MathAlph.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MathOper.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Mathema2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Mathemat.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MeeteiM2.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Meroitic.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Miao.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MiscArro.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MiscMat2.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MiscMath.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MiscPict.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MiscSymb.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MiscTech.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Miscell2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Miscell3.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Miscell4.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Miscell5.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Miscell6.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Miscella.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Modifie2.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Music.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/MusicalS.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/NB.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/NoBlock.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/OCR.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/OlChiki.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/OldSouth.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/OpticalC.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/PUA.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/PrivateU.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Punctuat.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Rumi.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/RumiNume.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Sharada.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Shavian.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/SoraSomp.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/SpacingM.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Sundane2.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/SupArro2.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/SupArrow.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/SupMathO.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/SupPUAA.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/SupPUAB.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/SupPunct.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/SuperAnd.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Superscr.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Supplem2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Supplem3.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Supplem4.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Supplem5.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Supplem6.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Suppleme.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Takri.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/UCAS.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/UCASExt.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/UnifiedC.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/VS.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/VSSup.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Variati2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Variatio.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/Yijing.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Blk/YijingHe.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/CE/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/CI/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/CWCF/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/CWCM/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/CWKCF/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/CWL/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/CWT/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/CWU/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Cased/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/10.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/103.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/107.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/11.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/118.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/12.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/122.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/129.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/13.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/130.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/132.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/14.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/15.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/16.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/17.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/18.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/19.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/20.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/21.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/22.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/23.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/24.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/25.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/26.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/27.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/28.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/29.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/30.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/31.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/32.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/33.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/34.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/35.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/36.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/84.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/91.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/ATBL.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC10.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC103.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC107.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC11.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC118.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC12.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC122.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC129.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC13.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC130.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC132.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC14.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC15.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC16.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC17.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC18.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC19.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC20.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC21.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC22.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC23.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC24.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC25.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC26.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC27.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC28.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC29.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC30.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC31.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC32.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC33.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC34.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC35.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC36.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC84.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ccc/CCC91.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/CompEx/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/DI/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Dash/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Dep/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Dia/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ext/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GCB/CR.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GCB/L.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GCB/LF.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GCB/LV.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GCB/LVT.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GCB/PP.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GCB/T.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GCB/V.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Gc/Nd.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Gc/Pc.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GrBase/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/GrExt/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Hex/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Hyphen/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/IDC/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/IDS/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/IDSB/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/IDST/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Ideo/N.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/In/6_1.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Jg/HamzaOnH.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Jg/Rohingya.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Jg/TehMarb2.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/JoinC/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/LOE/N.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/LOE/Y.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lb/CJ.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lb/CR.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lb/H2.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lb/H3.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lb/HL.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lb/JL.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lb/JT.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lb/JV.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lb/LF.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Lower/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Math/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/NChar/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Nt/De.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OAlpha/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OAlpha/Y.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/ODI/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/ODI/Y.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OGrExt/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OGrExt/Y.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OIDC/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OIDC/Y.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OIDS/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OIDS/Y.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OLower/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OLower/Y.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OMath/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OMath/Y.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OUpper/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/OUpper/Y.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/PatSyn/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/PatWS/N.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Perl/_PerlIDS.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Perl/_PerlNon.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Perl/_PerlQuo.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/QMark/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Radical/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/SD/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/STerm/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Armi.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Avst.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Bali.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Bamu.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Batk.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Brah.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Bugi.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cans.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cari.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cham.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cher.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Copt.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Cyrl.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Egyp.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Ethi.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Glag.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Goth.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Grek.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Hebr.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Ital.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Java.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Khar.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Khmr.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Knda.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lana.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lao.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Latn.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lepc.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Limb.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lyci.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Lydi.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mlym.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mtei.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Mymr.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Nko.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Ogam.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Orkh.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Osma.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Phli.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Phnx.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Prti.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Rjng.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Runr.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Samr.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Saur.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Sinh.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Sund.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Sylo.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Takr.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tale.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Talu.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Taml.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tavt.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Telu.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tfng.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Thai.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Tibt.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Ugar.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Vai.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Xpeo.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Xsux.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Sc/Zzzz.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Arab.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Armi.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Armn.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Avst.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Bali.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Bamu.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Batk.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Beng.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Bopo.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Brah.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Brai.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Bugi.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Buhd.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cakm.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cans.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cari.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cham.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cher.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Copt.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cprt.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Cyrl.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Deva.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Dsrt.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Egyp.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Ethi.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Geor.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Glag.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Goth.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Grek.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Gujr.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Guru.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Han.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hang.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hano.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hebr.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Hira.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Ital.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Java.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Kali.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Kana.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Khar.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Khmr.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Knda.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Kthi.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lana.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lao.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Latn.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lepc.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Limb.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Linb.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lisu.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lyci.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Lydi.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mand.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Merc.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mero.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Miao.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mlym.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mong.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mtei.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Mymr.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Nko.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Ogam.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Olck.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Orkh.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Orya.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Osma.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Phag.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Phli.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Phnx.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Prti.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Rjng.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Runr.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Samr.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sarb.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Saur.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Shaw.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Shrd.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sinh.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sora.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sund.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Sylo.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Syrc.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tagb.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Takr.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tale.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Talu.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Taml.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tavt.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Telu.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tfng.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tglg.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Thaa.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Thai.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Tibt.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Ugar.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Vai.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Xpeo.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Xsux.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Yi.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Zinh.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Zyyy.pl create mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Scx/Zzzz.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Space/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Term/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/UIdeo/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/Upper/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/VS/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/WB/EX.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/XIDC/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/unicore/lib/XIDS/N.pl delete mode 100644 Master/tlpkg/tlperl/lib/validate.pl (limited to 'Master/tlpkg/tlperl/lib') diff --git a/Master/tlpkg/tlperl/lib/.packlist b/Master/tlpkg/tlperl/lib/.packlist index 5ad15b45e78..61180acc008 100644 --- a/Master/tlpkg/tlperl/lib/.packlist +++ b/Master/tlpkg/tlperl/lib/.packlist @@ -1,2198 +1,2081 @@ -x:\tlperl\bin/a2p.exe type=file -x:\tlperl\bin/c2ph.bat type=file -x:\tlperl\bin/config_data.bat type=file -x:\tlperl\bin/corelist.bat type=file -x:\tlperl\bin/cpan.bat type=file -x:\tlperl\bin/cpan2dist.bat type=file -x:\tlperl\bin/cpanp-run-perl.bat type=file -x:\tlperl\bin/cpanp.bat type=file -x:\tlperl\bin/dprofpp.bat type=file -x:\tlperl\bin/enc2xs.bat type=file -x:\tlperl\bin/find2perl.bat type=file -x:\tlperl\bin/h2ph.bat type=file -x:\tlperl\bin/h2xs.bat type=file -x:\tlperl\bin/instmodsh.bat type=file -x:\tlperl\bin/json_pp.bat type=file -x:\tlperl\bin/libnetcfg.bat type=file -x:\tlperl\bin/perl.exe from=x:\tlperl\bin/perl5.14.2.exe type=link -x:\tlperl\bin/perl5.14.2.exe type=file -x:\tlperl\bin/perl514.dll type=file -x:\tlperl\bin/perlbug.bat type=file -x:\tlperl\bin/perldoc.bat type=file -x:\tlperl\bin/perlivp.bat type=file -x:\tlperl\bin/perlthanks.bat from=x:\tlperl\bin/perlbug.bat type=link -x:\tlperl\bin/piconv.bat type=file -x:\tlperl\bin/pl2pm.bat type=file -x:\tlperl\bin/pod2html.bat type=file -x:\tlperl\bin/pod2latex.bat type=file -x:\tlperl\bin/pod2man.bat type=file -x:\tlperl\bin/pod2text.bat type=file -x:\tlperl\bin/pod2usage.bat type=file -x:\tlperl\bin/podchecker.bat type=file -x:\tlperl\bin/podselect.bat type=file -x:\tlperl\bin/prove.bat type=file -x:\tlperl\bin/psed.bat from=x:\tlperl\bin/s2p.bat type=link -x:\tlperl\bin/pstruct.bat from=x:\tlperl\bin/c2ph.bat type=link -x:\tlperl\bin/ptar.bat type=file -x:\tlperl\bin/ptardiff.bat type=file -x:\tlperl\bin/ptargrep.bat type=file -x:\tlperl\bin/s2p.bat type=file -x:\tlperl\bin/shasum.bat type=file -x:\tlperl\bin/splain.bat type=file -x:\tlperl\bin/xsubpp.bat type=file -x:\tlperl\lib/AnyDBM_File.pm type=file -x:\tlperl\lib/App/Cpan.pm type=file -x:\tlperl\lib/App/Prove.pm type=file -x:\tlperl\lib/App/Prove/State.pm type=file -x:\tlperl\lib/App/Prove/State/Result.pm type=file -x:\tlperl\lib/App/Prove/State/Result/Test.pm type=file -x:\tlperl\lib/Archive/Extract.pm type=file -x:\tlperl\lib/Archive/Tar.pm type=file -x:\tlperl\lib/Archive/Tar/Constant.pm type=file -x:\tlperl\lib/Archive/Tar/File.pm type=file -x:\tlperl\lib/Attribute/Handlers.pm type=file -x:\tlperl\lib/AutoLoader.pm type=file -x:\tlperl\lib/AutoSplit.pm type=file -x:\tlperl\lib/B.pm type=file -x:\tlperl\lib/B/Concise.pm type=file -x:\tlperl\lib/B/Debug.pm type=file -x:\tlperl\lib/B/Deparse.pm type=file -x:\tlperl\lib/B/Lint.pm type=file -x:\tlperl\lib/B/Lint/Debug.pm type=file -x:\tlperl\lib/B/Showlex.pm type=file -x:\tlperl\lib/B/Terse.pm type=file -x:\tlperl\lib/B/Xref.pm type=file -x:\tlperl\lib/Benchmark.pm type=file -x:\tlperl\lib/CGI.pm type=file -x:\tlperl\lib/CGI/Apache.pm type=file -x:\tlperl\lib/CGI/Carp.pm type=file -x:\tlperl\lib/CGI/Cookie.pm type=file -x:\tlperl\lib/CGI/Fast.pm type=file -x:\tlperl\lib/CGI/Pretty.pm type=file -x:\tlperl\lib/CGI/Push.pm type=file -x:\tlperl\lib/CGI/Switch.pm type=file -x:\tlperl\lib/CGI/Util.pm type=file -x:\tlperl\lib/CORE.pod type=file -x:\tlperl\lib/CORE/EXTERN.h type=file -x:\tlperl\lib/CORE/INTERN.h type=file -x:\tlperl\lib/CORE/XSUB.h type=file -x:\tlperl\lib/CORE/arpa/inet.h type=file -x:\tlperl\lib/CORE/av.h type=file -x:\tlperl\lib/CORE/bitcount.h type=file -x:\tlperl\lib/CORE/config.h type=file -x:\tlperl\lib/CORE/cop.h type=file -x:\tlperl\lib/CORE/cv.h type=file -x:\tlperl\lib/CORE/dirent.h type=file -x:\tlperl\lib/CORE/dosish.h type=file -x:\tlperl\lib/CORE/embed.h type=file -x:\tlperl\lib/CORE/embedvar.h type=file -x:\tlperl\lib/CORE/fakesdio.h type=file -x:\tlperl\lib/CORE/fakethr.h type=file -x:\tlperl\lib/CORE/form.h type=file -x:\tlperl\lib/CORE/git_version.h type=file -x:\tlperl\lib/CORE/gv.h type=file -x:\tlperl\lib/CORE/handy.h type=file -x:\tlperl\lib/CORE/hv.h type=file -x:\tlperl\lib/CORE/intrpvar.h type=file -x:\tlperl\lib/CORE/iperlsys.h type=file -x:\tlperl\lib/CORE/keywords.h type=file -x:\tlperl\lib/CORE/l1_char_class_tab.h type=file -x:\tlperl\lib/CORE/libperl514.a type=file -x:\tlperl\lib/CORE/malloc_ctl.h type=file -x:\tlperl\lib/CORE/metaconfig.h type=file -x:\tlperl\lib/CORE/mg.h type=file -x:\tlperl\lib/CORE/mydtrace.h type=file -x:\tlperl\lib/CORE/netdb.h type=file -x:\tlperl\lib/CORE/nostdio.h type=file -x:\tlperl\lib/CORE/op.h type=file -x:\tlperl\lib/CORE/op_reg_common.h type=file -x:\tlperl\lib/CORE/opcode.h type=file -x:\tlperl\lib/CORE/opnames.h type=file -x:\tlperl\lib/CORE/overload.h type=file -x:\tlperl\lib/CORE/pad.h type=file -x:\tlperl\lib/CORE/parser.h type=file -x:\tlperl\lib/CORE/patchlevel.h type=file -x:\tlperl\lib/CORE/perl.h type=file -x:\tlperl\lib/CORE/perlapi.h type=file -x:\tlperl\lib/CORE/perlhost.h type=file -x:\tlperl\lib/CORE/perlio.h type=file -x:\tlperl\lib/CORE/perliol.h type=file -x:\tlperl\lib/CORE/perlsdio.h type=file -x:\tlperl\lib/CORE/perlsfio.h type=file -x:\tlperl\lib/CORE/perlvars.h type=file -x:\tlperl\lib/CORE/perly.h type=file -x:\tlperl\lib/CORE/pp.h type=file -x:\tlperl\lib/CORE/pp_proto.h type=file -x:\tlperl\lib/CORE/proto.h type=file -x:\tlperl\lib/CORE/reentr.h type=file -x:\tlperl\lib/CORE/regcharclass.h type=file -x:\tlperl\lib/CORE/regcomp.h type=file -x:\tlperl\lib/CORE/regexp.h type=file -x:\tlperl\lib/CORE/regnodes.h type=file -x:\tlperl\lib/CORE/scope.h type=file -x:\tlperl\lib/CORE/sv.h type=file -x:\tlperl\lib/CORE/sys/socket.h type=file -x:\tlperl\lib/CORE/thread.h type=file -x:\tlperl\lib/CORE/time64.h type=file -x:\tlperl\lib/CORE/time64_config.h type=file -x:\tlperl\lib/CORE/uconfig.h type=file -x:\tlperl\lib/CORE/unixish.h type=file -x:\tlperl\lib/CORE/utf8.h type=file -x:\tlperl\lib/CORE/utfebcdic.h type=file -x:\tlperl\lib/CORE/util.h type=file -x:\tlperl\lib/CORE/uudmap.h type=file -x:\tlperl\lib/CORE/vdir.h type=file -x:\tlperl\lib/CORE/vmem.h type=file -x:\tlperl\lib/CORE/warnings.h type=file -x:\tlperl\lib/CORE/win32.h type=file -x:\tlperl\lib/CORE/win32iop-o.h type=file -x:\tlperl\lib/CORE/win32iop.h type=file -x:\tlperl\lib/CORE/win32thread.h type=file -x:\tlperl\lib/CORE/wince.h type=file -x:\tlperl\lib/CPAN.pm type=file -x:\tlperl\lib/CPAN/API/HOWTO.pod type=file -x:\tlperl\lib/CPAN/Author.pm type=file -x:\tlperl\lib/CPAN/Bundle.pm type=file -x:\tlperl\lib/CPAN/CacheMgr.pm type=file -x:\tlperl\lib/CPAN/Complete.pm type=file -x:\tlperl\lib/CPAN/Debug.pm type=file -x:\tlperl\lib/CPAN/DeferredCode.pm type=file -x:\tlperl\lib/CPAN/Distribution.pm type=file -x:\tlperl\lib/CPAN/Distroprefs.pm type=file -x:\tlperl\lib/CPAN/Distrostatus.pm type=file -x:\tlperl\lib/CPAN/Exception/RecursiveDependency.pm type=file -x:\tlperl\lib/CPAN/Exception/blocked_urllist.pm type=file -x:\tlperl\lib/CPAN/Exception/yaml_not_installed.pm type=file -x:\tlperl\lib/CPAN/FTP.pm type=file -x:\tlperl\lib/CPAN/FTP/netrc.pm type=file -x:\tlperl\lib/CPAN/FirstTime.pm type=file -x:\tlperl\lib/CPAN/HTTP/Client.pm type=file -x:\tlperl\lib/CPAN/HTTP/Credentials.pm type=file -x:\tlperl\lib/CPAN/HandleConfig.pm type=file -x:\tlperl\lib/CPAN/Index.pm type=file -x:\tlperl\lib/CPAN/InfoObj.pm type=file -x:\tlperl\lib/CPAN/Kwalify.pm type=file -x:\tlperl\lib/CPAN/Kwalify/distroprefs.dd type=file -x:\tlperl\lib/CPAN/Kwalify/distroprefs.yml type=file -x:\tlperl\lib/CPAN/LWP/UserAgent.pm type=file -x:\tlperl\lib/CPAN/Meta.pm type=file -x:\tlperl\lib/CPAN/Meta/Converter.pm type=file -x:\tlperl\lib/CPAN/Meta/Feature.pm type=file -x:\tlperl\lib/CPAN/Meta/History.pm type=file -x:\tlperl\lib/CPAN/Meta/Prereqs.pm type=file -x:\tlperl\lib/CPAN/Meta/Spec.pm type=file -x:\tlperl\lib/CPAN/Meta/Validator.pm type=file -x:\tlperl\lib/CPAN/Meta/YAML.pm type=file -x:\tlperl\lib/CPAN/Mirrors.pm type=file -x:\tlperl\lib/CPAN/Module.pm type=file -x:\tlperl\lib/CPAN/Nox.pm type=file -x:\tlperl\lib/CPAN/Prompt.pm type=file -x:\tlperl\lib/CPAN/Queue.pm type=file -x:\tlperl\lib/CPAN/Shell.pm type=file -x:\tlperl\lib/CPAN/Tarzip.pm type=file -x:\tlperl\lib/CPAN/URL.pm type=file -x:\tlperl\lib/CPAN/Version.pm type=file -x:\tlperl\lib/CPANPLUS.pm type=file -x:\tlperl\lib/CPANPLUS/Backend.pm type=file -x:\tlperl\lib/CPANPLUS/Backend/RV.pm type=file -x:\tlperl\lib/CPANPLUS/Config.pm type=file -x:\tlperl\lib/CPANPLUS/Configure.pm type=file -x:\tlperl\lib/CPANPLUS/Configure/Setup.pm type=file -x:\tlperl\lib/CPANPLUS/Dist.pm type=file -x:\tlperl\lib/CPANPLUS/Dist/Autobundle.pm type=file -x:\tlperl\lib/CPANPLUS/Dist/Base.pm type=file -x:\tlperl\lib/CPANPLUS/Dist/Build.pm type=file -x:\tlperl\lib/CPANPLUS/Dist/Build/Constants.pm type=file -x:\tlperl\lib/CPANPLUS/Dist/MM.pm type=file -x:\tlperl\lib/CPANPLUS/Dist/Sample.pm type=file -x:\tlperl\lib/CPANPLUS/Error.pm type=file -x:\tlperl\lib/CPANPLUS/FAQ.pod type=file -x:\tlperl\lib/CPANPLUS/Hacking.pod type=file -x:\tlperl\lib/CPANPLUS/Internals.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Constants.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Constants/Report.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Extract.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Fetch.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Report.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Search.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Source.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Source/Memory.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Source/SQLite.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Source/SQLite/Tie.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Utils.pm type=file -x:\tlperl\lib/CPANPLUS/Internals/Utils/Autoflush.pm type=file -x:\tlperl\lib/CPANPLUS/Module.pm type=file -x:\tlperl\lib/CPANPLUS/Module/Author.pm type=file -x:\tlperl\lib/CPANPLUS/Module/Author/Fake.pm type=file -x:\tlperl\lib/CPANPLUS/Module/Checksums.pm type=file -x:\tlperl\lib/CPANPLUS/Module/Fake.pm type=file -x:\tlperl\lib/CPANPLUS/Module/Signature.pm type=file -x:\tlperl\lib/CPANPLUS/Selfupdate.pm type=file -x:\tlperl\lib/CPANPLUS/Shell.pm type=file -x:\tlperl\lib/CPANPLUS/Shell/Classic.pm type=file -x:\tlperl\lib/CPANPLUS/Shell/Default.pm type=file -x:\tlperl\lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm type=file -x:\tlperl\lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod type=file -x:\tlperl\lib/CPANPLUS/Shell/Default/Plugins/Remote.pm type=file -x:\tlperl\lib/CPANPLUS/Shell/Default/Plugins/Source.pm type=file -x:\tlperl\lib/Carp.pm type=file -x:\tlperl\lib/Carp/Heavy.pm type=file -x:\tlperl\lib/Class/Struct.pm type=file -x:\tlperl\lib/Compress/Raw/Bzip2.pm type=file -x:\tlperl\lib/Compress/Raw/Zlib.pm type=file -x:\tlperl\lib/Compress/Zlib.pm type=file -x:\tlperl\lib/Config.pm type=file -x:\tlperl\lib/Config.pod type=file -x:\tlperl\lib/Config/Extensions.pm type=file -x:\tlperl\lib/Config_git.pl type=file -x:\tlperl\lib/Config_heavy.pl type=file -x:\tlperl\lib/Cwd.pm type=file -x:\tlperl\lib/DB.pm type=file -x:\tlperl\lib/DBM_Filter.pm type=file -x:\tlperl\lib/DBM_Filter/compress.pm type=file -x:\tlperl\lib/DBM_Filter/encode.pm type=file -x:\tlperl\lib/DBM_Filter/int32.pm type=file -x:\tlperl\lib/DBM_Filter/null.pm type=file -x:\tlperl\lib/DBM_Filter/utf8.pm type=file -x:\tlperl\lib/Data/Dumper.pm type=file -x:\tlperl\lib/Devel/DProf.pm type=file -x:\tlperl\lib/Devel/DProf/V.pm type=file -x:\tlperl\lib/Devel/DProf/test1_t type=file -x:\tlperl\lib/Devel/DProf/test1_v type=file -x:\tlperl\lib/Devel/DProf/test2_t type=file -x:\tlperl\lib/Devel/DProf/test2_v type=file -x:\tlperl\lib/Devel/DProf/test3_t type=file -x:\tlperl\lib/Devel/DProf/test3_v type=file -x:\tlperl\lib/Devel/DProf/test4_t type=file -x:\tlperl\lib/Devel/DProf/test4_v type=file -x:\tlperl\lib/Devel/DProf/test5_t type=file -x:\tlperl\lib/Devel/DProf/test5_v type=file -x:\tlperl\lib/Devel/DProf/test6_t type=file -x:\tlperl\lib/Devel/DProf/test6_v type=file -x:\tlperl\lib/Devel/DProf/test7_t type=file -x:\tlperl\lib/Devel/DProf/test7_v type=file -x:\tlperl\lib/Devel/DProf/test8_t type=file -x:\tlperl\lib/Devel/DProf/test8_v type=file -x:\tlperl\lib/Devel/InnerPackage.pm type=file -x:\tlperl\lib/Devel/PPPort.pm type=file -x:\tlperl\lib/Devel/Peek.pm type=file -x:\tlperl\lib/Devel/SelfStubber.pm type=file -x:\tlperl\lib/Digest.pm type=file -x:\tlperl\lib/Digest/MD5.pm type=file -x:\tlperl\lib/Digest/SHA.pm type=file -x:\tlperl\lib/Digest/base.pm type=file -x:\tlperl\lib/Digest/file.pm type=file -x:\tlperl\lib/DirHandle.pm type=file -x:\tlperl\lib/Dumpvalue.pm type=file -x:\tlperl\lib/DynaLoader.pm type=file -x:\tlperl\lib/Encode.pm type=file -x:\tlperl\lib/Encode/Alias.pm type=file -x:\tlperl\lib/Encode/Byte.pm type=file -x:\tlperl\lib/Encode/CJKConstants.pm type=file -x:\tlperl\lib/Encode/CN.pm type=file -x:\tlperl\lib/Encode/CN/HZ.pm type=file -x:\tlperl\lib/Encode/Changes.e2x type=file -x:\tlperl\lib/Encode/Config.pm type=file -x:\tlperl\lib/Encode/ConfigLocal_PM.e2x type=file -x:\tlperl\lib/Encode/EBCDIC.pm type=file -x:\tlperl\lib/Encode/Encoder.pm type=file -x:\tlperl\lib/Encode/Encoding.pm type=file -x:\tlperl\lib/Encode/GSM0338.pm type=file -x:\tlperl\lib/Encode/Guess.pm type=file -x:\tlperl\lib/Encode/JP.pm type=file -x:\tlperl\lib/Encode/JP/H2Z.pm type=file -x:\tlperl\lib/Encode/JP/JIS7.pm type=file -x:\tlperl\lib/Encode/KR.pm type=file -x:\tlperl\lib/Encode/KR/2022_KR.pm type=file -x:\tlperl\lib/Encode/MIME/Header.pm type=file -x:\tlperl\lib/Encode/MIME/Header/ISO_2022_JP.pm type=file -x:\tlperl\lib/Encode/MIME/Name.pm type=file -x:\tlperl\lib/Encode/Makefile_PL.e2x type=file -x:\tlperl\lib/Encode/PerlIO.pod type=file -x:\tlperl\lib/Encode/README.e2x type=file -x:\tlperl\lib/Encode/Supported.pod type=file -x:\tlperl\lib/Encode/Symbol.pm type=file -x:\tlperl\lib/Encode/TW.pm type=file -x:\tlperl\lib/Encode/Unicode.pm type=file -x:\tlperl\lib/Encode/Unicode/UTF7.pm type=file -x:\tlperl\lib/Encode/_PM.e2x type=file -x:\tlperl\lib/Encode/_T.e2x type=file -x:\tlperl\lib/Encode/encode.h type=file -x:\tlperl\lib/English.pm type=file -x:\tlperl\lib/Env.pm type=file -x:\tlperl\lib/Errno.pm type=file -x:\tlperl\lib/Exporter.pm type=file -x:\tlperl\lib/Exporter/Heavy.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Base.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/Unix.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/VMS.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/Windows.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/aix.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/cygwin.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/darwin.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/dec_osf.pm type=file -x:\tlperl\lib/ExtUtils/CBuilder/Platform/os2.pm type=file -x:\tlperl\lib/ExtUtils/Command.pm type=file -x:\tlperl\lib/ExtUtils/Command/MM.pm type=file -x:\tlperl\lib/ExtUtils/Constant.pm type=file -x:\tlperl\lib/ExtUtils/Constant/Base.pm type=file -x:\tlperl\lib/ExtUtils/Constant/ProxySubs.pm type=file -x:\tlperl\lib/ExtUtils/Constant/Utils.pm type=file -x:\tlperl\lib/ExtUtils/Constant/XS.pm type=file -x:\tlperl\lib/ExtUtils/Embed.pm type=file -x:\tlperl\lib/ExtUtils/Install.pm type=file -x:\tlperl\lib/ExtUtils/Installed.pm type=file -x:\tlperl\lib/ExtUtils/Liblist.pm type=file -x:\tlperl\lib/ExtUtils/Liblist/Kid.pm type=file -x:\tlperl\lib/ExtUtils/MANIFEST.SKIP type=file -x:\tlperl\lib/ExtUtils/MM.pm type=file -x:\tlperl\lib/ExtUtils/MM_AIX.pm type=file -x:\tlperl\lib/ExtUtils/MM_Any.pm type=file -x:\tlperl\lib/ExtUtils/MM_BeOS.pm type=file -x:\tlperl\lib/ExtUtils/MM_Cygwin.pm type=file -x:\tlperl\lib/ExtUtils/MM_DOS.pm type=file -x:\tlperl\lib/ExtUtils/MM_Darwin.pm type=file -x:\tlperl\lib/ExtUtils/MM_MacOS.pm type=file -x:\tlperl\lib/ExtUtils/MM_NW5.pm type=file -x:\tlperl\lib/ExtUtils/MM_OS2.pm type=file -x:\tlperl\lib/ExtUtils/MM_QNX.pm type=file -x:\tlperl\lib/ExtUtils/MM_UWIN.pm type=file -x:\tlperl\lib/ExtUtils/MM_Unix.pm type=file -x:\tlperl\lib/ExtUtils/MM_VMS.pm type=file -x:\tlperl\lib/ExtUtils/MM_VOS.pm type=file -x:\tlperl\lib/ExtUtils/MM_Win32.pm type=file -x:\tlperl\lib/ExtUtils/MM_Win95.pm type=file -x:\tlperl\lib/ExtUtils/MY.pm type=file -x:\tlperl\lib/ExtUtils/MakeMaker.pm type=file -x:\tlperl\lib/ExtUtils/MakeMaker/Config.pm type=file -x:\tlperl\lib/ExtUtils/MakeMaker/FAQ.pod type=file -x:\tlperl\lib/ExtUtils/MakeMaker/Tutorial.pod type=file -x:\tlperl\lib/ExtUtils/MakeMaker/YAML.pm type=file -x:\tlperl\lib/ExtUtils/Manifest.pm type=file -x:\tlperl\lib/ExtUtils/Miniperl.pm type=file -x:\tlperl\lib/ExtUtils/Mkbootstrap.pm type=file -x:\tlperl\lib/ExtUtils/Mksymlists.pm type=file -x:\tlperl\lib/ExtUtils/Packlist.pm type=file -x:\tlperl\lib/ExtUtils/ParseXS.pm type=file -x:\tlperl\lib/ExtUtils/testlib.pm type=file -x:\tlperl\lib/ExtUtils/typemap type=file -x:\tlperl\lib/ExtUtils/xsubpp type=file -x:\tlperl\lib/Fatal.pm type=file -x:\tlperl\lib/Fcntl.pm type=file -x:\tlperl\lib/File/Basename.pm type=file -x:\tlperl\lib/File/CheckTree.pm type=file -x:\tlperl\lib/File/Compare.pm type=file -x:\tlperl\lib/File/Copy.pm type=file -x:\tlperl\lib/File/DosGlob.pm type=file -x:\tlperl\lib/File/Fetch.pm type=file -x:\tlperl\lib/File/Find.pm type=file -x:\tlperl\lib/File/Glob.pm type=file -x:\tlperl\lib/File/GlobMapper.pm type=file -x:\tlperl\lib/File/Path.pm type=file -x:\tlperl\lib/File/Spec.pm type=file -x:\tlperl\lib/File/Spec/Cygwin.pm type=file -x:\tlperl\lib/File/Spec/Epoc.pm type=file -x:\tlperl\lib/File/Spec/Functions.pm type=file -x:\tlperl\lib/File/Spec/Mac.pm type=file -x:\tlperl\lib/File/Spec/OS2.pm type=file -x:\tlperl\lib/File/Spec/Unix.pm type=file -x:\tlperl\lib/File/Spec/VMS.pm type=file -x:\tlperl\lib/File/Spec/Win32.pm type=file -x:\tlperl\lib/File/Temp.pm type=file -x:\tlperl\lib/File/stat.pm type=file -x:\tlperl\lib/FileCache.pm type=file -x:\tlperl\lib/FileHandle.pm type=file -x:\tlperl\lib/Filter/Simple.pm type=file -x:\tlperl\lib/Filter/Util/Call.pm type=file -x:\tlperl\lib/FindBin.pm type=file -x:\tlperl\lib/Getopt/Long.pm type=file -x:\tlperl\lib/Getopt/Std.pm type=file -x:\tlperl\lib/HTTP/Tiny.pm type=file -x:\tlperl\lib/Hash/Util.pm type=file -x:\tlperl\lib/Hash/Util/FieldHash.pm type=file -x:\tlperl\lib/I18N/Collate.pm type=file -x:\tlperl\lib/I18N/LangTags.pm type=file -x:\tlperl\lib/I18N/LangTags/Detect.pm type=file -x:\tlperl\lib/I18N/LangTags/List.pm type=file -x:\tlperl\lib/IO.pm type=file -x:\tlperl\lib/IO/Compress/Adapter/Bzip2.pm type=file -x:\tlperl\lib/IO/Compress/Adapter/Deflate.pm type=file -x:\tlperl\lib/IO/Compress/Adapter/Identity.pm type=file -x:\tlperl\lib/IO/Compress/Base.pm type=file -x:\tlperl\lib/IO/Compress/Base/Common.pm type=file -x:\tlperl\lib/IO/Compress/Bzip2.pm type=file -x:\tlperl\lib/IO/Compress/Deflate.pm type=file -x:\tlperl\lib/IO/Compress/Gzip.pm type=file -x:\tlperl\lib/IO/Compress/Gzip/Constants.pm type=file -x:\tlperl\lib/IO/Compress/RawDeflate.pm type=file -x:\tlperl\lib/IO/Compress/Zip.pm type=file -x:\tlperl\lib/IO/Compress/Zip/Constants.pm type=file -x:\tlperl\lib/IO/Compress/Zlib/Constants.pm type=file -x:\tlperl\lib/IO/Compress/Zlib/Extra.pm type=file -x:\tlperl\lib/IO/Dir.pm type=file -x:\tlperl\lib/IO/File.pm type=file -x:\tlperl\lib/IO/Handle.pm type=file -x:\tlperl\lib/IO/Pipe.pm type=file -x:\tlperl\lib/IO/Poll.pm type=file -x:\tlperl\lib/IO/Seekable.pm type=file -x:\tlperl\lib/IO/Select.pm type=file -x:\tlperl\lib/IO/Socket.pm type=file -x:\tlperl\lib/IO/Socket/INET.pm type=file -x:\tlperl\lib/IO/Socket/UNIX.pm type=file -x:\tlperl\lib/IO/Uncompress/Adapter/Bunzip2.pm type=file -x:\tlperl\lib/IO/Uncompress/Adapter/Identity.pm type=file -x:\tlperl\lib/IO/Uncompress/Adapter/Inflate.pm type=file -x:\tlperl\lib/IO/Uncompress/AnyInflate.pm type=file -x:\tlperl\lib/IO/Uncompress/AnyUncompress.pm type=file -x:\tlperl\lib/IO/Uncompress/Base.pm type=file -x:\tlperl\lib/IO/Uncompress/Bunzip2.pm type=file -x:\tlperl\lib/IO/Uncompress/Gunzip.pm type=file -x:\tlperl\lib/IO/Uncompress/Inflate.pm type=file -x:\tlperl\lib/IO/Uncompress/RawInflate.pm type=file -x:\tlperl\lib/IO/Uncompress/Unzip.pm type=file -x:\tlperl\lib/IO/Zlib.pm type=file -x:\tlperl\lib/IPC/Cmd.pm type=file -x:\tlperl\lib/IPC/Open2.pm type=file -x:\tlperl\lib/IPC/Open3.pm type=file -x:\tlperl\lib/JSON/PP.pm type=file -x:\tlperl\lib/JSON/PP/Boolean.pm type=file -x:\tlperl\lib/List/Util.pm type=file -x:\tlperl\lib/List/Util/PP.pm type=file -x:\tlperl\lib/List/Util/XS.pm type=file -x:\tlperl\lib/Locale/Codes.pm type=file -x:\tlperl\lib/Locale/Codes.pod type=file -x:\tlperl\lib/Locale/Codes/Changes.pod type=file -x:\tlperl\lib/Locale/Codes/Country.pm type=file -x:\tlperl\lib/Locale/Codes/Currency.pm type=file -x:\tlperl\lib/Locale/Codes/Language.pm type=file -x:\tlperl\lib/Locale/Codes/Script.pm type=file -x:\tlperl\lib/Locale/Constants.pm type=file -x:\tlperl\lib/Locale/Constants.pod type=file -x:\tlperl\lib/Locale/Country.pm type=file -x:\tlperl\lib/Locale/Country.pod type=file -x:\tlperl\lib/Locale/Currency.pm type=file -x:\tlperl\lib/Locale/Currency.pod type=file -x:\tlperl\lib/Locale/Language.pm type=file -x:\tlperl\lib/Locale/Language.pod type=file -x:\tlperl\lib/Locale/Maketext.pm type=file -x:\tlperl\lib/Locale/Maketext.pod type=file -x:\tlperl\lib/Locale/Maketext/Cookbook.pod type=file -x:\tlperl\lib/Locale/Maketext/Guts.pm type=file -x:\tlperl\lib/Locale/Maketext/GutsLoader.pm type=file -x:\tlperl\lib/Locale/Maketext/Simple.pm type=file -x:\tlperl\lib/Locale/Maketext/TPJ13.pod type=file -x:\tlperl\lib/Locale/Script.pm type=file -x:\tlperl\lib/Locale/Script.pod type=file -x:\tlperl\lib/Log/Message.pm type=file -x:\tlperl\lib/Log/Message/Config.pm type=file -x:\tlperl\lib/Log/Message/Handlers.pm type=file -x:\tlperl\lib/Log/Message/Item.pm type=file -x:\tlperl\lib/Log/Message/Simple.pm type=file -x:\tlperl\lib/MIME/Base64.pm type=file -x:\tlperl\lib/MIME/QuotedPrint.pm type=file -x:\tlperl\lib/Math/BigFloat.pm type=file -x:\tlperl\lib/Math/BigFloat/Trace.pm type=file -x:\tlperl\lib/Math/BigInt.pm type=file -x:\tlperl\lib/Math/BigInt/Calc.pm type=file -x:\tlperl\lib/Math/BigInt/CalcEmu.pm type=file -x:\tlperl\lib/Math/BigInt/FastCalc.pm type=file -x:\tlperl\lib/Math/BigInt/Trace.pm type=file -x:\tlperl\lib/Math/BigRat.pm type=file -x:\tlperl\lib/Math/Complex.pm type=file -x:\tlperl\lib/Math/Trig.pm type=file -x:\tlperl\lib/Memoize.pm type=file -x:\tlperl\lib/Memoize/AnyDBM_File.pm type=file -x:\tlperl\lib/Memoize/Expire.pm type=file -x:\tlperl\lib/Memoize/ExpireFile.pm type=file -x:\tlperl\lib/Memoize/ExpireTest.pm type=file -x:\tlperl\lib/Memoize/NDBM_File.pm type=file -x:\tlperl\lib/Memoize/SDBM_File.pm type=file -x:\tlperl\lib/Memoize/Storable.pm type=file -x:\tlperl\lib/Module/Build.pm type=file -x:\tlperl\lib/Module/Build/API.pod type=file -x:\tlperl\lib/Module/Build/Authoring.pod type=file -x:\tlperl\lib/Module/Build/Base.pm type=file -x:\tlperl\lib/Module/Build/Bundling.pod type=file -x:\tlperl\lib/Module/Build/Compat.pm type=file -x:\tlperl\lib/Module/Build/Config.pm type=file -x:\tlperl\lib/Module/Build/ConfigData.pm type=file -x:\tlperl\lib/Module/Build/Cookbook.pm type=file -x:\tlperl\lib/Module/Build/Dumper.pm type=file -x:\tlperl\lib/Module/Build/ModuleInfo.pm type=file -x:\tlperl\lib/Module/Build/Notes.pm type=file -x:\tlperl\lib/Module/Build/PPMMaker.pm type=file -x:\tlperl\lib/Module/Build/Platform/Amiga.pm type=file -x:\tlperl\lib/Module/Build/Platform/Default.pm type=file -x:\tlperl\lib/Module/Build/Platform/EBCDIC.pm type=file -x:\tlperl\lib/Module/Build/Platform/MPEiX.pm type=file -x:\tlperl\lib/Module/Build/Platform/MacOS.pm type=file -x:\tlperl\lib/Module/Build/Platform/RiscOS.pm type=file -x:\tlperl\lib/Module/Build/Platform/Unix.pm type=file -x:\tlperl\lib/Module/Build/Platform/VMS.pm type=file -x:\tlperl\lib/Module/Build/Platform/VOS.pm type=file -x:\tlperl\lib/Module/Build/Platform/Windows.pm type=file -x:\tlperl\lib/Module/Build/Platform/aix.pm type=file -x:\tlperl\lib/Module/Build/Platform/cygwin.pm type=file -x:\tlperl\lib/Module/Build/Platform/darwin.pm type=file -x:\tlperl\lib/Module/Build/Platform/os2.pm type=file -x:\tlperl\lib/Module/Build/PodParser.pm type=file -x:\tlperl\lib/Module/Build/Version.pm type=file -x:\tlperl\lib/Module/Build/YAML.pm type=file -x:\tlperl\lib/Module/CoreList.pm type=file -x:\tlperl\lib/Module/Load.pm type=file -x:\tlperl\lib/Module/Load/Conditional.pm type=file -x:\tlperl\lib/Module/Loaded.pm type=file -x:\tlperl\lib/Module/Metadata.pm type=file -x:\tlperl\lib/Module/Pluggable.pm type=file -x:\tlperl\lib/Module/Pluggable/Object.pm type=file -x:\tlperl\lib/NEXT.pm type=file -x:\tlperl\lib/Net/Cmd.pm type=file -x:\tlperl\lib/Net/Config.pm type=file -x:\tlperl\lib/Net/Domain.pm type=file -x:\tlperl\lib/Net/FTP.pm type=file -x:\tlperl\lib/Net/FTP/A.pm type=file -x:\tlperl\lib/Net/FTP/E.pm type=file -x:\tlperl\lib/Net/FTP/I.pm type=file -x:\tlperl\lib/Net/FTP/L.pm type=file -x:\tlperl\lib/Net/FTP/dataconn.pm type=file -x:\tlperl\lib/Net/NNTP.pm type=file -x:\tlperl\lib/Net/Netrc.pm type=file -x:\tlperl\lib/Net/POP3.pm type=file -x:\tlperl\lib/Net/Ping.pm type=file -x:\tlperl\lib/Net/SMTP.pm type=file -x:\tlperl\lib/Net/Time.pm type=file -x:\tlperl\lib/Net/hostent.pm type=file -x:\tlperl\lib/Net/libnetFAQ.pod type=file -x:\tlperl\lib/Net/netent.pm type=file -x:\tlperl\lib/Net/protoent.pm type=file -x:\tlperl\lib/Net/servent.pm type=file -x:\tlperl\lib/O.pm type=file -x:\tlperl\lib/Object/Accessor.pm type=file -x:\tlperl\lib/Opcode.pm type=file -x:\tlperl\lib/POSIX.pm type=file -x:\tlperl\lib/POSIX.pod type=file -x:\tlperl\lib/Package/Constants.pm type=file -x:\tlperl\lib/Params/Check.pm type=file -x:\tlperl\lib/Parse/CPAN/Meta.pm type=file -x:\tlperl\lib/Perl/OSType.pm type=file -x:\tlperl\lib/PerlIO.pm type=file -x:\tlperl\lib/PerlIO/encoding.pm type=file -x:\tlperl\lib/PerlIO/scalar.pm type=file -x:\tlperl\lib/PerlIO/via.pm type=file -x:\tlperl\lib/PerlIO/via/QuotedPrint.pm type=file -x:\tlperl\lib/Pod/Checker.pm type=file -x:\tlperl\lib/Pod/Escapes.pm type=file -x:\tlperl\lib/Pod/Find.pm type=file -x:\tlperl\lib/Pod/Functions.pm type=file -x:\tlperl\lib/Pod/Html.pm type=file -x:\tlperl\lib/Pod/InputObjects.pm type=file -x:\tlperl\lib/Pod/LaTeX.pm type=file -x:\tlperl\lib/Pod/Man.pm type=file -x:\tlperl\lib/Pod/ParseLink.pm type=file -x:\tlperl\lib/Pod/ParseUtils.pm type=file -x:\tlperl\lib/Pod/Parser.pm type=file -x:\tlperl\lib/Pod/Perldoc.pm type=file -x:\tlperl\lib/Pod/Perldoc/BaseTo.pm type=file -x:\tlperl\lib/Pod/Perldoc/GetOptsOO.pm type=file -x:\tlperl\lib/Pod/Perldoc/ToChecker.pm type=file -x:\tlperl\lib/Pod/Perldoc/ToMan.pm type=file -x:\tlperl\lib/Pod/Perldoc/ToNroff.pm type=file -x:\tlperl\lib/Pod/Perldoc/ToPod.pm type=file -x:\tlperl\lib/Pod/Perldoc/ToRtf.pm type=file -x:\tlperl\lib/Pod/Perldoc/ToText.pm type=file -x:\tlperl\lib/Pod/Perldoc/ToTk.pm type=file -x:\tlperl\lib/Pod/Perldoc/ToXml.pm type=file -x:\tlperl\lib/Pod/PlainText.pm type=file -x:\tlperl\lib/Pod/Select.pm type=file -x:\tlperl\lib/Pod/Simple.pm type=file -x:\tlperl\lib/Pod/Simple.pod type=file -x:\tlperl\lib/Pod/Simple/BlackBox.pm type=file -x:\tlperl\lib/Pod/Simple/Checker.pm type=file -x:\tlperl\lib/Pod/Simple/Debug.pm type=file -x:\tlperl\lib/Pod/Simple/DumpAsText.pm type=file -x:\tlperl\lib/Pod/Simple/DumpAsXML.pm type=file -x:\tlperl\lib/Pod/Simple/HTML.pm type=file -x:\tlperl\lib/Pod/Simple/HTMLBatch.pm type=file -x:\tlperl\lib/Pod/Simple/HTMLLegacy.pm type=file -x:\tlperl\lib/Pod/Simple/LinkSection.pm type=file -x:\tlperl\lib/Pod/Simple/Methody.pm type=file -x:\tlperl\lib/Pod/Simple/Progress.pm type=file -x:\tlperl\lib/Pod/Simple/PullParser.pm type=file -x:\tlperl\lib/Pod/Simple/PullParserEndToken.pm type=file -x:\tlperl\lib/Pod/Simple/PullParserStartToken.pm type=file -x:\tlperl\lib/Pod/Simple/PullParserTextToken.pm type=file -x:\tlperl\lib/Pod/Simple/PullParserToken.pm type=file -x:\tlperl\lib/Pod/Simple/RTF.pm type=file -x:\tlperl\lib/Pod/Simple/Search.pm type=file -x:\tlperl\lib/Pod/Simple/SimpleTree.pm type=file -x:\tlperl\lib/Pod/Simple/Subclassing.pod type=file -x:\tlperl\lib/Pod/Simple/Text.pm type=file -x:\tlperl\lib/Pod/Simple/TextContent.pm type=file -x:\tlperl\lib/Pod/Simple/TiedOutFH.pm type=file -x:\tlperl\lib/Pod/Simple/Transcode.pm type=file -x:\tlperl\lib/Pod/Simple/TranscodeDumb.pm type=file -x:\tlperl\lib/Pod/Simple/TranscodeSmart.pm type=file -x:\tlperl\lib/Pod/Simple/XHTML.pm type=file -x:\tlperl\lib/Pod/Simple/XMLOutStream.pm type=file -x:\tlperl\lib/Pod/Text.pm type=file -x:\tlperl\lib/Pod/Text/Color.pm type=file -x:\tlperl\lib/Pod/Text/Overstrike.pm type=file -x:\tlperl\lib/Pod/Text/Termcap.pm type=file -x:\tlperl\lib/Pod/Usage.pm type=file -x:\tlperl\lib/SDBM_File.pm type=file -x:\tlperl\lib/Safe.pm type=file -x:\tlperl\lib/Scalar/Util.pm type=file -x:\tlperl\lib/Scalar/Util/PP.pm type=file -x:\tlperl\lib/Search/Dict.pm type=file -x:\tlperl\lib/SelectSaver.pm type=file -x:\tlperl\lib/SelfLoader.pm type=file -x:\tlperl\lib/Shell.pm type=file -x:\tlperl\lib/Socket.pm type=file -x:\tlperl\lib/Storable.pm type=file -x:\tlperl\lib/Symbol.pm type=file -x:\tlperl\lib/Sys/Hostname.pm type=file -x:\tlperl\lib/TAP/Base.pm type=file -x:\tlperl\lib/TAP/Formatter/Base.pm type=file -x:\tlperl\lib/TAP/Formatter/Color.pm type=file -x:\tlperl\lib/TAP/Formatter/Console.pm type=file -x:\tlperl\lib/TAP/Formatter/Console/ParallelSession.pm type=file -x:\tlperl\lib/TAP/Formatter/Console/Session.pm type=file -x:\tlperl\lib/TAP/Formatter/File.pm type=file -x:\tlperl\lib/TAP/Formatter/File/Session.pm type=file -x:\tlperl\lib/TAP/Formatter/Session.pm type=file -x:\tlperl\lib/TAP/Harness.pm type=file -x:\tlperl\lib/TAP/Harness/Beyond.pod type=file -x:\tlperl\lib/TAP/Object.pm type=file -x:\tlperl\lib/TAP/Parser.pm type=file -x:\tlperl\lib/TAP/Parser/Aggregator.pm type=file -x:\tlperl\lib/TAP/Parser/Grammar.pm type=file -x:\tlperl\lib/TAP/Parser/Iterator.pm type=file -x:\tlperl\lib/TAP/Parser/Iterator/Array.pm type=file -x:\tlperl\lib/TAP/Parser/Iterator/Process.pm type=file -x:\tlperl\lib/TAP/Parser/Iterator/Stream.pm type=file -x:\tlperl\lib/TAP/Parser/IteratorFactory.pm type=file -x:\tlperl\lib/TAP/Parser/Multiplexer.pm type=file -x:\tlperl\lib/TAP/Parser/Result.pm type=file -x:\tlperl\lib/TAP/Parser/Result/Bailout.pm type=file -x:\tlperl\lib/TAP/Parser/Result/Comment.pm type=file -x:\tlperl\lib/TAP/Parser/Result/Plan.pm type=file -x:\tlperl\lib/TAP/Parser/Result/Pragma.pm type=file -x:\tlperl\lib/TAP/Parser/Result/Test.pm type=file -x:\tlperl\lib/TAP/Parser/Result/Unknown.pm type=file -x:\tlperl\lib/TAP/Parser/Result/Version.pm type=file -x:\tlperl\lib/TAP/Parser/Result/YAML.pm type=file -x:\tlperl\lib/TAP/Parser/ResultFactory.pm type=file -x:\tlperl\lib/TAP/Parser/Scheduler.pm type=file -x:\tlperl\lib/TAP/Parser/Scheduler/Job.pm type=file -x:\tlperl\lib/TAP/Parser/Scheduler/Spinner.pm type=file -x:\tlperl\lib/TAP/Parser/Source.pm type=file -x:\tlperl\lib/TAP/Parser/SourceHandler.pm type=file -x:\tlperl\lib/TAP/Parser/SourceHandler/Executable.pm type=file -x:\tlperl\lib/TAP/Parser/SourceHandler/File.pm type=file -x:\tlperl\lib/TAP/Parser/SourceHandler/Handle.pm type=file -x:\tlperl\lib/TAP/Parser/SourceHandler/Perl.pm type=file -x:\tlperl\lib/TAP/Parser/SourceHandler/RawTAP.pm type=file -x:\tlperl\lib/TAP/Parser/Utils.pm type=file -x:\tlperl\lib/TAP/Parser/YAMLish/Reader.pm type=file -x:\tlperl\lib/TAP/Parser/YAMLish/Writer.pm type=file -x:\tlperl\lib/Term/ANSIColor.pm type=file -x:\tlperl\lib/Term/Cap.pm type=file -x:\tlperl\lib/Term/Complete.pm type=file -x:\tlperl\lib/Term/ReadLine.pm type=file -x:\tlperl\lib/Term/UI.pm type=file -x:\tlperl\lib/Term/UI/History.pm type=file -x:\tlperl\lib/Test.pm type=file -x:\tlperl\lib/Test/Builder.pm type=file -x:\tlperl\lib/Test/Builder/Module.pm type=file -x:\tlperl\lib/Test/Builder/Tester.pm type=file -x:\tlperl\lib/Test/Builder/Tester/Color.pm type=file -x:\tlperl\lib/Test/Harness.pm type=file -x:\tlperl\lib/Test/More.pm type=file -x:\tlperl\lib/Test/Simple.pm type=file -x:\tlperl\lib/Test/Tutorial.pod type=file -x:\tlperl\lib/Text/Abbrev.pm type=file -x:\tlperl\lib/Text/Balanced.pm type=file -x:\tlperl\lib/Text/ParseWords.pm type=file -x:\tlperl\lib/Text/Soundex.pm type=file -x:\tlperl\lib/Text/Tabs.pm type=file -x:\tlperl\lib/Text/Wrap.pm type=file -x:\tlperl\lib/Thread.pm type=file -x:\tlperl\lib/Thread/Queue.pm type=file -x:\tlperl\lib/Thread/Semaphore.pm type=file -x:\tlperl\lib/Tie/Array.pm type=file -x:\tlperl\lib/Tie/File.pm type=file -x:\tlperl\lib/Tie/Handle.pm type=file -x:\tlperl\lib/Tie/Hash.pm type=file -x:\tlperl\lib/Tie/Hash/NamedCapture.pm type=file -x:\tlperl\lib/Tie/Memoize.pm type=file -x:\tlperl\lib/Tie/RefHash.pm type=file -x:\tlperl\lib/Tie/Scalar.pm type=file -x:\tlperl\lib/Tie/StdHandle.pm type=file -x:\tlperl\lib/Tie/SubstrHash.pm type=file -x:\tlperl\lib/Time/HiRes.pm type=file -x:\tlperl\lib/Time/Local.pm type=file -x:\tlperl\lib/Time/Piece.pm type=file -x:\tlperl\lib/Time/Seconds.pm type=file -x:\tlperl\lib/Time/gmtime.pm type=file -x:\tlperl\lib/Time/localtime.pm type=file -x:\tlperl\lib/Time/tm.pm type=file -x:\tlperl\lib/UNIVERSAL.pm type=file -x:\tlperl\lib/Unicode/Collate.pm type=file -x:\tlperl\lib/Unicode/Collate/CJK/Big5.pm type=file -x:\tlperl\lib/Unicode/Collate/CJK/GB2312.pm type=file -x:\tlperl\lib/Unicode/Collate/CJK/JISX0208.pm type=file -x:\tlperl\lib/Unicode/Collate/CJK/Korean.pm type=file -x:\tlperl\lib/Unicode/Collate/CJK/Pinyin.pm type=file -x:\tlperl\lib/Unicode/Collate/CJK/Stroke.pm type=file -x:\tlperl\lib/Unicode/Collate/Locale.pm type=file -x:\tlperl\lib/Unicode/Collate/Locale/af.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/ar.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/az.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/ca.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/cs.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/cy.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/da.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/de_phone.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/eo.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/es.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/es_trad.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/et.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/fi.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/fil.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/fo.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/fr.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/ha.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/haw.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/hr.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/hu.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/hy.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/ig.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/is.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/ja.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/kk.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/kl.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/ko.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/lt.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/lv.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/mt.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/nb.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/nn.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/nso.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/om.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/pl.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/ro.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/ru.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/se.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/sk.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/sl.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/sq.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/sv.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/sw.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/tn.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/to.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/tr.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/uk.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/vi.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/wo.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/yo.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/zh.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/zh_big5.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/zh_gb.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/zh_pin.pl type=file -x:\tlperl\lib/Unicode/Collate/Locale/zh_strk.pl type=file -x:\tlperl\lib/Unicode/Collate/allkeys.txt type=file -x:\tlperl\lib/Unicode/Collate/keys.txt type=file -x:\tlperl\lib/Unicode/Normalize.pm type=file -x:\tlperl\lib/Unicode/UCD.pm type=file -x:\tlperl\lib/User/grent.pm type=file -x:\tlperl\lib/User/pwent.pm type=file -x:\tlperl\lib/Win32.pm type=file -x:\tlperl\lib/Win32API/File.pm type=file -x:\tlperl\lib/Win32API/File/cFile.pc type=file -x:\tlperl\lib/Win32CORE.pm type=file -x:\tlperl\lib/XSLoader.pm type=file -x:\tlperl\lib/abbrev.pl type=file -x:\tlperl\lib/assert.pl type=file -x:\tlperl\lib/attributes.pm type=file -x:\tlperl\lib/auto/B/B.dll type=file -x:\tlperl\lib/auto/Compress/Raw/Bzip2/Bzip2.dll type=file -x:\tlperl\lib/auto/Compress/Raw/Bzip2/autosplit.ix type=file -x:\tlperl\lib/auto/Compress/Raw/Zlib/Zlib.dll type=file -x:\tlperl\lib/auto/Compress/Raw/Zlib/autosplit.ix type=file -x:\tlperl\lib/auto/Cwd/Cwd.dll type=file -x:\tlperl\lib/auto/Data/Dumper/Dumper.dll type=file -x:\tlperl\lib/auto/Devel/DProf/DProf.dll type=file -x:\tlperl\lib/auto/Devel/PPPort/PPPort.dll type=file -x:\tlperl\lib/auto/Devel/Peek/Peek.dll type=file -x:\tlperl\lib/auto/Digest/MD5/MD5.dll type=file -x:\tlperl\lib/auto/Digest/SHA/SHA.dll type=file -x:\tlperl\lib/auto/Encode/Byte/Byte.dll type=file -x:\tlperl\lib/auto/Encode/CN/CN.dll type=file -x:\tlperl\lib/auto/Encode/EBCDIC/EBCDIC.dll type=file -x:\tlperl\lib/auto/Encode/Encode.dll type=file -x:\tlperl\lib/auto/Encode/JP/JP.dll type=file -x:\tlperl\lib/auto/Encode/KR/KR.dll type=file -x:\tlperl\lib/auto/Encode/Symbol/Symbol.dll type=file -x:\tlperl\lib/auto/Encode/TW/TW.dll type=file -x:\tlperl\lib/auto/Encode/Unicode/Unicode.dll type=file -x:\tlperl\lib/auto/Fcntl/Fcntl.dll type=file -x:\tlperl\lib/auto/File/Glob/Glob.dll type=file -x:\tlperl\lib/auto/Filter/Util/Call/Call.dll type=file -x:\tlperl\lib/auto/Hash/Util/FieldHash/FieldHash.dll type=file -x:\tlperl\lib/auto/Hash/Util/Util.dll type=file -x:\tlperl\lib/auto/IO/IO.dll type=file -x:\tlperl\lib/auto/List/Util/Util.dll type=file -x:\tlperl\lib/auto/MIME/Base64/Base64.dll type=file -x:\tlperl\lib/auto/Math/BigInt/FastCalc/FastCalc.dll type=file -x:\tlperl\lib/auto/Opcode/Opcode.dll type=file -x:\tlperl\lib/auto/POSIX/POSIX.dll type=file -x:\tlperl\lib/auto/POSIX/SigAction/flags.al type=file -x:\tlperl\lib/auto/POSIX/SigAction/handler.al type=file -x:\tlperl\lib/auto/POSIX/SigAction/mask.al type=file -x:\tlperl\lib/auto/POSIX/SigAction/new.al type=file -x:\tlperl\lib/auto/POSIX/SigAction/safe.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/CLEAR.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/DELETE.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/EXISTS.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/FETCH.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/SCALAR.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/STORE.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/_check.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/_croak.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/_exist.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/_getsig.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/_init.al type=file -x:\tlperl\lib/auto/POSIX/SigRt/new.al type=file -x:\tlperl\lib/auto/POSIX/abs.al type=file -x:\tlperl\lib/auto/POSIX/alarm.al type=file -x:\tlperl\lib/auto/POSIX/assert.al type=file -x:\tlperl\lib/auto/POSIX/atan2.al type=file -x:\tlperl\lib/auto/POSIX/atexit.al type=file -x:\tlperl\lib/auto/POSIX/atof.al type=file -x:\tlperl\lib/auto/POSIX/atoi.al type=file -x:\tlperl\lib/auto/POSIX/atol.al type=file -x:\tlperl\lib/auto/POSIX/autosplit.ix type=file -x:\tlperl\lib/auto/POSIX/bsearch.al type=file -x:\tlperl\lib/auto/POSIX/calloc.al type=file -x:\tlperl\lib/auto/POSIX/chdir.al type=file -x:\tlperl\lib/auto/POSIX/chmod.al type=file -x:\tlperl\lib/auto/POSIX/chown.al type=file -x:\tlperl\lib/auto/POSIX/clearerr.al type=file -x:\tlperl\lib/auto/POSIX/closedir.al type=file -x:\tlperl\lib/auto/POSIX/cos.al type=file -x:\tlperl\lib/auto/POSIX/creat.al type=file -x:\tlperl\lib/auto/POSIX/div.al type=file -x:\tlperl\lib/auto/POSIX/errno.al type=file -x:\tlperl\lib/auto/POSIX/execl.al type=file -x:\tlperl\lib/auto/POSIX/execle.al type=file -x:\tlperl\lib/auto/POSIX/execlp.al type=file -x:\tlperl\lib/auto/POSIX/execv.al type=file -x:\tlperl\lib/auto/POSIX/execve.al type=file -x:\tlperl\lib/auto/POSIX/execvp.al type=file -x:\tlperl\lib/auto/POSIX/exit.al type=file -x:\tlperl\lib/auto/POSIX/exp.al type=file -x:\tlperl\lib/auto/POSIX/fabs.al type=file -x:\tlperl\lib/auto/POSIX/fclose.al type=file -x:\tlperl\lib/auto/POSIX/fcntl.al type=file -x:\tlperl\lib/auto/POSIX/fdopen.al type=file -x:\tlperl\lib/auto/POSIX/feof.al type=file -x:\tlperl\lib/auto/POSIX/ferror.al type=file -x:\tlperl\lib/auto/POSIX/fflush.al type=file -x:\tlperl\lib/auto/POSIX/fgetc.al type=file -x:\tlperl\lib/auto/POSIX/fgetpos.al type=file -x:\tlperl\lib/auto/POSIX/fgets.al type=file -x:\tlperl\lib/auto/POSIX/fileno.al type=file -x:\tlperl\lib/auto/POSIX/fopen.al type=file -x:\tlperl\lib/auto/POSIX/fork.al type=file -x:\tlperl\lib/auto/POSIX/fprintf.al type=file -x:\tlperl\lib/auto/POSIX/fputc.al type=file -x:\tlperl\lib/auto/POSIX/fputs.al type=file -x:\tlperl\lib/auto/POSIX/fread.al type=file -x:\tlperl\lib/auto/POSIX/free.al type=file -x:\tlperl\lib/auto/POSIX/freopen.al type=file -x:\tlperl\lib/auto/POSIX/fscanf.al type=file -x:\tlperl\lib/auto/POSIX/fseek.al type=file -x:\tlperl\lib/auto/POSIX/fsetpos.al type=file -x:\tlperl\lib/auto/POSIX/fstat.al type=file -x:\tlperl\lib/auto/POSIX/fsync.al type=file -x:\tlperl\lib/auto/POSIX/ftell.al type=file -x:\tlperl\lib/auto/POSIX/fwrite.al type=file -x:\tlperl\lib/auto/POSIX/getc.al type=file -x:\tlperl\lib/auto/POSIX/getchar.al type=file -x:\tlperl\lib/auto/POSIX/getegid.al type=file -x:\tlperl\lib/auto/POSIX/getenv.al type=file -x:\tlperl\lib/auto/POSIX/geteuid.al type=file -x:\tlperl\lib/auto/POSIX/getgid.al type=file -x:\tlperl\lib/auto/POSIX/getgrgid.al type=file -x:\tlperl\lib/auto/POSIX/getgrnam.al type=file -x:\tlperl\lib/auto/POSIX/getgroups.al type=file -x:\tlperl\lib/auto/POSIX/getlogin.al type=file -x:\tlperl\lib/auto/POSIX/getpgrp.al type=file -x:\tlperl\lib/auto/POSIX/getpid.al type=file -x:\tlperl\lib/auto/POSIX/getppid.al type=file -x:\tlperl\lib/auto/POSIX/getpwnam.al type=file -x:\tlperl\lib/auto/POSIX/getpwuid.al type=file -x:\tlperl\lib/auto/POSIX/gets.al type=file -x:\tlperl\lib/auto/POSIX/getuid.al type=file -x:\tlperl\lib/auto/POSIX/gmtime.al type=file -x:\tlperl\lib/auto/POSIX/isatty.al type=file -x:\tlperl\lib/auto/POSIX/kill.al type=file -x:\tlperl\lib/auto/POSIX/labs.al type=file -x:\tlperl\lib/auto/POSIX/ldiv.al type=file -x:\tlperl\lib/auto/POSIX/link.al type=file -x:\tlperl\lib/auto/POSIX/load_imports.al type=file -x:\tlperl\lib/auto/POSIX/localtime.al type=file -x:\tlperl\lib/auto/POSIX/log.al type=file -x:\tlperl\lib/auto/POSIX/longjmp.al type=file -x:\tlperl\lib/auto/POSIX/malloc.al type=file -x:\tlperl\lib/auto/POSIX/memchr.al type=file -x:\tlperl\lib/auto/POSIX/memcmp.al type=file -x:\tlperl\lib/auto/POSIX/memcpy.al type=file -x:\tlperl\lib/auto/POSIX/memmove.al type=file -x:\tlperl\lib/auto/POSIX/memset.al type=file -x:\tlperl\lib/auto/POSIX/mkdir.al type=file -x:\tlperl\lib/auto/POSIX/offsetof.al type=file -x:\tlperl\lib/auto/POSIX/opendir.al type=file -x:\tlperl\lib/auto/POSIX/perror.al type=file -x:\tlperl\lib/auto/POSIX/pow.al type=file -x:\tlperl\lib/auto/POSIX/printf.al type=file -x:\tlperl\lib/auto/POSIX/putc.al type=file -x:\tlperl\lib/auto/POSIX/putchar.al type=file -x:\tlperl\lib/auto/POSIX/puts.al type=file -x:\tlperl\lib/auto/POSIX/qsort.al type=file -x:\tlperl\lib/auto/POSIX/raise.al type=file -x:\tlperl\lib/auto/POSIX/rand.al type=file -x:\tlperl\lib/auto/POSIX/readdir.al type=file -x:\tlperl\lib/auto/POSIX/realloc.al type=file -x:\tlperl\lib/auto/POSIX/redef.al type=file -x:\tlperl\lib/auto/POSIX/remove.al type=file -x:\tlperl\lib/auto/POSIX/rename.al type=file -x:\tlperl\lib/auto/POSIX/rewind.al type=file -x:\tlperl\lib/auto/POSIX/rewinddir.al type=file -x:\tlperl\lib/auto/POSIX/rmdir.al type=file -x:\tlperl\lib/auto/POSIX/scanf.al type=file -x:\tlperl\lib/auto/POSIX/setbuf.al type=file -x:\tlperl\lib/auto/POSIX/setjmp.al type=file -x:\tlperl\lib/auto/POSIX/setvbuf.al type=file -x:\tlperl\lib/auto/POSIX/siglongjmp.al type=file -x:\tlperl\lib/auto/POSIX/sigsetjmp.al type=file -x:\tlperl\lib/auto/POSIX/sin.al type=file -x:\tlperl\lib/auto/POSIX/sleep.al type=file -x:\tlperl\lib/auto/POSIX/sprintf.al type=file -x:\tlperl\lib/auto/POSIX/sqrt.al type=file -x:\tlperl\lib/auto/POSIX/srand.al type=file -x:\tlperl\lib/auto/POSIX/sscanf.al type=file -x:\tlperl\lib/auto/POSIX/stat.al type=file -x:\tlperl\lib/auto/POSIX/strcat.al type=file -x:\tlperl\lib/auto/POSIX/strchr.al type=file -x:\tlperl\lib/auto/POSIX/strcmp.al type=file -x:\tlperl\lib/auto/POSIX/strcpy.al type=file -x:\tlperl\lib/auto/POSIX/strcspn.al type=file -x:\tlperl\lib/auto/POSIX/strerror.al type=file -x:\tlperl\lib/auto/POSIX/strlen.al type=file -x:\tlperl\lib/auto/POSIX/strncat.al type=file -x:\tlperl\lib/auto/POSIX/strncmp.al type=file -x:\tlperl\lib/auto/POSIX/strncpy.al type=file -x:\tlperl\lib/auto/POSIX/strpbrk.al type=file -x:\tlperl\lib/auto/POSIX/strrchr.al type=file -x:\tlperl\lib/auto/POSIX/strspn.al type=file -x:\tlperl\lib/auto/POSIX/strstr.al type=file -x:\tlperl\lib/auto/POSIX/strtok.al type=file -x:\tlperl\lib/auto/POSIX/system.al type=file -x:\tlperl\lib/auto/POSIX/time.al type=file -x:\tlperl\lib/auto/POSIX/tmpfile.al type=file -x:\tlperl\lib/auto/POSIX/tolower.al type=file -x:\tlperl\lib/auto/POSIX/toupper.al type=file -x:\tlperl\lib/auto/POSIX/umask.al type=file -x:\tlperl\lib/auto/POSIX/ungetc.al type=file -x:\tlperl\lib/auto/POSIX/unimpl.al type=file -x:\tlperl\lib/auto/POSIX/unlink.al type=file -x:\tlperl\lib/auto/POSIX/usage.al type=file -x:\tlperl\lib/auto/POSIX/utime.al type=file -x:\tlperl\lib/auto/POSIX/vfprintf.al type=file -x:\tlperl\lib/auto/POSIX/vprintf.al type=file -x:\tlperl\lib/auto/POSIX/vsprintf.al type=file -x:\tlperl\lib/auto/POSIX/wait.al type=file -x:\tlperl\lib/auto/POSIX/waitpid.al type=file -x:\tlperl\lib/auto/PerlIO/encoding/encoding.dll type=file -x:\tlperl\lib/auto/PerlIO/scalar/scalar.dll type=file -x:\tlperl\lib/auto/PerlIO/via/via.dll type=file -x:\tlperl\lib/auto/SDBM_File/SDBM_File.dll type=file -x:\tlperl\lib/auto/Socket/Socket.dll type=file -x:\tlperl\lib/auto/Storable/Storable.dll type=file -x:\tlperl\lib/auto/Sys/Hostname/Hostname.dll type=file -x:\tlperl\lib/auto/Text/Soundex/Soundex.dll type=file -x:\tlperl\lib/auto/Tie/Hash/NamedCapture/NamedCapture.dll type=file -x:\tlperl\lib/auto/Time/HiRes/HiRes.dll type=file -x:\tlperl\lib/auto/Time/Piece/Piece.dll type=file -x:\tlperl\lib/auto/Unicode/Collate/Collate.dll type=file -x:\tlperl\lib/auto/Unicode/Normalize/Normalize.dll type=file -x:\tlperl\lib/auto/Win32/Win32.dll type=file -x:\tlperl\lib/auto/Win32API/File/File.dll type=file -x:\tlperl\lib/auto/Win32CORE/extralibs.ld type=file -x:\tlperl\lib/auto/attributes/attributes.dll type=file -x:\tlperl\lib/auto/mro/mro.dll type=file -x:\tlperl\lib/auto/re/re.dll type=file -x:\tlperl\lib/auto/sdbm/extralibs.ld type=file -x:\tlperl\lib/auto/threads/shared/shared.dll type=file -x:\tlperl\lib/auto/threads/threads.dll type=file -x:\tlperl\lib/autodie.pm type=file -x:\tlperl\lib/autodie/exception.pm type=file -x:\tlperl\lib/autodie/exception/system.pm type=file -x:\tlperl\lib/autodie/hints.pm type=file -x:\tlperl\lib/autouse.pm type=file -x:\tlperl\lib/base.pm type=file -x:\tlperl\lib/bigfloat.pl type=file -x:\tlperl\lib/bigint.pl type=file -x:\tlperl\lib/bigint.pm type=file -x:\tlperl\lib/bignum.pm type=file -x:\tlperl\lib/bigrat.pl type=file -x:\tlperl\lib/bigrat.pm type=file -x:\tlperl\lib/blib.pm type=file -x:\tlperl\lib/bytes.pm type=file -x:\tlperl\lib/bytes_heavy.pl type=file -x:\tlperl\lib/cacheout.pl type=file -x:\tlperl\lib/charnames.pm type=file -x:\tlperl\lib/complete.pl type=file -x:\tlperl\lib/constant.pm type=file -x:\tlperl\lib/ctime.pl type=file -x:\tlperl\lib/deprecate.pm type=file -x:\tlperl\lib/diagnostics.pm type=file -x:\tlperl\lib/dotsh.pl type=file -x:\tlperl\lib/dumpvar.pl type=file -x:\tlperl\lib/encoding.pm type=file -x:\tlperl\lib/encoding/warnings.pm type=file -x:\tlperl\lib/exceptions.pl type=file -x:\tlperl\lib/fastcwd.pl type=file -x:\tlperl\lib/feature.pm type=file -x:\tlperl\lib/fields.pm type=file -x:\tlperl\lib/filetest.pm type=file -x:\tlperl\lib/find.pl type=file -x:\tlperl\lib/finddepth.pl type=file -x:\tlperl\lib/flush.pl type=file -x:\tlperl\lib/getcwd.pl type=file -x:\tlperl\lib/getopt.pl type=file -x:\tlperl\lib/getopts.pl type=file -x:\tlperl\lib/hostname.pl type=file -x:\tlperl\lib/if.pm type=file -x:\tlperl\lib/importenv.pl type=file -x:\tlperl\lib/inc/latest.pm type=file -x:\tlperl\lib/inc/latest/private.pm type=file -x:\tlperl\lib/integer.pm type=file -x:\tlperl\lib/less.pm type=file -x:\tlperl\lib/lib.pm type=file -x:\tlperl\lib/locale.pm type=file -x:\tlperl\lib/look.pl type=file -x:\tlperl\lib/mro.pm type=file -x:\tlperl\lib/newgetopt.pl type=file -x:\tlperl\lib/open.pm type=file -x:\tlperl\lib/open2.pl type=file -x:\tlperl\lib/open3.pl type=file -x:\tlperl\lib/ops.pm type=file -x:\tlperl\lib/overload.pm type=file -x:\tlperl\lib/overload/numbers.pm type=file -x:\tlperl\lib/overloading.pm type=file -x:\tlperl\lib/parent.pm type=file -x:\tlperl\lib/perl5db.pl type=file -x:\tlperl\lib/pods/a2p.pod type=file -x:\tlperl\lib/pods/perl.pod type=file -x:\tlperl\lib/pods/perl5004delta.pod type=file -x:\tlperl\lib/pods/perl5005delta.pod type=file -x:\tlperl\lib/pods/perl5100delta.pod type=file -x:\tlperl\lib/pods/perl5101delta.pod type=file -x:\tlperl\lib/pods/perl5110delta.pod type=file -x:\tlperl\lib/pods/perl5111delta.pod type=file -x:\tlperl\lib/pods/perl5112delta.pod type=file -x:\tlperl\lib/pods/perl5113delta.pod type=file -x:\tlperl\lib/pods/perl5114delta.pod type=file -x:\tlperl\lib/pods/perl5115delta.pod type=file -x:\tlperl\lib/pods/perl5120delta.pod type=file -x:\tlperl\lib/pods/perl5121delta.pod type=file -x:\tlperl\lib/pods/perl5122delta.pod type=file -x:\tlperl\lib/pods/perl5123delta.pod type=file -x:\tlperl\lib/pods/perl5130delta.pod type=file -x:\tlperl\lib/pods/perl51310delta.pod type=file -x:\tlperl\lib/pods/perl51311delta.pod type=file -x:\tlperl\lib/pods/perl5131delta.pod type=file -x:\tlperl\lib/pods/perl5132delta.pod type=file -x:\tlperl\lib/pods/perl5133delta.pod type=file -x:\tlperl\lib/pods/perl5134delta.pod type=file -x:\tlperl\lib/pods/perl5135delta.pod type=file -x:\tlperl\lib/pods/perl5136delta.pod type=file -x:\tlperl\lib/pods/perl5137delta.pod type=file -x:\tlperl\lib/pods/perl5138delta.pod type=file -x:\tlperl\lib/pods/perl5139delta.pod type=file -x:\tlperl\lib/pods/perl5140delta.pod type=file -x:\tlperl\lib/pods/perl5141delta.pod type=file -x:\tlperl\lib/pods/perl5142delta.pod type=file -x:\tlperl\lib/pods/perl561delta.pod type=file -x:\tlperl\lib/pods/perl56delta.pod type=file -x:\tlperl\lib/pods/perl570delta.pod type=file -x:\tlperl\lib/pods/perl571delta.pod type=file -x:\tlperl\lib/pods/perl572delta.pod type=file -x:\tlperl\lib/pods/perl573delta.pod type=file -x:\tlperl\lib/pods/perl581delta.pod type=file -x:\tlperl\lib/pods/perl582delta.pod type=file -x:\tlperl\lib/pods/perl583delta.pod type=file -x:\tlperl\lib/pods/perl584delta.pod type=file -x:\tlperl\lib/pods/perl585delta.pod type=file -x:\tlperl\lib/pods/perl586delta.pod type=file -x:\tlperl\lib/pods/perl587delta.pod type=file -x:\tlperl\lib/pods/perl588delta.pod type=file -x:\tlperl\lib/pods/perl589delta.pod type=file -x:\tlperl\lib/pods/perl58delta.pod type=file -x:\tlperl\lib/pods/perl590delta.pod type=file -x:\tlperl\lib/pods/perl591delta.pod type=file -x:\tlperl\lib/pods/perl592delta.pod type=file -x:\tlperl\lib/pods/perl593delta.pod type=file -x:\tlperl\lib/pods/perl594delta.pod type=file -x:\tlperl\lib/pods/perl595delta.pod type=file -x:\tlperl\lib/pods/perlaix.pod type=file -x:\tlperl\lib/pods/perlamiga.pod type=file -x:\tlperl\lib/pods/perlapi.pod type=file -x:\tlperl\lib/pods/perlapio.pod type=file -x:\tlperl\lib/pods/perlartistic.pod type=file -x:\tlperl\lib/pods/perlbeos.pod type=file -x:\tlperl\lib/pods/perlbook.pod type=file -x:\tlperl\lib/pods/perlboot.pod type=file -x:\tlperl\lib/pods/perlbot.pod type=file -x:\tlperl\lib/pods/perlbs2000.pod type=file -x:\tlperl\lib/pods/perlcall.pod type=file -x:\tlperl\lib/pods/perlce.pod type=file -x:\tlperl\lib/pods/perlcheat.pod type=file -x:\tlperl\lib/pods/perlclib.pod type=file -x:\tlperl\lib/pods/perlcn.pod type=file -x:\tlperl\lib/pods/perlcommunity.pod type=file -x:\tlperl\lib/pods/perlcompile.pod type=file -x:\tlperl\lib/pods/perlcygwin.pod type=file -x:\tlperl\lib/pods/perldata.pod type=file -x:\tlperl\lib/pods/perldbmfilter.pod type=file -x:\tlperl\lib/pods/perldebguts.pod type=file -x:\tlperl\lib/pods/perldebtut.pod type=file -x:\tlperl\lib/pods/perldebug.pod type=file -x:\tlperl\lib/pods/perldelta.pod type=file -x:\tlperl\lib/pods/perldgux.pod type=file -x:\tlperl\lib/pods/perldiag.pod type=file -x:\tlperl\lib/pods/perldoc.pod type=file -x:\tlperl\lib/pods/perldos.pod type=file -x:\tlperl\lib/pods/perldsc.pod type=file -x:\tlperl\lib/pods/perlebcdic.pod type=file -x:\tlperl\lib/pods/perlembed.pod type=file -x:\tlperl\lib/pods/perlepoc.pod type=file -x:\tlperl\lib/pods/perlfaq.pod type=file -x:\tlperl\lib/pods/perlfaq1.pod type=file -x:\tlperl\lib/pods/perlfaq2.pod type=file -x:\tlperl\lib/pods/perlfaq3.pod type=file -x:\tlperl\lib/pods/perlfaq4.pod type=file -x:\tlperl\lib/pods/perlfaq5.pod type=file -x:\tlperl\lib/pods/perlfaq6.pod type=file -x:\tlperl\lib/pods/perlfaq7.pod type=file -x:\tlperl\lib/pods/perlfaq8.pod type=file -x:\tlperl\lib/pods/perlfaq9.pod type=file -x:\tlperl\lib/pods/perlfilter.pod type=file -x:\tlperl\lib/pods/perlfork.pod type=file -x:\tlperl\lib/pods/perlform.pod type=file -x:\tlperl\lib/pods/perlfreebsd.pod type=file -x:\tlperl\lib/pods/perlfunc.pod type=file -x:\tlperl\lib/pods/perlgit.pod type=file -x:\tlperl\lib/pods/perlglossary.pod type=file -x:\tlperl\lib/pods/perlgpl.pod type=file -x:\tlperl\lib/pods/perlguts.pod type=file -x:\tlperl\lib/pods/perlhack.pod type=file -x:\tlperl\lib/pods/perlhacktips.pod type=file -x:\tlperl\lib/pods/perlhacktut.pod type=file -x:\tlperl\lib/pods/perlhaiku.pod type=file -x:\tlperl\lib/pods/perlhist.pod type=file -x:\tlperl\lib/pods/perlhpux.pod type=file -x:\tlperl\lib/pods/perlhurd.pod type=file -x:\tlperl\lib/pods/perlintern.pod type=file -x:\tlperl\lib/pods/perlinterp.pod type=file -x:\tlperl\lib/pods/perlintro.pod type=file -x:\tlperl\lib/pods/perliol.pod type=file -x:\tlperl\lib/pods/perlipc.pod type=file -x:\tlperl\lib/pods/perlirix.pod type=file -x:\tlperl\lib/pods/perljp.pod type=file -x:\tlperl\lib/pods/perlko.pod type=file -x:\tlperl\lib/pods/perllexwarn.pod type=file -x:\tlperl\lib/pods/perllinux.pod type=file -x:\tlperl\lib/pods/perllocale.pod type=file -x:\tlperl\lib/pods/perllol.pod type=file -x:\tlperl\lib/pods/perlmacos.pod type=file -x:\tlperl\lib/pods/perlmacosx.pod type=file -x:\tlperl\lib/pods/perlmod.pod type=file -x:\tlperl\lib/pods/perlmodinstall.pod type=file -x:\tlperl\lib/pods/perlmodlib.pod type=file -x:\tlperl\lib/pods/perlmodstyle.pod type=file -x:\tlperl\lib/pods/perlmpeix.pod type=file -x:\tlperl\lib/pods/perlmroapi.pod type=file -x:\tlperl\lib/pods/perlnetware.pod type=file -x:\tlperl\lib/pods/perlnewmod.pod type=file -x:\tlperl\lib/pods/perlnumber.pod type=file -x:\tlperl\lib/pods/perlobj.pod type=file -x:\tlperl\lib/pods/perlop.pod type=file -x:\tlperl\lib/pods/perlopenbsd.pod type=file -x:\tlperl\lib/pods/perlopentut.pod type=file -x:\tlperl\lib/pods/perlos2.pod type=file -x:\tlperl\lib/pods/perlos390.pod type=file -x:\tlperl\lib/pods/perlos400.pod type=file -x:\tlperl\lib/pods/perlpacktut.pod type=file -x:\tlperl\lib/pods/perlperf.pod type=file -x:\tlperl\lib/pods/perlplan9.pod type=file -x:\tlperl\lib/pods/perlpod.pod type=file -x:\tlperl\lib/pods/perlpodspec.pod type=file -x:\tlperl\lib/pods/perlpodstyle.pod type=file -x:\tlperl\lib/pods/perlpolicy.pod type=file -x:\tlperl\lib/pods/perlport.pod type=file -x:\tlperl\lib/pods/perlpragma.pod type=file -x:\tlperl\lib/pods/perlqnx.pod type=file -x:\tlperl\lib/pods/perlre.pod type=file -x:\tlperl\lib/pods/perlreapi.pod type=file -x:\tlperl\lib/pods/perlrebackslash.pod type=file -x:\tlperl\lib/pods/perlrecharclass.pod type=file -x:\tlperl\lib/pods/perlref.pod type=file -x:\tlperl\lib/pods/perlreftut.pod type=file -x:\tlperl\lib/pods/perlreguts.pod type=file -x:\tlperl\lib/pods/perlrequick.pod type=file -x:\tlperl\lib/pods/perlreref.pod type=file -x:\tlperl\lib/pods/perlretut.pod type=file -x:\tlperl\lib/pods/perlriscos.pod type=file -x:\tlperl\lib/pods/perlrun.pod type=file -x:\tlperl\lib/pods/perlsec.pod type=file -x:\tlperl\lib/pods/perlsolaris.pod type=file -x:\tlperl\lib/pods/perlsource.pod type=file -x:\tlperl\lib/pods/perlstyle.pod type=file -x:\tlperl\lib/pods/perlsub.pod type=file -x:\tlperl\lib/pods/perlsymbian.pod type=file -x:\tlperl\lib/pods/perlsyn.pod type=file -x:\tlperl\lib/pods/perlthrtut.pod type=file -x:\tlperl\lib/pods/perltie.pod type=file -x:\tlperl\lib/pods/perltoc.pod type=file -x:\tlperl\lib/pods/perltodo.pod type=file -x:\tlperl\lib/pods/perltooc.pod type=file -x:\tlperl\lib/pods/perltoot.pod type=file -x:\tlperl\lib/pods/perltrap.pod type=file -x:\tlperl\lib/pods/perltru64.pod type=file -x:\tlperl\lib/pods/perltw.pod type=file -x:\tlperl\lib/pods/perlunicode.pod type=file -x:\tlperl\lib/pods/perlunifaq.pod type=file -x:\tlperl\lib/pods/perluniintro.pod type=file -x:\tlperl\lib/pods/perluniprops.pod type=file -x:\tlperl\lib/pods/perlunitut.pod type=file -x:\tlperl\lib/pods/perlutil.pod type=file -x:\tlperl\lib/pods/perluts.pod type=file -x:\tlperl\lib/pods/perlvar.pod type=file -x:\tlperl\lib/pods/perlvmesa.pod type=file -x:\tlperl\lib/pods/perlvms.pod type=file -x:\tlperl\lib/pods/perlvos.pod type=file -x:\tlperl\lib/pods/perlwin32.pod type=file -x:\tlperl\lib/pods/perlxs.pod type=file -x:\tlperl\lib/pods/perlxstut.pod type=file -x:\tlperl\lib/pwd.pl type=file -x:\tlperl\lib/re.pm type=file -x:\tlperl\lib/shellwords.pl type=file -x:\tlperl\lib/sigtrap.pm type=file -x:\tlperl\lib/sort.pm type=file -x:\tlperl\lib/stat.pl type=file -x:\tlperl\lib/strict.pm type=file -x:\tlperl\lib/subs.pm type=file -x:\tlperl\lib/syslog.pl type=file -x:\tlperl\lib/tainted.pl type=file -x:\tlperl\lib/termcap.pl type=file -x:\tlperl\lib/threads.pm type=file -x:\tlperl\lib/threads/shared.pm type=file -x:\tlperl\lib/timelocal.pl type=file -x:\tlperl\lib/unicore/Blocks.txt type=file -x:\tlperl\lib/unicore/CaseFolding.txt type=file -x:\tlperl\lib/unicore/CombiningClass.pl type=file -x:\tlperl\lib/unicore/Decomposition.pl type=file -x:\tlperl\lib/unicore/Heavy.pl type=file -x:\tlperl\lib/unicore/Name.pl type=file -x:\tlperl\lib/unicore/NamedSequences.txt type=file -x:\tlperl\lib/unicore/SpecialCasing.txt type=file -x:\tlperl\lib/unicore/To/Age.pl type=file -x:\tlperl\lib/unicore/To/Bc.pl type=file -x:\tlperl\lib/unicore/To/Bmg.pl type=file -x:\tlperl\lib/unicore/To/Digit.pl type=file -x:\tlperl\lib/unicore/To/Dt.pl type=file -x:\tlperl\lib/unicore/To/Ea.pl type=file -x:\tlperl\lib/unicore/To/Fold.pl type=file -x:\tlperl\lib/unicore/To/GCB.pl type=file -x:\tlperl\lib/unicore/To/Gc.pl type=file -x:\tlperl\lib/unicore/To/Hst.pl type=file -x:\tlperl\lib/unicore/To/Jg.pl type=file -x:\tlperl\lib/unicore/To/Jt.pl type=file -x:\tlperl\lib/unicore/To/Lb.pl type=file -x:\tlperl\lib/unicore/To/Lower.pl type=file -x:\tlperl\lib/unicore/To/NFCQC.pl type=file -x:\tlperl\lib/unicore/To/NFDQC.pl type=file -x:\tlperl\lib/unicore/To/NFKCCF.pl type=file -x:\tlperl\lib/unicore/To/NFKCQC.pl type=file -x:\tlperl\lib/unicore/To/NFKDQC.pl type=file -x:\tlperl\lib/unicore/To/Na1.pl type=file -x:\tlperl\lib/unicore/To/Nt.pl type=file -x:\tlperl\lib/unicore/To/Nv.pl type=file -x:\tlperl\lib/unicore/To/SB.pl type=file -x:\tlperl\lib/unicore/To/Sc.pl type=file -x:\tlperl\lib/unicore/To/Title.pl type=file -x:\tlperl\lib/unicore/To/Upper.pl type=file -x:\tlperl\lib/unicore/To/WB.pl type=file -x:\tlperl\lib/unicore/To/_slc.pl type=file -x:\tlperl\lib/unicore/To/_stc.pl type=file -x:\tlperl\lib/unicore/To/_suc.pl type=file -x:\tlperl\lib/unicore/lib/AHex/N.pl type=file -x:\tlperl\lib/unicore/lib/AHex/Y.pl type=file -x:\tlperl\lib/unicore/lib/Age/1_1.pl type=file -x:\tlperl\lib/unicore/lib/Age/2_0.pl type=file -x:\tlperl\lib/unicore/lib/Age/2_1.pl type=file -x:\tlperl\lib/unicore/lib/Age/3_0.pl type=file -x:\tlperl\lib/unicore/lib/Age/3_1.pl type=file -x:\tlperl\lib/unicore/lib/Age/3_2.pl type=file -x:\tlperl\lib/unicore/lib/Age/4_0.pl type=file -x:\tlperl\lib/unicore/lib/Age/4_1.pl type=file -x:\tlperl\lib/unicore/lib/Age/5_0.pl type=file -x:\tlperl\lib/unicore/lib/Age/5_1.pl type=file -x:\tlperl\lib/unicore/lib/Age/5_2.pl type=file -x:\tlperl\lib/unicore/lib/Age/6_0.pl type=file -x:\tlperl\lib/unicore/lib/Age/Unassign.pl type=file -x:\tlperl\lib/unicore/lib/Alpha/N.pl type=file -x:\tlperl\lib/unicore/lib/Alpha/Y.pl type=file -x:\tlperl\lib/unicore/lib/Bc/AL.pl type=file -x:\tlperl\lib/unicore/lib/Bc/AN.pl type=file -x:\tlperl\lib/unicore/lib/Bc/B.pl type=file -x:\tlperl\lib/unicore/lib/Bc/BN.pl type=file -x:\tlperl\lib/unicore/lib/Bc/CS.pl type=file -x:\tlperl\lib/unicore/lib/Bc/EN.pl type=file -x:\tlperl\lib/unicore/lib/Bc/ES.pl type=file -x:\tlperl\lib/unicore/lib/Bc/ET.pl type=file -x:\tlperl\lib/unicore/lib/Bc/L.pl type=file -x:\tlperl\lib/unicore/lib/Bc/LRE.pl type=file -x:\tlperl\lib/unicore/lib/Bc/LRO.pl type=file -x:\tlperl\lib/unicore/lib/Bc/NSM.pl type=file -x:\tlperl\lib/unicore/lib/Bc/ON.pl type=file -x:\tlperl\lib/unicore/lib/Bc/PDF.pl type=file -x:\tlperl\lib/unicore/lib/Bc/R.pl type=file -x:\tlperl\lib/unicore/lib/Bc/RLE.pl type=file -x:\tlperl\lib/unicore/lib/Bc/RLO.pl type=file -x:\tlperl\lib/unicore/lib/Bc/S.pl type=file -x:\tlperl\lib/unicore/lib/Bc/WS.pl type=file -x:\tlperl\lib/unicore/lib/BidiC/N.pl type=file -x:\tlperl\lib/unicore/lib/BidiC/Y.pl type=file -x:\tlperl\lib/unicore/lib/BidiM/N.pl type=file -x:\tlperl\lib/unicore/lib/BidiM/Y.pl type=file -x:\tlperl\lib/unicore/lib/Blk/ASCII.pl type=file -x:\tlperl\lib/unicore/lib/Blk/AegeanNu.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Alchemic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Alphabet.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Ancient2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/AncientG.pl type=file -x:\tlperl\lib/unicore/lib/Blk/AncientS.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Arabic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/ArabicP2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/ArabicPr.pl type=file -x:\tlperl\lib/unicore/lib/Blk/ArabicSu.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Armenian.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Arrows.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Avestan.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Balinese.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Bamum.pl type=file -x:\tlperl\lib/unicore/lib/Blk/BamumSup.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Batak.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Bengali.pl type=file -x:\tlperl\lib/unicore/lib/Blk/BlockEle.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Bopomof2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Bopomofo.pl type=file -x:\tlperl\lib/unicore/lib/Blk/BoxDrawi.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Brahmi.pl type=file -x:\tlperl\lib/unicore/lib/Blk/BrailleP.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Buginese.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Buhid.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Byzantin.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKComp2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKComp3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKComp4.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKCompa.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKRadic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKStrok.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKSymbo.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKUnif2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKUnif3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKUnif4.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKUnif5.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CJKUnifi.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Canadian.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Carian.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Cham.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Cherokee.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Combini2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Combini3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Combini4.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Combinin.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CommonIn.pl type=file -x:\tlperl\lib/unicore/lib/Blk/ControlP.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Coptic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Counting.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Cuneifo2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Cuneifor.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Currency.pl type=file -x:\tlperl\lib/unicore/lib/Blk/CypriotS.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Cyrilli2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Cyrilli3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Cyrilli4.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Cyrillic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Deseret.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Devanag2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Devanaga.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Dingbats.pl type=file -x:\tlperl\lib/unicore/lib/Blk/DominoTi.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Egyptian.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Emoticon.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Enclose2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Enclose3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Enclose4.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Enclosed.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Ethiopi2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Ethiopi3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Ethiopi4.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Ethiopic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/GeneralP.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Geometri.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Georgia2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Georgian.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Glagolit.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Gothic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Greek.pl type=file -x:\tlperl\lib/unicore/lib/Blk/GreekExt.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Gujarati.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Gurmukhi.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Halfwidt.pl type=file -x:\tlperl\lib/unicore/lib/Blk/HangulCo.pl type=file -x:\tlperl\lib/unicore/lib/Blk/HangulJ2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/HangulJ3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/HangulJa.pl type=file -x:\tlperl\lib/unicore/lib/Blk/HangulSy.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Hanunoo.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Hebrew.pl type=file -x:\tlperl\lib/unicore/lib/Blk/HighPriv.pl type=file -x:\tlperl\lib/unicore/lib/Blk/HighSurr.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Hiragana.pl type=file -x:\tlperl\lib/unicore/lib/Blk/IPAExten.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Ideograp.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Imperial.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Inscrip2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Inscript.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Javanese.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Kaithi.pl type=file -x:\tlperl\lib/unicore/lib/Blk/KanaSupp.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Kanbun.pl type=file -x:\tlperl\lib/unicore/lib/Blk/KangxiRa.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Kannada.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Katakan2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Katakana.pl type=file -x:\tlperl\lib/unicore/lib/Blk/KayahLi.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Kharosht.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Khmer.pl type=file -x:\tlperl\lib/unicore/lib/Blk/KhmerSym.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Lao.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Latin1.pl type=file -x:\tlperl\lib/unicore/lib/Blk/LatinEx2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/LatinEx3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/LatinEx4.pl type=file -x:\tlperl\lib/unicore/lib/Blk/LatinEx5.pl type=file -x:\tlperl\lib/unicore/lib/Blk/LatinExt.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Lepcha.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Letterli.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Limbu.pl type=file -x:\tlperl\lib/unicore/lib/Blk/LinearBI.pl type=file -x:\tlperl\lib/unicore/lib/Blk/LinearBS.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Lisu.pl type=file -x:\tlperl\lib/unicore/lib/Blk/LowSurro.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Lycian.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Lydian.pl type=file -x:\tlperl\lib/unicore/lib/Blk/MahjongT.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Malayala.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Mandaic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Mathema2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Mathemat.pl type=file -x:\tlperl\lib/unicore/lib/Blk/MeeteiMa.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Miscell2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Miscell3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Miscell4.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Miscell5.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Miscell6.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Miscella.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Modifier.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Mongolia.pl type=file -x:\tlperl\lib/unicore/lib/Blk/MusicalS.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Myanmar.pl type=file -x:\tlperl\lib/unicore/lib/Blk/MyanmarE.pl type=file -x:\tlperl\lib/unicore/lib/Blk/NKo.pl type=file -x:\tlperl\lib/unicore/lib/Blk/NewTaiLu.pl type=file -x:\tlperl\lib/unicore/lib/Blk/NoBlock.pl type=file -x:\tlperl\lib/unicore/lib/Blk/NumberFo.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Ogham.pl type=file -x:\tlperl\lib/unicore/lib/Blk/OlChiki.pl type=file -x:\tlperl\lib/unicore/lib/Blk/OldItali.pl type=file -x:\tlperl\lib/unicore/lib/Blk/OldPersi.pl type=file -x:\tlperl\lib/unicore/lib/Blk/OldSouth.pl type=file -x:\tlperl\lib/unicore/lib/Blk/OldTurki.pl type=file -x:\tlperl\lib/unicore/lib/Blk/OpticalC.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Oriya.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Osmanya.pl type=file -x:\tlperl\lib/unicore/lib/Blk/PhagsPa.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Phaistos.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Phoenici.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Phoneti2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Phonetic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/PlayingC.pl type=file -x:\tlperl\lib/unicore/lib/Blk/PrivateU.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Rejang.pl type=file -x:\tlperl\lib/unicore/lib/Blk/RumiNume.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Runic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Samarita.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Saurasht.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Shavian.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Sinhala.pl type=file -x:\tlperl\lib/unicore/lib/Blk/SmallFor.pl type=file -x:\tlperl\lib/unicore/lib/Blk/SpacingM.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Specials.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Sundanes.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Superscr.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Supplem2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Supplem3.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Supplem4.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Supplem5.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Supplem6.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Suppleme.pl type=file -x:\tlperl\lib/unicore/lib/Blk/SylotiNa.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Syriac.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Tagalog.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Tagbanwa.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Tags.pl type=file -x:\tlperl\lib/unicore/lib/Blk/TaiLe.pl type=file -x:\tlperl\lib/unicore/lib/Blk/TaiTham.pl type=file -x:\tlperl\lib/unicore/lib/Blk/TaiViet.pl type=file -x:\tlperl\lib/unicore/lib/Blk/TaiXuanJ.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Tamil.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Telugu.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Thaana.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Thai.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Tibetan.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Tifinagh.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Transpor.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Ugaritic.pl type=file -x:\tlperl\lib/unicore/lib/Blk/UnifiedC.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Vai.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Variati2.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Variatio.pl type=file -x:\tlperl\lib/unicore/lib/Blk/VedicExt.pl type=file -x:\tlperl\lib/unicore/lib/Blk/Vertical.pl type=file -x:\tlperl\lib/unicore/lib/Blk/YiRadica.pl type=file -x:\tlperl\lib/unicore/lib/Blk/YiSyllab.pl type=file -x:\tlperl\lib/unicore/lib/Blk/YijingHe.pl type=file -x:\tlperl\lib/unicore/lib/CE/N.pl type=file -x:\tlperl\lib/unicore/lib/CE/Y.pl type=file -x:\tlperl\lib/unicore/lib/CI/N.pl type=file -x:\tlperl\lib/unicore/lib/CI/Y.pl type=file -x:\tlperl\lib/unicore/lib/CWCF/N.pl type=file -x:\tlperl\lib/unicore/lib/CWCF/Y.pl type=file -x:\tlperl\lib/unicore/lib/CWCM/N.pl type=file -x:\tlperl\lib/unicore/lib/CWCM/Y.pl type=file -x:\tlperl\lib/unicore/lib/CWKCF/N.pl type=file -x:\tlperl\lib/unicore/lib/CWKCF/Y.pl type=file -x:\tlperl\lib/unicore/lib/CWL/N.pl type=file -x:\tlperl\lib/unicore/lib/CWL/Y.pl type=file -x:\tlperl\lib/unicore/lib/CWT/N.pl type=file -x:\tlperl\lib/unicore/lib/CWT/Y.pl type=file -x:\tlperl\lib/unicore/lib/CWU/N.pl type=file -x:\tlperl\lib/unicore/lib/CWU/Y.pl type=file -x:\tlperl\lib/unicore/lib/Cased/N.pl type=file -x:\tlperl\lib/unicore/lib/Cased/Y.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/10.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/103.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/107.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/11.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/118.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/12.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/122.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/129.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/13.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/130.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/132.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/14.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/15.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/16.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/17.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/18.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/19.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/20.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/21.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/22.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/23.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/24.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/25.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/26.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/27.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/28.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/29.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/30.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/31.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/32.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/33.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/34.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/35.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/36.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/84.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/91.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/A.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/AL.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/AR.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/ATA.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/ATAR.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/ATB.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/ATBL.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/B.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/BL.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/BR.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/DA.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/DB.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/IS.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/KV.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/L.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/NK.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/NR.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/OV.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/R.pl type=file -x:\tlperl\lib/unicore/lib/Ccc/VR.pl type=file -x:\tlperl\lib/unicore/lib/CompEx/N.pl type=file -x:\tlperl\lib/unicore/lib/CompEx/Y.pl type=file -x:\tlperl\lib/unicore/lib/DI/N.pl type=file -x:\tlperl\lib/unicore/lib/DI/Y.pl type=file -x:\tlperl\lib/unicore/lib/Dash/N.pl type=file -x:\tlperl\lib/unicore/lib/Dash/Y.pl type=file -x:\tlperl\lib/unicore/lib/Dep/N.pl type=file -x:\tlperl\lib/unicore/lib/Dep/Y.pl type=file -x:\tlperl\lib/unicore/lib/Dia/N.pl type=file -x:\tlperl\lib/unicore/lib/Dia/Y.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Com.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Enc.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Fin.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Font.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Fra.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Init.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Iso.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Med.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Nar.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Nb.pl type=file -x:\tlperl\lib/unicore/lib/Dt/NonCanon.pl type=file -x:\tlperl\lib/unicore/lib/Dt/None.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Sml.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Sqr.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Sub.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Sup.pl type=file -x:\tlperl\lib/unicore/lib/Dt/Vert.pl type=file -x:\tlperl\lib/unicore/lib/Ea/A.pl type=file -x:\tlperl\lib/unicore/lib/Ea/F.pl type=file -x:\tlperl\lib/unicore/lib/Ea/H.pl type=file -x:\tlperl\lib/unicore/lib/Ea/N.pl type=file -x:\tlperl\lib/unicore/lib/Ea/Na.pl type=file -x:\tlperl\lib/unicore/lib/Ea/W.pl type=file -x:\tlperl\lib/unicore/lib/Ext/N.pl type=file -x:\tlperl\lib/unicore/lib/Ext/Y.pl type=file -x:\tlperl\lib/unicore/lib/GCB/CN.pl type=file -x:\tlperl\lib/unicore/lib/GCB/CR.pl type=file -x:\tlperl\lib/unicore/lib/GCB/EX.pl type=file -x:\tlperl\lib/unicore/lib/GCB/L.pl type=file -x:\tlperl\lib/unicore/lib/GCB/LF.pl type=file -x:\tlperl\lib/unicore/lib/GCB/LV.pl type=file -x:\tlperl\lib/unicore/lib/GCB/LVT.pl type=file -x:\tlperl\lib/unicore/lib/GCB/PP.pl type=file -x:\tlperl\lib/unicore/lib/GCB/SM.pl type=file -x:\tlperl\lib/unicore/lib/GCB/T.pl type=file -x:\tlperl\lib/unicore/lib/GCB/V.pl type=file -x:\tlperl\lib/unicore/lib/GCB/XX.pl type=file -x:\tlperl\lib/unicore/lib/Gc/C.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Cc.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Cf.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Cn.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Co.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Cs.pl type=file -x:\tlperl\lib/unicore/lib/Gc/L.pl type=file -x:\tlperl\lib/unicore/lib/Gc/LC.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Ll.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Lm.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Lo.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Lu.pl type=file -x:\tlperl\lib/unicore/lib/Gc/M.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Mc.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Me.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Mn.pl type=file -x:\tlperl\lib/unicore/lib/Gc/N.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Nl.pl type=file -x:\tlperl\lib/unicore/lib/Gc/No.pl type=file -x:\tlperl\lib/unicore/lib/Gc/P.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Pd.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Pe.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Pf.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Pi.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Po.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Ps.pl type=file -x:\tlperl\lib/unicore/lib/Gc/S.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Sc.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Sk.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Sm.pl type=file -x:\tlperl\lib/unicore/lib/Gc/So.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Z.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Zl.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Zp.pl type=file -x:\tlperl\lib/unicore/lib/Gc/Zs.pl type=file -x:\tlperl\lib/unicore/lib/GrBase/N.pl type=file -x:\tlperl\lib/unicore/lib/GrBase/Y.pl type=file -x:\tlperl\lib/unicore/lib/GrExt/N.pl type=file -x:\tlperl\lib/unicore/lib/Hex/N.pl type=file -x:\tlperl\lib/unicore/lib/Hex/Y.pl type=file -x:\tlperl\lib/unicore/lib/Hst/NA.pl type=file -x:\tlperl\lib/unicore/lib/Hyphen/N.pl type=file -x:\tlperl\lib/unicore/lib/Hyphen/Y.pl type=file -x:\tlperl\lib/unicore/lib/IDC/N.pl type=file -x:\tlperl\lib/unicore/lib/IDC/Y.pl type=file -x:\tlperl\lib/unicore/lib/IDS/N.pl type=file -x:\tlperl\lib/unicore/lib/IDS/Y.pl type=file -x:\tlperl\lib/unicore/lib/IDSB/N.pl type=file -x:\tlperl\lib/unicore/lib/IDSB/Y.pl type=file -x:\tlperl\lib/unicore/lib/IDST/N.pl type=file -x:\tlperl\lib/unicore/lib/IDST/Y.pl type=file -x:\tlperl\lib/unicore/lib/Ideo/N.pl type=file -x:\tlperl\lib/unicore/lib/Ideo/Y.pl type=file -x:\tlperl\lib/unicore/lib/In/2_0.pl type=file -x:\tlperl\lib/unicore/lib/In/2_1.pl type=file -x:\tlperl\lib/unicore/lib/In/3_0.pl type=file -x:\tlperl\lib/unicore/lib/In/3_1.pl type=file -x:\tlperl\lib/unicore/lib/In/3_2.pl type=file -x:\tlperl\lib/unicore/lib/In/4_0.pl type=file -x:\tlperl\lib/unicore/lib/In/4_1.pl type=file -x:\tlperl\lib/unicore/lib/In/5_0.pl type=file -x:\tlperl\lib/unicore/lib/In/5_1.pl type=file -x:\tlperl\lib/unicore/lib/In/5_2.pl type=file -x:\tlperl\lib/unicore/lib/In/6_0.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Ain.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Alaph.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Alef.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Beh.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Beth.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Burushas.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Dal.pl type=file -x:\tlperl\lib/unicore/lib/Jg/DalathRi.pl type=file -x:\tlperl\lib/unicore/lib/Jg/E.pl type=file -x:\tlperl\lib/unicore/lib/Jg/FarsiYeh.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Fe.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Feh.pl type=file -x:\tlperl\lib/unicore/lib/Jg/FinalSem.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Gaf.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Gamal.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Hah.pl type=file -x:\tlperl\lib/unicore/lib/Jg/He.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Heh.pl type=file -x:\tlperl\lib/unicore/lib/Jg/HehGoal.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Heth.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Kaf.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Kaph.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Khaph.pl type=file -x:\tlperl\lib/unicore/lib/Jg/KnottedH.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Lam.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Lamadh.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Meem.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Mim.pl type=file -x:\tlperl\lib/unicore/lib/Jg/NoJoinin.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Noon.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Nun.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Nya.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Pe.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Qaf.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Qaph.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Reh.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Reversed.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Sad.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Sadhe.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Seen.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Semkath.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Shin.pl type=file -x:\tlperl\lib/unicore/lib/Jg/SwashKaf.pl type=file -x:\tlperl\lib/unicore/lib/Jg/SyriacWa.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Tah.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Taw.pl type=file -x:\tlperl\lib/unicore/lib/Jg/TehMarb2.pl type=file -x:\tlperl\lib/unicore/lib/Jg/TehMarbu.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Teth.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Waw.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Yeh.pl type=file -x:\tlperl\lib/unicore/lib/Jg/YehBarre.pl type=file -x:\tlperl\lib/unicore/lib/Jg/YehWithT.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Yudh.pl type=file -x:\tlperl\lib/unicore/lib/Jg/YudhHe.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Zain.pl type=file -x:\tlperl\lib/unicore/lib/Jg/Zhain.pl type=file -x:\tlperl\lib/unicore/lib/JoinC/N.pl type=file -x:\tlperl\lib/unicore/lib/JoinC/Y.pl type=file -x:\tlperl\lib/unicore/lib/Jt/C.pl type=file -x:\tlperl\lib/unicore/lib/Jt/D.pl type=file -x:\tlperl\lib/unicore/lib/Jt/R.pl type=file -x:\tlperl\lib/unicore/lib/Jt/T.pl type=file -x:\tlperl\lib/unicore/lib/Jt/U.pl type=file -x:\tlperl\lib/unicore/lib/LOE/N.pl type=file -x:\tlperl\lib/unicore/lib/Lb/AI.pl type=file -x:\tlperl\lib/unicore/lib/Lb/AL.pl type=file -x:\tlperl\lib/unicore/lib/Lb/B2.pl type=file -x:\tlperl\lib/unicore/lib/Lb/BA.pl type=file -x:\tlperl\lib/unicore/lib/Lb/BB.pl type=file -x:\tlperl\lib/unicore/lib/Lb/BK.pl type=file -x:\tlperl\lib/unicore/lib/Lb/CB.pl type=file -x:\tlperl\lib/unicore/lib/Lb/CL.pl type=file -x:\tlperl\lib/unicore/lib/Lb/CM.pl type=file -x:\tlperl\lib/unicore/lib/Lb/CP.pl type=file -x:\tlperl\lib/unicore/lib/Lb/EX.pl type=file -x:\tlperl\lib/unicore/lib/Lb/GL.pl type=file -x:\tlperl\lib/unicore/lib/Lb/HY.pl type=file -x:\tlperl\lib/unicore/lib/Lb/ID.pl type=file -x:\tlperl\lib/unicore/lib/Lb/IN.pl type=file -x:\tlperl\lib/unicore/lib/Lb/IS.pl type=file -x:\tlperl\lib/unicore/lib/Lb/NL.pl type=file -x:\tlperl\lib/unicore/lib/Lb/NS.pl type=file -x:\tlperl\lib/unicore/lib/Lb/NU.pl type=file -x:\tlperl\lib/unicore/lib/Lb/OP.pl type=file -x:\tlperl\lib/unicore/lib/Lb/PO.pl type=file -x:\tlperl\lib/unicore/lib/Lb/PR.pl type=file -x:\tlperl\lib/unicore/lib/Lb/QU.pl type=file -x:\tlperl\lib/unicore/lib/Lb/SA.pl type=file -x:\tlperl\lib/unicore/lib/Lb/SG.pl type=file -x:\tlperl\lib/unicore/lib/Lb/SP.pl type=file -x:\tlperl\lib/unicore/lib/Lb/SY.pl type=file -x:\tlperl\lib/unicore/lib/Lb/WJ.pl type=file -x:\tlperl\lib/unicore/lib/Lb/XX.pl type=file -x:\tlperl\lib/unicore/lib/Lb/ZW.pl type=file -x:\tlperl\lib/unicore/lib/Lower/N.pl type=file -x:\tlperl\lib/unicore/lib/Lower/Y.pl type=file -x:\tlperl\lib/unicore/lib/Math/N.pl type=file -x:\tlperl\lib/unicore/lib/Math/Y.pl type=file -x:\tlperl\lib/unicore/lib/NChar/N.pl type=file -x:\tlperl\lib/unicore/lib/NChar/Y.pl type=file -x:\tlperl\lib/unicore/lib/NFCQC/Y.pl type=file -x:\tlperl\lib/unicore/lib/NFDQC/N.pl type=file -x:\tlperl\lib/unicore/lib/NFDQC/Y.pl type=file -x:\tlperl\lib/unicore/lib/NFKCQC/M.pl type=file -x:\tlperl\lib/unicore/lib/NFKCQC/N.pl type=file -x:\tlperl\lib/unicore/lib/NFKCQC/Y.pl type=file -x:\tlperl\lib/unicore/lib/NFKDQC/N.pl type=file -x:\tlperl\lib/unicore/lib/Nt/De.pl type=file -x:\tlperl\lib/unicore/lib/Nt/Di.pl type=file -x:\tlperl\lib/unicore/lib/Nt/Nu.pl type=file -x:\tlperl\lib/unicore/lib/Nv/0.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1.pl type=file -x:\tlperl\lib/unicore/lib/Nv/10.pl type=file -x:\tlperl\lib/unicore/lib/Nv/100.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/10000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/100000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/10000000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/10000002.pl type=file -x:\tlperl\lib/unicore/lib/Nv/11.pl type=file -x:\tlperl\lib/unicore/lib/Nv/11_2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/12.pl type=file -x:\tlperl\lib/unicore/lib/Nv/13.pl type=file -x:\tlperl\lib/unicore/lib/Nv/13_2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/14.pl type=file -x:\tlperl\lib/unicore/lib/Nv/15.pl type=file -x:\tlperl\lib/unicore/lib/Nv/15_2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/16.pl type=file -x:\tlperl\lib/unicore/lib/Nv/17.pl type=file -x:\tlperl\lib/unicore/lib/Nv/17_2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/18.pl type=file -x:\tlperl\lib/unicore/lib/Nv/19.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_10.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_16.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_3.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_4.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_5.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_6.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_7.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_8.pl type=file -x:\tlperl\lib/unicore/lib/Nv/1_9.pl type=file -x:\tlperl\lib/unicore/lib/Nv/2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/20.pl type=file -x:\tlperl\lib/unicore/lib/Nv/200.pl type=file -x:\tlperl\lib/unicore/lib/Nv/2000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/20000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/21.pl type=file -x:\tlperl\lib/unicore/lib/Nv/22.pl type=file -x:\tlperl\lib/unicore/lib/Nv/23.pl type=file -x:\tlperl\lib/unicore/lib/Nv/24.pl type=file -x:\tlperl\lib/unicore/lib/Nv/25.pl type=file -x:\tlperl\lib/unicore/lib/Nv/26.pl type=file -x:\tlperl\lib/unicore/lib/Nv/27.pl type=file -x:\tlperl\lib/unicore/lib/Nv/28.pl type=file -x:\tlperl\lib/unicore/lib/Nv/29.pl type=file -x:\tlperl\lib/unicore/lib/Nv/2_3.pl type=file -x:\tlperl\lib/unicore/lib/Nv/2_5.pl type=file -x:\tlperl\lib/unicore/lib/Nv/3.pl type=file -x:\tlperl\lib/unicore/lib/Nv/30.pl type=file -x:\tlperl\lib/unicore/lib/Nv/300.pl type=file -x:\tlperl\lib/unicore/lib/Nv/3000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/30000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/31.pl type=file -x:\tlperl\lib/unicore/lib/Nv/32.pl type=file -x:\tlperl\lib/unicore/lib/Nv/33.pl type=file -x:\tlperl\lib/unicore/lib/Nv/34.pl type=file -x:\tlperl\lib/unicore/lib/Nv/35.pl type=file -x:\tlperl\lib/unicore/lib/Nv/36.pl type=file -x:\tlperl\lib/unicore/lib/Nv/37.pl type=file -x:\tlperl\lib/unicore/lib/Nv/38.pl type=file -x:\tlperl\lib/unicore/lib/Nv/39.pl type=file -x:\tlperl\lib/unicore/lib/Nv/3_16.pl type=file -x:\tlperl\lib/unicore/lib/Nv/3_2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/3_4.pl type=file -x:\tlperl\lib/unicore/lib/Nv/3_5.pl type=file -x:\tlperl\lib/unicore/lib/Nv/3_8.pl type=file -x:\tlperl\lib/unicore/lib/Nv/4.pl type=file -x:\tlperl\lib/unicore/lib/Nv/40.pl type=file -x:\tlperl\lib/unicore/lib/Nv/400.pl type=file -x:\tlperl\lib/unicore/lib/Nv/4000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/40000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/41.pl type=file -x:\tlperl\lib/unicore/lib/Nv/42.pl type=file -x:\tlperl\lib/unicore/lib/Nv/43.pl type=file -x:\tlperl\lib/unicore/lib/Nv/44.pl type=file -x:\tlperl\lib/unicore/lib/Nv/45.pl type=file -x:\tlperl\lib/unicore/lib/Nv/46.pl type=file -x:\tlperl\lib/unicore/lib/Nv/47.pl type=file -x:\tlperl\lib/unicore/lib/Nv/48.pl type=file -x:\tlperl\lib/unicore/lib/Nv/49.pl type=file -x:\tlperl\lib/unicore/lib/Nv/4_5.pl type=file -x:\tlperl\lib/unicore/lib/Nv/5.pl type=file -x:\tlperl\lib/unicore/lib/Nv/50.pl type=file -x:\tlperl\lib/unicore/lib/Nv/500.pl type=file -x:\tlperl\lib/unicore/lib/Nv/5000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/50000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/5_2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/5_6.pl type=file -x:\tlperl\lib/unicore/lib/Nv/5_8.pl type=file -x:\tlperl\lib/unicore/lib/Nv/6.pl type=file -x:\tlperl\lib/unicore/lib/Nv/60.pl type=file -x:\tlperl\lib/unicore/lib/Nv/600.pl type=file -x:\tlperl\lib/unicore/lib/Nv/6000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/60000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/7.pl type=file -x:\tlperl\lib/unicore/lib/Nv/70.pl type=file -x:\tlperl\lib/unicore/lib/Nv/700.pl type=file -x:\tlperl\lib/unicore/lib/Nv/7000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/70000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/7_2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/7_8.pl type=file -x:\tlperl\lib/unicore/lib/Nv/8.pl type=file -x:\tlperl\lib/unicore/lib/Nv/80.pl type=file -x:\tlperl\lib/unicore/lib/Nv/800.pl type=file -x:\tlperl\lib/unicore/lib/Nv/8000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/80000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/9.pl type=file -x:\tlperl\lib/unicore/lib/Nv/90.pl type=file -x:\tlperl\lib/unicore/lib/Nv/900.pl type=file -x:\tlperl\lib/unicore/lib/Nv/9000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/90000.pl type=file -x:\tlperl\lib/unicore/lib/Nv/9_2.pl type=file -x:\tlperl\lib/unicore/lib/Nv/NaN.pl type=file -x:\tlperl\lib/unicore/lib/Nv/_1_2.pl type=file -x:\tlperl\lib/unicore/lib/OAlpha/N.pl type=file -x:\tlperl\lib/unicore/lib/OAlpha/Y.pl type=file -x:\tlperl\lib/unicore/lib/ODI/N.pl type=file -x:\tlperl\lib/unicore/lib/ODI/Y.pl type=file -x:\tlperl\lib/unicore/lib/OGrExt/N.pl type=file -x:\tlperl\lib/unicore/lib/OGrExt/Y.pl type=file -x:\tlperl\lib/unicore/lib/OIDC/N.pl type=file -x:\tlperl\lib/unicore/lib/OIDC/Y.pl type=file -x:\tlperl\lib/unicore/lib/OIDS/N.pl type=file -x:\tlperl\lib/unicore/lib/OIDS/Y.pl type=file -x:\tlperl\lib/unicore/lib/OLower/N.pl type=file -x:\tlperl\lib/unicore/lib/OLower/Y.pl type=file -x:\tlperl\lib/unicore/lib/OMath/N.pl type=file -x:\tlperl\lib/unicore/lib/OMath/Y.pl type=file -x:\tlperl\lib/unicore/lib/OUpper/N.pl type=file -x:\tlperl\lib/unicore/lib/OUpper/Y.pl type=file -x:\tlperl\lib/unicore/lib/PatSyn/N.pl type=file -x:\tlperl\lib/unicore/lib/PatSyn/Y.pl type=file -x:\tlperl\lib/unicore/lib/PatWS/N.pl type=file -x:\tlperl\lib/unicore/lib/PatWS/Y.pl type=file -x:\tlperl\lib/unicore/lib/Perl/Alnum.pl type=file -x:\tlperl\lib/unicore/lib/Perl/Any.pl type=file -x:\tlperl\lib/unicore/lib/Perl/Assigned.pl type=file -x:\tlperl\lib/unicore/lib/Perl/Blank.pl type=file -x:\tlperl\lib/unicore/lib/Perl/Graph.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PerlSpac.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PerlWord.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixAln.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixAlp.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixBla.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixCnt.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixDig.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixGra.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixLow.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixPri.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixPun.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixSpa.pl type=file -x:\tlperl\lib/unicore/lib/Perl/PosixUpp.pl type=file -x:\tlperl\lib/unicore/lib/Perl/Print.pl type=file -x:\tlperl\lib/unicore/lib/Perl/SpacePer.pl type=file -x:\tlperl\lib/unicore/lib/Perl/Title.pl type=file -x:\tlperl\lib/unicore/lib/Perl/VertSpac.pl type=file -x:\tlperl\lib/unicore/lib/Perl/Word.pl type=file -x:\tlperl\lib/unicore/lib/Perl/XPosixPu.pl type=file -x:\tlperl\lib/unicore/lib/Perl/_XBegin.pl type=file -x:\tlperl\lib/unicore/lib/Perl/_XExtend.pl type=file -x:\tlperl\lib/unicore/lib/Perl/_XLVLVTV.pl type=file -x:\tlperl\lib/unicore/lib/QMark/N.pl type=file -x:\tlperl\lib/unicore/lib/QMark/Y.pl type=file -x:\tlperl\lib/unicore/lib/Radical/N.pl type=file -x:\tlperl\lib/unicore/lib/Radical/Y.pl type=file -x:\tlperl\lib/unicore/lib/SB/AT.pl type=file -x:\tlperl\lib/unicore/lib/SB/CL.pl type=file -x:\tlperl\lib/unicore/lib/SB/EX.pl type=file -x:\tlperl\lib/unicore/lib/SB/FO.pl type=file -x:\tlperl\lib/unicore/lib/SB/LE.pl type=file -x:\tlperl\lib/unicore/lib/SB/LO.pl type=file -x:\tlperl\lib/unicore/lib/SB/SC.pl type=file -x:\tlperl\lib/unicore/lib/SB/SE.pl type=file -x:\tlperl\lib/unicore/lib/SB/ST.pl type=file -x:\tlperl\lib/unicore/lib/SB/Sp.pl type=file -x:\tlperl\lib/unicore/lib/SB/UP.pl type=file -x:\tlperl\lib/unicore/lib/SB/XX.pl type=file -x:\tlperl\lib/unicore/lib/SD/N.pl type=file -x:\tlperl\lib/unicore/lib/SD/Y.pl type=file -x:\tlperl\lib/unicore/lib/STerm/N.pl type=file -x:\tlperl\lib/unicore/lib/STerm/Y.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Arab.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Armi.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Armn.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Avst.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Bali.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Bamu.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Batk.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Beng.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Bopo.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Brah.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Bugi.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Buhd.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Cans.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Cari.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Cham.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Cher.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Copt.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Cprt.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Cyrl.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Deva.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Egyp.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Ethi.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Geor.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Glag.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Goth.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Grek.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Gujr.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Guru.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Han.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Hang.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Hano.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Hebr.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Hira.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Ital.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Java.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Kana.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Khar.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Khmr.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Knda.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Kthi.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Lana.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Lao.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Latn.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Lepc.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Limb.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Linb.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Lyci.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Lydi.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Mand.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Mlym.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Mong.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Mtei.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Mymr.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Nko.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Ogam.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Orkh.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Orya.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Osma.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Phag.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Phli.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Phnx.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Prti.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Rjng.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Runr.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Samr.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Saur.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Sinh.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Sund.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Sylo.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Syrc.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Tagb.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Tale.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Talu.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Taml.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Tavt.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Telu.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Tfng.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Tglg.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Thaa.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Thai.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Tibt.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Ugar.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Vai.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Xpeo.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Xsux.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Yi.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Zinh.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Zyyy.pl type=file -x:\tlperl\lib/unicore/lib/Sc/Zzzz.pl type=file -x:\tlperl\lib/unicore/lib/Space/N.pl type=file -x:\tlperl\lib/unicore/lib/Space/Y.pl type=file -x:\tlperl\lib/unicore/lib/Term/N.pl type=file -x:\tlperl\lib/unicore/lib/Term/Y.pl type=file -x:\tlperl\lib/unicore/lib/UIdeo/N.pl type=file -x:\tlperl\lib/unicore/lib/UIdeo/Y.pl type=file -x:\tlperl\lib/unicore/lib/Upper/N.pl type=file -x:\tlperl\lib/unicore/lib/Upper/Y.pl type=file -x:\tlperl\lib/unicore/lib/VS/N.pl type=file -x:\tlperl\lib/unicore/lib/VS/Y.pl type=file -x:\tlperl\lib/unicore/lib/WB/EX.pl type=file -x:\tlperl\lib/unicore/lib/WB/FO.pl type=file -x:\tlperl\lib/unicore/lib/WB/KA.pl type=file -x:\tlperl\lib/unicore/lib/WB/LE.pl type=file -x:\tlperl\lib/unicore/lib/WB/MB.pl type=file -x:\tlperl\lib/unicore/lib/WB/ML.pl type=file -x:\tlperl\lib/unicore/lib/WB/MN.pl type=file -x:\tlperl\lib/unicore/lib/WB/NL.pl type=file -x:\tlperl\lib/unicore/lib/WB/NU.pl type=file -x:\tlperl\lib/unicore/lib/WB/XX.pl type=file -x:\tlperl\lib/unicore/lib/XIDC/N.pl type=file -x:\tlperl\lib/unicore/lib/XIDC/Y.pl type=file -x:\tlperl\lib/unicore/lib/XIDS/N.pl type=file -x:\tlperl\lib/unicore/lib/XIDS/Y.pl type=file -x:\tlperl\lib/unicore/version type=file -x:\tlperl\lib/utf8.pm type=file -x:\tlperl\lib/utf8_heavy.pl type=file -x:\tlperl\lib/validate.pl type=file -x:\tlperl\lib/vars.pm type=file -x:\tlperl\lib/version.pm type=file -x:\tlperl\lib/version.pod type=file -x:\tlperl\lib/version/Internals.pod type=file -x:\tlperl\lib/version/Requirements.pm type=file -x:\tlperl\lib/vmsish.pm type=file -x:\tlperl\lib/warnings.pm type=file -x:\tlperl\lib/warnings/register.pm type=file +c:\perl\bin/a2p.exe type=file +c:\perl\bin/c2ph.bat type=file +c:\perl\bin/config_data.bat type=file +c:\perl\bin/corelist.bat type=file +c:\perl\bin/cpan.bat type=file +c:\perl\bin/cpan2dist.bat type=file +c:\perl\bin/cpanp-run-perl.bat type=file +c:\perl\bin/cpanp.bat type=file +c:\perl\bin/enc2xs.bat type=file +c:\perl\bin/find2perl.bat type=file +c:\perl\bin/h2ph.bat type=file +c:\perl\bin/h2xs.bat type=file +c:\perl\bin/instmodsh.bat type=file +c:\perl\bin/json_pp.bat type=file +c:\perl\bin/libnetcfg.bat type=file +c:\perl\bin/perl.exe from=c:\perl\bin/perl5.16.2.exe type=link +c:\perl\bin/perl5.16.2.exe type=file +c:\perl\bin/perl516.dll type=file +c:\perl\bin/perlbug.bat type=file +c:\perl\bin/perldoc.bat type=file +c:\perl\bin/perlivp.bat type=file +c:\perl\bin/perlthanks.bat from=c:\perl\bin/perlbug.bat type=link +c:\perl\bin/piconv.bat type=file +c:\perl\bin/pl2pm.bat type=file +c:\perl\bin/pod2html.bat type=file +c:\perl\bin/pod2latex.bat type=file +c:\perl\bin/pod2man.bat type=file +c:\perl\bin/pod2text.bat type=file +c:\perl\bin/pod2usage.bat type=file +c:\perl\bin/podchecker.bat type=file +c:\perl\bin/podselect.bat type=file +c:\perl\bin/prove.bat type=file +c:\perl\bin/psed.bat from=c:\perl\bin/s2p.bat type=link +c:\perl\bin/pstruct.bat from=c:\perl\bin/c2ph.bat type=link +c:\perl\bin/ptar.bat type=file +c:\perl\bin/ptardiff.bat type=file +c:\perl\bin/ptargrep.bat type=file +c:\perl\bin/s2p.bat type=file +c:\perl\bin/shasum.bat type=file +c:\perl\bin/splain.bat type=file +c:\perl\bin/xsubpp.bat type=file +c:\perl\bin/zipdetails.bat type=file +c:\perl\lib/AnyDBM_File.pm type=file +c:\perl\lib/App/Cpan.pm type=file +c:\perl\lib/App/Prove.pm type=file +c:\perl\lib/App/Prove/State.pm type=file +c:\perl\lib/App/Prove/State/Result.pm type=file +c:\perl\lib/App/Prove/State/Result/Test.pm type=file +c:\perl\lib/Archive/Extract.pm type=file +c:\perl\lib/Archive/Tar.pm type=file +c:\perl\lib/Archive/Tar/Constant.pm type=file +c:\perl\lib/Archive/Tar/File.pm type=file +c:\perl\lib/Attribute/Handlers.pm type=file +c:\perl\lib/AutoLoader.pm type=file +c:\perl\lib/AutoSplit.pm type=file +c:\perl\lib/B.pm type=file +c:\perl\lib/B/Concise.pm type=file +c:\perl\lib/B/Debug.pm type=file +c:\perl\lib/B/Deparse.pm type=file +c:\perl\lib/B/Lint.pm type=file +c:\perl\lib/B/Lint/Debug.pm type=file +c:\perl\lib/B/Showlex.pm type=file +c:\perl\lib/B/Terse.pm type=file +c:\perl\lib/B/Xref.pm type=file +c:\perl\lib/Benchmark.pm type=file +c:\perl\lib/CGI.pm type=file +c:\perl\lib/CGI/Apache.pm type=file +c:\perl\lib/CGI/Carp.pm type=file +c:\perl\lib/CGI/Cookie.pm type=file +c:\perl\lib/CGI/Fast.pm type=file +c:\perl\lib/CGI/Pretty.pm type=file +c:\perl\lib/CGI/Push.pm type=file +c:\perl\lib/CGI/Switch.pm type=file +c:\perl\lib/CGI/Util.pm type=file +c:\perl\lib/CORE.pod type=file +c:\perl\lib/CORE/EXTERN.h type=file +c:\perl\lib/CORE/INTERN.h type=file +c:\perl\lib/CORE/XSUB.h type=file +c:\perl\lib/CORE/arpa/inet.h type=file +c:\perl\lib/CORE/av.h type=file +c:\perl\lib/CORE/bitcount.h type=file +c:\perl\lib/CORE/charclass_invlists.h type=file +c:\perl\lib/CORE/config.h type=file +c:\perl\lib/CORE/cop.h type=file +c:\perl\lib/CORE/cv.h type=file +c:\perl\lib/CORE/dirent.h type=file +c:\perl\lib/CORE/dosish.h type=file +c:\perl\lib/CORE/embed.h type=file +c:\perl\lib/CORE/embedvar.h type=file +c:\perl\lib/CORE/fakesdio.h type=file +c:\perl\lib/CORE/fakethr.h type=file +c:\perl\lib/CORE/feature.h type=file +c:\perl\lib/CORE/form.h type=file +c:\perl\lib/CORE/git_version.h type=file +c:\perl\lib/CORE/gv.h type=file +c:\perl\lib/CORE/handy.h type=file +c:\perl\lib/CORE/hv.h type=file +c:\perl\lib/CORE/intrpvar.h type=file +c:\perl\lib/CORE/iperlsys.h type=file +c:\perl\lib/CORE/keywords.h type=file +c:\perl\lib/CORE/l1_char_class_tab.h type=file +c:\perl\lib/CORE/libperl516.a type=file +c:\perl\lib/CORE/malloc_ctl.h type=file +c:\perl\lib/CORE/metaconfig.h type=file +c:\perl\lib/CORE/mg.h type=file +c:\perl\lib/CORE/mg_data.h type=file +c:\perl\lib/CORE/mg_raw.h type=file +c:\perl\lib/CORE/mg_vtable.h type=file +c:\perl\lib/CORE/mydtrace.h type=file +c:\perl\lib/CORE/netdb.h type=file +c:\perl\lib/CORE/nostdio.h type=file +c:\perl\lib/CORE/op.h type=file +c:\perl\lib/CORE/op_reg_common.h type=file +c:\perl\lib/CORE/opcode.h type=file +c:\perl\lib/CORE/opnames.h type=file +c:\perl\lib/CORE/overload.h type=file +c:\perl\lib/CORE/pad.h type=file +c:\perl\lib/CORE/parser.h type=file +c:\perl\lib/CORE/patchlevel.h type=file +c:\perl\lib/CORE/perl.h type=file +c:\perl\lib/CORE/perlapi.h type=file +c:\perl\lib/CORE/perlhost.h type=file +c:\perl\lib/CORE/perlio.h type=file +c:\perl\lib/CORE/perliol.h type=file +c:\perl\lib/CORE/perlsdio.h type=file +c:\perl\lib/CORE/perlsfio.h type=file +c:\perl\lib/CORE/perlvars.h type=file +c:\perl\lib/CORE/perly.h type=file +c:\perl\lib/CORE/pp.h type=file +c:\perl\lib/CORE/pp_proto.h type=file +c:\perl\lib/CORE/proto.h type=file +c:\perl\lib/CORE/reentr.h type=file +c:\perl\lib/CORE/regcharclass.h type=file +c:\perl\lib/CORE/regcomp.h type=file +c:\perl\lib/CORE/regexp.h type=file +c:\perl\lib/CORE/regnodes.h type=file +c:\perl\lib/CORE/scope.h type=file +c:\perl\lib/CORE/sv.h type=file +c:\perl\lib/CORE/sys/socket.h type=file +c:\perl\lib/CORE/thread.h type=file +c:\perl\lib/CORE/time64.h type=file +c:\perl\lib/CORE/time64_config.h type=file +c:\perl\lib/CORE/uconfig.h type=file +c:\perl\lib/CORE/unixish.h type=file +c:\perl\lib/CORE/utf8.h type=file +c:\perl\lib/CORE/utfebcdic.h type=file +c:\perl\lib/CORE/util.h type=file +c:\perl\lib/CORE/uudmap.h type=file +c:\perl\lib/CORE/vdir.h type=file +c:\perl\lib/CORE/vmem.h type=file +c:\perl\lib/CORE/warnings.h type=file +c:\perl\lib/CORE/win32.h type=file +c:\perl\lib/CORE/win32iop-o.h type=file +c:\perl\lib/CORE/win32iop.h type=file +c:\perl\lib/CORE/win32thread.h type=file +c:\perl\lib/CORE/wince.h type=file +c:\perl\lib/CPAN.pm type=file +c:\perl\lib/CPAN/API/HOWTO.pod type=file +c:\perl\lib/CPAN/Author.pm type=file +c:\perl\lib/CPAN/Bundle.pm type=file +c:\perl\lib/CPAN/CacheMgr.pm type=file +c:\perl\lib/CPAN/Complete.pm type=file +c:\perl\lib/CPAN/Debug.pm type=file +c:\perl\lib/CPAN/DeferredCode.pm type=file +c:\perl\lib/CPAN/Distribution.pm type=file +c:\perl\lib/CPAN/Distroprefs.pm type=file +c:\perl\lib/CPAN/Distrostatus.pm type=file +c:\perl\lib/CPAN/Exception/RecursiveDependency.pm type=file +c:\perl\lib/CPAN/Exception/blocked_urllist.pm type=file +c:\perl\lib/CPAN/Exception/yaml_not_installed.pm type=file +c:\perl\lib/CPAN/Exception/yaml_process_error.pm type=file +c:\perl\lib/CPAN/FTP.pm type=file +c:\perl\lib/CPAN/FTP/netrc.pm type=file +c:\perl\lib/CPAN/FirstTime.pm type=file +c:\perl\lib/CPAN/HTTP/Client.pm type=file +c:\perl\lib/CPAN/HTTP/Credentials.pm type=file +c:\perl\lib/CPAN/HandleConfig.pm type=file +c:\perl\lib/CPAN/Index.pm type=file +c:\perl\lib/CPAN/InfoObj.pm type=file +c:\perl\lib/CPAN/Kwalify.pm type=file +c:\perl\lib/CPAN/Kwalify/distroprefs.dd type=file +c:\perl\lib/CPAN/Kwalify/distroprefs.yml type=file +c:\perl\lib/CPAN/LWP/UserAgent.pm type=file +c:\perl\lib/CPAN/Meta.pm type=file +c:\perl\lib/CPAN/Meta/Converter.pm type=file +c:\perl\lib/CPAN/Meta/Feature.pm type=file +c:\perl\lib/CPAN/Meta/History.pm type=file +c:\perl\lib/CPAN/Meta/Prereqs.pm type=file +c:\perl\lib/CPAN/Meta/Requirements.pm type=file +c:\perl\lib/CPAN/Meta/Spec.pm type=file +c:\perl\lib/CPAN/Meta/Validator.pm type=file +c:\perl\lib/CPAN/Meta/YAML.pm type=file +c:\perl\lib/CPAN/Mirrors.pm type=file +c:\perl\lib/CPAN/Module.pm type=file +c:\perl\lib/CPAN/Nox.pm type=file +c:\perl\lib/CPAN/Prompt.pm type=file +c:\perl\lib/CPAN/Queue.pm type=file +c:\perl\lib/CPAN/Shell.pm type=file +c:\perl\lib/CPAN/Tarzip.pm type=file +c:\perl\lib/CPAN/URL.pm type=file +c:\perl\lib/CPAN/Version.pm type=file +c:\perl\lib/CPANPLUS.pm type=file +c:\perl\lib/CPANPLUS/Backend.pm type=file +c:\perl\lib/CPANPLUS/Backend/RV.pm type=file +c:\perl\lib/CPANPLUS/Config.pm type=file +c:\perl\lib/CPANPLUS/Configure.pm type=file +c:\perl\lib/CPANPLUS/Configure/Setup.pm type=file +c:\perl\lib/CPANPLUS/Dist.pm type=file +c:\perl\lib/CPANPLUS/Dist/Autobundle.pm type=file +c:\perl\lib/CPANPLUS/Dist/Base.pm type=file +c:\perl\lib/CPANPLUS/Dist/Build.pm type=file +c:\perl\lib/CPANPLUS/Dist/Build/Constants.pm type=file +c:\perl\lib/CPANPLUS/Dist/MM.pm type=file +c:\perl\lib/CPANPLUS/Dist/Sample.pm type=file +c:\perl\lib/CPANPLUS/Error.pm type=file +c:\perl\lib/CPANPLUS/FAQ.pod type=file +c:\perl\lib/CPANPLUS/Hacking.pod type=file +c:\perl\lib/CPANPLUS/Internals.pm type=file +c:\perl\lib/CPANPLUS/Internals/Constants.pm type=file +c:\perl\lib/CPANPLUS/Internals/Constants/Report.pm type=file +c:\perl\lib/CPANPLUS/Internals/Extract.pm type=file +c:\perl\lib/CPANPLUS/Internals/Fetch.pm type=file +c:\perl\lib/CPANPLUS/Internals/Report.pm type=file +c:\perl\lib/CPANPLUS/Internals/Search.pm type=file +c:\perl\lib/CPANPLUS/Internals/Source.pm type=file +c:\perl\lib/CPANPLUS/Internals/Source/Memory.pm type=file +c:\perl\lib/CPANPLUS/Internals/Source/SQLite.pm type=file +c:\perl\lib/CPANPLUS/Internals/Source/SQLite/Tie.pm type=file +c:\perl\lib/CPANPLUS/Internals/Utils.pm type=file +c:\perl\lib/CPANPLUS/Internals/Utils/Autoflush.pm type=file +c:\perl\lib/CPANPLUS/Module.pm type=file +c:\perl\lib/CPANPLUS/Module/Author.pm type=file +c:\perl\lib/CPANPLUS/Module/Author/Fake.pm type=file +c:\perl\lib/CPANPLUS/Module/Checksums.pm type=file +c:\perl\lib/CPANPLUS/Module/Fake.pm type=file +c:\perl\lib/CPANPLUS/Module/Signature.pm type=file +c:\perl\lib/CPANPLUS/Selfupdate.pm type=file +c:\perl\lib/CPANPLUS/Shell.pm type=file +c:\perl\lib/CPANPLUS/Shell/Classic.pm type=file +c:\perl\lib/CPANPLUS/Shell/Default.pm type=file +c:\perl\lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm type=file +c:\perl\lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod type=file +c:\perl\lib/CPANPLUS/Shell/Default/Plugins/Remote.pm type=file +c:\perl\lib/CPANPLUS/Shell/Default/Plugins/Source.pm type=file +c:\perl\lib/Carp.pm type=file +c:\perl\lib/Carp/Heavy.pm type=file +c:\perl\lib/Class/Struct.pm type=file +c:\perl\lib/Compress/Raw/Bzip2.pm type=file +c:\perl\lib/Compress/Raw/Zlib.pm type=file +c:\perl\lib/Compress/Zlib.pm type=file +c:\perl\lib/Config.pm type=file +c:\perl\lib/Config.pod type=file +c:\perl\lib/Config/Extensions.pm type=file +c:\perl\lib/Config_git.pl type=file +c:\perl\lib/Config_heavy.pl type=file +c:\perl\lib/Cwd.pm type=file +c:\perl\lib/DB.pm type=file +c:\perl\lib/DBM_Filter.pm type=file +c:\perl\lib/DBM_Filter/compress.pm type=file +c:\perl\lib/DBM_Filter/encode.pm type=file +c:\perl\lib/DBM_Filter/int32.pm type=file +c:\perl\lib/DBM_Filter/null.pm type=file +c:\perl\lib/DBM_Filter/utf8.pm type=file +c:\perl\lib/Data/Dumper.pm type=file +c:\perl\lib/Devel/InnerPackage.pm type=file +c:\perl\lib/Devel/PPPort.pm type=file +c:\perl\lib/Devel/Peek.pm type=file +c:\perl\lib/Devel/SelfStubber.pm type=file +c:\perl\lib/Digest.pm type=file +c:\perl\lib/Digest/MD5.pm type=file +c:\perl\lib/Digest/SHA.pm type=file +c:\perl\lib/Digest/base.pm type=file +c:\perl\lib/Digest/file.pm type=file +c:\perl\lib/DirHandle.pm type=file +c:\perl\lib/Dumpvalue.pm type=file +c:\perl\lib/DynaLoader.pm type=file +c:\perl\lib/Encode.pm type=file +c:\perl\lib/Encode/Alias.pm type=file +c:\perl\lib/Encode/Byte.pm type=file +c:\perl\lib/Encode/CJKConstants.pm type=file +c:\perl\lib/Encode/CN.pm type=file +c:\perl\lib/Encode/CN/HZ.pm type=file +c:\perl\lib/Encode/Changes.e2x type=file +c:\perl\lib/Encode/Config.pm type=file +c:\perl\lib/Encode/ConfigLocal_PM.e2x type=file +c:\perl\lib/Encode/EBCDIC.pm type=file +c:\perl\lib/Encode/Encoder.pm type=file +c:\perl\lib/Encode/Encoding.pm type=file +c:\perl\lib/Encode/GSM0338.pm type=file +c:\perl\lib/Encode/Guess.pm type=file +c:\perl\lib/Encode/JP.pm type=file +c:\perl\lib/Encode/JP/H2Z.pm type=file +c:\perl\lib/Encode/JP/JIS7.pm type=file +c:\perl\lib/Encode/KR.pm type=file +c:\perl\lib/Encode/KR/2022_KR.pm type=file +c:\perl\lib/Encode/MIME/Header.pm type=file +c:\perl\lib/Encode/MIME/Header/ISO_2022_JP.pm type=file +c:\perl\lib/Encode/MIME/Name.pm type=file +c:\perl\lib/Encode/Makefile_PL.e2x type=file +c:\perl\lib/Encode/PerlIO.pod type=file +c:\perl\lib/Encode/README.e2x type=file +c:\perl\lib/Encode/Supported.pod type=file +c:\perl\lib/Encode/Symbol.pm type=file +c:\perl\lib/Encode/TW.pm type=file +c:\perl\lib/Encode/Unicode.pm type=file +c:\perl\lib/Encode/Unicode/UTF7.pm type=file +c:\perl\lib/Encode/_PM.e2x type=file +c:\perl\lib/Encode/_T.e2x type=file +c:\perl\lib/Encode/encode.h type=file +c:\perl\lib/English.pm type=file +c:\perl\lib/Env.pm type=file +c:\perl\lib/Errno.pm type=file +c:\perl\lib/Exporter.pm type=file +c:\perl\lib/Exporter/Heavy.pm type=file +c:\perl\lib/ExtUtils/CBuilder.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Base.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/Unix.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/VMS.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/Windows.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/aix.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/cygwin.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/darwin.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/dec_osf.pm type=file +c:\perl\lib/ExtUtils/CBuilder/Platform/os2.pm type=file +c:\perl\lib/ExtUtils/Command.pm type=file +c:\perl\lib/ExtUtils/Command/MM.pm type=file +c:\perl\lib/ExtUtils/Constant.pm type=file +c:\perl\lib/ExtUtils/Constant/Base.pm type=file +c:\perl\lib/ExtUtils/Constant/ProxySubs.pm type=file +c:\perl\lib/ExtUtils/Constant/Utils.pm type=file +c:\perl\lib/ExtUtils/Constant/XS.pm type=file +c:\perl\lib/ExtUtils/Embed.pm type=file +c:\perl\lib/ExtUtils/Install.pm type=file +c:\perl\lib/ExtUtils/Installed.pm type=file +c:\perl\lib/ExtUtils/Liblist.pm type=file +c:\perl\lib/ExtUtils/Liblist/Kid.pm type=file +c:\perl\lib/ExtUtils/MANIFEST.SKIP type=file +c:\perl\lib/ExtUtils/MM.pm type=file +c:\perl\lib/ExtUtils/MM_AIX.pm type=file +c:\perl\lib/ExtUtils/MM_Any.pm type=file +c:\perl\lib/ExtUtils/MM_BeOS.pm type=file +c:\perl\lib/ExtUtils/MM_Cygwin.pm type=file +c:\perl\lib/ExtUtils/MM_DOS.pm type=file +c:\perl\lib/ExtUtils/MM_Darwin.pm type=file +c:\perl\lib/ExtUtils/MM_MacOS.pm type=file +c:\perl\lib/ExtUtils/MM_NW5.pm type=file +c:\perl\lib/ExtUtils/MM_OS2.pm type=file +c:\perl\lib/ExtUtils/MM_QNX.pm type=file +c:\perl\lib/ExtUtils/MM_UWIN.pm type=file +c:\perl\lib/ExtUtils/MM_Unix.pm type=file +c:\perl\lib/ExtUtils/MM_VMS.pm type=file +c:\perl\lib/ExtUtils/MM_VOS.pm type=file +c:\perl\lib/ExtUtils/MM_Win32.pm type=file +c:\perl\lib/ExtUtils/MM_Win95.pm type=file +c:\perl\lib/ExtUtils/MY.pm type=file +c:\perl\lib/ExtUtils/MakeMaker.pm type=file +c:\perl\lib/ExtUtils/MakeMaker/Config.pm type=file +c:\perl\lib/ExtUtils/MakeMaker/FAQ.pod type=file +c:\perl\lib/ExtUtils/MakeMaker/Tutorial.pod type=file +c:\perl\lib/ExtUtils/Manifest.pm type=file +c:\perl\lib/ExtUtils/Miniperl.pm type=file +c:\perl\lib/ExtUtils/Mkbootstrap.pm type=file +c:\perl\lib/ExtUtils/Mksymlists.pm type=file +c:\perl\lib/ExtUtils/Packlist.pm type=file +c:\perl\lib/ExtUtils/ParseXS.pm type=file +c:\perl\lib/ExtUtils/ParseXS.pod type=file +c:\perl\lib/ExtUtils/ParseXS/Constants.pm type=file +c:\perl\lib/ExtUtils/ParseXS/CountLines.pm type=file +c:\perl\lib/ExtUtils/ParseXS/Utilities.pm type=file +c:\perl\lib/ExtUtils/Typemaps.pm type=file +c:\perl\lib/ExtUtils/Typemaps/Cmd.pm type=file +c:\perl\lib/ExtUtils/Typemaps/InputMap.pm type=file +c:\perl\lib/ExtUtils/Typemaps/OutputMap.pm type=file +c:\perl\lib/ExtUtils/Typemaps/Type.pm type=file +c:\perl\lib/ExtUtils/testlib.pm type=file +c:\perl\lib/ExtUtils/typemap type=file +c:\perl\lib/ExtUtils/xsubpp type=file +c:\perl\lib/Fatal.pm type=file +c:\perl\lib/Fcntl.pm type=file +c:\perl\lib/File/Basename.pm type=file +c:\perl\lib/File/CheckTree.pm type=file +c:\perl\lib/File/Compare.pm type=file +c:\perl\lib/File/Copy.pm type=file +c:\perl\lib/File/DosGlob.pm type=file +c:\perl\lib/File/Fetch.pm type=file +c:\perl\lib/File/Find.pm type=file +c:\perl\lib/File/Glob.pm type=file +c:\perl\lib/File/GlobMapper.pm type=file +c:\perl\lib/File/Path.pm type=file +c:\perl\lib/File/Spec.pm type=file +c:\perl\lib/File/Spec/Cygwin.pm type=file +c:\perl\lib/File/Spec/Epoc.pm type=file +c:\perl\lib/File/Spec/Functions.pm type=file +c:\perl\lib/File/Spec/Mac.pm type=file +c:\perl\lib/File/Spec/OS2.pm type=file +c:\perl\lib/File/Spec/Unix.pm type=file +c:\perl\lib/File/Spec/VMS.pm type=file +c:\perl\lib/File/Spec/Win32.pm type=file +c:\perl\lib/File/Temp.pm type=file +c:\perl\lib/File/stat.pm type=file +c:\perl\lib/FileCache.pm type=file +c:\perl\lib/FileHandle.pm type=file +c:\perl\lib/Filter/Simple.pm type=file +c:\perl\lib/Filter/Util/Call.pm type=file +c:\perl\lib/FindBin.pm type=file +c:\perl\lib/Getopt/Long.pm type=file +c:\perl\lib/Getopt/Std.pm type=file +c:\perl\lib/HTTP/Tiny.pm type=file +c:\perl\lib/Hash/Util.pm type=file +c:\perl\lib/Hash/Util/FieldHash.pm type=file +c:\perl\lib/I18N/Collate.pm type=file +c:\perl\lib/I18N/LangTags.pm type=file +c:\perl\lib/I18N/LangTags/Detect.pm type=file +c:\perl\lib/I18N/LangTags/List.pm type=file +c:\perl\lib/IO.pm type=file +c:\perl\lib/IO/Compress/Adapter/Bzip2.pm type=file +c:\perl\lib/IO/Compress/Adapter/Deflate.pm type=file +c:\perl\lib/IO/Compress/Adapter/Identity.pm type=file +c:\perl\lib/IO/Compress/Base.pm type=file +c:\perl\lib/IO/Compress/Base/Common.pm type=file +c:\perl\lib/IO/Compress/Bzip2.pm type=file +c:\perl\lib/IO/Compress/Deflate.pm type=file +c:\perl\lib/IO/Compress/FAQ.pod type=file +c:\perl\lib/IO/Compress/Gzip.pm type=file +c:\perl\lib/IO/Compress/Gzip/Constants.pm type=file +c:\perl\lib/IO/Compress/RawDeflate.pm type=file +c:\perl\lib/IO/Compress/Zip.pm type=file +c:\perl\lib/IO/Compress/Zip/Constants.pm type=file +c:\perl\lib/IO/Compress/Zlib/Constants.pm type=file +c:\perl\lib/IO/Compress/Zlib/Extra.pm type=file +c:\perl\lib/IO/Dir.pm type=file +c:\perl\lib/IO/File.pm type=file +c:\perl\lib/IO/Handle.pm type=file +c:\perl\lib/IO/Pipe.pm type=file +c:\perl\lib/IO/Poll.pm type=file +c:\perl\lib/IO/Seekable.pm type=file +c:\perl\lib/IO/Select.pm type=file +c:\perl\lib/IO/Socket.pm type=file +c:\perl\lib/IO/Socket/INET.pm type=file +c:\perl\lib/IO/Socket/UNIX.pm type=file +c:\perl\lib/IO/Uncompress/Adapter/Bunzip2.pm type=file +c:\perl\lib/IO/Uncompress/Adapter/Identity.pm type=file +c:\perl\lib/IO/Uncompress/Adapter/Inflate.pm type=file +c:\perl\lib/IO/Uncompress/AnyInflate.pm type=file +c:\perl\lib/IO/Uncompress/AnyUncompress.pm type=file +c:\perl\lib/IO/Uncompress/Base.pm type=file +c:\perl\lib/IO/Uncompress/Bunzip2.pm type=file +c:\perl\lib/IO/Uncompress/Gunzip.pm type=file +c:\perl\lib/IO/Uncompress/Inflate.pm type=file +c:\perl\lib/IO/Uncompress/RawInflate.pm type=file +c:\perl\lib/IO/Uncompress/Unzip.pm type=file +c:\perl\lib/IO/Zlib.pm type=file +c:\perl\lib/IPC/Cmd.pm type=file +c:\perl\lib/IPC/Open2.pm type=file +c:\perl\lib/IPC/Open3.pm type=file +c:\perl\lib/JSON/PP.pm type=file +c:\perl\lib/JSON/PP/Boolean.pm type=file +c:\perl\lib/List/Util.pm type=file +c:\perl\lib/List/Util/XS.pm type=file +c:\perl\lib/Locale/Codes.pm type=file +c:\perl\lib/Locale/Codes.pod type=file +c:\perl\lib/Locale/Codes/API.pod type=file +c:\perl\lib/Locale/Codes/Changes.pod type=file +c:\perl\lib/Locale/Codes/Constants.pm type=file +c:\perl\lib/Locale/Codes/Constants.pod type=file +c:\perl\lib/Locale/Codes/Country.pm type=file +c:\perl\lib/Locale/Codes/Country.pod type=file +c:\perl\lib/Locale/Codes/Country_Codes.pm type=file +c:\perl\lib/Locale/Codes/Country_Retired.pm type=file +c:\perl\lib/Locale/Codes/Currency.pm type=file +c:\perl\lib/Locale/Codes/Currency.pod type=file +c:\perl\lib/Locale/Codes/Currency_Codes.pm type=file +c:\perl\lib/Locale/Codes/Currency_Retired.pm type=file +c:\perl\lib/Locale/Codes/LangExt.pm type=file +c:\perl\lib/Locale/Codes/LangExt.pod type=file +c:\perl\lib/Locale/Codes/LangExt_Codes.pm type=file +c:\perl\lib/Locale/Codes/LangExt_Retired.pm type=file +c:\perl\lib/Locale/Codes/LangFam.pm type=file +c:\perl\lib/Locale/Codes/LangFam.pod type=file +c:\perl\lib/Locale/Codes/LangFam_Codes.pm type=file +c:\perl\lib/Locale/Codes/LangFam_Retired.pm type=file +c:\perl\lib/Locale/Codes/LangVar.pm type=file +c:\perl\lib/Locale/Codes/LangVar.pod type=file +c:\perl\lib/Locale/Codes/LangVar_Codes.pm type=file +c:\perl\lib/Locale/Codes/LangVar_Retired.pm type=file +c:\perl\lib/Locale/Codes/Language.pm type=file +c:\perl\lib/Locale/Codes/Language.pod type=file +c:\perl\lib/Locale/Codes/Language_Codes.pm type=file +c:\perl\lib/Locale/Codes/Language_Retired.pm type=file +c:\perl\lib/Locale/Codes/Script.pm type=file +c:\perl\lib/Locale/Codes/Script.pod type=file +c:\perl\lib/Locale/Codes/Script_Codes.pm type=file +c:\perl\lib/Locale/Codes/Script_Retired.pm type=file +c:\perl\lib/Locale/Country.pm type=file +c:\perl\lib/Locale/Country.pod type=file +c:\perl\lib/Locale/Currency.pm type=file +c:\perl\lib/Locale/Currency.pod type=file +c:\perl\lib/Locale/Language.pm type=file +c:\perl\lib/Locale/Language.pod type=file +c:\perl\lib/Locale/Maketext.pm type=file +c:\perl\lib/Locale/Maketext.pod type=file +c:\perl\lib/Locale/Maketext/Cookbook.pod type=file +c:\perl\lib/Locale/Maketext/Guts.pm type=file +c:\perl\lib/Locale/Maketext/GutsLoader.pm type=file +c:\perl\lib/Locale/Maketext/Simple.pm type=file +c:\perl\lib/Locale/Maketext/TPJ13.pod type=file +c:\perl\lib/Locale/Script.pm type=file +c:\perl\lib/Locale/Script.pod type=file +c:\perl\lib/Log/Message.pm type=file +c:\perl\lib/Log/Message/Config.pm type=file +c:\perl\lib/Log/Message/Handlers.pm type=file +c:\perl\lib/Log/Message/Item.pm type=file +c:\perl\lib/Log/Message/Simple.pm type=file +c:\perl\lib/MIME/Base64.pm type=file +c:\perl\lib/MIME/QuotedPrint.pm type=file +c:\perl\lib/Math/BigFloat.pm type=file +c:\perl\lib/Math/BigFloat/Trace.pm type=file +c:\perl\lib/Math/BigInt.pm type=file +c:\perl\lib/Math/BigInt/Calc.pm type=file +c:\perl\lib/Math/BigInt/CalcEmu.pm type=file +c:\perl\lib/Math/BigInt/FastCalc.pm type=file +c:\perl\lib/Math/BigInt/Trace.pm type=file +c:\perl\lib/Math/BigRat.pm type=file +c:\perl\lib/Math/Complex.pm type=file +c:\perl\lib/Math/Trig.pm type=file +c:\perl\lib/Memoize.pm type=file +c:\perl\lib/Memoize/AnyDBM_File.pm type=file +c:\perl\lib/Memoize/Expire.pm type=file +c:\perl\lib/Memoize/ExpireFile.pm type=file +c:\perl\lib/Memoize/ExpireTest.pm type=file +c:\perl\lib/Memoize/NDBM_File.pm type=file +c:\perl\lib/Memoize/SDBM_File.pm type=file +c:\perl\lib/Memoize/Storable.pm type=file +c:\perl\lib/Module/Build.pm type=file +c:\perl\lib/Module/Build/API.pod type=file +c:\perl\lib/Module/Build/Authoring.pod type=file +c:\perl\lib/Module/Build/Base.pm type=file +c:\perl\lib/Module/Build/Bundling.pod type=file +c:\perl\lib/Module/Build/Compat.pm type=file +c:\perl\lib/Module/Build/Config.pm type=file +c:\perl\lib/Module/Build/ConfigData.pm type=file +c:\perl\lib/Module/Build/Cookbook.pm type=file +c:\perl\lib/Module/Build/Dumper.pm type=file +c:\perl\lib/Module/Build/ModuleInfo.pm type=file +c:\perl\lib/Module/Build/Notes.pm type=file +c:\perl\lib/Module/Build/PPMMaker.pm type=file +c:\perl\lib/Module/Build/Platform/Amiga.pm type=file +c:\perl\lib/Module/Build/Platform/Default.pm type=file +c:\perl\lib/Module/Build/Platform/EBCDIC.pm type=file +c:\perl\lib/Module/Build/Platform/MPEiX.pm type=file +c:\perl\lib/Module/Build/Platform/MacOS.pm type=file +c:\perl\lib/Module/Build/Platform/RiscOS.pm type=file +c:\perl\lib/Module/Build/Platform/Unix.pm type=file +c:\perl\lib/Module/Build/Platform/VMS.pm type=file +c:\perl\lib/Module/Build/Platform/VOS.pm type=file +c:\perl\lib/Module/Build/Platform/Windows.pm type=file +c:\perl\lib/Module/Build/Platform/aix.pm type=file +c:\perl\lib/Module/Build/Platform/cygwin.pm type=file +c:\perl\lib/Module/Build/Platform/darwin.pm type=file +c:\perl\lib/Module/Build/Platform/os2.pm type=file +c:\perl\lib/Module/Build/PodParser.pm type=file +c:\perl\lib/Module/Build/Version.pm type=file +c:\perl\lib/Module/Build/YAML.pm type=file +c:\perl\lib/Module/CoreList.pm type=file +c:\perl\lib/Module/CoreList.pod type=file +c:\perl\lib/Module/CoreList/TieHashDelta.pm type=file +c:\perl\lib/Module/Load.pm type=file +c:\perl\lib/Module/Load/Conditional.pm type=file +c:\perl\lib/Module/Loaded.pm type=file +c:\perl\lib/Module/Metadata.pm type=file +c:\perl\lib/Module/Pluggable.pm type=file +c:\perl\lib/Module/Pluggable/Object.pm type=file +c:\perl\lib/NEXT.pm type=file +c:\perl\lib/Net/Cmd.pm type=file +c:\perl\lib/Net/Config.pm type=file +c:\perl\lib/Net/Domain.pm type=file +c:\perl\lib/Net/FTP.pm type=file +c:\perl\lib/Net/FTP/A.pm type=file +c:\perl\lib/Net/FTP/E.pm type=file +c:\perl\lib/Net/FTP/I.pm type=file +c:\perl\lib/Net/FTP/L.pm type=file +c:\perl\lib/Net/FTP/dataconn.pm type=file +c:\perl\lib/Net/NNTP.pm type=file +c:\perl\lib/Net/Netrc.pm type=file +c:\perl\lib/Net/POP3.pm type=file +c:\perl\lib/Net/Ping.pm type=file +c:\perl\lib/Net/SMTP.pm type=file +c:\perl\lib/Net/Time.pm type=file +c:\perl\lib/Net/hostent.pm type=file +c:\perl\lib/Net/libnetFAQ.pod type=file +c:\perl\lib/Net/netent.pm type=file +c:\perl\lib/Net/protoent.pm type=file +c:\perl\lib/Net/servent.pm type=file +c:\perl\lib/O.pm type=file +c:\perl\lib/Object/Accessor.pm type=file +c:\perl\lib/Opcode.pm type=file +c:\perl\lib/POSIX.pm type=file +c:\perl\lib/POSIX.pod type=file +c:\perl\lib/Package/Constants.pm type=file +c:\perl\lib/Params/Check.pm type=file +c:\perl\lib/Parse/CPAN/Meta.pm type=file +c:\perl\lib/Perl/OSType.pm type=file +c:\perl\lib/PerlIO.pm type=file +c:\perl\lib/PerlIO/encoding.pm type=file +c:\perl\lib/PerlIO/mmap.pm type=file +c:\perl\lib/PerlIO/scalar.pm type=file +c:\perl\lib/PerlIO/via.pm type=file +c:\perl\lib/PerlIO/via/QuotedPrint.pm type=file +c:\perl\lib/Pod/Checker.pm type=file +c:\perl\lib/Pod/Escapes.pm type=file +c:\perl\lib/Pod/Find.pm type=file +c:\perl\lib/Pod/Functions.pm type=file +c:\perl\lib/Pod/Html.pm type=file +c:\perl\lib/Pod/InputObjects.pm type=file +c:\perl\lib/Pod/LaTeX.pm type=file +c:\perl\lib/Pod/Man.pm type=file +c:\perl\lib/Pod/ParseLink.pm type=file +c:\perl\lib/Pod/ParseUtils.pm type=file +c:\perl\lib/Pod/Parser.pm type=file +c:\perl\lib/Pod/Perldoc.pm type=file +c:\perl\lib/Pod/Perldoc/BaseTo.pm type=file +c:\perl\lib/Pod/Perldoc/GetOptsOO.pm type=file +c:\perl\lib/Pod/Perldoc/ToANSI.pm type=file +c:\perl\lib/Pod/Perldoc/ToChecker.pm type=file +c:\perl\lib/Pod/Perldoc/ToMan.pm type=file +c:\perl\lib/Pod/Perldoc/ToNroff.pm type=file +c:\perl\lib/Pod/Perldoc/ToPod.pm type=file +c:\perl\lib/Pod/Perldoc/ToRtf.pm type=file +c:\perl\lib/Pod/Perldoc/ToTerm.pm type=file +c:\perl\lib/Pod/Perldoc/ToText.pm type=file +c:\perl\lib/Pod/Perldoc/ToTk.pm type=file +c:\perl\lib/Pod/Perldoc/ToXml.pm type=file +c:\perl\lib/Pod/PlainText.pm type=file +c:\perl\lib/Pod/Select.pm type=file +c:\perl\lib/Pod/Simple.pm type=file +c:\perl\lib/Pod/Simple.pod type=file +c:\perl\lib/Pod/Simple/BlackBox.pm type=file +c:\perl\lib/Pod/Simple/Checker.pm type=file +c:\perl\lib/Pod/Simple/Debug.pm type=file +c:\perl\lib/Pod/Simple/DumpAsText.pm type=file +c:\perl\lib/Pod/Simple/DumpAsXML.pm type=file +c:\perl\lib/Pod/Simple/HTML.pm type=file +c:\perl\lib/Pod/Simple/HTMLBatch.pm type=file +c:\perl\lib/Pod/Simple/HTMLLegacy.pm type=file +c:\perl\lib/Pod/Simple/LinkSection.pm type=file +c:\perl\lib/Pod/Simple/Methody.pm type=file +c:\perl\lib/Pod/Simple/Progress.pm type=file +c:\perl\lib/Pod/Simple/PullParser.pm type=file +c:\perl\lib/Pod/Simple/PullParserEndToken.pm type=file +c:\perl\lib/Pod/Simple/PullParserStartToken.pm type=file +c:\perl\lib/Pod/Simple/PullParserTextToken.pm type=file +c:\perl\lib/Pod/Simple/PullParserToken.pm type=file +c:\perl\lib/Pod/Simple/RTF.pm type=file +c:\perl\lib/Pod/Simple/Search.pm type=file +c:\perl\lib/Pod/Simple/SimpleTree.pm type=file +c:\perl\lib/Pod/Simple/Subclassing.pod type=file +c:\perl\lib/Pod/Simple/Text.pm type=file +c:\perl\lib/Pod/Simple/TextContent.pm type=file +c:\perl\lib/Pod/Simple/TiedOutFH.pm type=file +c:\perl\lib/Pod/Simple/Transcode.pm type=file +c:\perl\lib/Pod/Simple/TranscodeDumb.pm type=file +c:\perl\lib/Pod/Simple/TranscodeSmart.pm type=file +c:\perl\lib/Pod/Simple/XHTML.pm type=file +c:\perl\lib/Pod/Simple/XMLOutStream.pm type=file +c:\perl\lib/Pod/Text.pm type=file +c:\perl\lib/Pod/Text/Color.pm type=file +c:\perl\lib/Pod/Text/Overstrike.pm type=file +c:\perl\lib/Pod/Text/Termcap.pm type=file +c:\perl\lib/Pod/Usage.pm type=file +c:\perl\lib/SDBM_File.pm type=file +c:\perl\lib/Safe.pm type=file +c:\perl\lib/Scalar/Util.pm type=file +c:\perl\lib/Search/Dict.pm type=file +c:\perl\lib/SelectSaver.pm type=file +c:\perl\lib/SelfLoader.pm type=file +c:\perl\lib/Socket.pm type=file +c:\perl\lib/Storable.pm type=file +c:\perl\lib/Symbol.pm type=file +c:\perl\lib/Sys/Hostname.pm type=file +c:\perl\lib/TAP/Base.pm type=file +c:\perl\lib/TAP/Formatter/Base.pm type=file +c:\perl\lib/TAP/Formatter/Color.pm type=file +c:\perl\lib/TAP/Formatter/Console.pm type=file +c:\perl\lib/TAP/Formatter/Console/ParallelSession.pm type=file +c:\perl\lib/TAP/Formatter/Console/Session.pm type=file +c:\perl\lib/TAP/Formatter/File.pm type=file +c:\perl\lib/TAP/Formatter/File/Session.pm type=file +c:\perl\lib/TAP/Formatter/Session.pm type=file +c:\perl\lib/TAP/Harness.pm type=file +c:\perl\lib/TAP/Harness/Beyond.pod type=file +c:\perl\lib/TAP/Object.pm type=file +c:\perl\lib/TAP/Parser.pm type=file +c:\perl\lib/TAP/Parser/Aggregator.pm type=file +c:\perl\lib/TAP/Parser/Grammar.pm type=file +c:\perl\lib/TAP/Parser/Iterator.pm type=file +c:\perl\lib/TAP/Parser/Iterator/Array.pm type=file +c:\perl\lib/TAP/Parser/Iterator/Process.pm type=file +c:\perl\lib/TAP/Parser/Iterator/Stream.pm type=file +c:\perl\lib/TAP/Parser/IteratorFactory.pm type=file +c:\perl\lib/TAP/Parser/Multiplexer.pm type=file +c:\perl\lib/TAP/Parser/Result.pm type=file +c:\perl\lib/TAP/Parser/Result/Bailout.pm type=file +c:\perl\lib/TAP/Parser/Result/Comment.pm type=file +c:\perl\lib/TAP/Parser/Result/Plan.pm type=file +c:\perl\lib/TAP/Parser/Result/Pragma.pm type=file +c:\perl\lib/TAP/Parser/Result/Test.pm type=file +c:\perl\lib/TAP/Parser/Result/Unknown.pm type=file +c:\perl\lib/TAP/Parser/Result/Version.pm type=file +c:\perl\lib/TAP/Parser/Result/YAML.pm type=file +c:\perl\lib/TAP/Parser/ResultFactory.pm type=file +c:\perl\lib/TAP/Parser/Scheduler.pm type=file +c:\perl\lib/TAP/Parser/Scheduler/Job.pm type=file +c:\perl\lib/TAP/Parser/Scheduler/Spinner.pm type=file +c:\perl\lib/TAP/Parser/Source.pm type=file +c:\perl\lib/TAP/Parser/SourceHandler.pm type=file +c:\perl\lib/TAP/Parser/SourceHandler/Executable.pm type=file +c:\perl\lib/TAP/Parser/SourceHandler/File.pm type=file +c:\perl\lib/TAP/Parser/SourceHandler/Handle.pm type=file +c:\perl\lib/TAP/Parser/SourceHandler/Perl.pm type=file +c:\perl\lib/TAP/Parser/SourceHandler/RawTAP.pm type=file +c:\perl\lib/TAP/Parser/Utils.pm type=file +c:\perl\lib/TAP/Parser/YAMLish/Reader.pm type=file +c:\perl\lib/TAP/Parser/YAMLish/Writer.pm type=file +c:\perl\lib/Term/ANSIColor.pm type=file +c:\perl\lib/Term/Cap.pm type=file +c:\perl\lib/Term/Complete.pm type=file +c:\perl\lib/Term/ReadLine.pm type=file +c:\perl\lib/Term/UI.pm type=file +c:\perl\lib/Term/UI/History.pm type=file +c:\perl\lib/Test.pm type=file +c:\perl\lib/Test/Builder.pm type=file +c:\perl\lib/Test/Builder/Module.pm type=file +c:\perl\lib/Test/Builder/Tester.pm type=file +c:\perl\lib/Test/Builder/Tester/Color.pm type=file +c:\perl\lib/Test/Harness.pm type=file +c:\perl\lib/Test/More.pm type=file +c:\perl\lib/Test/Simple.pm type=file +c:\perl\lib/Test/Tutorial.pod type=file +c:\perl\lib/Text/Abbrev.pm type=file +c:\perl\lib/Text/Balanced.pm type=file +c:\perl\lib/Text/ParseWords.pm type=file +c:\perl\lib/Text/Soundex.pm type=file +c:\perl\lib/Text/Tabs.pm type=file +c:\perl\lib/Text/Wrap.pm type=file +c:\perl\lib/Thread.pm type=file +c:\perl\lib/Thread/Queue.pm type=file +c:\perl\lib/Thread/Semaphore.pm type=file +c:\perl\lib/Tie/Array.pm type=file +c:\perl\lib/Tie/File.pm type=file +c:\perl\lib/Tie/Handle.pm type=file +c:\perl\lib/Tie/Hash.pm type=file +c:\perl\lib/Tie/Hash/NamedCapture.pm type=file +c:\perl\lib/Tie/Memoize.pm type=file +c:\perl\lib/Tie/RefHash.pm type=file +c:\perl\lib/Tie/Scalar.pm type=file +c:\perl\lib/Tie/StdHandle.pm type=file +c:\perl\lib/Tie/SubstrHash.pm type=file +c:\perl\lib/Time/HiRes.pm type=file +c:\perl\lib/Time/Local.pm type=file +c:\perl\lib/Time/Piece.pm type=file +c:\perl\lib/Time/Seconds.pm type=file +c:\perl\lib/Time/gmtime.pm type=file +c:\perl\lib/Time/localtime.pm type=file +c:\perl\lib/Time/tm.pm type=file +c:\perl\lib/UNIVERSAL.pm type=file +c:\perl\lib/Unicode/Collate.pm type=file +c:\perl\lib/Unicode/Collate/CJK/Big5.pm type=file +c:\perl\lib/Unicode/Collate/CJK/GB2312.pm type=file +c:\perl\lib/Unicode/Collate/CJK/JISX0208.pm type=file +c:\perl\lib/Unicode/Collate/CJK/Korean.pm type=file +c:\perl\lib/Unicode/Collate/CJK/Pinyin.pm type=file +c:\perl\lib/Unicode/Collate/CJK/Stroke.pm type=file +c:\perl\lib/Unicode/Collate/Locale.pm type=file +c:\perl\lib/Unicode/Collate/Locale/af.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ar.pl type=file +c:\perl\lib/Unicode/Collate/Locale/as.pl type=file +c:\perl\lib/Unicode/Collate/Locale/az.pl type=file +c:\perl\lib/Unicode/Collate/Locale/be.pl type=file +c:\perl\lib/Unicode/Collate/Locale/bg.pl type=file +c:\perl\lib/Unicode/Collate/Locale/bn.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ca.pl type=file +c:\perl\lib/Unicode/Collate/Locale/cs.pl type=file +c:\perl\lib/Unicode/Collate/Locale/cy.pl type=file +c:\perl\lib/Unicode/Collate/Locale/da.pl type=file +c:\perl\lib/Unicode/Collate/Locale/de_phone.pl type=file +c:\perl\lib/Unicode/Collate/Locale/eo.pl type=file +c:\perl\lib/Unicode/Collate/Locale/es.pl type=file +c:\perl\lib/Unicode/Collate/Locale/es_trad.pl type=file +c:\perl\lib/Unicode/Collate/Locale/et.pl type=file +c:\perl\lib/Unicode/Collate/Locale/fa.pl type=file +c:\perl\lib/Unicode/Collate/Locale/fi.pl type=file +c:\perl\lib/Unicode/Collate/Locale/fi_phone.pl type=file +c:\perl\lib/Unicode/Collate/Locale/fil.pl type=file +c:\perl\lib/Unicode/Collate/Locale/fo.pl type=file +c:\perl\lib/Unicode/Collate/Locale/fr.pl type=file +c:\perl\lib/Unicode/Collate/Locale/gu.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ha.pl type=file +c:\perl\lib/Unicode/Collate/Locale/haw.pl type=file +c:\perl\lib/Unicode/Collate/Locale/hi.pl type=file +c:\perl\lib/Unicode/Collate/Locale/hr.pl type=file +c:\perl\lib/Unicode/Collate/Locale/hu.pl type=file +c:\perl\lib/Unicode/Collate/Locale/hy.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ig.pl type=file +c:\perl\lib/Unicode/Collate/Locale/is.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ja.pl type=file +c:\perl\lib/Unicode/Collate/Locale/kk.pl type=file +c:\perl\lib/Unicode/Collate/Locale/kl.pl type=file +c:\perl\lib/Unicode/Collate/Locale/kn.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ko.pl type=file +c:\perl\lib/Unicode/Collate/Locale/kok.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ln.pl type=file +c:\perl\lib/Unicode/Collate/Locale/lt.pl type=file +c:\perl\lib/Unicode/Collate/Locale/lv.pl type=file +c:\perl\lib/Unicode/Collate/Locale/mk.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ml.pl type=file +c:\perl\lib/Unicode/Collate/Locale/mr.pl type=file +c:\perl\lib/Unicode/Collate/Locale/mt.pl type=file +c:\perl\lib/Unicode/Collate/Locale/nb.pl type=file +c:\perl\lib/Unicode/Collate/Locale/nn.pl type=file +c:\perl\lib/Unicode/Collate/Locale/nso.pl type=file +c:\perl\lib/Unicode/Collate/Locale/om.pl type=file +c:\perl\lib/Unicode/Collate/Locale/or.pl type=file +c:\perl\lib/Unicode/Collate/Locale/pa.pl type=file +c:\perl\lib/Unicode/Collate/Locale/pl.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ro.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ru.pl type=file +c:\perl\lib/Unicode/Collate/Locale/sa.pl type=file +c:\perl\lib/Unicode/Collate/Locale/se.pl type=file +c:\perl\lib/Unicode/Collate/Locale/si.pl type=file +c:\perl\lib/Unicode/Collate/Locale/si_dict.pl type=file +c:\perl\lib/Unicode/Collate/Locale/sk.pl type=file +c:\perl\lib/Unicode/Collate/Locale/sl.pl type=file +c:\perl\lib/Unicode/Collate/Locale/sq.pl type=file +c:\perl\lib/Unicode/Collate/Locale/sr.pl type=file +c:\perl\lib/Unicode/Collate/Locale/sv.pl type=file +c:\perl\lib/Unicode/Collate/Locale/sv_refo.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ta.pl type=file +c:\perl\lib/Unicode/Collate/Locale/te.pl type=file +c:\perl\lib/Unicode/Collate/Locale/th.pl type=file +c:\perl\lib/Unicode/Collate/Locale/tn.pl type=file +c:\perl\lib/Unicode/Collate/Locale/to.pl type=file +c:\perl\lib/Unicode/Collate/Locale/tr.pl type=file +c:\perl\lib/Unicode/Collate/Locale/uk.pl type=file +c:\perl\lib/Unicode/Collate/Locale/ur.pl type=file +c:\perl\lib/Unicode/Collate/Locale/vi.pl type=file +c:\perl\lib/Unicode/Collate/Locale/wae.pl type=file +c:\perl\lib/Unicode/Collate/Locale/wo.pl type=file +c:\perl\lib/Unicode/Collate/Locale/yo.pl type=file +c:\perl\lib/Unicode/Collate/Locale/zh.pl type=file +c:\perl\lib/Unicode/Collate/Locale/zh_big5.pl type=file +c:\perl\lib/Unicode/Collate/Locale/zh_gb.pl type=file +c:\perl\lib/Unicode/Collate/Locale/zh_pin.pl type=file +c:\perl\lib/Unicode/Collate/Locale/zh_strk.pl type=file +c:\perl\lib/Unicode/Collate/allkeys.txt type=file +c:\perl\lib/Unicode/Collate/keys.txt type=file +c:\perl\lib/Unicode/Normalize.pm type=file +c:\perl\lib/Unicode/UCD.pm type=file +c:\perl\lib/User/grent.pm type=file +c:\perl\lib/User/pwent.pm type=file +c:\perl\lib/Win32.pm type=file +c:\perl\lib/Win32API/File.pm type=file +c:\perl\lib/Win32API/File/cFile.pc type=file +c:\perl\lib/Win32CORE.pm type=file +c:\perl\lib/XSLoader.pm type=file +c:\perl\lib/_charnames.pm type=file +c:\perl\lib/arybase.pm type=file +c:\perl\lib/attributes.pm type=file +c:\perl\lib/auto/B/B.bs type=file +c:\perl\lib/auto/B/B.dll type=file +c:\perl\lib/auto/Compress/Raw/Bzip2/Bzip2.bs type=file +c:\perl\lib/auto/Compress/Raw/Bzip2/Bzip2.dll type=file +c:\perl\lib/auto/Compress/Raw/Bzip2/autosplit.ix type=file +c:\perl\lib/auto/Compress/Raw/Zlib/Zlib.bs type=file +c:\perl\lib/auto/Compress/Raw/Zlib/Zlib.dll type=file +c:\perl\lib/auto/Compress/Raw/Zlib/autosplit.ix type=file +c:\perl\lib/auto/Cwd/Cwd.bs type=file +c:\perl\lib/auto/Cwd/Cwd.dll type=file +c:\perl\lib/auto/Data/Dumper/Dumper.bs type=file +c:\perl\lib/auto/Data/Dumper/Dumper.dll type=file +c:\perl\lib/auto/Devel/PPPort/PPPort.bs type=file +c:\perl\lib/auto/Devel/PPPort/PPPort.dll type=file +c:\perl\lib/auto/Devel/Peek/Peek.bs type=file +c:\perl\lib/auto/Devel/Peek/Peek.dll type=file +c:\perl\lib/auto/Digest/MD5/MD5.bs type=file +c:\perl\lib/auto/Digest/MD5/MD5.dll type=file +c:\perl\lib/auto/Digest/SHA/SHA.bs type=file +c:\perl\lib/auto/Digest/SHA/SHA.dll type=file +c:\perl\lib/auto/Encode/Byte/Byte.bs type=file +c:\perl\lib/auto/Encode/Byte/Byte.dll type=file +c:\perl\lib/auto/Encode/CN/CN.bs type=file +c:\perl\lib/auto/Encode/CN/CN.dll type=file +c:\perl\lib/auto/Encode/EBCDIC/EBCDIC.bs type=file +c:\perl\lib/auto/Encode/EBCDIC/EBCDIC.dll type=file +c:\perl\lib/auto/Encode/Encode.bs type=file +c:\perl\lib/auto/Encode/Encode.dll type=file +c:\perl\lib/auto/Encode/JP/JP.bs type=file +c:\perl\lib/auto/Encode/JP/JP.dll type=file +c:\perl\lib/auto/Encode/KR/KR.bs type=file +c:\perl\lib/auto/Encode/KR/KR.dll type=file +c:\perl\lib/auto/Encode/Symbol/Symbol.bs type=file +c:\perl\lib/auto/Encode/Symbol/Symbol.dll type=file +c:\perl\lib/auto/Encode/TW/TW.bs type=file +c:\perl\lib/auto/Encode/TW/TW.dll type=file +c:\perl\lib/auto/Encode/Unicode/Unicode.bs type=file +c:\perl\lib/auto/Encode/Unicode/Unicode.dll type=file +c:\perl\lib/auto/Fcntl/Fcntl.bs type=file +c:\perl\lib/auto/Fcntl/Fcntl.dll type=file +c:\perl\lib/auto/File/Glob/Glob.bs type=file +c:\perl\lib/auto/File/Glob/Glob.dll type=file +c:\perl\lib/auto/Filter/Util/Call/Call.bs type=file +c:\perl\lib/auto/Filter/Util/Call/Call.dll type=file +c:\perl\lib/auto/Hash/Util/FieldHash/FieldHash.bs type=file +c:\perl\lib/auto/Hash/Util/FieldHash/FieldHash.dll type=file +c:\perl\lib/auto/Hash/Util/Util.bs type=file +c:\perl\lib/auto/Hash/Util/Util.dll type=file +c:\perl\lib/auto/IO/IO.bs type=file +c:\perl\lib/auto/IO/IO.dll type=file +c:\perl\lib/auto/List/Util/Util.bs type=file +c:\perl\lib/auto/List/Util/Util.dll type=file +c:\perl\lib/auto/MIME/Base64/Base64.bs type=file +c:\perl\lib/auto/MIME/Base64/Base64.dll type=file +c:\perl\lib/auto/Math/BigInt/FastCalc/FastCalc.bs type=file +c:\perl\lib/auto/Math/BigInt/FastCalc/FastCalc.dll type=file +c:\perl\lib/auto/Opcode/Opcode.bs type=file +c:\perl\lib/auto/Opcode/Opcode.dll type=file +c:\perl\lib/auto/POSIX/POSIX.bs type=file +c:\perl\lib/auto/POSIX/POSIX.dll type=file +c:\perl\lib/auto/PerlIO/encoding/encoding.bs type=file +c:\perl\lib/auto/PerlIO/encoding/encoding.dll type=file +c:\perl\lib/auto/PerlIO/mmap/mmap.bs type=file +c:\perl\lib/auto/PerlIO/mmap/mmap.dll type=file +c:\perl\lib/auto/PerlIO/scalar/scalar.bs type=file +c:\perl\lib/auto/PerlIO/scalar/scalar.dll type=file +c:\perl\lib/auto/PerlIO/via/via.bs type=file +c:\perl\lib/auto/PerlIO/via/via.dll type=file +c:\perl\lib/auto/SDBM_File/SDBM_File.bs type=file +c:\perl\lib/auto/SDBM_File/SDBM_File.dll type=file +c:\perl\lib/auto/Socket/Socket.bs type=file +c:\perl\lib/auto/Socket/Socket.dll type=file +c:\perl\lib/auto/Storable/Storable.bs type=file +c:\perl\lib/auto/Storable/Storable.dll type=file +c:\perl\lib/auto/Sys/Hostname/Hostname.bs type=file +c:\perl\lib/auto/Sys/Hostname/Hostname.dll type=file +c:\perl\lib/auto/Text/Soundex/Soundex.bs type=file +c:\perl\lib/auto/Text/Soundex/Soundex.dll type=file +c:\perl\lib/auto/Tie/Hash/NamedCapture/NamedCapture.bs type=file +c:\perl\lib/auto/Tie/Hash/NamedCapture/NamedCapture.dll type=file +c:\perl\lib/auto/Time/HiRes/HiRes.bs type=file +c:\perl\lib/auto/Time/HiRes/HiRes.dll type=file +c:\perl\lib/auto/Time/Piece/Piece.bs type=file +c:\perl\lib/auto/Time/Piece/Piece.dll type=file +c:\perl\lib/auto/Unicode/Collate/Collate.bs type=file +c:\perl\lib/auto/Unicode/Collate/Collate.dll type=file +c:\perl\lib/auto/Unicode/Normalize/Normalize.bs type=file +c:\perl\lib/auto/Unicode/Normalize/Normalize.dll type=file +c:\perl\lib/auto/Win32/Win32.bs type=file +c:\perl\lib/auto/Win32/Win32.dll type=file +c:\perl\lib/auto/Win32API/File/File.bs type=file +c:\perl\lib/auto/Win32API/File/File.dll type=file +c:\perl\lib/auto/Win32CORE/extralibs.ld type=file +c:\perl\lib/auto/arybase/arybase.bs type=file +c:\perl\lib/auto/arybase/arybase.dll type=file +c:\perl\lib/auto/attributes/attributes.bs type=file +c:\perl\lib/auto/attributes/attributes.dll type=file +c:\perl\lib/auto/mro/mro.bs type=file +c:\perl\lib/auto/mro/mro.dll type=file +c:\perl\lib/auto/re/re.bs type=file +c:\perl\lib/auto/re/re.dll type=file +c:\perl\lib/auto/sdbm/extralibs.ld type=file +c:\perl\lib/auto/threads/shared/shared.bs type=file +c:\perl\lib/auto/threads/shared/shared.dll type=file +c:\perl\lib/auto/threads/threads.bs type=file +c:\perl\lib/auto/threads/threads.dll type=file +c:\perl\lib/autodie.pm type=file +c:\perl\lib/autodie/exception.pm type=file +c:\perl\lib/autodie/exception/system.pm type=file +c:\perl\lib/autodie/hints.pm type=file +c:\perl\lib/autouse.pm type=file +c:\perl\lib/base.pm type=file +c:\perl\lib/bigint.pm type=file +c:\perl\lib/bignum.pm type=file +c:\perl\lib/bigrat.pm type=file +c:\perl\lib/blib.pm type=file +c:\perl\lib/bytes.pm type=file +c:\perl\lib/bytes_heavy.pl type=file +c:\perl\lib/charnames.pm type=file +c:\perl\lib/constant.pm type=file +c:\perl\lib/deprecate.pm type=file +c:\perl\lib/diagnostics.pm type=file +c:\perl\lib/dumpvar.pl type=file +c:\perl\lib/encoding.pm type=file +c:\perl\lib/encoding/warnings.pm type=file +c:\perl\lib/feature.pm type=file +c:\perl\lib/fields.pm type=file +c:\perl\lib/filetest.pm type=file +c:\perl\lib/if.pm type=file +c:\perl\lib/inc/latest.pm type=file +c:\perl\lib/inc/latest/private.pm type=file +c:\perl\lib/integer.pm type=file +c:\perl\lib/less.pm type=file +c:\perl\lib/lib.pm type=file +c:\perl\lib/locale.pm type=file +c:\perl\lib/mro.pm type=file +c:\perl\lib/open.pm type=file +c:\perl\lib/ops.pm type=file +c:\perl\lib/overload.pm type=file +c:\perl\lib/overload/numbers.pm type=file +c:\perl\lib/overloading.pm type=file +c:\perl\lib/parent.pm type=file +c:\perl\lib/perl5db.pl type=file +c:\perl\lib/perlfaq.pm type=file +c:\perl\lib/pods/a2p.pod type=file +c:\perl\lib/pods/perl.pod type=file +c:\perl\lib/pods/perl5004delta.pod type=file +c:\perl\lib/pods/perl5005delta.pod type=file +c:\perl\lib/pods/perl5100delta.pod type=file +c:\perl\lib/pods/perl5101delta.pod type=file +c:\perl\lib/pods/perl5120delta.pod type=file +c:\perl\lib/pods/perl5121delta.pod type=file +c:\perl\lib/pods/perl5122delta.pod type=file +c:\perl\lib/pods/perl5123delta.pod type=file +c:\perl\lib/pods/perl5124delta.pod type=file +c:\perl\lib/pods/perl5140delta.pod type=file +c:\perl\lib/pods/perl5141delta.pod type=file +c:\perl\lib/pods/perl5142delta.pod type=file +c:\perl\lib/pods/perl5143delta.pod type=file +c:\perl\lib/pods/perl5160delta.pod type=file +c:\perl\lib/pods/perl5161delta.pod type=file +c:\perl\lib/pods/perl5162delta.pod type=file +c:\perl\lib/pods/perl561delta.pod type=file +c:\perl\lib/pods/perl56delta.pod type=file +c:\perl\lib/pods/perl581delta.pod type=file +c:\perl\lib/pods/perl582delta.pod type=file +c:\perl\lib/pods/perl583delta.pod type=file +c:\perl\lib/pods/perl584delta.pod type=file +c:\perl\lib/pods/perl585delta.pod type=file +c:\perl\lib/pods/perl586delta.pod type=file +c:\perl\lib/pods/perl587delta.pod type=file +c:\perl\lib/pods/perl588delta.pod type=file +c:\perl\lib/pods/perl589delta.pod type=file +c:\perl\lib/pods/perl58delta.pod type=file +c:\perl\lib/pods/perlaix.pod type=file +c:\perl\lib/pods/perlamiga.pod type=file +c:\perl\lib/pods/perlapi.pod type=file +c:\perl\lib/pods/perlapio.pod type=file +c:\perl\lib/pods/perlartistic.pod type=file +c:\perl\lib/pods/perlbeos.pod type=file +c:\perl\lib/pods/perlbook.pod type=file +c:\perl\lib/pods/perlboot.pod type=file +c:\perl\lib/pods/perlbot.pod type=file +c:\perl\lib/pods/perlbs2000.pod type=file +c:\perl\lib/pods/perlcall.pod type=file +c:\perl\lib/pods/perlce.pod type=file +c:\perl\lib/pods/perlcheat.pod type=file +c:\perl\lib/pods/perlclib.pod type=file +c:\perl\lib/pods/perlcn.pod type=file +c:\perl\lib/pods/perlcommunity.pod type=file +c:\perl\lib/pods/perlcygwin.pod type=file +c:\perl\lib/pods/perldata.pod type=file +c:\perl\lib/pods/perldbmfilter.pod type=file +c:\perl\lib/pods/perldebguts.pod type=file +c:\perl\lib/pods/perldebtut.pod type=file +c:\perl\lib/pods/perldebug.pod type=file +c:\perl\lib/pods/perldelta.pod type=file +c:\perl\lib/pods/perldgux.pod type=file +c:\perl\lib/pods/perldiag.pod type=file +c:\perl\lib/pods/perldoc.pod type=file +c:\perl\lib/pods/perldos.pod type=file +c:\perl\lib/pods/perldsc.pod type=file +c:\perl\lib/pods/perldtrace.pod type=file +c:\perl\lib/pods/perlebcdic.pod type=file +c:\perl\lib/pods/perlembed.pod type=file +c:\perl\lib/pods/perlepoc.pod type=file +c:\perl\lib/pods/perlexperiment.pod type=file +c:\perl\lib/pods/perlfaq.pod type=file +c:\perl\lib/pods/perlfaq1.pod type=file +c:\perl\lib/pods/perlfaq2.pod type=file +c:\perl\lib/pods/perlfaq3.pod type=file +c:\perl\lib/pods/perlfaq4.pod type=file +c:\perl\lib/pods/perlfaq5.pod type=file +c:\perl\lib/pods/perlfaq6.pod type=file +c:\perl\lib/pods/perlfaq7.pod type=file +c:\perl\lib/pods/perlfaq8.pod type=file +c:\perl\lib/pods/perlfaq9.pod type=file +c:\perl\lib/pods/perlfilter.pod type=file +c:\perl\lib/pods/perlfork.pod type=file +c:\perl\lib/pods/perlform.pod type=file +c:\perl\lib/pods/perlfreebsd.pod type=file +c:\perl\lib/pods/perlfunc.pod type=file +c:\perl\lib/pods/perlgit.pod type=file +c:\perl\lib/pods/perlglossary.pod type=file +c:\perl\lib/pods/perlgpl.pod type=file +c:\perl\lib/pods/perlguts.pod type=file +c:\perl\lib/pods/perlhack.pod type=file +c:\perl\lib/pods/perlhacktips.pod type=file +c:\perl\lib/pods/perlhacktut.pod type=file +c:\perl\lib/pods/perlhaiku.pod type=file +c:\perl\lib/pods/perlhist.pod type=file +c:\perl\lib/pods/perlhpux.pod type=file +c:\perl\lib/pods/perlhurd.pod type=file +c:\perl\lib/pods/perlintern.pod type=file +c:\perl\lib/pods/perlinterp.pod type=file +c:\perl\lib/pods/perlintro.pod type=file +c:\perl\lib/pods/perliol.pod type=file +c:\perl\lib/pods/perlipc.pod type=file +c:\perl\lib/pods/perlirix.pod type=file +c:\perl\lib/pods/perljp.pod type=file +c:\perl\lib/pods/perlko.pod type=file +c:\perl\lib/pods/perllexwarn.pod type=file +c:\perl\lib/pods/perllinux.pod type=file +c:\perl\lib/pods/perllocale.pod type=file +c:\perl\lib/pods/perllol.pod type=file +c:\perl\lib/pods/perlmacos.pod type=file +c:\perl\lib/pods/perlmacosx.pod type=file +c:\perl\lib/pods/perlmod.pod type=file +c:\perl\lib/pods/perlmodinstall.pod type=file +c:\perl\lib/pods/perlmodlib.pod type=file +c:\perl\lib/pods/perlmodstyle.pod type=file +c:\perl\lib/pods/perlmpeix.pod type=file +c:\perl\lib/pods/perlmroapi.pod type=file +c:\perl\lib/pods/perlnetware.pod type=file +c:\perl\lib/pods/perlnewmod.pod type=file +c:\perl\lib/pods/perlnumber.pod type=file +c:\perl\lib/pods/perlobj.pod type=file +c:\perl\lib/pods/perlootut.pod type=file +c:\perl\lib/pods/perlop.pod type=file +c:\perl\lib/pods/perlopenbsd.pod type=file +c:\perl\lib/pods/perlopentut.pod type=file +c:\perl\lib/pods/perlos2.pod type=file +c:\perl\lib/pods/perlos390.pod type=file +c:\perl\lib/pods/perlos400.pod type=file +c:\perl\lib/pods/perlpacktut.pod type=file +c:\perl\lib/pods/perlperf.pod type=file +c:\perl\lib/pods/perlplan9.pod type=file +c:\perl\lib/pods/perlpod.pod type=file +c:\perl\lib/pods/perlpodspec.pod type=file +c:\perl\lib/pods/perlpodstyle.pod type=file +c:\perl\lib/pods/perlpolicy.pod type=file +c:\perl\lib/pods/perlport.pod type=file +c:\perl\lib/pods/perlpragma.pod type=file +c:\perl\lib/pods/perlqnx.pod type=file +c:\perl\lib/pods/perlre.pod type=file +c:\perl\lib/pods/perlreapi.pod type=file +c:\perl\lib/pods/perlrebackslash.pod type=file +c:\perl\lib/pods/perlrecharclass.pod type=file +c:\perl\lib/pods/perlref.pod type=file +c:\perl\lib/pods/perlreftut.pod type=file +c:\perl\lib/pods/perlreguts.pod type=file +c:\perl\lib/pods/perlrequick.pod type=file +c:\perl\lib/pods/perlreref.pod type=file +c:\perl\lib/pods/perlretut.pod type=file +c:\perl\lib/pods/perlriscos.pod type=file +c:\perl\lib/pods/perlrun.pod type=file +c:\perl\lib/pods/perlsec.pod type=file +c:\perl\lib/pods/perlsolaris.pod type=file +c:\perl\lib/pods/perlsource.pod type=file +c:\perl\lib/pods/perlstyle.pod type=file +c:\perl\lib/pods/perlsub.pod type=file +c:\perl\lib/pods/perlsymbian.pod type=file +c:\perl\lib/pods/perlsyn.pod type=file +c:\perl\lib/pods/perlthrtut.pod type=file +c:\perl\lib/pods/perltie.pod type=file +c:\perl\lib/pods/perltoc.pod type=file +c:\perl\lib/pods/perltodo.pod type=file +c:\perl\lib/pods/perltooc.pod type=file +c:\perl\lib/pods/perltoot.pod type=file +c:\perl\lib/pods/perltrap.pod type=file +c:\perl\lib/pods/perltru64.pod type=file +c:\perl\lib/pods/perltw.pod type=file +c:\perl\lib/pods/perlunicode.pod type=file +c:\perl\lib/pods/perlunifaq.pod type=file +c:\perl\lib/pods/perluniintro.pod type=file +c:\perl\lib/pods/perluniprops.pod type=file +c:\perl\lib/pods/perlunitut.pod type=file +c:\perl\lib/pods/perlutil.pod type=file +c:\perl\lib/pods/perluts.pod type=file +c:\perl\lib/pods/perlvar.pod type=file +c:\perl\lib/pods/perlvmesa.pod type=file +c:\perl\lib/pods/perlvms.pod type=file +c:\perl\lib/pods/perlvos.pod type=file +c:\perl\lib/pods/perlwin32.pod type=file +c:\perl\lib/pods/perlxs.pod type=file +c:\perl\lib/pods/perlxstut.pod type=file +c:\perl\lib/pods/perlxstypemap.pod type=file +c:\perl\lib/re.pm type=file +c:\perl\lib/sigtrap.pm type=file +c:\perl\lib/sort.pm type=file +c:\perl\lib/strict.pm type=file +c:\perl\lib/subs.pm type=file +c:\perl\lib/threads.pm type=file +c:\perl\lib/threads/shared.pm type=file +c:\perl\lib/unicore/Blocks.txt type=file +c:\perl\lib/unicore/CaseFolding.txt type=file +c:\perl\lib/unicore/CombiningClass.pl type=file +c:\perl\lib/unicore/Decomposition.pl type=file +c:\perl\lib/unicore/Heavy.pl type=file +c:\perl\lib/unicore/Name.pl type=file +c:\perl\lib/unicore/Name.pm type=file +c:\perl\lib/unicore/NamedSequences.txt type=file +c:\perl\lib/unicore/SpecialCasing.txt type=file +c:\perl\lib/unicore/To/Age.pl type=file +c:\perl\lib/unicore/To/Bc.pl type=file +c:\perl\lib/unicore/To/Bmg.pl type=file +c:\perl\lib/unicore/To/Cf.pl type=file +c:\perl\lib/unicore/To/Digit.pl type=file +c:\perl\lib/unicore/To/Ea.pl type=file +c:\perl\lib/unicore/To/Fold.pl type=file +c:\perl\lib/unicore/To/GCB.pl type=file +c:\perl\lib/unicore/To/Gc.pl type=file +c:\perl\lib/unicore/To/Hst.pl type=file +c:\perl\lib/unicore/To/Isc.pl type=file +c:\perl\lib/unicore/To/Jg.pl type=file +c:\perl\lib/unicore/To/Jt.pl type=file +c:\perl\lib/unicore/To/Lb.pl type=file +c:\perl\lib/unicore/To/Lc.pl type=file +c:\perl\lib/unicore/To/Lower.pl type=file +c:\perl\lib/unicore/To/NFCQC.pl type=file +c:\perl\lib/unicore/To/NFDQC.pl type=file +c:\perl\lib/unicore/To/NFKCCF.pl type=file +c:\perl\lib/unicore/To/NFKCQC.pl type=file +c:\perl\lib/unicore/To/NFKDQC.pl type=file +c:\perl\lib/unicore/To/Na1.pl type=file +c:\perl\lib/unicore/To/NameAlia.pl type=file +c:\perl\lib/unicore/To/Nt.pl type=file +c:\perl\lib/unicore/To/Nv.pl type=file +c:\perl\lib/unicore/To/PerlDeci.pl type=file +c:\perl\lib/unicore/To/SB.pl type=file +c:\perl\lib/unicore/To/Sc.pl type=file +c:\perl\lib/unicore/To/Scx.pl type=file +c:\perl\lib/unicore/To/Tc.pl type=file +c:\perl\lib/unicore/To/Title.pl type=file +c:\perl\lib/unicore/To/Uc.pl type=file +c:\perl\lib/unicore/To/Upper.pl type=file +c:\perl\lib/unicore/To/WB.pl type=file +c:\perl\lib/unicore/UCD.pl type=file +c:\perl\lib/unicore/lib/AHex/Y.pl type=file +c:\perl\lib/unicore/lib/Age/NA.pl type=file +c:\perl\lib/unicore/lib/Age/V11.pl type=file +c:\perl\lib/unicore/lib/Age/V20.pl type=file +c:\perl\lib/unicore/lib/Age/V21.pl type=file +c:\perl\lib/unicore/lib/Age/V30.pl type=file +c:\perl\lib/unicore/lib/Age/V31.pl type=file +c:\perl\lib/unicore/lib/Age/V32.pl type=file +c:\perl\lib/unicore/lib/Age/V40.pl type=file +c:\perl\lib/unicore/lib/Age/V41.pl type=file +c:\perl\lib/unicore/lib/Age/V50.pl type=file +c:\perl\lib/unicore/lib/Age/V51.pl type=file +c:\perl\lib/unicore/lib/Age/V52.pl type=file +c:\perl\lib/unicore/lib/Age/V60.pl type=file +c:\perl\lib/unicore/lib/Age/V61.pl type=file +c:\perl\lib/unicore/lib/Alpha/Y.pl type=file +c:\perl\lib/unicore/lib/Bc/AL.pl type=file +c:\perl\lib/unicore/lib/Bc/AN.pl type=file +c:\perl\lib/unicore/lib/Bc/B.pl type=file +c:\perl\lib/unicore/lib/Bc/BN.pl type=file +c:\perl\lib/unicore/lib/Bc/CS.pl type=file +c:\perl\lib/unicore/lib/Bc/EN.pl type=file +c:\perl\lib/unicore/lib/Bc/ES.pl type=file +c:\perl\lib/unicore/lib/Bc/ET.pl type=file +c:\perl\lib/unicore/lib/Bc/L.pl type=file +c:\perl\lib/unicore/lib/Bc/LRE.pl type=file +c:\perl\lib/unicore/lib/Bc/LRO.pl type=file +c:\perl\lib/unicore/lib/Bc/NSM.pl type=file +c:\perl\lib/unicore/lib/Bc/ON.pl type=file +c:\perl\lib/unicore/lib/Bc/PDF.pl type=file +c:\perl\lib/unicore/lib/Bc/R.pl type=file +c:\perl\lib/unicore/lib/Bc/RLE.pl type=file +c:\perl\lib/unicore/lib/Bc/RLO.pl type=file +c:\perl\lib/unicore/lib/Bc/S.pl type=file +c:\perl\lib/unicore/lib/Bc/WS.pl type=file +c:\perl\lib/unicore/lib/BidiC/Y.pl type=file +c:\perl\lib/unicore/lib/BidiM/Y.pl type=file +c:\perl\lib/unicore/lib/Blk/ASCII.pl type=file +c:\perl\lib/unicore/lib/Blk/AegeanNu.pl type=file +c:\perl\lib/unicore/lib/Blk/Alchemic.pl type=file +c:\perl\lib/unicore/lib/Blk/Alphabet.pl type=file +c:\perl\lib/unicore/lib/Blk/Ancient2.pl type=file +c:\perl\lib/unicore/lib/Blk/AncientG.pl type=file +c:\perl\lib/unicore/lib/Blk/AncientS.pl type=file +c:\perl\lib/unicore/lib/Blk/Arabic.pl type=file +c:\perl\lib/unicore/lib/Blk/ArabicEx.pl type=file +c:\perl\lib/unicore/lib/Blk/ArabicMa.pl type=file +c:\perl\lib/unicore/lib/Blk/ArabicP2.pl type=file +c:\perl\lib/unicore/lib/Blk/ArabicPF.pl type=file +c:\perl\lib/unicore/lib/Blk/ArabicSu.pl type=file +c:\perl\lib/unicore/lib/Blk/Armenian.pl type=file +c:\perl\lib/unicore/lib/Blk/Arrows.pl type=file +c:\perl\lib/unicore/lib/Blk/Avestan.pl type=file +c:\perl\lib/unicore/lib/Blk/Balinese.pl type=file +c:\perl\lib/unicore/lib/Blk/Bamum.pl type=file +c:\perl\lib/unicore/lib/Blk/BamumSup.pl type=file +c:\perl\lib/unicore/lib/Blk/Batak.pl type=file +c:\perl\lib/unicore/lib/Blk/Bengali.pl type=file +c:\perl\lib/unicore/lib/Blk/BlockEle.pl type=file +c:\perl\lib/unicore/lib/Blk/Bopomof2.pl type=file +c:\perl\lib/unicore/lib/Blk/Bopomofo.pl type=file +c:\perl\lib/unicore/lib/Blk/BoxDrawi.pl type=file +c:\perl\lib/unicore/lib/Blk/Brahmi.pl type=file +c:\perl\lib/unicore/lib/Blk/Buginese.pl type=file +c:\perl\lib/unicore/lib/Blk/Buhid.pl type=file +c:\perl\lib/unicore/lib/Blk/Byzantin.pl type=file +c:\perl\lib/unicore/lib/Blk/CJK.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKComp2.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKComp3.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKComp4.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKCompa.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKExtA.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKExtB.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKExtC.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKExtD.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKRadic.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKStrok.pl type=file +c:\perl\lib/unicore/lib/Blk/CJKSymbo.pl type=file +c:\perl\lib/unicore/lib/Blk/Carian.pl type=file +c:\perl\lib/unicore/lib/Blk/Chakma.pl type=file +c:\perl\lib/unicore/lib/Blk/Cham.pl type=file +c:\perl\lib/unicore/lib/Blk/Cherokee.pl type=file +c:\perl\lib/unicore/lib/Blk/CompatJa.pl type=file +c:\perl\lib/unicore/lib/Blk/ControlP.pl type=file +c:\perl\lib/unicore/lib/Blk/Coptic.pl type=file +c:\perl\lib/unicore/lib/Blk/Counting.pl type=file +c:\perl\lib/unicore/lib/Blk/Cuneifo2.pl type=file +c:\perl\lib/unicore/lib/Blk/Cuneifor.pl type=file +c:\perl\lib/unicore/lib/Blk/Currency.pl type=file +c:\perl\lib/unicore/lib/Blk/CypriotS.pl type=file +c:\perl\lib/unicore/lib/Blk/Cyrilli2.pl type=file +c:\perl\lib/unicore/lib/Blk/Cyrilli3.pl type=file +c:\perl\lib/unicore/lib/Blk/Cyrilli4.pl type=file +c:\perl\lib/unicore/lib/Blk/Cyrillic.pl type=file +c:\perl\lib/unicore/lib/Blk/Devanag2.pl type=file +c:\perl\lib/unicore/lib/Blk/Devanaga.pl type=file +c:\perl\lib/unicore/lib/Blk/Diacrit2.pl type=file +c:\perl\lib/unicore/lib/Blk/Diacrit3.pl type=file +c:\perl\lib/unicore/lib/Blk/Diacriti.pl type=file +c:\perl\lib/unicore/lib/Blk/Dingbats.pl type=file +c:\perl\lib/unicore/lib/Blk/Domino.pl type=file +c:\perl\lib/unicore/lib/Blk/Egyptian.pl type=file +c:\perl\lib/unicore/lib/Blk/Emoticon.pl type=file +c:\perl\lib/unicore/lib/Blk/Enclose2.pl type=file +c:\perl\lib/unicore/lib/Blk/Enclose3.pl type=file +c:\perl\lib/unicore/lib/Blk/Enclose4.pl type=file +c:\perl\lib/unicore/lib/Blk/Enclosed.pl type=file +c:\perl\lib/unicore/lib/Blk/Ethiopi2.pl type=file +c:\perl\lib/unicore/lib/Blk/Ethiopi3.pl type=file +c:\perl\lib/unicore/lib/Blk/Ethiopi4.pl type=file +c:\perl\lib/unicore/lib/Blk/Ethiopic.pl type=file +c:\perl\lib/unicore/lib/Blk/Geometri.pl type=file +c:\perl\lib/unicore/lib/Blk/Georgia2.pl type=file +c:\perl\lib/unicore/lib/Blk/Georgian.pl type=file +c:\perl\lib/unicore/lib/Blk/Glagolit.pl type=file +c:\perl\lib/unicore/lib/Blk/Gothic.pl type=file +c:\perl\lib/unicore/lib/Blk/Greek.pl type=file +c:\perl\lib/unicore/lib/Blk/GreekExt.pl type=file +c:\perl\lib/unicore/lib/Blk/Gujarati.pl type=file +c:\perl\lib/unicore/lib/Blk/Gurmukhi.pl type=file +c:\perl\lib/unicore/lib/Blk/HalfAndF.pl type=file +c:\perl\lib/unicore/lib/Blk/HalfMark.pl type=file +c:\perl\lib/unicore/lib/Blk/Hangul.pl type=file +c:\perl\lib/unicore/lib/Blk/Hanunoo.pl type=file +c:\perl\lib/unicore/lib/Blk/Hebrew.pl type=file +c:\perl\lib/unicore/lib/Blk/HighPUSu.pl type=file +c:\perl\lib/unicore/lib/Blk/HighSurr.pl type=file +c:\perl\lib/unicore/lib/Blk/Hiragana.pl type=file +c:\perl\lib/unicore/lib/Blk/IDC.pl type=file +c:\perl\lib/unicore/lib/Blk/IPAExt.pl type=file +c:\perl\lib/unicore/lib/Blk/Imperial.pl type=file +c:\perl\lib/unicore/lib/Blk/IndicNum.pl type=file +c:\perl\lib/unicore/lib/Blk/Inscrip2.pl type=file +c:\perl\lib/unicore/lib/Blk/Inscript.pl type=file +c:\perl\lib/unicore/lib/Blk/Jamo.pl type=file +c:\perl\lib/unicore/lib/Blk/JamoExtA.pl type=file +c:\perl\lib/unicore/lib/Blk/JamoExtB.pl type=file +c:\perl\lib/unicore/lib/Blk/Javanese.pl type=file +c:\perl\lib/unicore/lib/Blk/Kaithi.pl type=file +c:\perl\lib/unicore/lib/Blk/KanaSup.pl type=file +c:\perl\lib/unicore/lib/Blk/Kanbun.pl type=file +c:\perl\lib/unicore/lib/Blk/Kangxi.pl type=file +c:\perl\lib/unicore/lib/Blk/Kannada.pl type=file +c:\perl\lib/unicore/lib/Blk/Katakan2.pl type=file +c:\perl\lib/unicore/lib/Blk/Katakana.pl type=file +c:\perl\lib/unicore/lib/Blk/Kharosht.pl type=file +c:\perl\lib/unicore/lib/Blk/Khmer.pl type=file +c:\perl\lib/unicore/lib/Blk/KhmerSym.pl type=file +c:\perl\lib/unicore/lib/Blk/Lao.pl type=file +c:\perl\lib/unicore/lib/Blk/Latin1.pl type=file +c:\perl\lib/unicore/lib/Blk/LatinEx2.pl type=file +c:\perl\lib/unicore/lib/Blk/LatinEx3.pl type=file +c:\perl\lib/unicore/lib/Blk/LatinEx4.pl type=file +c:\perl\lib/unicore/lib/Blk/LatinEx5.pl type=file +c:\perl\lib/unicore/lib/Blk/LatinExt.pl type=file +c:\perl\lib/unicore/lib/Blk/Lepcha.pl type=file +c:\perl\lib/unicore/lib/Blk/Letterli.pl type=file +c:\perl\lib/unicore/lib/Blk/Limbu.pl type=file +c:\perl\lib/unicore/lib/Blk/LinearBI.pl type=file +c:\perl\lib/unicore/lib/Blk/LinearBS.pl type=file +c:\perl\lib/unicore/lib/Blk/LowSurro.pl type=file +c:\perl\lib/unicore/lib/Blk/Lycian.pl type=file +c:\perl\lib/unicore/lib/Blk/Lydian.pl type=file +c:\perl\lib/unicore/lib/Blk/Mahjong.pl type=file +c:\perl\lib/unicore/lib/Blk/Malayala.pl type=file +c:\perl\lib/unicore/lib/Blk/Mandaic.pl type=file +c:\perl\lib/unicore/lib/Blk/MathAlph.pl type=file +c:\perl\lib/unicore/lib/Blk/MathOper.pl type=file +c:\perl\lib/unicore/lib/Blk/MeeteiM2.pl type=file +c:\perl\lib/unicore/lib/Blk/MeeteiMa.pl type=file +c:\perl\lib/unicore/lib/Blk/Meroitic.pl type=file +c:\perl\lib/unicore/lib/Blk/Miao.pl type=file +c:\perl\lib/unicore/lib/Blk/MiscArro.pl type=file +c:\perl\lib/unicore/lib/Blk/MiscMat2.pl type=file +c:\perl\lib/unicore/lib/Blk/MiscMath.pl type=file +c:\perl\lib/unicore/lib/Blk/MiscPict.pl type=file +c:\perl\lib/unicore/lib/Blk/MiscSymb.pl type=file +c:\perl\lib/unicore/lib/Blk/MiscTech.pl type=file +c:\perl\lib/unicore/lib/Blk/Modifie2.pl type=file +c:\perl\lib/unicore/lib/Blk/Modifier.pl type=file +c:\perl\lib/unicore/lib/Blk/Mongolia.pl type=file +c:\perl\lib/unicore/lib/Blk/Music.pl type=file +c:\perl\lib/unicore/lib/Blk/Myanmar.pl type=file +c:\perl\lib/unicore/lib/Blk/MyanmarE.pl type=file +c:\perl\lib/unicore/lib/Blk/NB.pl type=file +c:\perl\lib/unicore/lib/Blk/NKo.pl type=file +c:\perl\lib/unicore/lib/Blk/NewTaiLu.pl type=file +c:\perl\lib/unicore/lib/Blk/NumberFo.pl type=file +c:\perl\lib/unicore/lib/Blk/OCR.pl type=file +c:\perl\lib/unicore/lib/Blk/Ogham.pl type=file +c:\perl\lib/unicore/lib/Blk/OldItali.pl type=file +c:\perl\lib/unicore/lib/Blk/OldPersi.pl type=file +c:\perl\lib/unicore/lib/Blk/OldTurki.pl type=file +c:\perl\lib/unicore/lib/Blk/Oriya.pl type=file +c:\perl\lib/unicore/lib/Blk/Osmanya.pl type=file +c:\perl\lib/unicore/lib/Blk/PUA.pl type=file +c:\perl\lib/unicore/lib/Blk/PhagsPa.pl type=file +c:\perl\lib/unicore/lib/Blk/Phaistos.pl type=file +c:\perl\lib/unicore/lib/Blk/Phoenici.pl type=file +c:\perl\lib/unicore/lib/Blk/Phoneti2.pl type=file +c:\perl\lib/unicore/lib/Blk/Phonetic.pl type=file +c:\perl\lib/unicore/lib/Blk/PlayingC.pl type=file +c:\perl\lib/unicore/lib/Blk/Punctuat.pl type=file +c:\perl\lib/unicore/lib/Blk/Rejang.pl type=file +c:\perl\lib/unicore/lib/Blk/Rumi.pl type=file +c:\perl\lib/unicore/lib/Blk/Runic.pl type=file +c:\perl\lib/unicore/lib/Blk/Samarita.pl type=file +c:\perl\lib/unicore/lib/Blk/Saurasht.pl type=file +c:\perl\lib/unicore/lib/Blk/Sharada.pl type=file +c:\perl\lib/unicore/lib/Blk/Sinhala.pl type=file +c:\perl\lib/unicore/lib/Blk/SmallFor.pl type=file +c:\perl\lib/unicore/lib/Blk/SoraSomp.pl type=file +c:\perl\lib/unicore/lib/Blk/Specials.pl type=file +c:\perl\lib/unicore/lib/Blk/Sundane2.pl type=file +c:\perl\lib/unicore/lib/Blk/Sundanes.pl type=file +c:\perl\lib/unicore/lib/Blk/SupArro2.pl type=file +c:\perl\lib/unicore/lib/Blk/SupArrow.pl type=file +c:\perl\lib/unicore/lib/Blk/SupMathO.pl type=file +c:\perl\lib/unicore/lib/Blk/SupPUAA.pl type=file +c:\perl\lib/unicore/lib/Blk/SupPUAB.pl type=file +c:\perl\lib/unicore/lib/Blk/SupPunct.pl type=file +c:\perl\lib/unicore/lib/Blk/SuperAnd.pl type=file +c:\perl\lib/unicore/lib/Blk/SylotiNa.pl type=file +c:\perl\lib/unicore/lib/Blk/Syriac.pl type=file +c:\perl\lib/unicore/lib/Blk/Tagalog.pl type=file +c:\perl\lib/unicore/lib/Blk/Tagbanwa.pl type=file +c:\perl\lib/unicore/lib/Blk/Tags.pl type=file +c:\perl\lib/unicore/lib/Blk/TaiLe.pl type=file +c:\perl\lib/unicore/lib/Blk/TaiTham.pl type=file +c:\perl\lib/unicore/lib/Blk/TaiViet.pl type=file +c:\perl\lib/unicore/lib/Blk/TaiXuanJ.pl type=file +c:\perl\lib/unicore/lib/Blk/Takri.pl type=file +c:\perl\lib/unicore/lib/Blk/Tamil.pl type=file +c:\perl\lib/unicore/lib/Blk/Telugu.pl type=file +c:\perl\lib/unicore/lib/Blk/Thaana.pl type=file +c:\perl\lib/unicore/lib/Blk/Thai.pl type=file +c:\perl\lib/unicore/lib/Blk/Tibetan.pl type=file +c:\perl\lib/unicore/lib/Blk/Tifinagh.pl type=file +c:\perl\lib/unicore/lib/Blk/Transpor.pl type=file +c:\perl\lib/unicore/lib/Blk/UCAS.pl type=file +c:\perl\lib/unicore/lib/Blk/UCASExt.pl type=file +c:\perl\lib/unicore/lib/Blk/Ugaritic.pl type=file +c:\perl\lib/unicore/lib/Blk/VS.pl type=file +c:\perl\lib/unicore/lib/Blk/VSSup.pl type=file +c:\perl\lib/unicore/lib/Blk/Vai.pl type=file +c:\perl\lib/unicore/lib/Blk/VedicExt.pl type=file +c:\perl\lib/unicore/lib/Blk/Vertical.pl type=file +c:\perl\lib/unicore/lib/Blk/YiRadica.pl type=file +c:\perl\lib/unicore/lib/Blk/YiSyllab.pl type=file +c:\perl\lib/unicore/lib/Blk/Yijing.pl type=file +c:\perl\lib/unicore/lib/CE/Y.pl type=file +c:\perl\lib/unicore/lib/CI/Y.pl type=file +c:\perl\lib/unicore/lib/CWCF/Y.pl type=file +c:\perl\lib/unicore/lib/CWCM/Y.pl type=file +c:\perl\lib/unicore/lib/CWKCF/Y.pl type=file +c:\perl\lib/unicore/lib/CWL/Y.pl type=file +c:\perl\lib/unicore/lib/CWT/Y.pl type=file +c:\perl\lib/unicore/lib/CWU/Y.pl type=file +c:\perl\lib/unicore/lib/Cased/Y.pl type=file +c:\perl\lib/unicore/lib/Ccc/A.pl type=file +c:\perl\lib/unicore/lib/Ccc/AL.pl type=file +c:\perl\lib/unicore/lib/Ccc/AR.pl type=file +c:\perl\lib/unicore/lib/Ccc/ATA.pl type=file +c:\perl\lib/unicore/lib/Ccc/ATAR.pl type=file +c:\perl\lib/unicore/lib/Ccc/ATB.pl type=file +c:\perl\lib/unicore/lib/Ccc/B.pl type=file +c:\perl\lib/unicore/lib/Ccc/BL.pl type=file +c:\perl\lib/unicore/lib/Ccc/BR.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC10.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC103.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC107.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC11.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC118.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC12.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC122.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC129.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC13.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC130.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC132.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC14.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC15.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC16.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC17.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC18.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC19.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC20.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC21.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC22.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC23.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC24.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC25.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC26.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC27.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC28.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC29.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC30.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC31.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC32.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC33.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC34.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC35.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC36.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC84.pl type=file +c:\perl\lib/unicore/lib/Ccc/CCC91.pl type=file +c:\perl\lib/unicore/lib/Ccc/DA.pl type=file +c:\perl\lib/unicore/lib/Ccc/DB.pl type=file +c:\perl\lib/unicore/lib/Ccc/IS.pl type=file +c:\perl\lib/unicore/lib/Ccc/KV.pl type=file +c:\perl\lib/unicore/lib/Ccc/L.pl type=file +c:\perl\lib/unicore/lib/Ccc/NK.pl type=file +c:\perl\lib/unicore/lib/Ccc/NR.pl type=file +c:\perl\lib/unicore/lib/Ccc/OV.pl type=file +c:\perl\lib/unicore/lib/Ccc/R.pl type=file +c:\perl\lib/unicore/lib/Ccc/VR.pl type=file +c:\perl\lib/unicore/lib/CompEx/Y.pl type=file +c:\perl\lib/unicore/lib/DI/Y.pl type=file +c:\perl\lib/unicore/lib/Dash/Y.pl type=file +c:\perl\lib/unicore/lib/Dep/Y.pl type=file +c:\perl\lib/unicore/lib/Dia/Y.pl type=file +c:\perl\lib/unicore/lib/Dt/Com.pl type=file +c:\perl\lib/unicore/lib/Dt/Enc.pl type=file +c:\perl\lib/unicore/lib/Dt/Fin.pl type=file +c:\perl\lib/unicore/lib/Dt/Font.pl type=file +c:\perl\lib/unicore/lib/Dt/Fra.pl type=file +c:\perl\lib/unicore/lib/Dt/Init.pl type=file +c:\perl\lib/unicore/lib/Dt/Iso.pl type=file +c:\perl\lib/unicore/lib/Dt/Med.pl type=file +c:\perl\lib/unicore/lib/Dt/Nar.pl type=file +c:\perl\lib/unicore/lib/Dt/Nb.pl type=file +c:\perl\lib/unicore/lib/Dt/NonCanon.pl type=file +c:\perl\lib/unicore/lib/Dt/None.pl type=file +c:\perl\lib/unicore/lib/Dt/Sml.pl type=file +c:\perl\lib/unicore/lib/Dt/Sqr.pl type=file +c:\perl\lib/unicore/lib/Dt/Sub.pl type=file +c:\perl\lib/unicore/lib/Dt/Sup.pl type=file +c:\perl\lib/unicore/lib/Dt/Vert.pl type=file +c:\perl\lib/unicore/lib/Ea/A.pl type=file +c:\perl\lib/unicore/lib/Ea/F.pl type=file +c:\perl\lib/unicore/lib/Ea/H.pl type=file +c:\perl\lib/unicore/lib/Ea/N.pl type=file +c:\perl\lib/unicore/lib/Ea/Na.pl type=file +c:\perl\lib/unicore/lib/Ea/W.pl type=file +c:\perl\lib/unicore/lib/Ext/Y.pl type=file +c:\perl\lib/unicore/lib/GCB/CN.pl type=file +c:\perl\lib/unicore/lib/GCB/EX.pl type=file +c:\perl\lib/unicore/lib/GCB/SM.pl type=file +c:\perl\lib/unicore/lib/GCB/XX.pl type=file +c:\perl\lib/unicore/lib/Gc/C.pl type=file +c:\perl\lib/unicore/lib/Gc/Cc.pl type=file +c:\perl\lib/unicore/lib/Gc/Cf.pl type=file +c:\perl\lib/unicore/lib/Gc/Cn.pl type=file +c:\perl\lib/unicore/lib/Gc/Co.pl type=file +c:\perl\lib/unicore/lib/Gc/Cs.pl type=file +c:\perl\lib/unicore/lib/Gc/L.pl type=file +c:\perl\lib/unicore/lib/Gc/LC.pl type=file +c:\perl\lib/unicore/lib/Gc/Ll.pl type=file +c:\perl\lib/unicore/lib/Gc/Lm.pl type=file +c:\perl\lib/unicore/lib/Gc/Lo.pl type=file +c:\perl\lib/unicore/lib/Gc/Lu.pl type=file +c:\perl\lib/unicore/lib/Gc/M.pl type=file +c:\perl\lib/unicore/lib/Gc/Mc.pl type=file +c:\perl\lib/unicore/lib/Gc/Me.pl type=file +c:\perl\lib/unicore/lib/Gc/Mn.pl type=file +c:\perl\lib/unicore/lib/Gc/N.pl type=file +c:\perl\lib/unicore/lib/Gc/Nd.pl type=file +c:\perl\lib/unicore/lib/Gc/Nl.pl type=file +c:\perl\lib/unicore/lib/Gc/No.pl type=file +c:\perl\lib/unicore/lib/Gc/P.pl type=file +c:\perl\lib/unicore/lib/Gc/Pc.pl type=file +c:\perl\lib/unicore/lib/Gc/Pd.pl type=file +c:\perl\lib/unicore/lib/Gc/Pe.pl type=file +c:\perl\lib/unicore/lib/Gc/Pf.pl type=file +c:\perl\lib/unicore/lib/Gc/Pi.pl type=file +c:\perl\lib/unicore/lib/Gc/Po.pl type=file +c:\perl\lib/unicore/lib/Gc/Ps.pl type=file +c:\perl\lib/unicore/lib/Gc/S.pl type=file +c:\perl\lib/unicore/lib/Gc/Sc.pl type=file +c:\perl\lib/unicore/lib/Gc/Sk.pl type=file +c:\perl\lib/unicore/lib/Gc/Sm.pl type=file +c:\perl\lib/unicore/lib/Gc/So.pl type=file +c:\perl\lib/unicore/lib/Gc/Z.pl type=file +c:\perl\lib/unicore/lib/Gc/Zl.pl type=file +c:\perl\lib/unicore/lib/Gc/Zp.pl type=file +c:\perl\lib/unicore/lib/Gc/Zs.pl type=file +c:\perl\lib/unicore/lib/GrBase/Y.pl type=file +c:\perl\lib/unicore/lib/Hex/Y.pl type=file +c:\perl\lib/unicore/lib/Hst/NA.pl type=file +c:\perl\lib/unicore/lib/Hyphen/Y.pl type=file +c:\perl\lib/unicore/lib/IDC/Y.pl type=file +c:\perl\lib/unicore/lib/IDS/Y.pl type=file +c:\perl\lib/unicore/lib/IDSB/Y.pl type=file +c:\perl\lib/unicore/lib/IDST/Y.pl type=file +c:\perl\lib/unicore/lib/Ideo/Y.pl type=file +c:\perl\lib/unicore/lib/In/2_0.pl type=file +c:\perl\lib/unicore/lib/In/2_1.pl type=file +c:\perl\lib/unicore/lib/In/3_0.pl type=file +c:\perl\lib/unicore/lib/In/3_1.pl type=file +c:\perl\lib/unicore/lib/In/3_2.pl type=file +c:\perl\lib/unicore/lib/In/4_0.pl type=file +c:\perl\lib/unicore/lib/In/4_1.pl type=file +c:\perl\lib/unicore/lib/In/5_0.pl type=file +c:\perl\lib/unicore/lib/In/5_1.pl type=file +c:\perl\lib/unicore/lib/In/5_2.pl type=file +c:\perl\lib/unicore/lib/In/6_0.pl type=file +c:\perl\lib/unicore/lib/In/6_1.pl type=file +c:\perl\lib/unicore/lib/Jg/Ain.pl type=file +c:\perl\lib/unicore/lib/Jg/Alaph.pl type=file +c:\perl\lib/unicore/lib/Jg/Alef.pl type=file +c:\perl\lib/unicore/lib/Jg/Beh.pl type=file +c:\perl\lib/unicore/lib/Jg/Beth.pl type=file +c:\perl\lib/unicore/lib/Jg/Burushas.pl type=file +c:\perl\lib/unicore/lib/Jg/Dal.pl type=file +c:\perl\lib/unicore/lib/Jg/DalathRi.pl type=file +c:\perl\lib/unicore/lib/Jg/E.pl type=file +c:\perl\lib/unicore/lib/Jg/FarsiYeh.pl type=file +c:\perl\lib/unicore/lib/Jg/Fe.pl type=file +c:\perl\lib/unicore/lib/Jg/Feh.pl type=file +c:\perl\lib/unicore/lib/Jg/FinalSem.pl type=file +c:\perl\lib/unicore/lib/Jg/Gaf.pl type=file +c:\perl\lib/unicore/lib/Jg/Gamal.pl type=file +c:\perl\lib/unicore/lib/Jg/Hah.pl type=file +c:\perl\lib/unicore/lib/Jg/HamzaOnH.pl type=file +c:\perl\lib/unicore/lib/Jg/He.pl type=file +c:\perl\lib/unicore/lib/Jg/Heh.pl type=file +c:\perl\lib/unicore/lib/Jg/HehGoal.pl type=file +c:\perl\lib/unicore/lib/Jg/Heth.pl type=file +c:\perl\lib/unicore/lib/Jg/Kaf.pl type=file +c:\perl\lib/unicore/lib/Jg/Kaph.pl type=file +c:\perl\lib/unicore/lib/Jg/Khaph.pl type=file +c:\perl\lib/unicore/lib/Jg/KnottedH.pl type=file +c:\perl\lib/unicore/lib/Jg/Lam.pl type=file +c:\perl\lib/unicore/lib/Jg/Lamadh.pl type=file +c:\perl\lib/unicore/lib/Jg/Meem.pl type=file +c:\perl\lib/unicore/lib/Jg/Mim.pl type=file +c:\perl\lib/unicore/lib/Jg/NoJoinin.pl type=file +c:\perl\lib/unicore/lib/Jg/Noon.pl type=file +c:\perl\lib/unicore/lib/Jg/Nun.pl type=file +c:\perl\lib/unicore/lib/Jg/Nya.pl type=file +c:\perl\lib/unicore/lib/Jg/Pe.pl type=file +c:\perl\lib/unicore/lib/Jg/Qaf.pl type=file +c:\perl\lib/unicore/lib/Jg/Qaph.pl type=file +c:\perl\lib/unicore/lib/Jg/Reh.pl type=file +c:\perl\lib/unicore/lib/Jg/Reversed.pl type=file +c:\perl\lib/unicore/lib/Jg/Rohingya.pl type=file +c:\perl\lib/unicore/lib/Jg/Sad.pl type=file +c:\perl\lib/unicore/lib/Jg/Sadhe.pl type=file +c:\perl\lib/unicore/lib/Jg/Seen.pl type=file +c:\perl\lib/unicore/lib/Jg/Semkath.pl type=file +c:\perl\lib/unicore/lib/Jg/Shin.pl type=file +c:\perl\lib/unicore/lib/Jg/SwashKaf.pl type=file +c:\perl\lib/unicore/lib/Jg/SyriacWa.pl type=file +c:\perl\lib/unicore/lib/Jg/Tah.pl type=file +c:\perl\lib/unicore/lib/Jg/Taw.pl type=file +c:\perl\lib/unicore/lib/Jg/TehMarbu.pl type=file +c:\perl\lib/unicore/lib/Jg/Teth.pl type=file +c:\perl\lib/unicore/lib/Jg/Waw.pl type=file +c:\perl\lib/unicore/lib/Jg/Yeh.pl type=file +c:\perl\lib/unicore/lib/Jg/YehBarre.pl type=file +c:\perl\lib/unicore/lib/Jg/YehWithT.pl type=file +c:\perl\lib/unicore/lib/Jg/Yudh.pl type=file +c:\perl\lib/unicore/lib/Jg/YudhHe.pl type=file +c:\perl\lib/unicore/lib/Jg/Zain.pl type=file +c:\perl\lib/unicore/lib/Jg/Zhain.pl type=file +c:\perl\lib/unicore/lib/JoinC/Y.pl type=file +c:\perl\lib/unicore/lib/Jt/C.pl type=file +c:\perl\lib/unicore/lib/Jt/D.pl type=file +c:\perl\lib/unicore/lib/Jt/R.pl type=file +c:\perl\lib/unicore/lib/Jt/T.pl type=file +c:\perl\lib/unicore/lib/Jt/U.pl type=file +c:\perl\lib/unicore/lib/LOE/Y.pl type=file +c:\perl\lib/unicore/lib/Lb/AI.pl type=file +c:\perl\lib/unicore/lib/Lb/AL.pl type=file +c:\perl\lib/unicore/lib/Lb/B2.pl type=file +c:\perl\lib/unicore/lib/Lb/BA.pl type=file +c:\perl\lib/unicore/lib/Lb/BB.pl type=file +c:\perl\lib/unicore/lib/Lb/BK.pl type=file +c:\perl\lib/unicore/lib/Lb/CB.pl type=file +c:\perl\lib/unicore/lib/Lb/CJ.pl type=file +c:\perl\lib/unicore/lib/Lb/CL.pl type=file +c:\perl\lib/unicore/lib/Lb/CM.pl type=file +c:\perl\lib/unicore/lib/Lb/CP.pl type=file +c:\perl\lib/unicore/lib/Lb/CR.pl type=file +c:\perl\lib/unicore/lib/Lb/EX.pl type=file +c:\perl\lib/unicore/lib/Lb/GL.pl type=file +c:\perl\lib/unicore/lib/Lb/H2.pl type=file +c:\perl\lib/unicore/lib/Lb/H3.pl type=file +c:\perl\lib/unicore/lib/Lb/HL.pl type=file +c:\perl\lib/unicore/lib/Lb/HY.pl type=file +c:\perl\lib/unicore/lib/Lb/ID.pl type=file +c:\perl\lib/unicore/lib/Lb/IN.pl type=file +c:\perl\lib/unicore/lib/Lb/IS.pl type=file +c:\perl\lib/unicore/lib/Lb/JL.pl type=file +c:\perl\lib/unicore/lib/Lb/JT.pl type=file +c:\perl\lib/unicore/lib/Lb/JV.pl type=file +c:\perl\lib/unicore/lib/Lb/LF.pl type=file +c:\perl\lib/unicore/lib/Lb/NL.pl type=file +c:\perl\lib/unicore/lib/Lb/NS.pl type=file +c:\perl\lib/unicore/lib/Lb/NU.pl type=file +c:\perl\lib/unicore/lib/Lb/OP.pl type=file +c:\perl\lib/unicore/lib/Lb/PO.pl type=file +c:\perl\lib/unicore/lib/Lb/PR.pl type=file +c:\perl\lib/unicore/lib/Lb/QU.pl type=file +c:\perl\lib/unicore/lib/Lb/SA.pl type=file +c:\perl\lib/unicore/lib/Lb/SG.pl type=file +c:\perl\lib/unicore/lib/Lb/SP.pl type=file +c:\perl\lib/unicore/lib/Lb/SY.pl type=file +c:\perl\lib/unicore/lib/Lb/WJ.pl type=file +c:\perl\lib/unicore/lib/Lb/XX.pl type=file +c:\perl\lib/unicore/lib/Lb/ZW.pl type=file +c:\perl\lib/unicore/lib/Lower/Y.pl type=file +c:\perl\lib/unicore/lib/Math/Y.pl type=file +c:\perl\lib/unicore/lib/NChar/Y.pl type=file +c:\perl\lib/unicore/lib/NFCQC/Y.pl type=file +c:\perl\lib/unicore/lib/NFDQC/N.pl type=file +c:\perl\lib/unicore/lib/NFDQC/Y.pl type=file +c:\perl\lib/unicore/lib/NFKCQC/M.pl type=file +c:\perl\lib/unicore/lib/NFKCQC/N.pl type=file +c:\perl\lib/unicore/lib/NFKCQC/Y.pl type=file +c:\perl\lib/unicore/lib/NFKDQC/N.pl type=file +c:\perl\lib/unicore/lib/Nt/Di.pl type=file +c:\perl\lib/unicore/lib/Nt/Nu.pl type=file +c:\perl\lib/unicore/lib/Nv/0.pl type=file +c:\perl\lib/unicore/lib/Nv/1.pl type=file +c:\perl\lib/unicore/lib/Nv/10.pl type=file +c:\perl\lib/unicore/lib/Nv/100.pl type=file +c:\perl\lib/unicore/lib/Nv/1000.pl type=file +c:\perl\lib/unicore/lib/Nv/10000.pl type=file +c:\perl\lib/unicore/lib/Nv/100000.pl type=file +c:\perl\lib/unicore/lib/Nv/10000000.pl type=file +c:\perl\lib/unicore/lib/Nv/10000002.pl type=file +c:\perl\lib/unicore/lib/Nv/11.pl type=file +c:\perl\lib/unicore/lib/Nv/11_2.pl type=file +c:\perl\lib/unicore/lib/Nv/12.pl type=file +c:\perl\lib/unicore/lib/Nv/13.pl type=file +c:\perl\lib/unicore/lib/Nv/13_2.pl type=file +c:\perl\lib/unicore/lib/Nv/14.pl type=file +c:\perl\lib/unicore/lib/Nv/15.pl type=file +c:\perl\lib/unicore/lib/Nv/15_2.pl type=file +c:\perl\lib/unicore/lib/Nv/16.pl type=file +c:\perl\lib/unicore/lib/Nv/17.pl type=file +c:\perl\lib/unicore/lib/Nv/17_2.pl type=file +c:\perl\lib/unicore/lib/Nv/18.pl type=file +c:\perl\lib/unicore/lib/Nv/19.pl type=file +c:\perl\lib/unicore/lib/Nv/1_10.pl type=file +c:\perl\lib/unicore/lib/Nv/1_16.pl type=file +c:\perl\lib/unicore/lib/Nv/1_2.pl type=file +c:\perl\lib/unicore/lib/Nv/1_3.pl type=file +c:\perl\lib/unicore/lib/Nv/1_4.pl type=file +c:\perl\lib/unicore/lib/Nv/1_5.pl type=file +c:\perl\lib/unicore/lib/Nv/1_6.pl type=file +c:\perl\lib/unicore/lib/Nv/1_7.pl type=file +c:\perl\lib/unicore/lib/Nv/1_8.pl type=file +c:\perl\lib/unicore/lib/Nv/1_9.pl type=file +c:\perl\lib/unicore/lib/Nv/2.pl type=file +c:\perl\lib/unicore/lib/Nv/20.pl type=file +c:\perl\lib/unicore/lib/Nv/200.pl type=file +c:\perl\lib/unicore/lib/Nv/2000.pl type=file +c:\perl\lib/unicore/lib/Nv/20000.pl type=file +c:\perl\lib/unicore/lib/Nv/21.pl type=file +c:\perl\lib/unicore/lib/Nv/22.pl type=file +c:\perl\lib/unicore/lib/Nv/23.pl type=file +c:\perl\lib/unicore/lib/Nv/24.pl type=file +c:\perl\lib/unicore/lib/Nv/25.pl type=file +c:\perl\lib/unicore/lib/Nv/26.pl type=file +c:\perl\lib/unicore/lib/Nv/27.pl type=file +c:\perl\lib/unicore/lib/Nv/28.pl type=file +c:\perl\lib/unicore/lib/Nv/29.pl type=file +c:\perl\lib/unicore/lib/Nv/2_3.pl type=file +c:\perl\lib/unicore/lib/Nv/2_5.pl type=file +c:\perl\lib/unicore/lib/Nv/3.pl type=file +c:\perl\lib/unicore/lib/Nv/30.pl type=file +c:\perl\lib/unicore/lib/Nv/300.pl type=file +c:\perl\lib/unicore/lib/Nv/3000.pl type=file +c:\perl\lib/unicore/lib/Nv/30000.pl type=file +c:\perl\lib/unicore/lib/Nv/31.pl type=file +c:\perl\lib/unicore/lib/Nv/32.pl type=file +c:\perl\lib/unicore/lib/Nv/33.pl type=file +c:\perl\lib/unicore/lib/Nv/34.pl type=file +c:\perl\lib/unicore/lib/Nv/35.pl type=file +c:\perl\lib/unicore/lib/Nv/36.pl type=file +c:\perl\lib/unicore/lib/Nv/37.pl type=file +c:\perl\lib/unicore/lib/Nv/38.pl type=file +c:\perl\lib/unicore/lib/Nv/39.pl type=file +c:\perl\lib/unicore/lib/Nv/3_16.pl type=file +c:\perl\lib/unicore/lib/Nv/3_2.pl type=file +c:\perl\lib/unicore/lib/Nv/3_4.pl type=file +c:\perl\lib/unicore/lib/Nv/3_5.pl type=file +c:\perl\lib/unicore/lib/Nv/3_8.pl type=file +c:\perl\lib/unicore/lib/Nv/4.pl type=file +c:\perl\lib/unicore/lib/Nv/40.pl type=file +c:\perl\lib/unicore/lib/Nv/400.pl type=file +c:\perl\lib/unicore/lib/Nv/4000.pl type=file +c:\perl\lib/unicore/lib/Nv/40000.pl type=file +c:\perl\lib/unicore/lib/Nv/41.pl type=file +c:\perl\lib/unicore/lib/Nv/42.pl type=file +c:\perl\lib/unicore/lib/Nv/43.pl type=file +c:\perl\lib/unicore/lib/Nv/44.pl type=file +c:\perl\lib/unicore/lib/Nv/45.pl type=file +c:\perl\lib/unicore/lib/Nv/46.pl type=file +c:\perl\lib/unicore/lib/Nv/47.pl type=file +c:\perl\lib/unicore/lib/Nv/48.pl type=file +c:\perl\lib/unicore/lib/Nv/49.pl type=file +c:\perl\lib/unicore/lib/Nv/4_5.pl type=file +c:\perl\lib/unicore/lib/Nv/5.pl type=file +c:\perl\lib/unicore/lib/Nv/50.pl type=file +c:\perl\lib/unicore/lib/Nv/500.pl type=file +c:\perl\lib/unicore/lib/Nv/5000.pl type=file +c:\perl\lib/unicore/lib/Nv/50000.pl type=file +c:\perl\lib/unicore/lib/Nv/5_2.pl type=file +c:\perl\lib/unicore/lib/Nv/5_6.pl type=file +c:\perl\lib/unicore/lib/Nv/5_8.pl type=file +c:\perl\lib/unicore/lib/Nv/6.pl type=file +c:\perl\lib/unicore/lib/Nv/60.pl type=file +c:\perl\lib/unicore/lib/Nv/600.pl type=file +c:\perl\lib/unicore/lib/Nv/6000.pl type=file +c:\perl\lib/unicore/lib/Nv/60000.pl type=file +c:\perl\lib/unicore/lib/Nv/7.pl type=file +c:\perl\lib/unicore/lib/Nv/70.pl type=file +c:\perl\lib/unicore/lib/Nv/700.pl type=file +c:\perl\lib/unicore/lib/Nv/7000.pl type=file +c:\perl\lib/unicore/lib/Nv/70000.pl type=file +c:\perl\lib/unicore/lib/Nv/7_2.pl type=file +c:\perl\lib/unicore/lib/Nv/7_8.pl type=file +c:\perl\lib/unicore/lib/Nv/8.pl type=file +c:\perl\lib/unicore/lib/Nv/80.pl type=file +c:\perl\lib/unicore/lib/Nv/800.pl type=file +c:\perl\lib/unicore/lib/Nv/8000.pl type=file +c:\perl\lib/unicore/lib/Nv/80000.pl type=file +c:\perl\lib/unicore/lib/Nv/9.pl type=file +c:\perl\lib/unicore/lib/Nv/90.pl type=file +c:\perl\lib/unicore/lib/Nv/900.pl type=file +c:\perl\lib/unicore/lib/Nv/9000.pl type=file +c:\perl\lib/unicore/lib/Nv/90000.pl type=file +c:\perl\lib/unicore/lib/Nv/9_2.pl type=file +c:\perl\lib/unicore/lib/Nv/NaN.pl type=file +c:\perl\lib/unicore/lib/Nv/_1_2.pl type=file +c:\perl\lib/unicore/lib/PatSyn/Y.pl type=file +c:\perl\lib/unicore/lib/PatWS/Y.pl type=file +c:\perl\lib/unicore/lib/Perl/Alnum.pl type=file +c:\perl\lib/unicore/lib/Perl/Any.pl type=file +c:\perl\lib/unicore/lib/Perl/Assigned.pl type=file +c:\perl\lib/unicore/lib/Perl/Blank.pl type=file +c:\perl\lib/unicore/lib/Perl/Graph.pl type=file +c:\perl\lib/unicore/lib/Perl/PerlSpac.pl type=file +c:\perl\lib/unicore/lib/Perl/PerlWord.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixAln.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixAlp.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixBla.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixCnt.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixDig.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixGra.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixLow.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixPri.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixPun.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixSpa.pl type=file +c:\perl\lib/unicore/lib/Perl/PosixUpp.pl type=file +c:\perl\lib/unicore/lib/Perl/Print.pl type=file +c:\perl\lib/unicore/lib/Perl/SpacePer.pl type=file +c:\perl\lib/unicore/lib/Perl/Title.pl type=file +c:\perl\lib/unicore/lib/Perl/VertSpac.pl type=file +c:\perl\lib/unicore/lib/Perl/Word.pl type=file +c:\perl\lib/unicore/lib/Perl/XPosixPu.pl type=file +c:\perl\lib/unicore/lib/Perl/_PerlIDS.pl type=file +c:\perl\lib/unicore/lib/Perl/_PerlNon.pl type=file +c:\perl\lib/unicore/lib/Perl/_PerlQuo.pl type=file +c:\perl\lib/unicore/lib/Perl/_XBegin.pl type=file +c:\perl\lib/unicore/lib/Perl/_XExtend.pl type=file +c:\perl\lib/unicore/lib/Perl/_XLVLVTV.pl type=file +c:\perl\lib/unicore/lib/QMark/Y.pl type=file +c:\perl\lib/unicore/lib/Radical/Y.pl type=file +c:\perl\lib/unicore/lib/SB/AT.pl type=file +c:\perl\lib/unicore/lib/SB/CL.pl type=file +c:\perl\lib/unicore/lib/SB/EX.pl type=file +c:\perl\lib/unicore/lib/SB/FO.pl type=file +c:\perl\lib/unicore/lib/SB/LE.pl type=file +c:\perl\lib/unicore/lib/SB/LO.pl type=file +c:\perl\lib/unicore/lib/SB/SC.pl type=file +c:\perl\lib/unicore/lib/SB/SE.pl type=file +c:\perl\lib/unicore/lib/SB/ST.pl type=file +c:\perl\lib/unicore/lib/SB/Sp.pl type=file +c:\perl\lib/unicore/lib/SB/UP.pl type=file +c:\perl\lib/unicore/lib/SB/XX.pl type=file +c:\perl\lib/unicore/lib/SD/Y.pl type=file +c:\perl\lib/unicore/lib/STerm/Y.pl type=file +c:\perl\lib/unicore/lib/Sc/Arab.pl type=file +c:\perl\lib/unicore/lib/Sc/Armn.pl type=file +c:\perl\lib/unicore/lib/Sc/Beng.pl type=file +c:\perl\lib/unicore/lib/Sc/Bopo.pl type=file +c:\perl\lib/unicore/lib/Sc/Buhd.pl type=file +c:\perl\lib/unicore/lib/Sc/Cprt.pl type=file +c:\perl\lib/unicore/lib/Sc/Deva.pl type=file +c:\perl\lib/unicore/lib/Sc/Geor.pl type=file +c:\perl\lib/unicore/lib/Sc/Gujr.pl type=file +c:\perl\lib/unicore/lib/Sc/Guru.pl type=file +c:\perl\lib/unicore/lib/Sc/Han.pl type=file +c:\perl\lib/unicore/lib/Sc/Hang.pl type=file +c:\perl\lib/unicore/lib/Sc/Hano.pl type=file +c:\perl\lib/unicore/lib/Sc/Hira.pl type=file +c:\perl\lib/unicore/lib/Sc/Kana.pl type=file +c:\perl\lib/unicore/lib/Sc/Kthi.pl type=file +c:\perl\lib/unicore/lib/Sc/Linb.pl type=file +c:\perl\lib/unicore/lib/Sc/Mand.pl type=file +c:\perl\lib/unicore/lib/Sc/Mong.pl type=file +c:\perl\lib/unicore/lib/Sc/Orya.pl type=file +c:\perl\lib/unicore/lib/Sc/Phag.pl type=file +c:\perl\lib/unicore/lib/Sc/Syrc.pl type=file +c:\perl\lib/unicore/lib/Sc/Tagb.pl type=file +c:\perl\lib/unicore/lib/Sc/Takr.pl type=file +c:\perl\lib/unicore/lib/Sc/Tglg.pl type=file +c:\perl\lib/unicore/lib/Sc/Thaa.pl type=file +c:\perl\lib/unicore/lib/Sc/Yi.pl type=file +c:\perl\lib/unicore/lib/Sc/Zinh.pl type=file +c:\perl\lib/unicore/lib/Sc/Zyyy.pl type=file +c:\perl\lib/unicore/lib/Scx/Arab.pl type=file +c:\perl\lib/unicore/lib/Scx/Armi.pl type=file +c:\perl\lib/unicore/lib/Scx/Armn.pl type=file +c:\perl\lib/unicore/lib/Scx/Avst.pl type=file +c:\perl\lib/unicore/lib/Scx/Bali.pl type=file +c:\perl\lib/unicore/lib/Scx/Bamu.pl type=file +c:\perl\lib/unicore/lib/Scx/Batk.pl type=file +c:\perl\lib/unicore/lib/Scx/Beng.pl type=file +c:\perl\lib/unicore/lib/Scx/Bopo.pl type=file +c:\perl\lib/unicore/lib/Scx/Brah.pl type=file +c:\perl\lib/unicore/lib/Scx/Brai.pl type=file +c:\perl\lib/unicore/lib/Scx/Bugi.pl type=file +c:\perl\lib/unicore/lib/Scx/Buhd.pl type=file +c:\perl\lib/unicore/lib/Scx/Cakm.pl type=file +c:\perl\lib/unicore/lib/Scx/Cans.pl type=file +c:\perl\lib/unicore/lib/Scx/Cari.pl type=file +c:\perl\lib/unicore/lib/Scx/Cham.pl type=file +c:\perl\lib/unicore/lib/Scx/Cher.pl type=file +c:\perl\lib/unicore/lib/Scx/Copt.pl type=file +c:\perl\lib/unicore/lib/Scx/Cprt.pl type=file +c:\perl\lib/unicore/lib/Scx/Cyrl.pl type=file +c:\perl\lib/unicore/lib/Scx/Deva.pl type=file +c:\perl\lib/unicore/lib/Scx/Dsrt.pl type=file +c:\perl\lib/unicore/lib/Scx/Egyp.pl type=file +c:\perl\lib/unicore/lib/Scx/Ethi.pl type=file +c:\perl\lib/unicore/lib/Scx/Geor.pl type=file +c:\perl\lib/unicore/lib/Scx/Glag.pl type=file +c:\perl\lib/unicore/lib/Scx/Goth.pl type=file +c:\perl\lib/unicore/lib/Scx/Grek.pl type=file +c:\perl\lib/unicore/lib/Scx/Gujr.pl type=file +c:\perl\lib/unicore/lib/Scx/Guru.pl type=file +c:\perl\lib/unicore/lib/Scx/Han.pl type=file +c:\perl\lib/unicore/lib/Scx/Hang.pl type=file +c:\perl\lib/unicore/lib/Scx/Hano.pl type=file +c:\perl\lib/unicore/lib/Scx/Hebr.pl type=file +c:\perl\lib/unicore/lib/Scx/Hira.pl type=file +c:\perl\lib/unicore/lib/Scx/Ital.pl type=file +c:\perl\lib/unicore/lib/Scx/Java.pl type=file +c:\perl\lib/unicore/lib/Scx/Kali.pl type=file +c:\perl\lib/unicore/lib/Scx/Kana.pl type=file +c:\perl\lib/unicore/lib/Scx/Khar.pl type=file +c:\perl\lib/unicore/lib/Scx/Khmr.pl type=file +c:\perl\lib/unicore/lib/Scx/Knda.pl type=file +c:\perl\lib/unicore/lib/Scx/Kthi.pl type=file +c:\perl\lib/unicore/lib/Scx/Lana.pl type=file +c:\perl\lib/unicore/lib/Scx/Lao.pl type=file +c:\perl\lib/unicore/lib/Scx/Latn.pl type=file +c:\perl\lib/unicore/lib/Scx/Lepc.pl type=file +c:\perl\lib/unicore/lib/Scx/Limb.pl type=file +c:\perl\lib/unicore/lib/Scx/Linb.pl type=file +c:\perl\lib/unicore/lib/Scx/Lisu.pl type=file +c:\perl\lib/unicore/lib/Scx/Lyci.pl type=file +c:\perl\lib/unicore/lib/Scx/Lydi.pl type=file +c:\perl\lib/unicore/lib/Scx/Mand.pl type=file +c:\perl\lib/unicore/lib/Scx/Merc.pl type=file +c:\perl\lib/unicore/lib/Scx/Mero.pl type=file +c:\perl\lib/unicore/lib/Scx/Miao.pl type=file +c:\perl\lib/unicore/lib/Scx/Mlym.pl type=file +c:\perl\lib/unicore/lib/Scx/Mong.pl type=file +c:\perl\lib/unicore/lib/Scx/Mtei.pl type=file +c:\perl\lib/unicore/lib/Scx/Mymr.pl type=file +c:\perl\lib/unicore/lib/Scx/Nko.pl type=file +c:\perl\lib/unicore/lib/Scx/Ogam.pl type=file +c:\perl\lib/unicore/lib/Scx/Olck.pl type=file +c:\perl\lib/unicore/lib/Scx/Orkh.pl type=file +c:\perl\lib/unicore/lib/Scx/Orya.pl type=file +c:\perl\lib/unicore/lib/Scx/Osma.pl type=file +c:\perl\lib/unicore/lib/Scx/Phag.pl type=file +c:\perl\lib/unicore/lib/Scx/Phli.pl type=file +c:\perl\lib/unicore/lib/Scx/Phnx.pl type=file +c:\perl\lib/unicore/lib/Scx/Prti.pl type=file +c:\perl\lib/unicore/lib/Scx/Rjng.pl type=file +c:\perl\lib/unicore/lib/Scx/Runr.pl type=file +c:\perl\lib/unicore/lib/Scx/Samr.pl type=file +c:\perl\lib/unicore/lib/Scx/Sarb.pl type=file +c:\perl\lib/unicore/lib/Scx/Saur.pl type=file +c:\perl\lib/unicore/lib/Scx/Shaw.pl type=file +c:\perl\lib/unicore/lib/Scx/Shrd.pl type=file +c:\perl\lib/unicore/lib/Scx/Sinh.pl type=file +c:\perl\lib/unicore/lib/Scx/Sora.pl type=file +c:\perl\lib/unicore/lib/Scx/Sund.pl type=file +c:\perl\lib/unicore/lib/Scx/Sylo.pl type=file +c:\perl\lib/unicore/lib/Scx/Syrc.pl type=file +c:\perl\lib/unicore/lib/Scx/Tagb.pl type=file +c:\perl\lib/unicore/lib/Scx/Takr.pl type=file +c:\perl\lib/unicore/lib/Scx/Tale.pl type=file +c:\perl\lib/unicore/lib/Scx/Talu.pl type=file +c:\perl\lib/unicore/lib/Scx/Taml.pl type=file +c:\perl\lib/unicore/lib/Scx/Tavt.pl type=file +c:\perl\lib/unicore/lib/Scx/Telu.pl type=file +c:\perl\lib/unicore/lib/Scx/Tfng.pl type=file +c:\perl\lib/unicore/lib/Scx/Tglg.pl type=file +c:\perl\lib/unicore/lib/Scx/Thaa.pl type=file +c:\perl\lib/unicore/lib/Scx/Thai.pl type=file +c:\perl\lib/unicore/lib/Scx/Tibt.pl type=file +c:\perl\lib/unicore/lib/Scx/Ugar.pl type=file +c:\perl\lib/unicore/lib/Scx/Vai.pl type=file +c:\perl\lib/unicore/lib/Scx/Xpeo.pl type=file +c:\perl\lib/unicore/lib/Scx/Xsux.pl type=file +c:\perl\lib/unicore/lib/Scx/Yi.pl type=file +c:\perl\lib/unicore/lib/Scx/Zinh.pl type=file +c:\perl\lib/unicore/lib/Scx/Zyyy.pl type=file +c:\perl\lib/unicore/lib/Scx/Zzzz.pl type=file +c:\perl\lib/unicore/lib/Space/Y.pl type=file +c:\perl\lib/unicore/lib/Term/Y.pl type=file +c:\perl\lib/unicore/lib/UIdeo/Y.pl type=file +c:\perl\lib/unicore/lib/Upper/Y.pl type=file +c:\perl\lib/unicore/lib/VS/Y.pl type=file +c:\perl\lib/unicore/lib/WB/FO.pl type=file +c:\perl\lib/unicore/lib/WB/KA.pl type=file +c:\perl\lib/unicore/lib/WB/LE.pl type=file +c:\perl\lib/unicore/lib/WB/MB.pl type=file +c:\perl\lib/unicore/lib/WB/ML.pl type=file +c:\perl\lib/unicore/lib/WB/MN.pl type=file +c:\perl\lib/unicore/lib/WB/NL.pl type=file +c:\perl\lib/unicore/lib/WB/NU.pl type=file +c:\perl\lib/unicore/lib/WB/XX.pl type=file +c:\perl\lib/unicore/lib/XIDC/Y.pl type=file +c:\perl\lib/unicore/lib/XIDS/Y.pl type=file +c:\perl\lib/unicore/version type=file +c:\perl\lib/utf8.pm type=file +c:\perl\lib/utf8_heavy.pl type=file +c:\perl\lib/vars.pm type=file +c:\perl\lib/version.pm type=file +c:\perl\lib/version.pod type=file +c:\perl\lib/version/Internals.pod type=file +c:\perl\lib/version/Requirements.pm type=file +c:\perl\lib/vmsish.pm type=file +c:\perl\lib/warnings.pm type=file +c:\perl\lib/warnings/register.pm type=file diff --git a/Master/tlpkg/tlperl/lib/AnyDBM_File.pm b/Master/tlpkg/tlperl/lib/AnyDBM_File.pm index d73abab0f9e..4153af2de2d 100644 --- a/Master/tlpkg/tlperl/lib/AnyDBM_File.pm +++ b/Master/tlpkg/tlperl/lib/AnyDBM_File.pm @@ -1,7 +1,9 @@ package AnyDBM_File; +use warnings; +use strict; use 5.006_001; -our $VERSION = '1.00'; +our $VERSION = '1.01'; our @ISA = qw(NDBM_File DB_File GDBM_File SDBM_File ODBM_File) unless @ISA; my $mod; @@ -13,7 +15,8 @@ for $mod (@ISA) { } die "No DBM package was successfully found or installed"; -#return 0; + +__END__ =head1 NAME @@ -39,7 +42,7 @@ can still do so, but new ones can reorder @ISA: Having multiple DBM implementations makes it trivial to copy database formats: - use POSIX; use NDBM_File; use DB_File; + use Fcntl; use NDBM_File; use DB_File; tie %newhash, 'DB_File', $new_filename, O_CREAT|O_RDWR; tie %oldhash, 'NDBM_File', $old_filename, 1, 0; %newhash = %oldhash; diff --git a/Master/tlpkg/tlperl/lib/App/Cpan.pm b/Master/tlpkg/tlperl/lib/App/Cpan.pm index cfc12908e52..0fce3d3ec15 100644 --- a/Master/tlpkg/tlperl/lib/App/Cpan.pm +++ b/Master/tlpkg/tlperl/lib/App/Cpan.pm @@ -19,11 +19,11 @@ App::Cpan - easily interact with CPAN from the command line # use local::lib cpan -l module_name [ module_name ... ] - + # with just the dot, install from the distribution in the # current directory cpan . - + # without arguments, starts CPAN.pm shell cpan @@ -73,7 +73,7 @@ to install a module even if its tests fail. When you use this option, =item -F -Turn off CPAN.pm's attempts to lock anything. You should be careful with +Turn off CPAN.pm's attempts to lock anything. You should be careful with this since you might end up with multiple scripts trying to muck in the same directory. This isn't so much of a concern if you're loading a special config with C<-j>, and that config sets up its own work directories. @@ -105,7 +105,7 @@ Install the specified modules. =item -j Config.pm Load the file that has the CPAN configuration data. This should have the -same format as the standard F file, which defines +same format as the standard F file, which defines C<$CPAN::Config> as an anonymous hash. =item -J @@ -188,27 +188,27 @@ use File::Basename; use Getopt::Std; -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Internal constants use constant TRUE => 1; use constant FALSE => 0; -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # The return values -use constant HEY_IT_WORKED => 0; +use constant HEY_IT_WORKED => 0; use constant I_DONT_KNOW_WHAT_HAPPENED => 1; # 0b0000_0001 use constant ITS_NOT_MY_FAULT => 2; use constant THE_PROGRAMMERS_AN_IDIOT => 4; use constant A_MODULE_FAILED_TO_INSTALL => 8; -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # set up the order of options that we layer over CPAN::Shell BEGIN { # most of this should be in methods use vars qw( @META_OPTIONS $Default %CPAN_METHODS @CPAN_OPTIONS @option_order %Method_table %Method_table_index ); - + @META_OPTIONS = qw( h v g G C A D O l L a r j: J ); $Default = 'default'; @@ -227,7 +227,7 @@ $Default = 'default'; @option_order = ( @META_OPTIONS, @CPAN_OPTIONS ); -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # map switches to the subroutines in this script, along with other information. # use this stuff instead of hard-coded indices and values sub NO_ARGS () { 0 } @@ -249,7 +249,7 @@ sub GOOD_EXIT () { 0 } # options that do their one thing g => [ \&_download, NO_ARGS, GOOD_EXIT, 'Download the latest distro' ], G => [ \&_gitify, NO_ARGS, GOOD_EXIT, 'Down and gitify the latest distro' ], - + C => [ \&_show_Changes, ARGS, GOOD_EXIT, 'Showing Changes file' ], A => [ \&_show_Author, ARGS, GOOD_EXIT, 'Showing Author' ], D => [ \&_show_Details, ARGS, GOOD_EXIT, 'Showing Details' ], @@ -278,7 +278,7 @@ sub GOOD_EXIT () { 0 } ); } -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # finally, do some argument processing sub _stupid_interface_hack_for_non_rtfmers @@ -286,17 +286,17 @@ sub _stupid_interface_hack_for_non_rtfmers no warnings 'uninitialized'; shift @ARGV if( $ARGV[0] eq 'install' and @ARGV > 1 ) } - + sub _process_options { my %options; - + # if no arguments, just drop into the shell if( 0 == @ARGV ) { CPAN::shell(); exit 0 } else { Getopt::Std::getopts( - join( '', @option_order ), \%options ); + join( '', @option_order ), \%options ); \%options; } } @@ -304,7 +304,7 @@ sub _process_options sub _process_setup_options { my( $class, $options ) = @_; - + if( $options->{j} ) { $Method_table{j}[ $Method_table_index{code} ]->( $options->{j} ); @@ -318,7 +318,7 @@ sub _process_setup_options write_file => 0, ); } - + if( $options->{F} ) { $Method_table{F}[ $Method_table_index{code} ]->( $options->{F} ); @@ -328,7 +328,7 @@ sub _process_setup_options my $option_count = grep { $options->{$_} } @option_order; no warnings 'uninitialized'; $option_count -= $options->{'f'}; # don't count force - + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # if there are no options, set -i (this line fixes RT ticket 16915) $options->{i}++ unless $option_count; @@ -339,7 +339,7 @@ sub _process_setup_options Just do it. -The C method returns 0 on success and a postive number on +The C method returns 0 on success and a postive number on failure. See the section on EXIT CODES for details on the values. =cut @@ -367,10 +367,10 @@ sub run $class->_process_setup_options( $options ); OPTION: foreach my $option ( @option_order ) - { + { next unless $options->{$option}; - my( $sub, $takes_args, $description ) = + my( $sub, $takes_args, $description ) = map { $Method_table{$option}[ $Method_table_index{$_} ] } qw( code takes_args ); @@ -382,7 +382,7 @@ sub run $logger->info( "$description -- ignoring other arguments" ) if( @ARGV && ! $takes_args ); - + $return_value = $sub->( \ @ARGV, $options ); last; @@ -402,33 +402,33 @@ sub DESTROY { 1 } sub _init_logger { my $log4perl_loaded = eval "require Log::Log4perl; 1"; - + unless( $log4perl_loaded ) { $logger = Local::Null::Logger->new; return $logger; } - + my $LEVEL = $ENV{CPANSCRIPT_LOGLEVEL} || 'INFO'; - + Log::Log4perl::init( \ <<"HERE" ); log4perl.rootLogger=$LEVEL, A1 log4perl.appender.A1=Log::Log4perl::Appender::Screen log4perl.appender.A1.layout=PatternLayout log4perl.appender.A1.layout.ConversionPattern=%m%n HERE - + $logger = Log::Log4perl->get_logger( 'App::Cpan' ); } - -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # - # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # sub _default { my( $args, $options ) = @_; - + my $switch = ''; # choose the option that we're going to use @@ -458,12 +458,12 @@ sub _default if( $options->{f} ) { sub { CPAN::Shell->force( $method, @_ ) } } else { sub { CPAN::Shell->$method( @_ ) } } }; - + # How do I handle exit codes for multiple arguments? my $errors = 0; - - foreach my $arg ( @$args ) - { + + foreach my $arg ( @$args ) + { _clear_cpanpm_output(); $action->( $arg ); @@ -473,7 +473,7 @@ sub _default $errors ? I_DONT_KNOW_WHAT_HAPPENED : HEY_IT_WORKED; } -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =for comment @@ -488,7 +488,7 @@ my $scalar = ''; sub _hook_into_CPANpm_report { no warnings 'redefine'; - + *CPAN::Shell::myprint = sub { my($self,$what) = @_; $scalar .= $what if defined $what; @@ -500,15 +500,15 @@ sub _hook_into_CPANpm_report *CPAN::Shell::mywarn = sub { my($self,$what) = @_; $scalar .= $what if defined $what; - $self->print_ornamented($what, + $self->print_ornamented($what, $CPAN::Config->{colorize_warn}||'bold red on_white' ); }; } - + sub _clear_cpanpm_output { $scalar = '' } - + sub _get_cpanpm_output { $scalar } BEGIN { @@ -522,9 +522,9 @@ my @skip_lines = ( sub _get_cpanpm_last_line { open my($fh), "<", \ $scalar; - + my @lines = <$fh>; - + # This is a bit ugly. Once we examine a line, we have to # examine the line before it and go through all of the same # regexes. I could do something fancy, but this works. @@ -538,9 +538,9 @@ sub _get_cpanpm_last_line } } } - + $logger->debug( "Last interesting line of CPAN.pm output is:\n\t$lines[-1]" ); - + $lines[-1]; } } @@ -548,28 +548,28 @@ sub _get_cpanpm_last_line BEGIN { my $epic_fail_words = join '|', qw( Error stop(?:ping)? problems force not unsupported fail(?:ed)? ); - + sub _cpanpm_output_indicates_failure { my $last_line = _get_cpanpm_last_line(); - + my $result = $last_line =~ /\b(?:$epic_fail_words)\b/i; $result || (); } } - + sub _cpanpm_output_indicates_success { my $last_line = _get_cpanpm_last_line(); - + my $result = $last_line =~ /\b(?:\s+-- OK|PASS)\b/; $result || (); } - + sub _cpanpm_output_is_vague { - return FALSE if - _cpanpm_output_indicates_failure() || + return FALSE if + _cpanpm_output_indicates_failure() || _cpanpm_output_indicates_success(); return TRUE; @@ -577,24 +577,24 @@ sub _cpanpm_output_is_vague } -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # sub _print_help { $logger->info( "Use perldoc to read the documentation" ); exec "perldoc $0"; } - + sub _print_version { - $logger->info( + $logger->info( "$0 script version $VERSION, CPAN.pm version " . CPAN->VERSION ); return HEY_IT_WORKED; } - + sub _create_autobundle { - $logger->info( + $logger->info( "Creating autobundle in $CPAN::Config->{cpan_home}/Bundle" ); CPAN::Shell->autobundle; @@ -621,24 +621,24 @@ sub _upgrade } sub _load_config # -j - { + { my $file = shift || ''; - + # should I clear out any existing config here? $CPAN::Config = {}; delete $INC{'CPAN/Config.pm'}; croak( "Config file [$file] does not exist!\n" ) unless -e $file; - + my $rc = eval "require '$file'"; # CPAN::HandleConfig::require_myconfig_or_config looks for this $INC{'CPAN/MyConfig.pm'} = 'fake out!'; - + # CPAN::HandleConfig::load looks for this $CPAN::Config_loaded = 'fake out'; - + croak( "Could not load [$file]: $@\n") unless $rc; - + return HEY_IT_WORKED; } @@ -646,60 +646,60 @@ sub _dump_config { my $args = shift; require Data::Dumper; - + my $fh = $args->[0] || \*STDOUT; - - my $dd = Data::Dumper->new( - [$CPAN::Config], - ['$CPAN::Config'] + + my $dd = Data::Dumper->new( + [$CPAN::Config], + ['$CPAN::Config'] ); - + print $fh $dd->Dump, "\n1;\n__END__\n"; - + return HEY_IT_WORKED; } sub _lock_lobotomy { no warnings 'redefine'; - + *CPAN::_flock = sub { 1 }; *CPAN::checklock = sub { 1 }; return HEY_IT_WORKED; } - + sub _download - { + { my $args = shift; - + local $CPAN::DEBUG = 1; - + my %paths; - + foreach my $module ( @$args ) { $logger->info( "Checking $module" ); my $path = CPAN::Shell->expand( "Module", $module )->cpan_file; - + $logger->debug( "Inst file would be $path\n" ); - + $paths{$module} = _get_file( _make_path( $path ) ); } - + return \%paths; } sub _make_path { join "/", qw(authors id), $_[0] } - + sub _get_file { my $path = shift; - + my $loaded = eval "require LWP::Simple; 1;"; croak "You need LWP::Simple to use features that fetch files from CPAN\n" unless $loaded; - + my $file = substr $path, rindex( $path, '/' ) + 1; my $store_path = catfile( cwd(), $file ); $logger->debug( "Store path is $store_path" ); @@ -717,13 +717,13 @@ sub _get_file sub _gitify { my $args = shift; - + my $loaded = eval "require Archive::Extract; 1;"; croak "You need Archive::Extract to use features that gitify distributions\n" unless $loaded; - + my $starting_dir = cwd(); - + foreach my $module ( @$args ) { $logger->info( "Checking $module" ); @@ -731,23 +731,23 @@ sub _gitify my $store_paths = _download( [ $module ] ); $logger->debug( "gitify Store path is $store_paths->{$module}" ); - my $dirname = dirname( $store_paths->{$module} ); - + my $dirname = dirname( $store_paths->{$module} ); + my $ae = Archive::Extract->new( archive => $store_paths->{$module} ); $ae->extract( to => $dirname ); - + chdir $ae->extract_path; - + my $git = $ENV{GIT_COMMAND} || '/usr/local/bin/git'; croak "Could not find $git" unless -e $git; croak "$git is not executable" unless -x $git; - + # can we do this in Pure Perl? system( $git, 'init' ); system( $git, qw( add . ) ); system( $git, qw( commit -a -m ), 'initial import' ); } - + chdir $starting_dir; return HEY_IT_WORKED; @@ -756,42 +756,42 @@ sub _gitify sub _show_Changes { my $args = shift; - + foreach my $arg ( @$args ) { $logger->info( "Checking $arg\n" ); - + my $module = eval { CPAN::Shell->expand( "Module", $arg ) }; my $out = _get_cpanpm_output(); - + next unless eval { $module->inst_file }; #next if $module->uptodate; - + ( my $id = $module->id() ) =~ s/::/\-/; - + my $url = "http://search.cpan.org/~" . lc( $module->userid ) . "/" . $id . "-" . $module->cpan_version() . "/"; - + #print "URL: $url\n"; _get_changes_file($url); } return HEY_IT_WORKED; - } - + } + sub _get_changes_file { croak "Reading Changes files requires LWP::Simple and URI\n" unless eval "require LWP::Simple; require URI; 1"; - + my $url = shift; my $content = LWP::Simple::get( $url ); $logger->info( "Got $url ..." ) if defined $content; #print $content; - + my( $change_link ) = $content =~ m|Changes|gi; - + my $changes_url = URI->new_abs( $change_link, $url ); $logger->debug( "Change link is: $changes_url" ); @@ -801,11 +801,11 @@ sub _get_changes_file return HEY_IT_WORKED; } - + sub _show_Author - { + { my $args = shift; - + foreach my $arg ( @$args ) { my $module = CPAN::Shell->expand( "Module", $arg ); @@ -814,29 +814,29 @@ sub _show_Author $logger->info( "Didn't find a $arg module, so no author!" ); next; } - + my $author = CPAN::Shell->expand( "Author", $module->userid ); - + next unless $module->userid; - - printf "%-25s %-8s %-25s %s\n", + + printf "%-25s %-8s %-25s %s\n", $arg, $module->userid, $author->email, $author->fullname; } return HEY_IT_WORKED; - } + } sub _show_Details { my $args = shift; - + foreach my $arg ( @$args ) { my $module = CPAN::Shell->expand( "Module", $arg ); my $author = CPAN::Shell->expand( "Author", $module->userid ); - + next unless $module->userid; - + print "$arg\n", "-" x 73, "\n\t"; print join "\n\t", $module->description ? $module->description : "(no description)", @@ -848,26 +848,26 @@ sub _show_Details $author->fullname . " (" . $module->userid . ")", $author->email; print "\n\n"; - + } - + return HEY_IT_WORKED; - } + } sub _show_out_of_date { my @modules = CPAN::Shell->expand( "Module", "/./" ); - + printf "%-40s %6s %6s\n", "Module Name", "Local", "CPAN"; print "-" x 73, "\n"; - + foreach my $module ( @modules ) { next unless $module->inst_file; next if $module->uptodate; printf "%-40s %.4f %.4f\n", - $module->id, - $module->inst_version ? $module->inst_version : '', + $module->id, + $module->inst_version ? $module->inst_version : '', $module->cpan_version; } @@ -879,71 +879,71 @@ sub _show_author_mods my $args = shift; my %hash = map { lc $_, 1 } @$args; - + my @modules = CPAN::Shell->expand( "Module", "/./" ); - + foreach my $module ( @modules ) { next unless exists $hash{ lc $module->userid }; print $module->id, "\n"; } - + return HEY_IT_WORKED; } - + sub _list_all_mods { require File::Find; - + my $args = shift; - - + + my $fh = \*STDOUT; - + INC: foreach my $inc ( @INC ) - { + { my( $wanted, $reporter ) = _generator(); File::Find::find( { wanted => $wanted }, $inc ); - + my $count = 0; FILE: foreach my $file ( @{ $reporter->() } ) { my $version = _parse_version_safely( $file ); - + my $module_name = _path_to_module( $inc, $file ); next FILE unless defined $module_name; - + print $fh "$module_name\t$version\n"; - + #last if $count++ > 5; } } return HEY_IT_WORKED; } - + sub _generator - { + { my @files = (); - - sub { push @files, - File::Spec->canonpath( $File::Find::name ) + + sub { push @files, + File::Spec->canonpath( $File::Find::name ) if m/\A\w+\.pm\z/ }, sub { \@files }, } - + sub _parse_version_safely # stolen from PAUSE's mldistwatch, but refactored { my( $file ) = @_; - + local $/ = "\n"; local $_; # don't mess with the $_ in the map calling this - + return unless open FILE, "<$file"; my $in_pod = 0; my $version; - while( ) + while( ) { chomp; $in_pod = /^=(?!cut)/ ? 1 : /^=cut/ ? 0 : $in_pod; @@ -951,22 +951,22 @@ sub _parse_version_safely # stolen from PAUSE's mldistwatch, but refactored next unless /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/; my( $sigil, $var ) = ( $1, $2 ); - + $version = _eval_version( $_, $sigil, $var ); last; } close FILE; return 'undef' unless defined $version; - + return $version; } sub _eval_version { my( $line, $sigil, $var ) = @_; - - my $eval = qq{ + + my $eval = qq{ package ExtUtils::MakeMaker::_version; local $sigil$var; @@ -974,7 +974,7 @@ sub _eval_version $line }; \$$var }; - + my $version = do { local $^W = 0; no strict; @@ -988,16 +988,16 @@ sub _path_to_module { my( $inc, $path ) = @_; return if length $path< length $inc; - + my $module_path = substr( $path, length $inc ); $module_path =~ s/\.pm\z//; - + # XXX: this is cheating and doesn't handle everything right my @dirs = grep { ! /\W/ } File::Spec->splitdir( $module_path ); shift @dirs; - + my $module_name = join "::", @dirs; - + return $module_name; } @@ -1007,7 +1007,7 @@ sub _path_to_module =head1 EXIT VALUES -The script exits with zero if it thinks that everything worked, or a +The script exits with zero if it thinks that everything worked, or a positive number if it thinks that something failed. Note, however, that in some cases it has to divine a failure by the output of things it does not control. For now, the exit codes are vague: diff --git a/Master/tlpkg/tlperl/lib/Archive/Extract.pm b/Master/tlpkg/tlperl/lib/Archive/Extract.pm index a6fa3fb195c..4a0727f6eeb 100644 --- a/Master/tlpkg/tlperl/lib/Archive/Extract.pm +++ b/Master/tlpkg/tlperl/lib/Archive/Extract.pm @@ -16,6 +16,7 @@ use Locale::Maketext::Simple Style => 'gettext'; ### solaris has silly /bin/tar output ### use constant ON_SOLARIS => $^O eq 'solaris' ? 1 : 0; use constant ON_NETBSD => $^O eq 'netbsd' ? 1 : 0; +use constant ON_FREEBSD => $^O eq 'freebsd' ? 1 : 0; use constant FILE_EXISTS => sub { -e $_[0] ? 1 : 0 }; ### VMS may require quoting upper case command options @@ -26,7 +27,7 @@ use constant ON_WIN32 => $^O eq 'MSWin32' ? 1 : 0; ### we can't use this extraction method, because of missing ### modules/binaries: -use constant METHOD_NA => []; +use constant METHOD_NA => []; ### If these are changed, update @TYPES and the new() POD use constant TGZ => 'tgz'; @@ -40,11 +41,11 @@ use constant LZMA => 'lzma'; use constant XZ => 'xz'; use constant TXZ => 'txz'; -use vars qw[$VERSION $PREFER_BIN $PROGRAMS $WARN $DEBUG +use vars qw[$VERSION $PREFER_BIN $PROGRAMS $WARN $DEBUG $_ALLOW_BIN $_ALLOW_PURE_PERL $_ALLOW_TAR_ITER ]; -$VERSION = '0.48'; +$VERSION = '0.58'; $PREFER_BIN = 0; $WARN = 1; $DEBUG = 0; @@ -53,7 +54,7 @@ $_ALLOW_BIN = 1; # allow binary extractors $_ALLOW_TAR_ITER = 1; # try to use Archive::Tar->iter if available # same as all constants -my @Types = ( TGZ, TAR, GZ, ZIP, BZ2, TBZ, Z, LZMA, XZ, TXZ ); +my @Types = ( TGZ, TAR, GZ, ZIP, BZ2, TBZ, Z, LZMA, XZ, TXZ ); local $Params::Check::VERBOSE = $Params::Check::VERBOSE = 1; @@ -113,9 +114,9 @@ Archive::Extract - A generic archive extracting mechanism Archive::Extract is a generic archive extraction mechanism. It allows you to extract any archive file of the type .tar, .tar.gz, -.gz, .Z, tar.bz2, .tbz, .bz2, .zip, .xz,, .txz, .tar.xz or .lzma -without having to worry how it -does so, or use different interfaces for each type by using either +.gz, .Z, tar.bz2, .tbz, .bz2, .zip, .xz,, .txz, .tar.xz or .lzma +without having to worry how it +does so, or use different interfaces for each type by using either perl modules, or commandline tools on your system. See the C section further down for details. @@ -126,10 +127,10 @@ See the C section further down for details. ### see what /bin/programs are available ### $PROGRAMS = {}; for my $pgm (qw[tar unzip gzip bunzip2 uncompress unlzma unxz]) { - if ( $pgm eq 'unzip' and ON_NETBSD ) { + if ( $pgm eq 'unzip' and ( ON_NETBSD or ON_FREEBSD ) ) { local $IPC::Cmd::INSTANCES = 1; my @possibles = can_run($pgm); - ($PROGRAMS->{$pgm}) = grep { m!/usr/pkg/! } can_run($pgm); + ($PROGRAMS->{$pgm}) = grep { ON_NETBSD ? m!/usr/pkg/! : m!/usr/local! } can_run($pgm); next; } $PROGRAMS->{$pgm} = can_run($pgm); @@ -160,7 +161,7 @@ my $Mapping = { # binary program # pure perl module }; ### build accessors ### - for my $method( keys %$tmpl, + for my $method( keys %$tmpl, qw[_extractor _gunzip_to files extract_path], ) { no strict 'refs'; @@ -244,7 +245,7 @@ Returns a C object on success, or false on failure. sub new { my $class = shift; my %hash = @_; - + ### see above why we use subs here and generate the template; ### it's basically to not re-use arrayrefs my %utmpl = map { $_ => $tmpl->{$_}->() } keys %$tmpl; @@ -257,23 +258,23 @@ Returns a C object on success, or false on failure. ### figure out the type, if it wasn't already specified ### unless ( $parsed->{type} ) { $parsed->{type} = - $ar =~ /.+?\.(?:tar\.gz|tgz)$/i ? TGZ : - $ar =~ /.+?\.gz$/i ? GZ : - $ar =~ /.+?\.tar$/i ? TAR : - $ar =~ /.+?\.(zip|jar|par)$/i ? ZIP : - $ar =~ /.+?\.(?:tbz2?|tar\.bz2?)$/i ? TBZ : - $ar =~ /.+?\.bz2$/i ? BZ2 : - $ar =~ /.+?\.Z$/ ? Z : - $ar =~ /.+?\.lzma$/ ? LZMA : - $ar =~ /.+?\.(?:txz|tar\.xz)$/i ? TXZ : - $ar =~ /.+?\.xz$/ ? XZ : + $ar =~ /.+?\.(?:tar\.gz|tgz)$/i ? TGZ : + $ar =~ /.+?\.gz$/i ? GZ : + $ar =~ /.+?\.tar$/i ? TAR : + $ar =~ /.+?\.(zip|jar|ear|war|par)$/i ? ZIP : + $ar =~ /.+?\.(?:tbz2?|tar\.bz2?)$/i ? TBZ : + $ar =~ /.+?\.bz2$/i ? BZ2 : + $ar =~ /.+?\.Z$/ ? Z : + $ar =~ /.+?\.lzma$/ ? LZMA : + $ar =~ /.+?\.(?:txz|tar\.xz)$/i ? TXZ : + $ar =~ /.+?\.xz$/ ? XZ : ''; } bless $parsed, $class; - ### don't know what type of file it is + ### don't know what type of file it is ### XXX this *has* to be an object call, not a package call return $parsed->_error(loc("Cannot determine file type for '%1'", $parsed->{archive} )) unless $parsed->{type}; @@ -287,11 +288,11 @@ Extracts the archive represented by the C object to the path of your choice as specified by the C argument. Defaults to C. -Since C<.gz> files never hold a directory, but only a single file; if -the C argument is an existing directory, the file is extracted -there, with its C<.gz> suffix stripped. -If the C argument is not an existing directory, the C argument -is understood to be a filename, if the archive type is C. +Since C<.gz> files never hold a directory, but only a single file; if +the C argument is an existing directory, the file is extracted +there, with its C<.gz> suffix stripped. +If the C argument is not an existing directory, the C argument +is understood to be a filename, if the archive type is C. In the case that you did not specify a C argument, the output file will be the name of the archive file, stripped from its C<.gz> suffix, in the current working directory. @@ -340,7 +341,7 @@ sub extract { check( $tmpl, \%hash ) or return; - ### so 'to' could be a file or a dir, depending on whether it's a .gz + ### so 'to' could be a file or a dir, depending on whether it's a .gz ### file, or basically anything else. ### so, check that, then act accordingly. ### set an accessor specifically so _gunzip can know what file to extract @@ -348,12 +349,12 @@ sub extract { my $dir; { ### a foo.gz file if( $self->is_gz or $self->is_bz2 or $self->is_Z or $self->is_lzma or $self->is_xz ) { - + my $cp = $self->archive; $cp =~ s/\.(?:gz|bz2?|Z|lzma|xz)$//i; - + ### to is a dir? if ( -d $to ) { - $dir = $to; + $dir = $to; $self->_gunzip_to( basename($cp) ); ### then it's a filename @@ -394,7 +395,7 @@ sub extract { ### ../lib/Archive/Extract.pm line 742. (rt #19815) $self->files( [] ); - ### find out the dispatch methods needed for this type of + ### find out the dispatch methods needed for this type of ### archive. Do a $self->is_XXX to figure out the type, then ### get the hashref with bin + pure perl dispatchers. my ($map) = map { $Mapping->{$_} } grep { $self->$_ } keys %$Mapping; @@ -403,30 +404,30 @@ sub extract { my @methods; push @methods, $map->{'pp'} if $_ALLOW_PURE_PERL; push @methods, $map->{'bin'} if $_ALLOW_BIN; - + ### reverse it if we prefer bin extractors @methods = reverse @methods if $PREFER_BIN; my($na, $fail); for my $method (@methods) { $self->debug( "# Extracting with ->$method\n" ); - + my $rv = $self->$method; - + ### a positive extraction if( $rv and $rv ne METHOD_NA ) { $self->debug( "# Extraction succeeded\n" ); $self->_extractor($method); last; - + ### method is not available - } elsif ( $rv and $rv eq METHOD_NA ) { + } elsif ( $rv and $rv eq METHOD_NA ) { $self->debug( "# Extraction method not available\n" ); - $na++; + $na++; } else { $self->debug( "# Extraction method failed\n" ); $fail++; - } + } } ### warn something went wrong if we didn't get an extractor @@ -434,10 +435,10 @@ sub extract { my $diag = $fail ? loc("Extract failed due to errors") : $na ? loc("Extract failed; no extractors available") : ''; - + $self->_error($diag); $ok = 0; - } + } } ### and chdir back ### @@ -566,7 +567,7 @@ sub bin_gzip { return $PROGRAMS->{'gzip'} if $PROGRAMS->{'gzip'} } sub bin_unzip { return $PROGRAMS->{'unzip'} if $PROGRAMS->{'unzip'} } sub bin_tar { return $PROGRAMS->{'tar'} if $PROGRAMS->{'tar'} } sub bin_bunzip2 { return $PROGRAMS->{'bunzip2'} if $PROGRAMS->{'bunzip2'} } -sub bin_uncompress { return $PROGRAMS->{'uncompress'} +sub bin_uncompress { return $PROGRAMS->{'uncompress'} if $PROGRAMS->{'uncompress'} } sub bin_unlzma { return $PROGRAMS->{'unlzma'} if $PROGRAMS->{'unlzma'} } sub bin_unxz { return $PROGRAMS->{'unxz'} if $PROGRAMS->{'unxz'} } @@ -586,7 +587,7 @@ sub have_old_bunzip2 { ### no bunzip2? no old bunzip2 either :) return unless $self->bin_bunzip2; - ### if we can't run this, we can't be sure if it's too old or not + ### if we can't run this, we can't be sure if it's too old or not ### XXX stupid stupid stupid bunzip2 doesn't understand --version ### is not a request to extract data: ### $ bunzip2 --version @@ -597,7 +598,7 @@ sub have_old_bunzip2 { ### $ echo $? ### 1 ### HATEFUL! - + ### double hateful: bunzip2 --version also hangs if input is a pipe ### See #32370: Archive::Extract will hang if stdin is a pipe [+PATCH] ### So, we have to provide *another* argument which is a fake filename, @@ -605,7 +606,7 @@ sub have_old_bunzip2 { ### *sigh* ### Even if the file exists, it won't clobber or change it. my $buffer; - scalar run( + scalar run( command => [$self->bin_bunzip2, '--version', 'NoSuchFile'], verbose => 0, buffer => \$buffer @@ -613,7 +614,7 @@ sub have_old_bunzip2 { ### no output return unless $buffer; - + my ($version) = $buffer =~ /version \s+ (\d+)/ix; return 1 if $version < 1; @@ -636,73 +637,77 @@ sub have_old_bunzip2 { ### if this is gnu tar we are running, we need to use --force-local push @ExtraTarFlags, '--force-local' if `$cmd --version` =~ /gnu tar/i; - } + } ### use /bin/tar to extract ### sub _untar_bin { my $self = shift; - + ### check for /bin/tar ### ### check for /bin/gzip if we need it ### ### if any of the binaries are not available, return NA - { my $diag = not $self->bin_tar ? + { my $diag = not $self->bin_tar ? loc("No '%1' program found", '/bin/tar') : - $self->is_tgz && !$self->bin_gzip ? + $self->is_tgz && !$self->bin_gzip ? loc("No '%1' program found", '/bin/gzip') : $self->is_tbz && !$self->bin_bunzip2 ? loc("No '%1' program found", '/bin/bunzip2') : $self->is_txz && !$self->bin_unxz ? loc("No '%1' program found", '/bin/unxz') : ''; - + if( $diag ) { $self->_error( $diag ); return METHOD_NA; } - } - + } + ### XXX figure out how to make IPC::Run do this in one call -- ### currently i don't know how to get output of a command after a pipe ### trapped in a scalar. Mailed barries about this 5th of june 2004. - + ### see what command we should run, based on whether ### it's a .tgz or .tar - + + ### GNU tar can't handled VMS filespecs, but VMSTAR can handle Unix filespecs. + my $archive = $self->archive; + $archive = VMS::Filespec::unixify($archive) if ON_VMS; + ### XXX solaris tar and bsdtar are having different outputs ### depending whether you run with -x or -t ### compensate for this insanity by running -t first, then -x - { my $cmd = - $self->is_tgz ? [$self->bin_gzip, '-cdf', $self->archive, '|', + { my $cmd = + $self->is_tgz ? [$self->bin_gzip, '-cdf', $archive, '|', $self->bin_tar, '-tf', '-'] : - $self->is_tbz ? [$self->bin_bunzip2, '-cd', $self->archive, '|', + $self->is_tbz ? [$self->bin_bunzip2, '-cd', $archive, '|', $self->bin_tar, '-tf', '-'] : - $self->is_txz ? [$self->bin_unxz, '-cd', $self->archive, '|', + $self->is_txz ? [$self->bin_unxz, '-cd', $archive, '|', $self->bin_tar, '-tf', '-'] : - [$self->bin_tar, @ExtraTarFlags, '-tf', $self->archive]; - - ### run the command + [$self->bin_tar, @ExtraTarFlags, '-tf', $archive]; + + ### run the command ### newer versions of 'tar' (1.21 and up) now print record size - ### to STDERR as well if v OR t is given (used to be both). This + ### to STDERR as well if v OR t is given (used to be both). This ### is a 'feature' according to the changelog, so we must now only ### inspect STDOUT, otherwise, failures like these occur: - ### nntp.perl.org/group/perl.cpan.testers/2009/02/msg3230366.html + ### http://www.cpantesters.org/cpan/report/3230366 my $buffer = ''; my @out = run( command => $cmd, buffer => \$buffer, verbose => $DEBUG ); - ### command was unsuccessful - unless( $out[0] ) { + ### command was unsuccessful + unless( $out[0] ) { return $self->_error(loc( "Error listing contents of archive '%1': %2", - $self->archive, $buffer )); + $archive, $buffer )); } - + ### no buffers available? if( !IPC::Cmd->can_capture_buffer and !$buffer ) { - $self->_error( $self->_no_buffer_files( $self->archive ) ); - + $self->_error( $self->_no_buffer_files( $archive ) ); + } else { ### if we're on solaris we /might/ be using /bin/tar, which has ### a weird output format... we might also be using @@ -715,46 +720,46 @@ sub have_old_bunzip2 { \s+ [\d,.]+ \s bytes, \s+ [\d,.]+ \s tape \s blocks |x ? $1 : $_); - + ### only STDOUT, see above. Sometimes, extra whitespace ### is present, so make sure we only pick lines with ### a length - } grep { length } map { split $/, $_ } @{$out[3]}; - + } grep { length } map { split $/, $_ } join '', @{$out[3]}; + ### store the files that are in the archive ### $self->files(\@files); } } - + ### now actually extract it ### - { my $cmd = - $self->is_tgz ? [$self->bin_gzip, '-cdf', $self->archive, '|', + { my $cmd = + $self->is_tgz ? [$self->bin_gzip, '-cdf', $archive, '|', $self->bin_tar, '-xf', '-'] : - $self->is_tbz ? [$self->bin_bunzip2, '-cd', $self->archive, '|', + $self->is_tbz ? [$self->bin_bunzip2, '-cd', $archive, '|', $self->bin_tar, '-xf', '-'] : - $self->is_txz ? [$self->bin_unxz, '-cd', $self->archive, '|', + $self->is_txz ? [$self->bin_unxz, '-cd', $archive, '|', $self->bin_tar, '-xf', '-'] : - [$self->bin_tar, @ExtraTarFlags, '-xf', $self->archive]; - + [$self->bin_tar, @ExtraTarFlags, '-xf', $archive]; + my $buffer = ''; unless( scalar run( command => $cmd, buffer => \$buffer, verbose => $DEBUG ) ) { return $self->_error(loc("Error extracting archive '%1': %2", - $self->archive, $buffer )); + $archive, $buffer )); } - + ### we might not have them, due to lack of buffers if( $self->files ) { ### now that we've extracted, figure out where we extracted to my $dir = $self->__get_extract_dir( $self->files ); - + ### store the extraction dir ### $self->extract_path( $dir ); } } - + ### we got here, no error happened return 1; } @@ -773,7 +778,7 @@ sub _untar_at { ### so users don't have to even think about this variable. If they ### do, they still get their set value outside of this call. local $Archive::Tar::WARN = $Archive::Tar::WARN; - + ### we definitely need Archive::Tar, so load that first { my $use_list = { 'Archive::Tar' => '0.0' }; @@ -782,7 +787,7 @@ sub _untar_at { $self->_error(loc("You do not have '%1' installed - " . "Please install it as soon as possible.", 'Archive::Tar')); - + return METHOD_NA; } } @@ -804,7 +809,7 @@ sub _untar_at { "You do not have '%1' installed - Please ". "install it as soon as possible.", $which) ); - + return METHOD_NA; } @@ -813,10 +818,10 @@ sub _untar_at { unless( can_load( modules => $use_list ) ) { $self->_error(loc( "You do not have '%1' installed - Please " . - "install it as soon as possible.", + "install it as soon as possible.", 'IO::Uncompress::Bunzip2') ); - + return METHOD_NA; } @@ -831,10 +836,10 @@ sub _untar_at { unless( can_load( modules => $use_list ) ) { $self->_error(loc( "You do not have '%1' installed - Please " . - "install it as soon as possible.", + "install it as soon as possible.", 'IO::Uncompress::UnXz') ); - + return METHOD_NA; } @@ -865,26 +870,26 @@ sub _untar_at { my $next; unless ( $next = Archive::Tar->iter( @read ) ) { return $self->_error(loc( - "Unable to read '%1': %2", $self->archive, + "Unable to read '%1': %2", $self->archive, $Archive::Tar::error)); } while ( my $file = $next->() ) { push @files, $file->full_path; - + $file->extract or return $self->_error(loc( - "Unable to read '%1': %2", + "Unable to read '%1': %2", $self->archive, $Archive::Tar::error)); } - - ### older version, read the archive into memory + + ### older version, read the archive into memory } else { my $tar = Archive::Tar->new(); unless( $tar->read( @read ) ) { - return $self->_error(loc("Unable to read '%1': %2", + return $self->_error(loc("Unable to read '%1': %2", $self->archive, $Archive::Tar::error)); } @@ -900,7 +905,7 @@ sub _untar_at { { local $^W; # quell 'splice() offset past end of array' warnings # on older versions of A::T - ### older archive::tar always returns $self, return value + ### older archive::tar always returns $self, return value ### slightly fux0r3d because of it. $tar->extract or return $self->_error(loc( "Unable to extract '%1': %2", @@ -1063,7 +1068,7 @@ sub _unzip_bin { unless( $self->bin_unzip ) { $self->_error(loc("No '%1' program found", '/bin/unzip')); return METHOD_NA; - } + } ### first, get the files.. it must be 2 different commands with 'unzip' :( { ### on VMS, capital letter options have to be quoted. This is @@ -1071,7 +1076,7 @@ sub _unzip_bin { ### Subject: [patch@31735]Archive Extract fix on VMS. my $opt = ON_VMS ? '"-Z"' : '-Z'; my $cmd = [ $self->bin_unzip, $opt, '-1', $self->archive ]; - + my $buffer = ''; unless( scalar run( command => $cmd, verbose => $DEBUG, @@ -1086,6 +1091,10 @@ sub _unzip_bin { $self->_error( $self->_no_buffer_files( $self->archive ) ); } else { + ### Annoyingly, pesky MSWin32 can either have 'native' tools + ### which have \r\n line endings or Cygwin-based tools which + ### have \n line endings. Jan Dubois suggested using this fix + local $/ = ON_WIN32 ? qr/\r?\n/ : "\n"; $self->files( [split $/, $buffer] ); } } @@ -1120,7 +1129,7 @@ sub _unzip_az { unless( can_load( modules => $use_list ) ) { $self->_error(loc("You do not have '%1' installed - Please " . "install it as soon as possible.", 'Archive::Zip')); - return METHOD_NA; + return METHOD_NA; } my $zip = Archive::Zip->new(); @@ -1130,8 +1139,8 @@ sub _unzip_az { } my @files; - - + + ### Address: #43278: Explicitly tell Archive::Zip where to put the files: ### "In my BackPAN indexing, Archive::Zip was extracting things ### in my script's directory instead of the current working directory. @@ -1139,21 +1148,21 @@ sub _unzip_az { ### eventually calls File::Spec::Win32::rel2abs which on Windows might ### call Cwd::getdcwd. getdcwd returns the wrong directory in my ### case, even though I think I'm on the same drive. - ### + ### ### To fix this, I pass the optional second argument to ### extractMember using the cwd from Archive::Extract." --bdfoy ## store cwd() before looping; calls to cwd() can be expensive, and ### it won't change during the loop my $extract_dir = cwd(); - + ### have to extract every member individually ### for my $member ($zip->members) { push @files, $member->{fileName}; ### file to extract to, to avoid the above problem my $to = File::Spec->catfile( $extract_dir, $member->{fileName} ); - + unless( $zip->extractMember($member, $to) == &Archive::Zip::AZ_OK ) { return $self->_error(loc("Extraction of '%1' from '%2' failed", $member->{fileName}, $self->archive )); @@ -1185,27 +1194,27 @@ sub __get_extract_dir { ### which was the problem in bug #23999 my $res = -d $files->[$pos] ? File::Spec->catdir( $files->[$pos], '' ) - : File::Spec->catdir( dirname( $files->[$pos] ) ); + : File::Spec->catdir( dirname( $files->[$pos] ) ); $$dir = $res; } - ### if the first and last dir don't match, make sure the + ### if the first and last dir don't match, make sure the ### dirname is not set wrongly my $dir; - + ### dirs are the same, so we know for sure what the extract dir is if( $dir1 eq $dir2 ) { $dir = $dir1; - + ### dirs are different.. do they share the base dir? ### if so, use that, if not, fall back to '.' } else { my $base1 = [ File::Spec->splitdir( $dir1 ) ]->[0]; my $base2 = [ File::Spec->splitdir( $dir2 ) ]->[0]; - - $dir = File::Spec->rel2abs( $base1 eq $base2 ? $base1 : '.' ); - } + + $dir = File::Spec->rel2abs( $base1 eq $base2 ? $base1 : '.' ); + } return File::Spec->rel2abs( $dir ); } @@ -1223,12 +1232,12 @@ sub _bunzip2_bin { unless( $self->bin_bunzip2 ) { $self->_error(loc("No '%1' program found", '/bin/bunzip2')); return METHOD_NA; - } + } my $fh = FileHandle->new('>'. $self->_gunzip_to) or return $self->_error(loc("Could not open '%1' for writing: %2", $self->_gunzip_to, $! )); - + ### guard against broken bunzip2. See ->have_old_bunzip2() ### for details if( $self->have_old_bunzip2 and $self->archive !~ /\.bz2$/i ) { @@ -1252,7 +1261,7 @@ sub _bunzip2_bin { if( !IPC::Cmd->can_capture_buffer and !$buffer ) { $self->_error( $self->_no_buffer_content( $self->archive ) ); } - + $self->_print($fh, $buffer) if defined $buffer; close $fh; @@ -1268,31 +1277,31 @@ sub _bunzip2_bin { ### extractor.. # sub _bunzip2_cz1 { # my $self = shift; -# +# # my $use_list = { 'IO::Uncompress::Bunzip2' => '0.0' }; # unless( can_load( modules => $use_list ) ) { # return $self->_error(loc("You do not have '%1' installed - Please " . # "install it as soon as possible.", # 'IO::Uncompress::Bunzip2')); # } -# +# # my $bz = IO::Uncompress::Bunzip2->new( $self->archive ) or # return $self->_error(loc("Unable to open '%1': %2", # $self->archive, # $IO::Uncompress::Bunzip2::Bunzip2Error)); -# +# # my $fh = FileHandle->new('>'. $self->_gunzip_to) or # return $self->_error(loc("Could not open '%1' for writing: %2", # $self->_gunzip_to, $! )); -# +# # my $buffer; # $fh->print($buffer) while $bz->read($buffer) > 0; # $fh->close; -# +# # ### set what files where extract, and where they went ### # $self->files( [$self->_gunzip_to] ); # $self->extract_path( File::Spec->rel2abs(cwd()) ); -# +# # return 1; # } @@ -1304,7 +1313,7 @@ sub _bunzip2_bz2 { $self->_error(loc("You do not have '%1' installed - Please " . "install it as soon as possible.", 'IO::Uncompress::Bunzip2')); - return METHOD_NA; + return METHOD_NA; } IO::Uncompress::Bunzip2::bunzip2($self->archive => $self->_gunzip_to) @@ -1373,7 +1382,7 @@ sub _unxz_cz { $self->_error(loc("You do not have '%1' installed - Please " . "install it as soon as possible.", 'IO::Uncompress::UnXz')); - return METHOD_NA; + return METHOD_NA; } IO::Uncompress::UnXz::unxz($self->archive => $self->_gunzip_to) @@ -1402,7 +1411,7 @@ sub _unlzma_bin { unless( $self->bin_unlzma ) { $self->_error(loc("No '%1' program found", '/bin/unlzma')); return METHOD_NA; - } + } my $fh = FileHandle->new('>'. $self->_gunzip_to) or return $self->_error(loc("Could not open '%1' for writing: %2", @@ -1467,7 +1476,7 @@ sub _unlzma_cz { else { $self->_error(loc("You do not have '%1' or '%2' installed - Please " . "install it as soon as possible.", 'Compress::unLZMA', 'IO::Uncompress::UnLzma')); - return METHOD_NA; + return METHOD_NA; } ### set what files where extract, and where they went ### @@ -1499,7 +1508,7 @@ sub _error { push @{$self->_error_msg}, $error; push @{$self->_error_msg_long}, $lerror; - + ### set $Archive::Extract::WARN to 0 to disable printing ### of errors if( $WARN ) { @@ -1513,12 +1522,12 @@ sub error { my $self = shift; ### make sure we have a fallback aref - my $aref = do { - shift() - ? $self->_error_msg_long - : $self->_error_msg + my $aref = do { + shift() + ? $self->_error_msg_long + : $self->_error_msg } || []; - + return join $/, @$aref; } @@ -1578,7 +1587,7 @@ C will not be able to extract the archive for you. =head2 Supporting Very Large Files C can use either pure perl modules or command line -programs under the hood. Some of the pure perl modules (like +programs under the hood. Some of the pure perl modules (like C and Compress::unLZMA) take the entire contents of the archive into memory, which may not be feasible on your system. Consider setting the global variable C<$Archive::Extract::PREFER_BIN> to C<1>, which will prefer @@ -1588,7 +1597,7 @@ See the C section below for details. =head2 Bunzip2 support of arbitrary extensions. -Older versions of C do not support arbitrary file +Older versions of C do not support arbitrary file extensions and insist on a C<.bz2> suffix. Although we do our best to guard against this, if you experience a bunzip2 error, it may be related to this. For details, please see the C @@ -1639,7 +1648,7 @@ the type, rather than blindly trust the suffix. =item Thread safety Currently, C does a C to the extraction dir before -extraction, and a C back again after. This is not necessarily +extraction, and a C back again after. This is not necessarily thread safe. See C bug C<#45671> for details. =back @@ -1654,7 +1663,7 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =cut diff --git a/Master/tlpkg/tlperl/lib/Archive/Tar.pm b/Master/tlpkg/tlperl/lib/Archive/Tar.pm index 0a35cf77cc7..4ed3ae0386e 100644 --- a/Master/tlpkg/tlperl/lib/Archive/Tar.pm +++ b/Master/tlpkg/tlperl/lib/Archive/Tar.pm @@ -31,7 +31,7 @@ use vars qw[$DEBUG $error $VERSION $WARN $FOLLOW_SYMLINK $CHOWN $CHMOD $DEBUG = 0; $WARN = 1; $FOLLOW_SYMLINK = 0; -$VERSION = "1.76"; +$VERSION = "1.82"; $CHOWN = 1; $CHMOD = 1; $SAME_PERMISSIONS = $> == 0 ? 1 : 0; @@ -68,6 +68,9 @@ Archive::Tar - module for manipulations of tar archives $tar->add_data('file/baz.txt', 'This is the contents now'); $tar->rename('oldname', 'new/file/name'); + $tar->chown('/', 'root'); + $tar->chown('/', 'root:root'); + $tar->chmod('/tmp', '1777'); $tar->write('files.tar'); # plain tar $tar->write('files.tgz', COMPRESS_GZIP); # gzip compressed @@ -168,6 +171,14 @@ very big archives, and are only interested in the first few files. Can be set to a regular expression. Only files with names that match the expression will be read. +=item md5 + +Set to 1 and the md5sum of files will be returned (instead of file data) + my $iter = Archive::Tar->iter( $file, 1, {md5 => 1} ); + while( my $f = $iter->() ) { + print $f->data . "\t" . $f->full_path . $/; + } + =item extract If set to true, immediately extract entries when reading them. This @@ -306,6 +317,7 @@ sub _read_tar { my $count = $opts->{limit} || 0; my $filter = $opts->{filter}; + my $md5 = $opts->{md5} || 0; # cdrake my $filter_cb = $opts->{filter_cb}; my $extract = $opts->{extract} || 0; @@ -332,7 +344,7 @@ sub _read_tar { $self->_error( qq[Cannot read compressed format in tar-mode] ); return; } - + ### size is < HEAD, which means a corrupted file, as the minimum ### length is _at least_ HEAD if (length $chunk != HEAD) { @@ -399,8 +411,14 @@ sub _read_tar { $data = $entry->get_content_by_ref; my $skip = 0; + my $ctx; # cdrake ### skip this entry if we're filtering - if ($filter && $entry->name !~ $filter) { + + if($md5) { # cdrake + $ctx = Digest::MD5->new; # cdrake + $skip=5; # cdrake + + } elsif ($filter && $entry->name !~ $filter) { $skip = 1; ### skip this entry if it's a pax header. This is a special file added @@ -415,11 +433,12 @@ sub _read_tar { if ($skip) { # # Since we're skipping, do not allocate memory for the - # whole file. Read it 64 BLOCKS at a time. Do not + # whole file. Read it 64 BLOCKS at a time. Do not # complete the skip yet because maybe what we read is a # longlink and it won't get skipped after all # my $amt = $block; + my $fsz=$entry->size; # cdrake while ($amt > 0) { $$data = ''; my $this = 64 * BLOCK; @@ -430,9 +449,11 @@ sub _read_tar { next LOOP; } $amt -= $this; + $fsz -= $this; # cdrake + substr ($$data, $fsz) = "" if ($fsz<0); # remove external junk prior to md5 # cdrake + $ctx->add($$data) if($skip==5); # cdrake } - ### throw away trailing garbage ### - substr ($$data, $entry->size) = "" if defined $$data && $block < 64 * BLOCK; + $$data = $ctx->hexdigest if($skip==5 && !$entry->is_longlink && !$entry->is_unknown && !$entry->is_label ) ; # cdrake } else { ### just read everything into memory @@ -1082,6 +1103,45 @@ sub rename { return $entry->rename( $new ); } +=head2 $tar->chmod( $file, $mode ) + +Change mode of $file to $mode. + +Returns true on success and false on failure. + +=cut + +sub chmod { + my $self = shift; + my $file = shift; return unless defined $file; + my $mode = shift; return unless defined $mode && $mode =~ /^[0-7]{1,4}$/; + my @args = ("$mode"); + + my $entry = $self->_find_entry( $file ) or return; + my $x = $entry->chmod( @args ); + return $x; +} + +=head2 $tar->chown( $file, $uname [, $gname] ) + +Change owner $file to $uname and $gname. + +Returns true on success and false on failure. + +=cut + +sub chown { + my $self = shift; + my $file = shift; return unless defined $file; + my $uname = shift; return unless defined $uname; + my @args = ($uname); + push(@args, shift); + + my $entry = $self->_find_entry( $file ) or return; + my $x = $entry->chown( @args ); + return $x; +} + =head2 $tar->remove (@filenamelist) Removes any entries with names matching any of the given filenames @@ -1645,7 +1705,7 @@ Example usage: sub iter { my $class = shift; my $filename = shift or return; - my $compressed = shift or 0; + my $compressed = shift || 0; my $opts = shift || {}; ### get a handle to read from. @@ -1930,7 +1990,7 @@ doing. =head2 $Archive::Tar::ZERO_PAD_NUMBERS This variable holds a boolean indicating if we will create -zero padded numbers for C, C and C. +zero padded numbers for C, C and C. The default is C<0>, indicating that we will create space padded numbers. Added for compatibility with C implementations. @@ -2114,7 +2174,7 @@ encoded in a different way. =head1 CAVEATS -The AIX tar does not fill all unused space in the tar archive with 0x00. +The AIX tar does not fill all unused space in the tar archive with 0x00. This sometimes leads to warning messages from C. Invalid header block at offset nnn @@ -2126,14 +2186,14 @@ of AIX, all of which should be coming out in the 4th quarter of 2009: AIX 5.3 TL8 SP8 AIX 5.3 TL9 SP5 AIX 5.3 TL10 SP2 - + AIX 6.1 TL0 SP11 AIX 6.1 TL1 SP7 AIX 6.1 TL2 SP6 AIX 6.1 TL3 SP3 -The IBM APAR number for this problem is IZ50240 (Reported component ID: -5765G0300 / AIX 5.3). It is possible to get an ifix for that problem. +The IBM APAR number for this problem is IZ50240 (Reported component ID: +5765G0300 / AIX 5.3). It is possible to get an ifix for that problem. If you need an ifix please contact your local IBM AIX support. =head1 TODO diff --git a/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm b/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm index abeb824a050..1bea5ce12d7 100644 --- a/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm +++ b/Master/tlpkg/tlperl/lib/Archive/Tar/Constant.pm @@ -2,8 +2,8 @@ package Archive::Tar::Constant; BEGIN { require Exporter; - - $VERSION = '1.76'; + + $VERSION = '1.82'; @ISA = qw[Exporter]; require Time::Local if $^O eq "MacOS"; @@ -51,12 +51,12 @@ use constant MODE => do { 0666 & (0777 & ~umask) }; use constant STRIP_MODE => sub { shift() & 0777 }; use constant CHECK_SUM => " "; -use constant UNPACK => 'A100 A8 A8 A8 A12 A12 A8 A1 A100 A6 A2 A32 A32 A8 A8 A155 x12'; +use constant UNPACK => 'A100 A8 A8 A8 a12 A12 A8 A1 A100 A6 A2 A32 A32 A8 A8 A155 x12'; # cdrake - size must be a12 - not A12 - or else screws up huge file sizes (>8gb) use constant PACK => 'a100 a8 a8 a8 a12 a12 A8 a1 a100 a6 a2 a32 a32 a8 a8 a155 x12'; use constant NAME_LENGTH => 100; use constant PREFIX_LENGTH => 155; -use constant TIME_OFFSET => ($^O eq "MacOS") ? Time::Local::timelocal(0,0,0,1,0,70) : 0; +use constant TIME_OFFSET => ($^O eq "MacOS") ? Time::Local::timelocal(0,0,0,1,0,70) : 0; use constant MAGIC => "ustar"; use constant TAR_VERSION => "00"; use constant LONGLINK_NAME => '././@LongLink'; @@ -65,14 +65,14 @@ use constant PAX_HEADER => 'pax_global_header'; ### allow ZLIB to be turned off using ENV: DEBUG only use constant ZLIB => do { !$ENV{'PERL5_AT_NO_ZLIB'} and eval { require IO::Zlib }; - $ENV{'PERL5_AT_NO_ZLIB'} || $@ ? 0 : 1 + $ENV{'PERL5_AT_NO_ZLIB'} || $@ ? 0 : 1 }; - ### allow BZIP to be turned off using ENV: DEBUG only + ### allow BZIP to be turned off using ENV: DEBUG only use constant BZIP => do { !$ENV{'PERL5_AT_NO_BZIP'} and eval { require IO::Uncompress::Bunzip2; require IO::Compress::Bzip2; }; - $ENV{'PERL5_AT_NO_BZIP'} || $@ ? 0 : 1 + $ENV{'PERL5_AT_NO_BZIP'} || $@ ? 0 : 1 }; use constant GZIP_MAGIC_NUM => qr/^(?:\037\213|\037\235)/; @@ -81,6 +81,6 @@ use constant BZIP_MAGIC_NUM => qr/^BZh\d/; use constant CAN_CHOWN => sub { ($> == 0 and $^O ne "MacOS" and $^O ne "MSWin32") }; use constant CAN_READLINK => ($^O ne 'MSWin32' and $^O !~ /RISC(?:[ _])?OS/i and $^O ne 'VMS'); use constant ON_UNIX => ($^O ne 'MSWin32' and $^O ne 'MacOS' and $^O ne 'VMS'); -use constant ON_VMS => $^O eq 'VMS'; +use constant ON_VMS => $^O eq 'VMS'; 1; diff --git a/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm b/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm index 8604ab83247..9067de10863 100644 --- a/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm +++ b/Master/tlpkg/tlperl/lib/Archive/Tar/File.pm @@ -13,26 +13,27 @@ use Archive::Tar::Constant; use vars qw[@ISA $VERSION]; #@ISA = qw[Archive::Tar]; -$VERSION = '1.76'; +$VERSION = '1.82'; ### set value to 1 to oct() it during the unpack ### + my $tmpl = [ - name => 0, # string - mode => 1, # octal - uid => 1, # octal - gid => 1, # octal - size => 1, # octal - mtime => 1, # octal - chksum => 1, # octal - type => 0, # character - linkname => 0, # string - magic => 0, # string - version => 0, # 2 bytes - uname => 0, # string - gname => 0, # string - devmajor => 1, # octal - devminor => 1, # octal - prefix => 0, + name => 0, # string A100 + mode => 1, # octal A8 + uid => 1, # octal A8 + gid => 1, # octal A8 + size => 0, # octal # cdrake - not *always* octal.. A12 + mtime => 1, # octal A12 + chksum => 1, # octal A8 + type => 0, # character A1 + linkname => 0, # string A100 + magic => 0, # string A6 + version => 0, # 2 bytes A2 + uname => 0, # string A32 + gname => 0, # string A32 + devmajor => 1, # octal A8 + devminor => 1, # octal A8 + prefix => 0, # A155 x 12 ### end UNPACK items ### raw => 0, # the raw data chunk @@ -214,8 +215,20 @@ sub _new_from_chunk { ### makes it start at 0 actually... :) ### my $i = -1; my %entry = map { - $tmpl->[++$i] => $tmpl->[++$i] ? oct $_ : $_ - } map { /^([^\0]*)/ } unpack( UNPACK, $chunk ); + my ($s,$v)=($tmpl->[++$i],$tmpl->[++$i]); # cdrake + ($_)=($_=~/^([^\0]*)/) unless($s eq 'size'); # cdrake + $s=> $v ? oct $_ : $_ # cdrake + # $tmpl->[++$i] => $tmpl->[++$i] ? oct $_ : $_ # removed by cdrake - mucks up binary sizes >8gb + } unpack( UNPACK, $chunk ); # cdrake + # } map { /^([^\0]*)/ } unpack( UNPACK, $chunk ); # old - replaced now by cdrake + + + if(substr($entry{'size'}, 0, 1) eq "\x80") { # binary size extension for files >8gigs (> octal 77777777777777) # cdrake + my @sz=unpack("aCSNN",$entry{'size'}); $entry{'size'}=$sz[4]+(2**32)*$sz[3]+$sz[2]*(2**64); # Use the low 80 bits (should use the upper 15 as well, but as at year 2011, that seems unlikley to ever be needed - the numbers are just too big...) # cdrake + } else { # cdrake + ($entry{'size'})=($entry{'size'}=~/^([^\0]*)/); $entry{'size'}=oct $entry{'size'}; # cdrake + } # cdrake + my $obj = bless { %entry, %args }, $class; @@ -236,23 +249,23 @@ sub _new_from_chunk { sub _new_from_file { my $class = shift; - my $path = shift; - + my $path = shift; + ### path has to at least exist return unless defined $path; - + my $type = __PACKAGE__->_filetype($path); my $data = ''; - READ: { + READ: { unless ($type == DIR ) { my $fh = IO::File->new; - + unless( $fh->open($path) ) { ### dangling symlinks are fine, stop reading but continue ### creating the object last READ if $type == SYMLINK; - + ### otherwise, return from this function -- ### anything that's *not* a symlink should be ### resolvable @@ -405,7 +418,7 @@ sub _prefix_and_file { sub _filetype { my $self = shift; my $file = shift; - + return unless defined $file; return SYMLINK if (-l $file); # Symlink @@ -442,7 +455,7 @@ sub _downgrade_to_plainfile { =head2 $bool = $file->extract( [ $alternative_name ] ) -Extract this object, optionally to an alternative name. +Extract this object, optionally to an alternative name. See C<< Archive::Tar->extract_file >> for details. @@ -452,9 +465,9 @@ Returns true on success and false on failure. sub extract { my $self = shift; - + local $Carp::CarpLevel += 1; - + return Archive::Tar->_extract_file( $self, @_ ); } @@ -576,7 +589,7 @@ Returns true on success and false on failure. sub rename { my $self = shift; my $path = shift; - + return unless defined $path; my ($prefix,$file) = $self->_prefix_and_file( $path ); @@ -587,6 +600,48 @@ sub rename { return 1; } +=head2 $bool = $file->chmod $mode) + +Change mode of $file to $mode. The mode can be a string or a number +which is interpreted as octal whether or not a leading 0 is given. + +Returns true on success and false on failure. + +=cut + +sub chmod { + my $self = shift; + my $mode = shift; return unless defined $mode && $mode =~ /^[0-7]{1,4}$/; + $self->{mode} = oct($mode); + return 1; +} + +=head2 $bool = $file->chown( $user [, $group]) + +Change owner of $file to $user. If a $group is given that is changed +as well. You can also pass a single parameter with a colon separating the +use and group as in 'root:wheel'. + +Returns true on success and false on failure. + +=cut + +sub chown { + my $self = shift; + my $uname = shift; + return unless defined $uname; + my $gname; + if (-1 != index($uname, ':')) { + ($uname, $gname) = split(/:/, $uname); + } else { + $gname = shift if @_ > 0; + } + + $self->uname( $uname ); + $self->gname( $gname ) if $gname; + return 1; +} + =head1 Convenience methods To quickly check the type of a C object, you can diff --git a/Master/tlpkg/tlperl/lib/Attribute/Handlers.pm b/Master/tlpkg/tlperl/lib/Attribute/Handlers.pm index b0cb8e21af6..36f6e2e81c9 100644 --- a/Master/tlpkg/tlperl/lib/Attribute/Handlers.pm +++ b/Master/tlpkg/tlperl/lib/Attribute/Handlers.pm @@ -4,7 +4,7 @@ use Carp; use warnings; use strict; use vars qw($VERSION $AUTOLOAD); -$VERSION = '0.89'; # remember to update version in POD! +$VERSION = '0.93'; # remember to update version in POD! # $DB::single=1; my %symcache; @@ -266,68 +266,68 @@ Attribute::Handlers - Simpler definition of attribute handlers =head1 VERSION -This document describes version 0.89 of Attribute::Handlers, -released April 5, 2010. +This document describes version 0.93 of Attribute::Handlers, +released July 20, 2011. =head1 SYNOPSIS - package MyClass; - require 5.006; - use Attribute::Handlers; - no warnings 'redefine'; + package MyClass; + require 5.006; + use Attribute::Handlers; + no warnings 'redefine'; - sub Good : ATTR(SCALAR) { - my ($package, $symbol, $referent, $attr, $data) = @_; + sub Good : ATTR(SCALAR) { + my ($package, $symbol, $referent, $attr, $data) = @_; - # Invoked for any scalar variable with a :Good attribute, - # provided the variable was declared in MyClass (or - # a derived class) or typed to MyClass. + # Invoked for any scalar variable with a :Good attribute, + # provided the variable was declared in MyClass (or + # a derived class) or typed to MyClass. - # Do whatever to $referent here (executed in CHECK phase). - ... - } + # Do whatever to $referent here (executed in CHECK phase). + ... + } - sub Bad : ATTR(SCALAR) { - # Invoked for any scalar variable with a :Bad attribute, - # provided the variable was declared in MyClass (or - # a derived class) or typed to MyClass. - ... - } + sub Bad : ATTR(SCALAR) { + # Invoked for any scalar variable with a :Bad attribute, + # provided the variable was declared in MyClass (or + # a derived class) or typed to MyClass. + ... + } - sub Good : ATTR(ARRAY) { - # Invoked for any array variable with a :Good attribute, - # provided the variable was declared in MyClass (or - # a derived class) or typed to MyClass. - ... - } + sub Good : ATTR(ARRAY) { + # Invoked for any array variable with a :Good attribute, + # provided the variable was declared in MyClass (or + # a derived class) or typed to MyClass. + ... + } - sub Good : ATTR(HASH) { - # Invoked for any hash variable with a :Good attribute, - # provided the variable was declared in MyClass (or - # a derived class) or typed to MyClass. - ... - } + sub Good : ATTR(HASH) { + # Invoked for any hash variable with a :Good attribute, + # provided the variable was declared in MyClass (or + # a derived class) or typed to MyClass. + ... + } - sub Ugly : ATTR(CODE) { - # Invoked for any subroutine declared in MyClass (or a - # derived class) with an :Ugly attribute. - ... - } + sub Ugly : ATTR(CODE) { + # Invoked for any subroutine declared in MyClass (or a + # derived class) with an :Ugly attribute. + ... + } - sub Omni : ATTR { - # Invoked for any scalar, array, hash, or subroutine - # with an :Omni attribute, provided the variable or - # subroutine was declared in MyClass (or a derived class) - # or the variable was typed to MyClass. - # Use ref($_[2]) to determine what kind of referent it was. - ... - } + sub Omni : ATTR { + # Invoked for any scalar, array, hash, or subroutine + # with an :Omni attribute, provided the variable or + # subroutine was declared in MyClass (or a derived class) + # or the variable was typed to MyClass. + # Use ref($_[2]) to determine what kind of referent it was. + ... + } - use Attribute::Handlers autotie => { Cycle => Tie::Cycle }; + use Attribute::Handlers autotie => { Cycle => Tie::Cycle }; - my $next : Cycle(['A'..'Z']); + my $next : Cycle(['A'..'Z']); =head1 DESCRIPTION @@ -349,7 +349,8 @@ attribute C<:ATTR>. For example: use Attribute::Handlers; sub Loud :ATTR { - my ($package, $symbol, $referent, $attr, $data, $phase, $filename, $linenum) = @_; + my ($package, $symbol, $referent, $attr, $data, $phase, + $filename, $linenum) = @_; print STDERR ref($referent), " ", *{$symbol}{NAME}, " ", @@ -364,9 +365,9 @@ This creates a handler for the attribute C<:Loud> in the class LoudDecl. Thereafter, any subroutine declared with a C<:Loud> attribute in the class LoudDecl: - package LoudDecl; - - sub foo: Loud {...} + package LoudDecl; + + sub foo: Loud {...} causes the above handler to be invoked, and passed: @@ -409,11 +410,11 @@ the line number in this file. Likewise, declaring any variables with the C<:Loud> attribute within the package: - package LoudDecl; + package LoudDecl; - my $foo :Loud; - my @foo :Loud; - my %foo :Loud; + my $foo :Loud; + my @foo :Loud; + my %foo :Loud; will cause the handler to be called with a similar argument list (except, of course, that C<$_[2]> will be a reference to the variable). @@ -436,7 +437,7 @@ then a reference to an array containing the string C<"turn it up to 11, man!"> would be passed as the last argument. Attribute::Handlers makes strenuous efforts to convert -the data argument (C<$_[4]>) to a useable form before passing it to +the data argument (C<$_[4]>) to a usable form before passing it to the handler (but see L<"Non-interpretive attribute handlers">). If those efforts succeed, the interpreted data is passed in an array reference; if they fail, the raw data is passed as a string. @@ -444,7 +445,7 @@ For example, all of these: sub foo :Loud(till=>ears=>are=>bleeding) {...} sub foo :Loud(qw/till ears are bleeding/) {...} - sub foo :Loud(qw/my, ears, are, bleeding/) {...} + sub foo :Loud(qw/till, ears, are, bleeding/) {...} sub foo :Loud(till,ears,are,bleeding) {...} causes it to pass C<['till','ears','are','bleeding']> as the handler's @@ -474,11 +475,11 @@ Regardless of the package in which it is declared, if a lexical variable is ascribed an attribute, the handler that is invoked is the one belonging to the package to which it is typed. For example, the following declarations: - package OtherClass; + package OtherClass; - my LoudDecl $loudobj : Loud; - my LoudDecl @loudobjs : Loud; - my LoudDecl %loudobjex : Loud; + my LoudDecl $loudobj : Loud; + my LoudDecl @loudobjs : Loud; + my LoudDecl %loudobjex : Loud; causes the LoudDecl::Loud handler to be invoked (even if OtherClass also defines a handler for C<:Loud> attributes). @@ -491,40 +492,40 @@ given the name of a built-in type (C, C, C, or C), the handler is only applied to declarations of that type. For example, the following definition: - package LoudDecl; + package LoudDecl; - sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" } + sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" } creates an attribute handler that applies only to scalars: - package Painful; - use base LoudDecl; + package Painful; + use base LoudDecl; - my $metal : RealLoud; # invokes &LoudDecl::RealLoud - my @metal : RealLoud; # error: unknown attribute - my %metal : RealLoud; # error: unknown attribute - sub metal : RealLoud {...} # error: unknown attribute + my $metal : RealLoud; # invokes &LoudDecl::RealLoud + my @metal : RealLoud; # error: unknown attribute + my %metal : RealLoud; # error: unknown attribute + sub metal : RealLoud {...} # error: unknown attribute You can, of course, declare separate handlers for these types as well (but you'll need to specify C to do it quietly): - package LoudDecl; - use Attribute::Handlers; - no warnings 'redefine'; + package LoudDecl; + use Attribute::Handlers; + no warnings 'redefine'; - sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" } - sub RealLoud :ATTR(ARRAY) { print "Urrrrrrrrrr!" } - sub RealLoud :ATTR(HASH) { print "Arrrrrgggghhhhhh!" } - sub RealLoud :ATTR(CODE) { croak "Real loud sub torpedoed" } + sub RealLoud :ATTR(SCALAR) { print "Yeeeeow!" } + sub RealLoud :ATTR(ARRAY) { print "Urrrrrrrrrr!" } + sub RealLoud :ATTR(HASH) { print "Arrrrrgggghhhhhh!" } + sub RealLoud :ATTR(CODE) { croak "Real loud sub torpedoed" } You can also explicitly indicate that a single handler is meant to be used for all types of referents like so: - package LoudDecl; - use Attribute::Handlers; + package LoudDecl; + use Attribute::Handlers; - sub SeriousLoud :ATTR(ANY) { warn "Hearing loss imminent" } + sub SeriousLoud :ATTR(ANY) { warn "Hearing loss imminent" } (I.e. C is a synonym for C<:ATTR>). @@ -532,20 +533,20 @@ used for all types of referents like so: =head2 Non-interpretive attribute handlers Occasionally the strenuous efforts Attribute::Handlers makes to convert -the data argument (C<$_[4]>) to a useable form before passing it to +the data argument (C<$_[4]>) to a usable form before passing it to the handler get in the way. You can turn off that eagerness-to-help by declaring an attribute handler with the keyword C. For example: - sub Raw : ATTR(RAWDATA) {...} - sub Nekkid : ATTR(SCALAR,RAWDATA) {...} - sub Au::Naturale : ATTR(RAWDATA,ANY) {...} + sub Raw : ATTR(RAWDATA) {...} + sub Nekkid : ATTR(SCALAR,RAWDATA) {...} + sub Au::Naturale : ATTR(RAWDATA,ANY) {...} Then the handler makes absolutely no attempt to interpret the data it receives and simply passes it as a string: - my $power : Raw(1..100); # handlers receives "1..100" + my $power : Raw(1..100); # handlers receives "1..100" =head2 Phase-specific attribute handlers @@ -559,11 +560,11 @@ other points in the program's compilation or execution, by explicitly stating the phase (or phases) in which you wish the attribute handler to be called. For example: - sub Early :ATTR(SCALAR,BEGIN) {...} - sub Normal :ATTR(SCALAR,CHECK) {...} - sub Late :ATTR(SCALAR,INIT) {...} - sub Final :ATTR(SCALAR,END) {...} - sub Bookends :ATTR(SCALAR,BEGIN,END) {...} + sub Early :ATTR(SCALAR,BEGIN) {...} + sub Normal :ATTR(SCALAR,CHECK) {...} + sub Late :ATTR(SCALAR,INIT) {...} + sub Final :ATTR(SCALAR,END) {...} + sub Bookends :ATTR(SCALAR,BEGIN,END) {...} As the last example indicates, a handler may be set up to be (re)called in two or more phases. The phase name is passed as the handler's final argument. @@ -578,24 +579,24 @@ subsequently defined C blocks are executed). Attributes make an excellent and intuitive interface through which to tie variables. For example: - use Attribute::Handlers; - use Tie::Cycle; - - sub UNIVERSAL::Cycle : ATTR(SCALAR) { - my ($package, $symbol, $referent, $attr, $data, $phase) = @_; - $data = [ $data ] unless ref $data eq 'ARRAY'; - tie $$referent, 'Tie::Cycle', $data; - } - - # and thereafter... - - package main; + use Attribute::Handlers; + use Tie::Cycle; + + sub UNIVERSAL::Cycle : ATTR(SCALAR) { + my ($package, $symbol, $referent, $attr, $data, $phase) = @_; + $data = [ $data ] unless ref $data eq 'ARRAY'; + tie $$referent, 'Tie::Cycle', $data; + } - my $next : Cycle('A'..'Z'); # $next is now a tied variable + # and thereafter... - while (<>) { - print $next; - } + package main; + + my $next : Cycle('A'..'Z'); # $next is now a tied variable + + while (<>) { + print $next; + } Note that, because the C attribute receives its arguments in the C<$data> variable, if the attribute is given a list of arguments, C<$data> @@ -604,16 +605,16 @@ single argument directly. Since Tie::Cycle requires its cycling values to be passed as an array reference, this means that we need to wrap non-array-reference arguments in an array constructor: - $data = [ $data ] unless ref $data eq 'ARRAY'; + $data = [ $data ] unless ref $data eq 'ARRAY'; Typically, however, things are the other way around: the tieable class expects its arguments as a flattened list, so the attribute looks like: - sub UNIVERSAL::Cycle : ATTR(SCALAR) { - my ($package, $symbol, $referent, $attr, $data, $phase) = @_; - my @data = ref $data eq 'ARRAY' ? @$data : $data; - tie $$referent, 'Tie::Whatever', @data; - } + sub UNIVERSAL::Cycle : ATTR(SCALAR) { + my ($package, $symbol, $referent, $attr, $data, $phase) = @_; + my @data = ref $data eq 'ARRAY' ? @$data : $data; + tie $$referent, 'Tie::Whatever', @data; + } This software pattern is so widely applicable that Attribute::Handlers @@ -621,16 +622,17 @@ provides a way to automate it: specifying C<'autotie'> in the C statement. So, the cycling example, could also be written: - use Attribute::Handlers autotie => { Cycle => 'Tie::Cycle' }; + use Attribute::Handlers autotie => { Cycle => 'Tie::Cycle' }; - # and thereafter... + # and thereafter... - package main; + package main; - my $next : Cycle(['A'..'Z']); # $next is now a tied variable + my $next : Cycle(['A'..'Z']); # $next is now a tied variable - while (<>) { - print $next; + while (<>) { + print $next; + } Note that we now have to pass the cycling values as an array reference, since the C mechanism passes C a list of arguments as a list @@ -646,28 +648,29 @@ Attribute::Handlers takes care of that automagically. You can even pass arguments to the module's C subroutine, by appending them to the class name. For example: - use Attribute::Handlers - autotie => { Dir => 'Tie::Dir qw(DIR_UNLINK)' }; + use Attribute::Handlers + autotie => { Dir => 'Tie::Dir qw(DIR_UNLINK)' }; If the attribute name is unqualified, the attribute is installed in the current package. Otherwise it is installed in the qualifier's package: - package Here; - - use Attribute::Handlers autotie => { - Other::Good => Tie::SecureHash, # tie attr installed in Other:: - Bad => Tie::Taxes, # tie attr installed in Here:: - UNIVERSAL::Ugly => Software::Patent # tie attr installed everywhere - }; + package Here; + + use Attribute::Handlers autotie => { + Other::Good => Tie::SecureHash, # tie attr installed in Other:: + Bad => Tie::Taxes, # tie attr installed in Here:: + UNIVERSAL::Ugly => Software::Patent # tie attr installed everywhere + }; Autoties are most commonly used in the module to which they actually tie, and need to export their attributes to any module that calls them. To facilitate this, Attribute::Handlers recognizes a special "pseudo-class" -- C<__CALLER__>, which may be specified as the qualifier of an attribute: - package Tie::Me::Kangaroo:Down::Sport; - - use Attribute::Handlers autotie => { '__CALLER__::Roo' => __PACKAGE__ }; + package Tie::Me::Kangaroo:Down::Sport; + + use Attribute::Handlers autotie => + { '__CALLER__::Roo' => __PACKAGE__ }; This causes Attribute::Handlers to define the C attribute in the package that imports the Tie::Me::Kangaroo:Down::Sport module. @@ -682,166 +685,166 @@ to the TIESCALAR, TIEHASH, etc. that ties it. The C mechanism supports this too. The following code: - use Attribute::Handlers autotieref => { Selfish => Tie::Selfish }; - my $var : Selfish(@args); + use Attribute::Handlers autotieref => { Selfish => Tie::Selfish }; + my $var : Selfish(@args); has the same effect as: - tie my $var, 'Tie::Selfish', @args; + tie my $var, 'Tie::Selfish', @args; But when C<"autotieref"> is used instead of C<"autotie">: - use Attribute::Handlers autotieref => { Selfish => Tie::Selfish }; - my $var : Selfish(@args); + use Attribute::Handlers autotieref => { Selfish => Tie::Selfish }; + my $var : Selfish(@args); the effect is to pass the C call an extra reference to the variable being tied: - tie my $var, 'Tie::Selfish', \$var, @args; + tie my $var, 'Tie::Selfish', \$var, @args; =head1 EXAMPLES -If the class shown in L were placed in the MyClass.pm +If the class shown in L were placed in the MyClass.pm module, then the following code: - package main; - use MyClass; + package main; + use MyClass; - my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous); + my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous); - package SomeOtherClass; - use base MyClass; + package SomeOtherClass; + use base MyClass; - sub tent { 'acle' } + sub tent { 'acle' } - sub fn :Ugly(sister) :Omni('po',tent()) {...} - my @arr :Good :Omni(s/cie/nt/); - my %hsh :Good(q/bye/) :Omni(q/bus/); + sub fn :Ugly(sister) :Omni('po',tent()) {...} + my @arr :Good :Omni(s/cie/nt/); + my %hsh :Good(q/bye/) :Omni(q/bus/); would cause the following handlers to be invoked: - # my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous); - - MyClass::Good:ATTR(SCALAR)( 'MyClass', # class - 'LEXICAL', # no typeglob - \$slr, # referent - 'Good', # attr name - undef # no attr data - 'CHECK', # compiler phase - ); - - MyClass::Bad:ATTR(SCALAR)( 'MyClass', # class - 'LEXICAL', # no typeglob - \$slr, # referent - 'Bad', # attr name - 0 # eval'd attr data - 'CHECK', # compiler phase - ); - - MyClass::Omni:ATTR(SCALAR)( 'MyClass', # class - 'LEXICAL', # no typeglob - \$slr, # referent - 'Omni', # attr name - '-vorous' # eval'd attr data - 'CHECK', # compiler phase - ); - - - # sub fn :Ugly(sister) :Omni('po',tent()) {...} - - MyClass::UGLY:ATTR(CODE)( 'SomeOtherClass', # class - \*SomeOtherClass::fn, # typeglob - \&SomeOtherClass::fn, # referent - 'Ugly', # attr name - 'sister' # eval'd attr data - 'CHECK', # compiler phase - ); - - MyClass::Omni:ATTR(CODE)( 'SomeOtherClass', # class - \*SomeOtherClass::fn, # typeglob - \&SomeOtherClass::fn, # referent - 'Omni', # attr name - ['po','acle'] # eval'd attr data - 'CHECK', # compiler phase - ); - - - # my @arr :Good :Omni(s/cie/nt/); - - MyClass::Good:ATTR(ARRAY)( 'SomeOtherClass', # class - 'LEXICAL', # no typeglob - \@arr, # referent - 'Good', # attr name - undef # no attr data - 'CHECK', # compiler phase - ); - - MyClass::Omni:ATTR(ARRAY)( 'SomeOtherClass', # class - 'LEXICAL', # no typeglob - \@arr, # referent - 'Omni', # attr name - "" # eval'd attr data - 'CHECK', # compiler phase - ); - - - # my %hsh :Good(q/bye) :Omni(q/bus/); - - MyClass::Good:ATTR(HASH)( 'SomeOtherClass', # class - 'LEXICAL', # no typeglob - \%hsh, # referent - 'Good', # attr name - 'q/bye' # raw attr data - 'CHECK', # compiler phase - ); - - MyClass::Omni:ATTR(HASH)( 'SomeOtherClass', # class - 'LEXICAL', # no typeglob - \%hsh, # referent - 'Omni', # attr name - 'bus' # eval'd attr data - 'CHECK', # compiler phase - ); + # my MyClass $slr :Good :Bad(1**1-1) :Omni(-vorous); + + MyClass::Good:ATTR(SCALAR)( 'MyClass', # class + 'LEXICAL', # no typeglob + \$slr, # referent + 'Good', # attr name + undef # no attr data + 'CHECK', # compiler phase + ); + + MyClass::Bad:ATTR(SCALAR)( 'MyClass', # class + 'LEXICAL', # no typeglob + \$slr, # referent + 'Bad', # attr name + 0 # eval'd attr data + 'CHECK', # compiler phase + ); + + MyClass::Omni:ATTR(SCALAR)( 'MyClass', # class + 'LEXICAL', # no typeglob + \$slr, # referent + 'Omni', # attr name + '-vorous' # eval'd attr data + 'CHECK', # compiler phase + ); + + + # sub fn :Ugly(sister) :Omni('po',tent()) {...} + + MyClass::UGLY:ATTR(CODE)( 'SomeOtherClass', # class + \*SomeOtherClass::fn, # typeglob + \&SomeOtherClass::fn, # referent + 'Ugly', # attr name + 'sister' # eval'd attr data + 'CHECK', # compiler phase + ); + + MyClass::Omni:ATTR(CODE)( 'SomeOtherClass', # class + \*SomeOtherClass::fn, # typeglob + \&SomeOtherClass::fn, # referent + 'Omni', # attr name + ['po','acle'] # eval'd attr data + 'CHECK', # compiler phase + ); + + + # my @arr :Good :Omni(s/cie/nt/); + + MyClass::Good:ATTR(ARRAY)( 'SomeOtherClass', # class + 'LEXICAL', # no typeglob + \@arr, # referent + 'Good', # attr name + undef # no attr data + 'CHECK', # compiler phase + ); + + MyClass::Omni:ATTR(ARRAY)( 'SomeOtherClass', # class + 'LEXICAL', # no typeglob + \@arr, # referent + 'Omni', # attr name + "" # eval'd attr data + 'CHECK', # compiler phase + ); + + + # my %hsh :Good(q/bye) :Omni(q/bus/); + + MyClass::Good:ATTR(HASH)( 'SomeOtherClass', # class + 'LEXICAL', # no typeglob + \%hsh, # referent + 'Good', # attr name + 'q/bye' # raw attr data + 'CHECK', # compiler phase + ); + + MyClass::Omni:ATTR(HASH)( 'SomeOtherClass', # class + 'LEXICAL', # no typeglob + \%hsh, # referent + 'Omni', # attr name + 'bus' # eval'd attr data + 'CHECK', # compiler phase + ); Installing handlers into UNIVERSAL, makes them...err..universal. For example: - package Descriptions; - use Attribute::Handlers; + package Descriptions; + use Attribute::Handlers; - my %name; - sub name { return $name{$_[2]}||*{$_[1]}{NAME} } + my %name; + sub name { return $name{$_[2]}||*{$_[1]}{NAME} } - sub UNIVERSAL::Name :ATTR { - $name{$_[2]} = $_[4]; - } + sub UNIVERSAL::Name :ATTR { + $name{$_[2]} = $_[4]; + } - sub UNIVERSAL::Purpose :ATTR { - print STDERR "Purpose of ", &name, " is $_[4]\n"; - } + sub UNIVERSAL::Purpose :ATTR { + print STDERR "Purpose of ", &name, " is $_[4]\n"; + } - sub UNIVERSAL::Unit :ATTR { - print STDERR &name, " measured in $_[4]\n"; - } + sub UNIVERSAL::Unit :ATTR { + print STDERR &name, " measured in $_[4]\n"; + } Let's you write: - use Descriptions; + use Descriptions; - my $capacity : Name(capacity) - : Purpose(to store max storage capacity for files) - : Unit(Gb); + my $capacity : Name(capacity) + : Purpose(to store max storage capacity for files) + : Unit(Gb); - package Other; + package Other; - sub foo : Purpose(to foo all data before barring it) { } + sub foo : Purpose(to foo all data before barring it) { } - # etc. + # etc. =head1 UTILITY FUNCTIONS @@ -851,7 +854,7 @@ This module offers a single utility function, C. =item findsym - my $symbol = Attribute::Handlers::findsym($package, $referent); + my $symbol = Attribute::Handlers::findsym($package, $referent); The function looks in the symbol table of C<$package> for the typeglob for C<$referent>, which is a reference to a variable or subroutine (SCALAR, ARRAY, diff --git a/Master/tlpkg/tlperl/lib/AutoLoader.pm b/Master/tlpkg/tlperl/lib/AutoLoader.pm index d7c99514202..8dab836ab30 100644 --- a/Master/tlpkg/tlperl/lib/AutoLoader.pm +++ b/Master/tlpkg/tlperl/lib/AutoLoader.pm @@ -15,7 +15,7 @@ BEGIN { $is_epoc = $^O eq 'epoc'; $is_vms = $^O eq 'VMS'; $is_macos = $^O eq 'MacOS'; - $VERSION = '5.71'; + $VERSION = '5.72'; } AUTOLOAD { @@ -376,7 +376,7 @@ can benefit from bug fixes. This package has the same copyright and license as the perl core: Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011 by Larry Wall and others All rights reserved. @@ -400,8 +400,8 @@ This package has the same copyright and license as the perl core: You should also have received a copy of the GNU General Public License along with this program in the file named "Copying". If not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307, USA or visit their web page on the internet at + Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + MA 02110-1301, USA or visit their web page on the internet at http://www.gnu.org/copyleft/gpl.html. For those of you that choose to use the GNU General Public License, diff --git a/Master/tlpkg/tlperl/lib/B.pm b/Master/tlpkg/tlperl/lib/B.pm index 063eb401ae5..75ead53a15f 100644 --- a/Master/tlpkg/tlperl/lib/B.pm +++ b/Master/tlpkg/tlperl/lib/B.pm @@ -15,7 +15,7 @@ require Exporter; # walkoptree comes from B.xs BEGIN { - $B::VERSION = '1.29'; + $B::VERSION = '1.35'; @B::EXPORT_OK = (); # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK. @@ -347,11 +347,11 @@ B - The Perl Compiler Backend =head1 DESCRIPTION The C module supplies classes which allow a Perl program to delve -into its own innards. It is the module used to implement the -"backends" of the Perl compiler. Usage of the compiler does not +into its own innards. It is the module used to implement the +"backends" of the Perl compiler. Usage of the compiler does not require knowledge of this module: see the F module for the -user-visible part. The C module is of use to those who want to -write new compiler backends. This documentation assumes that the +user-visible part. The C module is of use to those who want to +write new compiler backends. This documentation assumes that the reader knows a fair amount about perl's internals including such things as SVs, OPs and the internal symbol table and syntax tree of a program. @@ -394,12 +394,12 @@ Returns the SV object corresponding to the C variable C. Takes a reference to any Perl value, and turns the referred-to value into an object in the appropriate B::OP-derived or B::SV-derived -class. Apart from functions such as C, this is the primary +class. Apart from functions such as C, this is the primary way to get an initial "handle" on an internal perl data structure which can then be followed with the other access methods. The returned object will only be valid as long as the underlying OPs -and SVs continue to exist. Do not attempt to use the object after the +and SVs continue to exist. Do not attempt to use the object after the underlying structures are freed. =item amagic_generation @@ -458,10 +458,10 @@ For example: # Walk CGI's symbol table calling print_subs on each symbol. # Recurse only into CGI::Util:: - walksymtable(\%CGI::, 'print_subs', sub { $_[0] eq 'CGI::Util::' }, - 'CGI::'); + walksymtable(\%CGI::, 'print_subs', + sub { $_[0] eq 'CGI::Util::' }, 'CGI::'); -print_subs() is a B::GV method you have declared. Also see L<"B::GV +print_subs() is a B::GV method you have declared. Also see L<"B::GV Methods">, below. =back @@ -486,15 +486,15 @@ Returns the starting op of the main part of the Perl program. =item walkoptree(OP, METHOD) Does a tree-walk of the syntax tree based at OP and calls METHOD on -each op it visits. Each node is visited before its children. If +each op it visits. Each node is visited before its children. If C (see below) has been called to turn debugging on then the method C is called on each op before METHOD is called. =item walkoptree_debug(DEBUG) -Returns the current debugging flag for C. If the optional -DEBUG argument is non-zero, it sets the debugging flag to that. See +Returns the current debugging flag for C. If the optional +DEBUG argument is non-zero, it sets the debugging flag to that. See the description of C above for what the debugging flag does. @@ -519,7 +519,7 @@ Casts I to the internal I32 type used by that perl. =item minus_c -Does the equivalent of the C<-c> command-line option. Obviously, this +Does the equivalent of the C<-c> command-line option. Obviously, this is only useful in a BEGIN block or else the flag is set too late. =item cstring(STR) @@ -535,7 +535,7 @@ be used as a string in Perl source code. =item class(OBJ) Returns the class of an object without the part of the classname -preceding the first C<"::">. This is used to turn C<"B::UNOP"> into +preceding the first C<"::">. This is used to turn C<"B::UNOP"> into C<"UNOP"> for example. =item threadsv_names @@ -572,7 +572,7 @@ or '&PL_sv_undef'). The C structures used by Perl's internals to hold SV and OP information (PVIV, AV, HV, ..., OP, SVOP, UNOP, ...) are modelled on a class hierarchy and the C module gives access to them via a true -object hierarchy. Structure fields which point to other objects +object hierarchy. Structure fields which point to other objects (whether types of SV or types of OP) are represented by the C module as Perl objects of the appropriate class. @@ -580,18 +580,18 @@ The bulk of the C module is the methods for accessing fields of these structures. Note that all access is read-only. You cannot modify the internals by -using this module. Also, note that the B::OP and B::SV objects created +using this module. Also, note that the B::OP and B::SV objects created by this module are only valid for as long as the underlying objects exist; their creation doesn't increase the reference counts of the -underlying objects. Trying to access the fields of a freed object will +underlying objects. Trying to access the fields of a freed object will give incomprehensible results, or worse. =head2 SV-RELATED CLASSES B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM (5.9.5 and -earlier), B::PVLV, B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes +earlier), B::PVLV, B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes correspond in the obvious way to the underlying C structures of similar names. -The inheritance hierarchy mimics the underlying C "inheritance". For the +The inheritance hierarchy mimics the underlying C "inheritance". For the 5.10.x branch, (I 5.10.0, 5.10.1 I) this is: B::SV @@ -661,8 +661,8 @@ references, and a new type B::REGEXP is introduced, giving this structure: Access methods correspond to the underlying C macros for field access, usually with the leading "class indication" prefix removed (Sv, Av, -Hv, ...). The leading prefix is only left in cases where its removal -would cause a clash in method name. For example, C stays +Hv, ...). The leading prefix is only left in cases where its removal +would cause a clash in method name. For example, C stays as-is since its abbreviation would clash with the "superclass" method C (corresponding to the C function C). @@ -677,8 +677,8 @@ C (corresponding to the C function C). =item object_2svref Returns a reference to the regular scalar corresponding to this -B::SV object. In other words, this method is the inverse operation -to the svref_2object() subroutine. This scalar and other data it points +B::SV object. In other words, this method is the inverse operation +to the svref_2object() subroutine. This scalar and other data it points at should be considered read-only: modifying them is neither safe nor guaranteed to have a sensible effect. @@ -691,8 +691,8 @@ guaranteed to have a sensible effect. =item IV Returns the value of the IV, I. This will be misleading -if C. Perhaps you want the +a signed integer>. This will be misleading +if C. Perhaps you want the C method instead? =item IVX @@ -736,7 +736,7 @@ unsigned. =item PV -This method is the one you usually want. It constructs a +This method is the one you usually want. It constructs a string using the length and offset information in the struct: for ordinary scalars it will return the string that you'd see from Perl, even if it contains null characters. @@ -748,14 +748,24 @@ a reference. =item PVX -This method is less often useful. It assumes that the string +This method is less often useful. It assumes that the string stored in the struct is null-terminated, and disregards the length information. It is the appropriate method to use if you need to get the name -of a lexical variable from a padname array. Lexical variable names +of a lexical variable from a padname array. Lexical variable names are always stored with a null terminator, and the length field -(SvCUR) is overloaded for other purposes and can't be relied on here. +(CUR) is overloaded for other purposes and can't be relied on here. + +=item CUR + +This method returns the internal length field, which consists of the number +of internal bytes, not necessarily the number of logical characters. + +=item LEN + +This method returns the number of bytes allocated (via malloc) for storing +the string. This is 0 if the scalar does not "own" the string. =back @@ -883,6 +893,15 @@ If you're working with globs at runtime, and need to disambiguate =head2 B::IO Methods +B::IO objects derive from IO objects and you will get more information from +the IO object itself. + +For example: + + $gvio = B::svref_2object(\*main::stdin)->IO; + $IO = $gvio->object_2svref(); + $fd = $IO->fileno(); + =over 4 =item LINES @@ -909,14 +928,29 @@ If you're working with globs at runtime, and need to disambiguate =item IoTYPE +A character symbolizing the type of IO Handle. + + - STDIN/OUT + I STDIN/OUT/ERR + < read-only + > write-only + a append + + read and write + s socket + | pipe + I IMPLICIT + # NUMERIC + space closed handle + \0 closed internal handle + =item IoFLAGS =item IsSTD -Takes one arguments ( 'stdin' | 'stdout' | 'stderr' ) and returns true +Takes one argument ( 'stdin' | 'stdout' | 'stderr' ) and returns true if the IoIFP of the object is equal to the handle whose name was -passed as argument ( i.e. $io->IsSTD('stderr') is true if -IoIFP($io) == PerlIO_stdin() ). +passed as argument; i.e., $io->IsSTD('stderr') is true if +IoIFP($io) == PerlIO_stderr(). =back @@ -942,7 +976,8 @@ if running under Perl 5.9 =item AvFLAGS -This method returns the AV specific flags. In Perl 5.9 these are now stored +This method returns the AV specific +flags. In Perl 5.9 these are now stored in with the main SV flags, so this method is no longer present. =back @@ -1010,7 +1045,7 @@ C, C, C, C, C, C, C, C, C, C, C. These classes correspond in the obvious way to the underlying C -structures of similar names. The inheritance hierarchy mimics the +structures of similar names. The inheritance hierarchy mimics the underlying C "inheritance": B::OP @@ -1176,6 +1211,8 @@ Only when perl was compiled with ithreads. =item stashpv +=item stashlen + =item file =item cop_seq diff --git a/Master/tlpkg/tlperl/lib/B/Concise.pm b/Master/tlpkg/tlperl/lib/B/Concise.pm index 014a4df84d1..6db2e0ce95c 100644 --- a/Master/tlpkg/tlperl/lib/B/Concise.pm +++ b/Master/tlpkg/tlperl/lib/B/Concise.pm @@ -14,7 +14,7 @@ use warnings; # uses #3 and #4, since warnings uses Carp use Exporter (); # use #5 -our $VERSION = "0.83"; +our $VERSION = "0.89"; our @ISA = qw(Exporter); our @EXPORT_OK = qw( set_style set_style_standard add_callback concise_subref concise_cv concise_main @@ -595,12 +595,13 @@ our %priv; # used to display each opcode's BASEOP.op_private values $priv{$_}{128} = "LVINTRO" for ("pos", "substr", "vec", "threadsv", "gvsv", "rv2sv", "rv2hv", "rv2gv", "rv2av", "rv2arylen", "aelem", "helem", "aslice", "hslice", "padsv", - "padav", "padhv", "enteriter"); + "padav", "padhv", "enteriter", "entersub"); $priv{$_}{64} = "REFC" for ("leave", "leavesub", "leavesublv", "leavewrite"); $priv{"aassign"}{64} = "COMMON"; $priv{"aassign"}{32} = $] < 5.009 ? "PHASH" : "STATE"; $priv{"sassign"}{32} = "STATE"; $priv{"sassign"}{64} = "BKWARD"; +$priv{"sassign"}{128}= "CV2GV"; $priv{$_}{64} = "RTIME" for ("match", "subst", "substcont", "qr"); @{$priv{"trans"}}{1,2,4,8,16,64} = ("UTF", "IDENT", "SQUASH", "DEL", "COMPL", "GROWS"); @@ -611,12 +612,16 @@ $priv{$_}{4} = "DREFed" for (qw(rv2sv rv2av rv2hv)); @{$priv{$_}}{32,64,96} = ("DREFAV", "DREFHV", "DREFSV") for (qw(rv2gv rv2sv padsv aelem helem)); $priv{$_}{16} = "STATE" for ("padav", "padhv", "padsv"); -@{$priv{"entersub"}}{16,32,64} = ("DBG","TARG","NOMOD"); -@{$priv{$_}}{4,8,128} = ("INARGS","AMPER","NO()") for ("entersub", "rv2cv"); +@{$priv{rv2gv}}{4,16} = qw "NOINIT FAKE"; +@{$priv{"entersub"}}{1,4,16,32,64} = qw( INARGS TARG DBG DEREF ); +@{$priv{rv2cv}}{1,8,128} = ("CONST","AMPER","NO()"); $priv{"gv"}{32} = "EARLYCV"; $priv{"aelem"}{16} = $priv{"helem"}{16} = "LVDEFER"; $priv{$_}{16} = "OURINTR" for ("gvsv", "rv2sv", "rv2av", "rv2hv", "r2gv", "enteriter"); +$priv{$_}{8} = 'LVSUB' for qw(rv2av rv2gv rv2hv padav padhv aelem helem + aslice hslice av2arylen keys rkeys substr pos vec); +$priv{substr}{16} = 'REPL1ST'; $priv{$_}{16} = "TARGMY" for (map(($_,"s$_"),"chop", "chomp"), map(($_,"i_$_"), "postinc", "postdec", "multiply", "divide", "modulo", @@ -630,7 +635,8 @@ $priv{$_}{16} = "TARGMY" "exec", "kill", "getppid", "getpgrp", "setpgrp", "getpriority", "setpriority", "time", "sleep"); $priv{$_}{4} = "REVERSED" for ("enteriter", "iter"); -@{$priv{"const"}}{4,8,16,32,64,128} = ("SHORT","STRICT","ENTERED",'$[',"BARE","WARN"); +@{$priv{"const"}}{2,4,8,16,64,128} = + ("NOVER","SHORT","STRICT","ENTERED","BARE","WARN"); $priv{"flip"}{64} = $priv{"flop"}{64} = "LINENUM"; $priv{"list"}{64} = "GUESSED"; $priv{"delete"}{64} = "SLICE"; @@ -643,10 +649,10 @@ $priv{"threadsv"}{64} = "SVREFd"; $priv{"exit"}{128} = "VMS"; $priv{$_}{2} = "FTACCESS" for ("ftrread", "ftrwrite", "ftrexec", "fteread", "ftewrite", "fteexec"); -$priv{"entereval"}{2} = "HAS_HH"; +@{$priv{"entereval"}}{2,4,8,16} = qw "HAS_HH UNI BYTES COPHH"; if ($] >= 5.009) { # Stacked filetests are post 5.8.x - $priv{$_}{4} = "FTSTACKED" + @{$priv{$_}}{4,8,16} = ("FTSTACKED","FTSTACKING","FTAFTERt") for ("ftrread", "ftrwrite", "ftrexec", "fteread", "ftewrite", "fteexec", "ftis", "fteowned", "ftrowned", "ftzero", "ftsize", "ftmtime", "ftatime", "ftctime", "ftsock", "ftchr", "ftblk", "ftfile", "ftdir", @@ -656,13 +662,15 @@ if ($] >= 5.009) { $priv{$_}{2} = "GREPLEX" for ("mapwhile", "mapstart", "grepwhile", "grepstart"); } +$priv{$_}{128} = '+1' for qw "caller wantarray runcv"; +@{$priv{coreargs}}{1,2,64,128} = ('DREF1','DREF2','$MOD','MARK'); our %hints; # used to display each COP's op_hints values # strict refs, subs, vars -@hints{2,512,1024} = ('$', '&', '*'); -# integers, locale, bytes, arybase -@hints{1,4,8,16,32} = ('i', 'l', 'b', '['); +@hints{2,512,1024,32,64,128} = ('$', '&', '*', 'x$', 'x&', 'x*'); +# integers, locale, bytes +@hints{1,4,8,16} = ('i', 'l', 'b'); # block scope, localise %^H, $^OPEN (in), $^OPEN (out) @hints{256,131072,262144,524288} = ('{','%','<','>'); # overload new integer, float, binary, string, re @@ -850,9 +858,7 @@ sub concise_op { my $ln = $op->line; $loc .= ":$ln"; my($stash, $cseq) = ($op->stash->NAME, $op->cop_seq - $cop_seq_base); - my $arybase = $op->arybase; - $arybase = $arybase ? ' $[=' . $arybase : ""; - $h{arg} = "($label$stash $cseq $loc$arybase)"; + $h{arg} = "($label$stash $cseq $loc)"; if ($show_src) { fill_srclines($pathnm) unless exists $srclines{$pathnm}; # Would love to retain Jim's use of // but this code needs to be @@ -1255,7 +1261,7 @@ usual convention for Arabic numerals, and the default. =item B<-littleendian> -Print seqence numbers with the least significant digit first. This is +Print sequence numbers with the least significant digit first. This is obviously mutually exclusive with bigendian. =back @@ -1541,10 +1547,12 @@ string if this is not a COP. Here are the symbols used: $ strict refs & strict subs * strict vars + x$ explicit use/no strict refs + x& explicit use/no strict subs + x* explicit use/no strict vars i integers l locale b bytes - [ arybase { block scope % localise %^H < open in diff --git a/Master/tlpkg/tlperl/lib/B/Debug.pm b/Master/tlpkg/tlperl/lib/B/Debug.pm index 17f026d9fa8..fb8db3ff20b 100644 --- a/Master/tlpkg/tlperl/lib/B/Debug.pm +++ b/Master/tlpkg/tlperl/lib/B/Debug.pm @@ -1,6 +1,6 @@ package B::Debug; -our $VERSION = '1.16'; +our $VERSION = '1.17'; use strict; require 5.006; @@ -414,6 +414,6 @@ Copyright (c) 2008, 2010 Reini Urban distribution. You should also have received a copy of the GNU General Public License, in the file named "Copying". If not, you can get one from the Perl distribution or else write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. =cut diff --git a/Master/tlpkg/tlperl/lib/B/Deparse.pm b/Master/tlpkg/tlperl/lib/B/Deparse.pm index f3c304f8263..b0f172d61b3 100644 --- a/Master/tlpkg/tlperl/lib/B/Deparse.pm +++ b/Master/tlpkg/tlperl/lib/B/Deparse.pm @@ -14,29 +14,28 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL OPf_MOD OPpLVAL_INTRO OPpOUR_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY - OPpCONST_ARYBASE OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER + OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER OPpSORT_REVERSE SVf_IOK SVf_NOK SVf_ROK SVf_POK SVpad_OUR SVf_FAKE SVs_RMG SVs_SMG CVf_METHOD CVf_LVALUE PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE - PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED), - ($] < 5.008004 ? () : 'OPpSORT_INPLACE'), - ($] < 5.008006 ? () : qw(OPpSORT_DESCEND OPpITER_REVERSED)), - ($] < 5.008009 ? () : qw(OPpCONST_NOVER OPpPAD_STATE)), - ($] < 5.009 ? 'PMf_SKIPWHITE' : qw(RXf_SKIPWHITE)), - ($] < 5.011 ? 'CVf_LOCKED' : 'OPpREVERSE_INPLACE'), - ($] < 5.013 ? () : 'PMf_NONDESTRUCT'); -$VERSION = "1.04"; + PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED); +$VERSION = '1.14_01'; use strict; use vars qw/$AUTOLOAD/; use warnings (); +require feature; BEGIN { + # List version-specific constants here. # Easiest way to keep this code portable between version looks to # be to fake up a dummy constant that will never actually be true. foreach (qw(OPpSORT_INPLACE OPpSORT_DESCEND OPpITER_REVERSED OPpCONST_NOVER - OPpPAD_STATE RXf_SKIPWHITE CVf_LOCKED OPpREVERSE_INPLACE - PMf_NONDESTRUCT)) { + OPpPAD_STATE PMf_SKIPWHITE RXf_SKIPWHITE + RXf_PMf_CHARSET RXf_PMf_KEEPCOPY + CVf_LOCKED OPpREVERSE_INPLACE OPpSUBSTR_REPL_FIRST + PMf_NONDESTRUCT OPpCONST_ARYBASE OPpEVAL_BYTES)) { + eval { import B $_ }; no strict 'refs'; *{$_} = sub () {0} unless *{$_}{CODE}; } @@ -47,10 +46,10 @@ BEGIN { # - fixed reference constants (\"str") # - handle empty programs gracefully # - handle infinite loops (for (;;) {}, while (1) {}) -# - differentiate between `for my $x ...' and `my $x; for $x ...' +# - differentiate between 'for my $x ...' and 'my $x; for $x ...' # - various minor cleanups # - moved globals into an object -# - added `-u', like B::C +# - added '-u', like B::C # - package declarations using cop_stash # - subs, formats and code sorted by cop_seq # Changes between 0.51 and 0.52: @@ -58,10 +57,10 @@ BEGIN { # - added documentation # Changes between 0.52 and 0.53: # - many changes adding precedence contexts and associativity -# - added `-p' and `-s' output style options +# - added '-p' and '-s' output style options # - various other minor fixes # Changes between 0.53 and 0.54: -# - added support for new `for (1..100)' optimization, +# - added support for new 'for (1..100)' optimization, # thanks to Gisle Aas # Changes between 0.54 and 0.55: # - added support for new qr// construct @@ -70,16 +69,16 @@ BEGIN { # - tested on base/*.t, cmd/*.t, comp/*.t, io/*.t # - fixed $# on non-lexicals broken in last big rewrite # - added temporary fix for change in opcode of OP_STRINGIFY -# - fixed problem in 0.54's for() patch in `for (@ary)' +# - fixed problem in 0.54's for() patch in 'for (@ary)' # - fixed precedence in conditional of ?: -# - tweaked list paren elimination in `my($x) = @_' +# - tweaked list paren elimination in 'my($x) = @_' # - made continue-block detection trickier wrt. null ops # - fixed various prototype problems in pp_entersub # - added support for sub prototypes that never get GVs # - added unquoting for special filehandle first arg in truncate -# - print doubled rv2gv (a bug) as `*{*GV}' instead of illegal `**GV' +# - print doubled rv2gv (a bug) as '*{*GV}' instead of illegal '**GV' # - added semicolons at the ends of blocks -# - added -l `#line' declaration option -- fixes cmd/subval.t 27,28 +# - added -l '#line' declaration option -- fixes cmd/subval.t 27,28 # Changes between 0.56 and 0.561: # - fixed multiply-declared my var in pp_truncate (thanks to Sarathy) # - used new B.pm symbolic constants (done by Nick Ing-Simmons) @@ -92,7 +91,7 @@ BEGIN { # Changes after 0.57: # - added parens in \&foo (patch by Albert Dvornik) # Changes between 0.57 and 0.58: -# - fixed `0' statements that weren't being printed +# - fixed '0' statements that weren't being printed # - added methods for use from other programs # (based on patches from James Duncan and Hugo van der Sanden) # - added -si and -sT to control indenting (also based on a patch from Hugo) @@ -104,7 +103,7 @@ BEGIN { # Changes between 0.58 and 0.59 # - added support for Chip's OP_METHOD_NAMED # - added support for Ilya's OPpTARGET_MY optimization -# - elided arrows before `()' subscripts when possible +# - elided arrows before '()' subscripts when possible # Changes between 0.59 and 0.60 # - support for method attributes was added # - some warnings fixed @@ -154,7 +153,7 @@ BEGIN { # - configurable syntax highlighting: ANSI color, HTML, TeX, etc. # - more style options: brace style, hex vs. octal, quotes, ... # - print big ints as hex/octal instead of decimal (heuristic?) -# - handle `my $x if 0'? +# - handle 'my $x if 0'? # - version using op_next instead of op_first/sibling? # - avoid string copies (pass arrays, one big join?) # - here-docs? @@ -220,7 +219,8 @@ BEGIN { # CV for current sub (or main program) being deparsed # # curcvlex: -# Cached hash of lexical variables for curcv: keys are names, +# Cached hash of lexical variables for curcv: keys are +# names prefixed with "m" or "o" (representing my/our), and # each value is an array of pairs, indicating the cop_seq of scopes # in which a var of that name is valid. # @@ -243,7 +243,8 @@ BEGIN { # # subs_declared # keys are names of subs for which we've printed declarations. -# That means we can omit parentheses from the arguments. +# That means we can omit parentheses from the arguments. It also means we +# need to put CORE:: on core functions of the same name. # # subs_deparsed # Keeps track of fully qualified names of all deparsed subs. @@ -251,7 +252,7 @@ BEGIN { # parens: -p # linenums: -l # unquote: -q -# cuddle: ` ' or `\n', depending on -sC +# cuddle: ' ' or '\n', depending on -sC # indent_size: -si # use_tabs: -sT # ex_const: -sv @@ -265,7 +266,7 @@ BEGIN { # they're inside an expression or at statement level, etc. (see # chart below). When ops with children call deparse on them, they pass # along their precedence. Fractional values are used to implement -# associativity (`($x + $y) + $z' => `$x + $y + $y') and related +# associativity ('($x + $y) + $z' => '$x + $y + $y') and related # parentheses hacks. The major disadvantage of this scheme is that # it doesn't know about right sides and left sides, so say if you # assign a listop to a variable, it can't tell it's allowed to leave @@ -305,7 +306,7 @@ BEGIN { # \cS - steal parens (see maybe_parens_unop) # \n - newline and indent # \t - increase indent -# \b - decrease indent (`outdent') +# \b - decrease indent ('outdent') # \f - flush left (no indent) # \cK - kill following semicolon, if any @@ -471,7 +472,7 @@ sub begin_is_use { } sub stash_subs { - my ($self, $pack) = @_; + my ($self, $pack, $seen) = @_; my (@ret, $stash); if (!defined $pack) { $pack = ''; @@ -482,6 +483,10 @@ sub stash_subs { no strict 'refs'; $stash = \%{"main::$pack"}; } + return + if ($seen ||= {})->{ + $INC{"overload.pm"} ? overload::StrVal($stash) : $stash + }++; my %stash = svref_2object($stash)->ARRAY; while (my ($key, $val) = each %stash) { my $class = class($val); @@ -520,9 +525,7 @@ sub stash_subs { $self->todo($cv, 1); } if (class($val->HV) ne "SPECIAL" && $key =~ /::$/) { - $self->stash_subs($pack . $key) - unless $pack eq '' && $key eq 'main::'; - # avoid infinite recursion + $self->stash_subs($pack . $key, $seen); } } } @@ -706,6 +709,11 @@ sub coderef2text { return $self->indent($self->deparse_sub(svref_2object($sub))); } +my %strict_bits = do { + local $^H; + map +($_ => strict::bits($_)), qw/refs subs vars/ +}; + sub ambient_pragmas { my $self = shift; my ($arybase, $hint_bits, $warning_bits, $hinthash) = (0, 0); @@ -718,7 +726,7 @@ sub ambient_pragmas { require strict; if ($val eq 'none') { - $hint_bits &= ~strict::bits(qw/refs subs vars/); + $hint_bits &= $strict_bits{$_} for qw/refs subs vars/; next(); } @@ -732,11 +740,15 @@ sub ambient_pragmas { else { @names = split' ', $val; } - $hint_bits |= strict::bits(@names); + $hint_bits |= $strict_bits{$_} for @names; } elsif ($name eq '$[') { - $arybase = $val; + if (OPpCONST_ARYBASE) { + $arybase = $val; + } else { + croak "\$[ can't be non-zero on this perl" unless $val == 0; + } } elsif ($name eq 'integer' @@ -948,7 +960,7 @@ sub is_state { return $name eq "nextstate" || $name eq "dbstate" || $name eq "setstate"; } -sub is_miniwhile { # check for one-line loop (`foo() while $y--') +sub is_miniwhile { # check for one-line loop ('foo() while $y--') my $op = shift; return (!null($op) and null($op->sibling) and $op->name eq "null" and class($op) eq "UNOP" @@ -1008,7 +1020,7 @@ sub maybe_parens { } } -# same as above, but get around the `if it looks like a function' rule +# same as above, but get around the 'if it looks like a function' rule sub maybe_parens_unop { my $self = shift; my($name, $kid, $cx) = @_; @@ -1017,18 +1029,19 @@ sub maybe_parens_unop { if ($name eq "umask" && $kid =~ /^\d+$/) { $kid = sprintf("%#o", $kid); } - return "$name($kid)"; + return $self->keyword($name) . "($kid)"; } else { $kid = $self->deparse($kid, 16); if ($name eq "umask" && $kid =~ /^\d+$/) { $kid = sprintf("%#o", $kid); } + $name = $self->keyword($name); if (substr($kid, 0, 1) eq "\cS") { # use kid's parens return $name . substr($kid, 1); } elsif (substr($kid, 0, 1) eq "(") { # avoid looks-like-a-function trap with extra parens - # (`+' can lead to ambiguities) + # ('+' can lead to ambiguities) return "$name(" . $kid . ")"; } else { return "$name $kid"; @@ -1093,7 +1106,9 @@ sub maybe_my { my $self = shift; my($op, $cx, $text) = @_; if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) { - my $my = $op->private & OPpPAD_STATE ? "state" : "my"; + my $my = $op->private & OPpPAD_STATE + ? $self->keyword("state") + : "my"; if (want_scalar($op)) { return "$my $text"; } else { @@ -1247,32 +1262,35 @@ BEGIN { map($globalnames{$_}++, "SIG", "STDIN", "STDOUT", "STDERR", "INC", sub gv_name { my $self = shift; my $gv = shift; + my $raw = shift; Carp::confess() unless ref($gv) eq "B::GV"; my $stash = $gv->STASH->NAME; - my $name = $gv->SAFENAME; + my $name = $raw ? $gv->NAME : $gv->SAFENAME; if ($stash eq 'main' && $name =~ /^::/) { $stash = '::'; } - elsif (($stash eq 'main' && $globalnames{$name}) + elsif (($stash eq 'main' + && ($globalnames{$name} || $name =~ /^[^A-Za-z_:]/)) or ($stash eq $self->{'curstash'} && !$globalnames{$name} && ($stash eq 'main' || $name !~ /::/)) - or $name =~ /^[^A-Za-z_:]/) + ) { $stash = ""; } else { $stash = $stash . "::"; } - if ($name =~ /^(\^..|{)/) { + if (!$raw and $name =~ /^(\^..|{)/) { $name = "{$name}"; # ${^WARNING_BITS}, etc and ${ } return $stash . $name; } # Return the name to use for a stash variable. -# If a lexical with the same name is in scope, it may need to be +# If a lexical with the same name is in scope, or +# if strictures are enabled, it may need to be # fully-qualified. sub stash_variable { - my ($self, $prefix, $name) = @_; + my ($self, $prefix, $name, $cx) = @_; return "$prefix$name" if $name =~ /::/; @@ -1281,13 +1299,55 @@ sub stash_variable { return "$prefix$name"; } + if ($name =~ /^[^\w+-]$/) { + if (defined $cx && $cx == 26) { + if ($prefix eq '@') { + return "$prefix\{$name}"; + } + elsif ($name eq '#') { return '${#}' } # "${#}a" vs "$#a" + } + if ($prefix eq '$#') { + return "\$#{$name}"; + } + } + + return $prefix . $self->maybe_qualify($prefix, $name); +} + +# Return just the name, without the prefix. It may be returned as a quoted +# string. The second return value is a boolean indicating that. +sub stash_variable_name { + my($self, $prefix, $gv) = @_; + my $name = $self->gv_name($gv, 1); + $name = $self->maybe_qualify($prefix,$name); + if ($name =~ /^(?:\S|(?!\d)[\ca-\cz]?(?:\w|::)*|\d+)\z/) { + $name =~ s/^([\ca-\cz])/'^'.($1|'@')/e; + $name =~ /^(\^..|{)/ and $name = "{$name}"; + return $name, 0; # not quoted + } + else { + single_delim("q", "'", $name), 1; + } +} + +sub maybe_qualify { + my ($self,$prefix,$name) = @_; my $v = ($prefix eq '$#' ? '@' : $prefix) . $name; - return $prefix .$self->{'curstash'}.'::'. $name if $self->lex_in_scope($v); - return "$prefix$name"; + return $name if !$prefix || $name =~ /::/; + return $self->{'curstash'}.'::'. $name + if + $name =~ /^(?!\d)\w/ # alphabetic + && $v !~ /^\$[ab]\z/ # not $a or $b + && !$globalnames{$name} # not a global name + && $self->{hints} & $strict_bits{vars} # strict vars + && !$self->lex_in_scope($v,1) # no "our" + or $self->lex_in_scope($v); # conflicts with "my" variable + return $name; } sub lex_in_scope { - my ($self, $name) = @_; + my ($self, $name, $our) = @_; + substr $name, 0, 0, = $our ? 'o' : 'm'; # our/my $self->populate_curcvlex() if !defined $self->{'curcvlex'}; return 0 if !defined($self->{'curcop'}); @@ -1311,7 +1371,6 @@ sub populate_curcvlex { for (my $i=0; $i<@ns; ++$i) { next if class($ns[$i]) eq "SPECIAL"; - next if $ns[$i]->FLAGS & SVpad_OUR; # Skip "our" vars if (class($ns[$i]) eq "PV") { # Probably that pesky lexical @_ next; @@ -1322,7 +1381,9 @@ sub populate_curcvlex { ? (0, 999999) : ($ns[$i]->COP_SEQ_RANGE_LOW, $ns[$i]->COP_SEQ_RANGE_HIGH); - push @{$self->{'curcvlex'}{$name}}, [$seq_st, $seq_en]; + push @{$self->{'curcvlex'}{ + ($ns[$i]->FLAGS & SVpad_OUR ? 'o' : 'm') . $name + }}, [$seq_st, $seq_en]; } } } @@ -1388,6 +1449,14 @@ sub seq_subs { return @text; } +sub _features_from_bundle { + my ($hints, $hh) = @_; + foreach (@{$feature::feature_bundle{@feature::hint_bundles[$hints >> $feature::hint_shift]}}) { + $hh->{$feature::feature{$_}} = 1; + } + return $hh; +} + # Notice how subs and formats are inserted between statements here; # also $[ assignments and pragmas. sub pp_nextstate { @@ -1402,7 +1471,7 @@ sub pp_nextstate { $self->{'curstash'} = $stash; } - if ($self->{'arybase'} != $op->arybase) { + if (OPpCONST_ARYBASE && $self->{'arybase'} != $op->arybase) { push @text, '$[ = '. $op->arybase .";\n"; $self->{'arybase'} = $op->arybase; } @@ -1429,17 +1498,47 @@ sub pp_nextstate { } my $hints = $] < 5.008009 ? $op->private : $op->hints; + my $old_hints = $self->{'hints'}; if ($self->{'hints'} != $hints) { push @text, declare_hints($self->{'hints'}, $hints); $self->{'hints'} = $hints; } - # hack to check that the hint hash hasn't changed - if ($] > 5.009 && - "@{[sort %{$self->{'hinthash'} || {}}]}" - ne "@{[sort %{$op->hints_hash->HASH || {}}]}") { - push @text, declare_hinthash($self->{'hinthash'}, $op->hints_hash->HASH, $self->{indent_size}); - $self->{'hinthash'} = $op->hints_hash->HASH; + my $newhh; + if ($] > 5.009) { + $newhh = $op->hints_hash->HASH; + } + + if ($] >= 5.015006) { + # feature bundle hints + my $from = $old_hints & $feature::hint_mask; + my $to = $ hints & $feature::hint_mask; + if ($from != $to) { + if ($to == $feature::hint_mask) { + if ($self->{'hinthash'}) { + delete $self->{'hinthash'}{$_} + for grep /^feature_/, keys %{$self->{'hinthash'}}; + } + else { $self->{'hinthash'} = {} } + $self->{'hinthash'} + = _features_from_bundle($from, $self->{'hinthash'}); + } + else { + my $bundle = + $feature::hint_bundles[$to >> $feature::hint_shift]; + $bundle =~ s/(\d[13579])\z/$1+1/e; # 5.11 => 5.12 + push @text, "no feature;\n", + "use feature ':$bundle';\n"; + } + } + } + + if ($] > 5.009) { + push @text, declare_hinthash( + $self->{'hinthash'}, $newhh, + $self->{indent_size}, $self->{hints}, + ); + $self->{'hinthash'} = $newhh; } # This should go after of any branches that add statements, to @@ -1486,32 +1585,77 @@ my %ignored_hints = ( 'open<' => 1, 'open>' => 1, ':' => 1, + 'strict/refs' => 1, + 'strict/subs' => 1, + 'strict/vars' => 1, ); +my %rev_feature; + sub declare_hinthash { - my ($from, $to, $indent) = @_; + my ($from, $to, $indent, $hints) = @_; + my $doing_features = + ($hints & $feature::hint_mask) == $feature::hint_mask; my @decls; - for my $key (keys %$to) { + my @features; + my @unfeatures; # bugs? + for my $key (sort keys %$to) { next if $ignored_hints{$key}; - if (!defined $from->{$key} or $from->{$key} ne $to->{$key}) { - push @decls, qq(\$^H{'$key'} = q($to->{$key});); + my $is_feature = $key =~ /^feature_/ && $^V ge 5.15.6; + next if $is_feature and not $doing_features; + if (!exists $from->{$key} or $from->{$key} ne $to->{$key}) { + push(@features, $key), next if $is_feature; + push @decls, + qq(\$^H{) . single_delim("q", "'", $key) . qq(} = ) + . ( + defined $to->{$key} + ? single_delim("q", "'", $to->{$key}) + : 'undef' + ) + . qq(;); } } - for my $key (keys %$from) { + for my $key (sort keys %$from) { next if $ignored_hints{$key}; + my $is_feature = $key =~ /^feature_/ && $^V ge 5.15.6; + next if $is_feature and not $doing_features; if (!exists $to->{$key}) { + push(@unfeatures, $key), next if $is_feature; push @decls, qq(delete \$^H{'$key'};); } } - @decls or return ''; - return join("\n" . (" " x $indent), "BEGIN {", @decls) . "\n}\n"; + my @ret; + if (@features || @unfeatures) { + if (!%rev_feature) { %rev_feature = reverse %feature::feature } + } + if (@features) { + push @ret, "use feature " + . join(", ", map "'$rev_feature{$_}'", @features) . ";\n"; + } + if (@unfeatures) { + push @ret, "no feature " + . join(", ", map "'$rev_feature{$_}'", @unfeatures) + . ";\n"; + } + @decls and + push @ret, + join("\n" . (" " x $indent), "BEGIN {", @decls) . "\n}\n"; + return @ret; } sub hint_pragmas { my ($bits) = @_; - my @pragmas; + my (@pragmas, @strict); push @pragmas, "integer" if $bits & 0x1; - push @pragmas, "strict 'refs'" if $bits & 0x2; + for (sort keys %strict_bits) { + push @strict, "'$_'" if $bits & $strict_bits{$_}; + } + if (@strict == keys %strict_bits) { + push @pragmas, "strict"; + } + elsif (@strict) { + push @pragmas, "strict " . join ', ', @strict; + } push @pragmas, "bytes" if $bits & 0x8; return @pragmas; } @@ -1521,10 +1665,52 @@ sub pp_setstate { pp_nextstate(@_) } sub pp_unstack { return "" } # see also leaveloop +my %feature_keywords = ( + # keyword => 'feature', + state => 'state', + say => 'say', + given => 'switch', + when => 'switch', + default => 'switch', + break => 'switch', + evalbytes=>'evalbytes', + __SUB__ => '__SUB__', + fc => 'fc', +); + +sub keyword { + my $self = shift; + my $name = shift; + return $name if $name =~ /^CORE::/; # just in case + if (exists $feature_keywords{$name}) { + my $hh; + my $hints = $self->{hints} & $feature::hint_mask; + if ($hints && $hints != $feature::hint_mask) { + $hh = _features_from_bundle($hints); + } + elsif ($hints) { $hh = $self->{'hinthash'} } + return "CORE::$name" + if !$hh + || !$hh->{"feature_$feature_keywords{$name}"} + } + if ( + $name !~ /^(?:chom?p|do|exec|glob|s(?:elect|ystem))\z/ + && !defined eval{prototype "CORE::$name"} + ) { return $name } + if ( + exists $self->{subs_declared}{$name} + or + exists &{"$self->{curstash}::$name"} + ) { + return "CORE::$name" + } + return $name; +} + sub baseop { my $self = shift; my($op, $cx, $name) = @_; - return $name; + return $self->keyword($name); } sub pp_stub { @@ -1569,7 +1755,13 @@ sub pfixop { my($op, $cx, $name, $prec, $flags) = (@_, 0); my $kid = $op->first; $kid = $self->deparse($kid, $prec); - return $self->maybe_parens(($flags & POSTFIX) ? "$kid$name" : "$name$kid", + return $self->maybe_parens(($flags & POSTFIX) + ? "$kid$name" + # avoid confusion with filetests + : $name eq '-' + && $kid =~ /^[a-zA-Z](?!\w)/ + ? "$name($kid)" + : "$name$kid", $cx, $prec); } @@ -1600,7 +1792,7 @@ sub pp_not { my $self = shift; my($op, $cx) = @_; if ($cx <= 4) { - $self->pfixop($op, $cx, "not ", 4); + $self->listop($op, $cx, "not", $op->first); } else { $self->pfixop($op, $cx, "!", 21); } @@ -1608,7 +1800,7 @@ sub pp_not { sub unop { my $self = shift; - my($op, $cx, $name) = @_; + my($op, $cx, $name, $nollafr) = @_; my $kid; if ($op->flags & OPf_KIDS) { $kid = $op->first; @@ -1624,9 +1816,18 @@ sub unop { $kid = $kid->first; } + if ($nollafr) { + ($kid = $self->deparse($kid, 16)) =~ s/^\cS//; + return $self->maybe_parens( + $self->keyword($name) . " $kid", $cx, 16 + ); + } return $self->maybe_parens_unop($name, $kid, $cx); } else { - return $name . ($op->flags & OPf_SPECIAL ? "()" : ""); + return $self->maybe_parens( + $self->keyword($name) . ($op->flags & OPf_SPECIAL ? "()" : ""), + $cx, 16, + ); } } @@ -1659,6 +1860,7 @@ sub pp_chr { maybe_targmy(@_, \&unop, "chr") } sub pp_each { unop(@_, "each") } sub pp_values { unop(@_, "values") } sub pp_keys { unop(@_, "keys") } +{ no strict 'refs'; *{"pp_r$_"} = *{"pp_$_"} for qw< keys each values >; } sub pp_boolkeys { # no name because its an optimisation op that has no keyword unop(@_,""); @@ -1700,8 +1902,17 @@ sub pp_gmtime { unop(@_, "gmtime") } sub pp_alarm { unop(@_, "alarm") } sub pp_sleep { maybe_targmy(@_, \&unop, "sleep") } -sub pp_dofile { unop(@_, "do") } -sub pp_entereval { unop(@_, "eval") } +sub pp_dofile { + my $code = unop(@_, "do", 1); # llafr does not apply + if ($code =~ s/^((?:CORE::)?do) \{/$1({/) { $code .= ')' } + $code; +} +sub pp_entereval { + unop( + @_, + $_[1]->private & OPpEVAL_BYTES ? $_[0]->keyword('evalbytes') : "eval" + ) +} sub pp_ghbyname { unop(@_, "gethostbyname") } sub pp_gnbyname { unop(@_, "getnetbyname") } @@ -1718,11 +1929,7 @@ sub pp_ggrgid { unop(@_, "getgrgid") } sub pp_lock { unop(@_, "lock") } sub pp_continue { unop(@_, "continue"); } -sub pp_break { - my ($self, $op) = @_; - return "" if $op->flags & OPf_SPECIAL; - unop(@_, "break"); -} +sub pp_break { unop(@_, "break"); } sub givwhen { my $self = shift; @@ -1731,7 +1938,7 @@ sub givwhen { my $enterop = $op->first; my ($head, $block); if ($enterop->flags & OPf_SPECIAL) { - $head = "default"; + $head = $self->keyword("default"); $block = $self->deparse($enterop->first, 0); } else { @@ -1746,8 +1953,8 @@ sub givwhen { "\b}\cK"; } -sub pp_leavegiven { givwhen(@_, "given"); } -sub pp_leavewhen { givwhen(@_, "when"); } +sub pp_leavegiven { givwhen(@_, $_[0]->keyword("given")); } +sub pp_leavewhen { givwhen(@_, $_[0]->keyword("when")); } sub pp_exists { my $self = shift; @@ -1804,9 +2011,16 @@ sub pp_require { my $name = $self->const_sv($op->first)->PV; $name =~ s[/][::]g; $name =~ s/\.pm//g; - return "$opname $name"; + return $self->maybe_parens("$opname $name", $cx, 16); } else { - $self->unop($op, $cx, $op->first->private & OPpCONST_NOVER ? "no" : $opname); + $self->unop( + $op, $cx, + $op->first->name eq 'const' + && $op->first->private & OPpCONST_NOVER + ? "no" + : $opname, + 1, # llafr does not apply + ); } } @@ -1931,33 +2145,38 @@ sub pp_lcfirst { dq_unop(@_, "lcfirst") } sub pp_uc { dq_unop(@_, "uc") } sub pp_lc { dq_unop(@_, "lc") } sub pp_quotemeta { maybe_targmy(@_, \&dq_unop, "quotemeta") } +sub pp_fc { dq_unop(@_, "fc") } sub loopex { my $self = shift; my ($op, $cx, $name) = @_; if (class($op) eq "PVOP") { - return "$name " . $op->pv; + $name .= " " . $op->pv; } elsif (class($op) eq "OP") { - return $name; + # no-op } elsif (class($op) eq "UNOP") { - # Note -- loop exits are actually exempt from the - # looks-like-a-func rule, but a few extra parens won't hurt - return $self->maybe_parens_unop($name, $op->first, $cx); + (my $kid = $self->deparse($op->first, 16)) =~ s/^\cS//; + $name .= " $kid"; } + return $self->maybe_parens($name, $cx, 16); } sub pp_last { loopex(@_, "last") } sub pp_next { loopex(@_, "next") } sub pp_redo { loopex(@_, "redo") } sub pp_goto { loopex(@_, "goto") } -sub pp_dump { loopex(@_, "dump") } +sub pp_dump { loopex(@_, "CORE::dump") } sub ftst { my $self = shift; my($op, $cx, $name) = @_; if (class($op) eq "UNOP") { - # Genuine `-X' filetests are exempt from the LLAFR, but not - # l?stat(); for the sake of clarity, give'em all parens + # Genuine '-X' filetests are exempt from the LLAFR, but not + # l?stat() + if ($name =~ /^-/) { + (my $kid = $self->deparse($op->first, 16)) =~ s/^\cS//; + return $self->maybe_parens("$name $kid", $cx, 16); + } return $self->maybe_parens_unop($name, $op->first, $cx); } elsif (class($op) =~ /^(SV|PAD)OP$/) { return $self->maybe_parens_func($name, $self->pp_gv($op, 1), $cx, 16); @@ -2006,7 +2225,7 @@ sub assoc_class { my $op = shift; my $name = $op->name; if ($name eq "concat" and $op->first->name eq "concat") { - # avoid spurious `=' -- see comment in pp_concat + # avoid spurious '=' -- see comment in pp_concat return "concat"; } if ($name eq "null" and class($op) eq "UNOP" @@ -2023,7 +2242,7 @@ sub assoc_class { return $name . ($op->flags & OPf_STACKED ? "=" : ""); } -# Left associative operators, like `+', for which +# Left associative operators, like '+', for which # $a + $b + $c is equivalent to ($a + $b) + $c BEGIN { @@ -2054,7 +2273,7 @@ sub deparse_binop_left { } } -# Right associative operators, like `=', for which +# Right associative operators, like '=', for which # $a = $b = $c is equivalent to $a = ($b = $c) BEGIN { @@ -2161,9 +2380,9 @@ sub pp_smartmatch { } } -# `.' is special because concats-of-concats are optimized to save copying +# '.' is special because concats-of-concats are optimized to save copying # by making all but the first concat stacked. The effect is as if the -# programmer had written `($a . $b) .= $c', except legal. +# programmer had written '($a . $b) .= $c', except legal. sub pp_concat { maybe_targmy(@_, \&real_concat) } sub real_concat { my $self = shift; @@ -2181,7 +2400,7 @@ sub real_concat { return $self->maybe_parens("$left .$eq $right", $cx, $prec); } -# `x' is weird when the left arg is a list +# 'x' is weird when the left arg is a list sub pp_repeat { my $self = shift; my($op, $cx) = @_; @@ -2277,20 +2496,41 @@ sub pp_andassign { logassignop(@_, "&&=") } sub pp_orassign { logassignop(@_, "||=") } sub pp_dorassign { logassignop(@_, "//=") } +sub rv2gv_or_string { + my($self,$op) = @_; + if ($op->name eq "gv") { # could be open("open") or open("###") + my($name,$quoted) = + $self->stash_variable_name("", $self->gv_or_padgv($op)); + $quoted ? $name : "*$name"; + } + else { + $self->deparse($op, 6); + } +} + sub listop { my $self = shift; - my($op, $cx, $name) = @_; + my($op, $cx, $name, $kid, $nollafr) = @_; my(@exprs); my $parens = ($cx >= 5) || $self->{'parens'}; - my $kid = $op->first->sibling; - return $name if null $kid; + $kid ||= $op->first->sibling; + # If there are no arguments, add final parentheses (or parenthesize the + # whole thing if the llafr does not apply) to account for cases like + # (return)+1 or setpgrp()+1. When the llafr does not apply, we use a + # precedence of 6 (< comma), as "return, 1" does not need parentheses. + if (null $kid) { + return $nollafr + ? $self->maybe_parens($self->keyword($name), $cx, 7) + : $self->keyword($name) . '()' x (7 < $cx); + } my $first; $name = "socketpair" if $name eq "sockpair"; + my $fullname = $self->keyword($name); my $proto = prototype("CORE::$name"); if (defined $proto && $proto =~ /^;?\*/ - && $kid->name eq "rv2gv") { - $first = $self->deparse($kid->first, 6); + && $kid->name eq "rv2gv" && !($kid->private & OPpLVAL_INTRO)) { + $first = $self->rv2gv_or_string($kid->first); } else { $first = $self->deparse($kid, 6); @@ -2298,29 +2538,43 @@ sub listop { if ($name eq "chmod" && $first =~ /^\d+$/) { $first = sprintf("%#o", $first); } - $first = "+$first" if not $parens and substr($first, 0, 1) eq "("; + $first = "+$first" + if not $parens and not $nollafr and substr($first, 0, 1) eq "("; push @exprs, $first; $kid = $kid->sibling; - if (defined $proto && $proto =~ /^\*\*/ && $kid->name eq "rv2gv") { - push @exprs, $self->deparse($kid->first, 6); + if (defined $proto && $proto =~ /^\*\*/ && $kid->name eq "rv2gv" + && !($kid->private & OPpLVAL_INTRO)) { + push @exprs, $first = $self->rv2gv_or_string($kid->first); $kid = $kid->sibling; } for (; !null($kid); $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 6); } if ($name eq "reverse" && ($op->private & OPpREVERSE_INPLACE)) { - return "$exprs[0] = $name" . ($parens ? "($exprs[0])" : " $exprs[0]"); + return "$exprs[0] = $fullname" + . ($parens ? "($exprs[0])" : " $exprs[0]"); } - if ($parens) { - return "$name(" . join(", ", @exprs) . ")"; + if ($parens && $nollafr) { + return "($fullname " . join(", ", @exprs) . ")"; + } elsif ($parens) { + return "$fullname(" . join(", ", @exprs) . ")"; } else { - return "$name " . join(", ", @exprs); + return "$fullname " . join(", ", @exprs); } } sub pp_bless { listop(@_, "bless") } sub pp_atan2 { maybe_targmy(@_, \&listop, "atan2") } -sub pp_substr { maybe_local(@_, listop(@_, "substr")) } +sub pp_substr { + my ($self,$op,$cx) = @_; + if ($op->private & OPpSUBSTR_REPL_FIRST) { + return + listop($self, $op, 7, "substr", $op->first->sibling->sibling) + . " = " + . $self->deparse($op->first->sibling, 7); + } + maybe_local(@_, listop(@_, "substr")) +} sub pp_vec { maybe_local(@_, listop(@_, "vec")) } sub pp_index { maybe_targmy(@_, \&listop, "index") } sub pp_rindex { maybe_targmy(@_, \&listop, "rindex") } @@ -2336,9 +2590,7 @@ sub pp_unshift { maybe_targmy(@_, \&listop, "unshift") } sub pp_reverse { listop(@_, "reverse") } sub pp_warn { listop(@_, "warn") } sub pp_die { listop(@_, "die") } -# Actually, return is exempt from the LLAFR (see examples in this very -# module!), but for consistency's sake, ignore that fact -sub pp_return { listop(@_, "return") } +sub pp_return { listop(@_, "return", undef, 1) } # llafr does not apply sub pp_open { listop(@_, "open") } sub pp_pipe_op { listop(@_, "pipe") } sub pp_tie { listop(@_, "tie") } @@ -2404,13 +2656,13 @@ sub pp_syscall { listop(@_, "syscall") } sub pp_glob { my $self = shift; my($op, $cx) = @_; - if ($op->flags & OPf_SPECIAL) { - return $self->deparse($op->first->sibling); - } my $text = $self->dq($op->first->sibling); # skip pushmark + my $keyword = + $op->flags & OPf_SPECIAL ? 'glob' : $self->keyword('glob'); if ($text =~ /^\$?(\w|::|\`)+$/ # could look like a readline - or $text =~ /[<>]/) { - return 'glob(' . single_delim('qq', '"', $text) . ')'; + or $keyword =~ /^CORE::/ + or $text =~ /[<>]/) { + return "$keyword(" . single_delim('qq', '"', $text) . ')'; } else { return '<' . $text . '>'; } @@ -2435,10 +2687,11 @@ sub pp_truncate { $fh = "+$fh" if not $parens and substr($fh, 0, 1) eq "("; } my $len = $self->deparse($kid->sibling, 6); + my $name = $self->keyword('truncate'); if ($parens) { - return "truncate($fh, $len)"; + return "$name($fh, $len)"; } else { - return "truncate $fh, $len"; + return "$name $fh, $len"; } } @@ -2446,7 +2699,7 @@ sub indirop { my $self = shift; my($op, $cx, $name) = @_; my($expr, @exprs); - my $kid = $op->first->sibling; + my $firstkid = my $kid = $op->first->sibling; my $indir = ""; if ($op->flags & OPf_STACKED) { $indir = $kid; @@ -2470,19 +2723,20 @@ sub indirop { $indir = '{$b cmp $a} '; } for (; !null($kid); $kid = $kid->sibling) { - $expr = $self->deparse($kid, 6); + $expr = $self->deparse($kid, !$indir && $kid == $firstkid && $name eq "sort" && $firstkid->name eq "entersub" ? 16 : 6); push @exprs, $expr; } - my $name2 = $name; + my $name2; if ($name eq "sort" && $op->private & OPpSORT_REVERSE) { - $name2 = 'reverse sort'; + $name2 = $self->keyword('reverse') . ' ' . $self->keyword('sort'); } + else { $name2 = $self->keyword($name) } if ($name eq "sort" && ($op->private & OPpSORT_INPLACE)) { return "$exprs[0] = $name2 $indir $exprs[0]"; } my $args = $indir . join(", ", @exprs); - if ($indir ne "" and $name eq "sort") { + if ($indir ne "" && $name eq "sort") { # We don't want to say "sort(f 1, 2, 3)", since perl -w will # give bareword warnings in that case. Therefore if context # requires, we'll put parens around the outside "(sort f 1, 2, @@ -2494,6 +2748,13 @@ sub indirop { } else { return "$name2 $args"; } + } elsif ( + !$indir && $name eq "sort" + && $op->first->sibling->name eq 'entersub' + ) { + # We cannot say sort foo(bar), as foo will be interpreted as a + # comparison routine. We have to say sort(...) in that case. + return "$name2($args)"; } else { return $self->maybe_parens_func($name2, $args, $cx, 5); } @@ -2535,6 +2796,7 @@ sub pp_list { my($op, $cx) = @_; my($expr, @exprs); my $kid = $op->first->sibling; # skip pushmark + return '' if class($kid) eq 'NULL'; my $lop; my $local = "either"; # could be local(...), my(...), state(...) or our(...) for ($lop = $kid; !null($lop); $lop = $lop->sibling) { @@ -2712,7 +2974,7 @@ sub loop_common { $var = "\$" . $self->deparse($var, 1); } $body = $kid->first->first->sibling; # skip OP_AND and OP_ITER - if (!is_state $body->first and $body->first->name ne "stub") { + if (!is_state $body->first and $body->first->name !~ /^(?:stub|leave|scope)$/) { confess unless $var eq '$_'; $body = $body->first; return $self->deparse($body, 2) . " foreach ($ary)"; @@ -2786,10 +3048,9 @@ sub pp_leavetry { return "eval {\n\t" . $self->pp_leave(@_) . "\n\b}"; } -BEGIN { eval "sub OP_CONST () {" . opnumber("const") . "}" } -BEGIN { eval "sub OP_STRINGIFY () {" . opnumber("stringify") . "}" } -BEGIN { eval "sub OP_RV2SV () {" . opnumber("rv2sv") . "}" } -BEGIN { eval "sub OP_LIST () {" . opnumber("list") . "}" } +BEGIN { for (qw[ const stringify rv2sv list glob ]) { + eval "sub OP_\U$_ () { " . opnumber($_) . "}" +}} sub pp_null { my $self = shift; @@ -2807,6 +3068,14 @@ sub pp_null { return $self->pp_scope($op->first, $cx); } elsif ($op->targ == OP_STRINGIFY) { return $self->dquote($op, $cx); + } elsif ($op->targ == OP_GLOB) { + return $self->pp_glob( + $op->first # entersub + ->first # ex-list + ->first # pushmark + ->sibling, # glob + $cx + ); } elsif (!null($op->first->sibling) and $op->first->sibling->name eq "readline" and $op->first->sibling->flags & OPf_STACKED) { @@ -2877,7 +3146,7 @@ sub pp_gvsv { my($op, $cx) = @_; my $gv = $self->gv_or_padgv($op); return $self->maybe_local($op, $cx, $self->stash_variable("\$", - $self->gv_name($gv))); + $self->gv_name($gv), $cx)); } sub pp_gv { @@ -2887,22 +3156,23 @@ sub pp_gv { return $self->gv_name($gv); } +sub pp_aelemfast_lex { + my $self = shift; + my($op, $cx) = @_; + my $name = $self->padname($op->targ); + $name =~ s/^@/\$/; + return $name . "[" . ($op->private + $self->{'arybase'}) . "]"; +} + sub pp_aelemfast { my $self = shift; my($op, $cx) = @_; - my $name; - if ($op->flags & OPf_SPECIAL) { # optimised PADAV - $name = $self->padname($op->targ); - $name =~ s/^@/\$/; - } - else { - my $gv = $self->gv_or_padgv($op); - $name = $self->gv_name($gv); - $name = $self->{'curstash'}."::$name" - if $name !~ /::/ && $self->lex_in_scope('@'.$name); - $name = '$' . $name; - } + # optimised PADAV, pre 5.15 + return $self->pp_aelemfast_lex(@_) if ($op->flags & OPf_SPECIAL); + my $gv = $self->gv_or_padgv($op); + my($name,$quoted) = $self->stash_variable_name('@',$gv); + $name = $quoted ? "$name->" : '$' . $name; return $name . "[" . ($op->private + $self->{'arybase'}) . "]"; } @@ -2916,7 +3186,7 @@ sub rv2x { } my $kid = $op->first; if ($kid->name eq "gv") { - return $self->stash_variable($type, $self->deparse($kid, 0)); + return $self->stash_variable($type, $self->deparse($kid, 0), $cx); } elsif (is_scalar $kid) { my $str = $self->deparse($kid, 0); if ($str =~ /^\$([^\w\d])\z/) { @@ -3025,13 +3295,15 @@ sub elem_or_slice_array_name } elsif (is_scope($array)) { # ${expr}[0] return "{" . $self->deparse($array, 0) . "}"; } elsif ($array->name eq "gv") { - $array = $self->gv_name($self->gv_or_padgv($array)); - if ($array !~ /::/) { - my $prefix = ($left eq '[' ? '@' : '%'); - $array = $self->{curstash}.'::'.$array - if $self->lex_in_scope($prefix . $array); + ($array, my $quoted) = + $self->stash_variable_name( + $left eq '[' ? '@' : '%', $self->gv_or_padgv($array) + ); + if (!$allow_arrow && $quoted) { + # This cannot happen. + die "Invalid variable name $array for slice"; } - return $array; + return $quoted ? "$array->" : $array; } elsif (!$allow_arrow || is_scalar $array) { # $x[0], $$x[0], ... return $self->deparse($array, 24); } else { @@ -3089,7 +3361,8 @@ sub elem { } if (my $array_name=$self->elem_or_slice_array_name ($array, $left, $padname, 1)) { - return "\$" . $array_name . $left . $idx . $right; + return ($array_name =~ /->\z/ ? $array_name : "\$" . $array_name) + . $left . $idx . $right; } else { # $x[20][3]{hi} or expr->[20] my $arrow = is_subscriptable($array) ? "" : "->"; @@ -3177,7 +3450,7 @@ sub _method { # doesn't get flattened by the append_elem that adds the method, # making a (object, arg1, arg2, ...) list where the object # usually is. This can be distinguished from - # `($obj, $arg1, $arg2)->meth()' (which is legal if $arg2 is an + # '($obj, $arg1, $arg2)->meth()' (which is legal if $arg2 is an # object) because in the later the list is in scalar context # as the left side of -> always is, while in the former # the list is in list context as method arguments always are. @@ -3192,7 +3465,7 @@ sub _method { } else { $obj = $kid; $kid = $kid->sibling; - for (; !null ($kid->sibling) && $kid->name ne "method_named"; + for (; !null ($kid->sibling) && $kid->name!~/^method(?:_named)?\z/; $kid = $kid->sibling) { push @exprs, $kid } @@ -3211,7 +3484,8 @@ sub _method { } return { method => $meth, variable_method => ref($meth), - object => $obj, args => \@exprs }; + object => $obj, args => \@exprs }, + $cx; } # compat function only @@ -3222,12 +3496,22 @@ sub method { } sub e_method { - my ($self, $info) = @_; + my ($self, $info, $cx) = @_; my $obj = $self->deparse($info->{object}, 24); my $meth = $info->{method}; $meth = $self->deparse($meth, 1) if $info->{variable_method}; my $args = join(", ", map { $self->deparse($_, 6) } @{$info->{args}} ); + if ($info->{object}->name eq 'scope' && want_list $info->{object}) { + # method { $object } + # This must be deparsed this way to preserve list context + # of $object. + my $need_paren = $cx >= 6; + return '(' x $need_paren + . $meth . substr($obj,2) # chop off the "do" + . " $args" + . ')' x $need_paren; + } my $kid = $obj . "->" . $meth; if (length $args) { return $kid . "(" . $args . ")"; # parens mandatory @@ -3310,7 +3594,7 @@ sub check_proto { } } } - return "&" if $proto and !$doneok; # too few args and no `;' + return "&" if $proto and !$doneok; # too few args and no ';' return "&" if @args; # too many args return ("", join ", ", @reals); } @@ -3390,13 +3674,14 @@ sub pp_entersub { $args = join(", ", map($self->deparse($_, 6), @exprs)); } if ($prefix or $amper) { + if ($kid eq '&') { $kid = "{$kid}" } # &{&} cannot be written as && if ($op->flags & OPf_STACKED) { return $prefix . $amper . $kid . "(" . $args . ")"; } else { return $prefix . $amper. $kid; } } else { - # It's a syntax error to call CORE::GLOBAL::foo without a prefix, + # It's a syntax error to call CORE::GLOBAL::foo with a prefix, # so it must have been translated from a keyword call. Translate # it back. $kid =~ s/^CORE::GLOBAL:://; @@ -3732,6 +4017,16 @@ sub const { } return "{" . join(", ", @elts) . "}"; } elsif (class($ref) eq "CV") { + BEGIN { + if ($] > 5.0150051) { + require overloading; + unimport overloading; + } + } + if ($] > 5.0150051 && $self->{curcv} && + $self->{curcv}->object_2svref == $ref->object_2svref) { + return $self->keyword("__SUB__"); + } return "sub " . $self->deparse_sub($ref); } if ($ref->FLAGS & SVs_SMG) { @@ -3785,7 +4080,7 @@ sub pp_const { if ($op->private & OPpCONST_ARYBASE) { return '$['; } -# if ($op->private & OPpCONST_BARE) { # trouble with `=>' autoquoting +# if ($op->private & OPpCONST_BARE) { # trouble with '=>' autoquoting # return $self->const_sv($op)->PV; # } my $sv = $self->const_sv($op); @@ -3820,6 +4115,8 @@ sub dq { return '\l' . $self->dq($op->first->sibling); } elsif ($type eq "quotemeta") { return '\Q' . $self->dq($op->first->sibling) . '\E'; + } elsif ($type eq "fc") { + return '\F' . $self->dq($op->first->sibling) . '\E'; } elsif ($type eq "join") { return $self->deparse($op->last, 26); # was join($", @ary) } else { @@ -3833,7 +4130,10 @@ sub pp_backtick { # skip pushmark if it exists (readpipe() vs ``) my $child = $op->first->sibling->isa('B::NULL') ? $op->first : $op->first->sibling; - return single_delim("qx", '`', $self->dq($child)); + if ($self->pure_string($child)) { + return single_delim("qx", '`', $self->dq($child, 1)); + } + unop($self, @_, "readpipe"); } sub dquote { @@ -3859,7 +4159,7 @@ sub double_delim { if (($succeed, $to) = balanced_delim($to) and $succeed) { return "$from$to"; } else { - for $delim ('/', '"', '#') { # note no `'' -- s''' is special + for $delim ('/', '"', '#') { # note no "'" -- s''' is special return "$from$delim$to$delim" if index($to, $delim) == -1; } $to =~ s[/][\\/]g; @@ -4138,10 +4438,14 @@ sub re_dq { return '\l' . $self->re_dq($op->first->sibling, $extended); } elsif ($type eq "quotemeta") { return '\Q' . $self->re_dq($op->first->sibling, $extended) . '\E'; + } elsif ($type eq "fc") { + return '\F' . $self->re_dq($op->first->sibling, $extended) . '\E'; } elsif ($type eq "join") { return $self->deparse($op->last, 26); # was join($", @ary) } else { - return $self->deparse($op, 26); + my $ret = $self->deparse($op, 26); + $ret =~ s/^\$([(|)])\z/\${$1}/; # $( $| $) need braces + return $ret; } } @@ -4150,10 +4454,10 @@ sub pure_string { return 0 if null $op; my $type = $op->name; - if ($type eq 'const') { + if ($type eq 'const' || $type eq 'av2arylen') { return 1; } - elsif ($type =~ /^[ul]c(first)?$/ || $type eq 'quotemeta') { + elsif ($type =~ /^(?:[ul]c(first)?|fc)$/ || $type eq 'quotemeta') { return $self->pure_string($op->first->sibling); } elsif ($type eq 'join') { @@ -4175,9 +4479,12 @@ sub pure_string { return 1; } elsif ($type eq "null" and $op->can('first') and not null $op->first and - $op->first->name eq "null" and $op->first->can('first') + ($op->first->name eq "null" and $op->first->can('first') and not null $op->first->first and - $op->first->first->name eq "aelemfast") { + $op->first->first->name eq "aelemfast" + or + $op->first->name =~ /^aelemfast(?:_lex)?\z/ + )) { return 1; } else { @@ -4216,6 +4523,38 @@ sub pp_regcomp { return (($self->regcomp($op, $cx, 0))[0]); } +sub re_flags { + my ($self, $op) = @_; + my $flags = ''; + my $pmflags = $op->pmflags; + $flags .= "g" if $pmflags & PMf_GLOBAL; + $flags .= "i" if $pmflags & PMf_FOLD; + $flags .= "m" if $pmflags & PMf_MULTILINE; + $flags .= "o" if $pmflags & PMf_KEEP; + $flags .= "s" if $pmflags & PMf_SINGLELINE; + $flags .= "x" if $pmflags & PMf_EXTENDED; + $flags .= "p" if $pmflags & RXf_PMf_KEEPCOPY; + if (my $charset = $pmflags & RXf_PMf_CHARSET) { + # Hardcoding this is fragile, but B does not yet export the + # constants we need. + $flags .= qw(d l u a aa)[$charset >> 5] + } + # The /d flag is indicated by 0; only show it if necessary. + elsif ($self->{hinthash} and + $self->{hinthash}{reflags_charset} + || $self->{hinthash}{feature_unicode} + or $self->{hints} & $feature::hint_mask + && ($self->{hints} & $feature::hint_mask) + != $feature::hint_mask + && do { + $self->{hints} & $feature::hint_uni8bit; + } + ) { + $flags .= 'd'; + } + $flags; +} + # osmic acid -- see osmium tetroxide my %matchwords; @@ -4234,7 +4573,8 @@ sub matchop { $kid = $kid->sibling; } my $quote = 1; - my $extended = ($op->pmflags & PMf_EXTENDED); + my $pmflags = $op->pmflags; + my $extended = ($pmflags & PMf_EXTENDED); my $rhs_bound_to_defsv; if (null $kid) { my $unbacked = re_unback($op->precomp); @@ -4247,18 +4587,18 @@ sub matchop { carp("found ".$kid->name." where regcomp expected"); } else { ($re, $quote) = $self->regcomp($kid, 21, $extended); - $rhs_bound_to_defsv = 1 if $kid->first->first->flags & OPf_SPECIAL; + my $matchop = $kid->first->first; + if ($matchop->name =~ /^(?:match|transr?|subst)\z/ + && $matchop->flags & OPf_SPECIAL) { + $rhs_bound_to_defsv = 1; + } } my $flags = ""; - $flags .= "c" if $op->pmflags & PMf_CONTINUE; - $flags .= "g" if $op->pmflags & PMf_GLOBAL; - $flags .= "i" if $op->pmflags & PMf_FOLD; - $flags .= "m" if $op->pmflags & PMf_MULTILINE; - $flags .= "o" if $op->pmflags & PMf_KEEP; - $flags .= "s" if $op->pmflags & PMf_SINGLELINE; - $flags .= "x" if $op->pmflags & PMf_EXTENDED; + $flags .= "c" if $pmflags & PMf_CONTINUE; + $flags .= $self->re_flags($op); + $flags = join '', sort split //, $flags; $flags = $matchwords{$flags} if $matchwords{$flags}; - if ($op->pmflags & PMf_ONCE) { # only one kind of delimiter works here + if ($pmflags & PMf_ONCE) { # only one kind of delimiter works here $re =~ s/\?/\\?/g; $re = "?$re?"; } elsif ($quote) { @@ -4282,6 +4622,8 @@ sub pp_match { matchop(@_, "m", "/") } sub pp_pushre { matchop(@_, "m", "/") } sub pp_qr { matchop(@_, "qr", "") } +sub pp_runcv { unop(@_, "__SUB__"); } + sub pp_split { my $self = shift; my($op, $cx) = @_; @@ -4301,7 +4643,7 @@ sub pp_split { } elsif (!ref($replroot) and $replroot > 0) { $gv = $self->padval($replroot); } - $ary = $self->stash_variable('@', $self->gv_name($gv)) if $gv; + $ary = $self->stash_variable('@', $self->gv_name($gv), $cx) if $gv; for (; !null($kid); $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 6); @@ -4332,7 +4674,7 @@ my %substwords; map($substwords{join "", sort split //, $_} = $_, 'ego', 'egoism', 'em', 'es', 'ex', 'exes', 'gee', 'go', 'goes', 'ie', 'ism', 'iso', 'me', 'meese', 'meso', 'mig', 'mix', 'os', 'ox', 'oxime', 'see', 'seem', - 'seg', 'sex', 'sig', 'six', 'smog', 'sog', 'some', 'xi', + 'seg', 'sex', 'sig', 'six', 'smog', 'sog', 'some', 'xi', 'rogue', 'sir', 'rise', 'smore', 'more', 'seer', 'rome', 'gore', 'grim', 'grime', 'or', 'rose', 'rosie'); @@ -4347,6 +4689,7 @@ sub pp_subst { $kid = $kid->sibling; } my $flags = ""; + my $pmflags = $op->pmflags; if (null($op->pmreplroot)) { $repl = $self->dq($kid); $kid = $kid->sibling; @@ -4356,13 +4699,13 @@ sub pp_subst { $repl = $repl->first; $flags .= "e"; } - if ($op->pmflags & PMf_EVAL) { + if ($pmflags & PMf_EVAL) { $repl = $self->deparse($repl->first, 0); } else { $repl = $self->dq($repl); } } - my $extended = ($op->pmflags & PMf_EXTENDED); + my $extended = ($pmflags & PMf_EXTENDED); if (null $kid) { my $unbacked = re_unback($op->precomp); if ($extended) { @@ -4374,14 +4717,10 @@ sub pp_subst { } else { ($re) = $self->regcomp($kid, 1, $extended); } - $flags .= "e" if $op->pmflags & PMf_EVAL; - $flags .= "r" if $op->pmflags & PMf_NONDESTRUCT; - $flags .= "g" if $op->pmflags & PMf_GLOBAL; - $flags .= "i" if $op->pmflags & PMf_FOLD; - $flags .= "m" if $op->pmflags & PMf_MULTILINE; - $flags .= "o" if $op->pmflags & PMf_KEEP; - $flags .= "s" if $op->pmflags & PMf_SINGLELINE; - $flags .= "x" if $extended; + $flags .= "r" if $pmflags & PMf_NONDESTRUCT; + $flags .= "e" if $pmflags & PMf_EVAL; + $flags .= $self->re_flags($op); + $flags = join '', sort split //, $flags; $flags = $substwords{$flags} if $substwords{$flags}; if ($binop) { return $self->maybe_parens("$var =~ s" @@ -4408,18 +4747,18 @@ B B<-MO=Deparse>[B<,-d>][B<,-f>I][B<,-p>][B<,-q>][B<,-l>] B::Deparse is a backend module for the Perl compiler that generates perl source code, based on the internal compiled structure that perl -itself creates after parsing a program. The output of B::Deparse won't +itself creates after parsing a program. The output of B::Deparse won't be exactly the same as the original source, since perl doesn't keep track of comments or whitespace, and there isn't a one-to-one correspondence between perl's syntactical constructions and their -compiled form, but it will often be close. When you use the B<-p> +compiled form, but it will often be close. When you use the B<-p> option, the output also includes parentheses even when they are not required by precedence, which can make it easy to see if perl is parsing your expressions the way you intended. While B::Deparse goes to some lengths to try to figure out what your original program was doing, some parts of the language can still trip -it up; it still fails even on some parts of Perl's own test suite. If +it up; it still fails even on some parts of Perl's own test suite. If you encounter a failure other than the most common ones described in the BUGS section below, you can help contribute to B::Deparse's ongoing development by submitting a bug report with a small @@ -4436,7 +4775,7 @@ the '-MO=Deparse', separated by a comma but not any white space. Output data values (when they appear as constants) using Data::Dumper. Without this option, B::Deparse will use some simple routines of its -own for the same purpose. Currently, Data::Dumper is better for some +own for the same purpose. Currently, Data::Dumper is better for some kinds of data (such as complex structures with sharing and self-reference) while the built-in routines are better for others (such as odd floating-point values). @@ -4444,8 +4783,9 @@ self-reference) while the built-in routines are better for others =item B<-f>I Normally, B::Deparse deparses the main code of a program, and all the subs -defined in the same file. To include subs defined in other files, pass the -B<-f> option with the filename. You can pass the B<-f> option several times, to +defined in the same file. To include subs defined in +other files, pass the B<-f> option with the filename. +You can pass the B<-f> option several times, to include more than one secondary file. (Most of the time you don't want to use it at all.) You can also use this option to include subs which are defined in the scope of a B<#line> directive with two parameters. @@ -4457,11 +4797,11 @@ locations of the original code. =item B<-p> -Print extra parentheses. Without this option, B::Deparse includes +Print extra parentheses. Without this option, B::Deparse includes parentheses in its output only when they are needed, based on the -structure of your program. With B<-p>, it uses parentheses (almost) -whenever they would be legal. This can be useful if you are used to -LISP, or if you want to see how perl parses your input. If you say +structure of your program. With B<-p>, it uses parentheses (almost) +whenever they would be legal. This can be useful if you are used to +LISP, or if you want to see how perl parses your input. If you say if ($var & 0x7f == 65) {print "Gimme an A!"} print ($which ? $a : $b), "\n"; @@ -4480,8 +4820,8 @@ perl optimized away a constant value). =item B<-P> -Disable prototype checking. With this option, all function calls are -deparsed as if no prototype was defined for them. In other words, +Disable prototype checking. With this option, all function calls are +deparsed as if no prototype was defined for them. In other words, perl -MO=Deparse,-P -e 'sub foo (\@) { 1 } foo @x' @@ -4497,7 +4837,7 @@ making clear how the parameters are actually passed to C. =item B<-q> Expand double-quoted strings into the corresponding combinations of -concatenation, uc, ucfirst, lc, lcfirst, quotemeta, and join. For +concatenation, uc, ucfirst, lc, lcfirst, quotemeta, and join. For instance, print print "Hello, $world, @ladies, \u$gentlemen\E, \u\L$me!"; @@ -4509,21 +4849,21 @@ as Note that the expanded form represents the way perl handles such constructions internally -- this option actually turns off the reverse -translation that B::Deparse usually does. On the other hand, note that +translation that B::Deparse usually does. On the other hand, note that C<$x = "$y"> is not the same as C<$x = $y>: the former makes the value of $y into a string before doing the assignment. =item B<-s>I -Tweak the style of B::Deparse's output. The letters should follow -directly after the 's', with no space or punctuation. The following +Tweak the style of B::Deparse's output. The letters should follow +directly after the 's', with no space or punctuation. The following options are available: =over 4 =item B -Cuddle C, C, and C blocks. For example, print +Cuddle C, C, and C blocks. For example, print if (...) { ... @@ -4544,11 +4884,11 @@ The default is not to cuddle. =item BI -Indent lines by multiples of I columns. The default is 4 columns. +Indent lines by multiples of I columns. The default is 4 columns. =item B -Use tabs for each 8 columns of indent. The default is to use only spaces. +Use tabs for each 8 columns of indent. The default is to use only spaces. For instance, if the style options are B<-si4T>, a line that's indented 3 times will be preceded by one tab and four spaces; if the options were B<-si8T>, the same line would be preceded by three tabs. @@ -4557,14 +4897,14 @@ B<-si8T>, the same line would be preceded by three tabs. Print I for the value of a constant that can't be determined because it was optimized away (mnemonic: this happens when a constant -is used in Boid context). The end of the string is marked by a period. +is used in Boid context). The end of the string is marked by a period. The string should be a valid perl expression, generally a constant. Note that unless it's a number, it probably needs to be quoted, and on -a command line quotes need to be protected from the shell. Some +a command line quotes need to be protected from the shell. Some conventional values include 0, 1, 42, '', 'foo', and 'Useless use of constant omitted' (which may need to be B<-sv"'Useless use of constant omitted'."> -or something similar depending on your shell). The default is '???'. +or something similar depending on your shell). The default is '???'. If you're using B::Deparse on a module or other file that's require'd, you shouldn't use a value that evaluates to false, since the customary true constant at the end of a module will be in void context when the @@ -4575,8 +4915,8 @@ file is compiled as a main program. =item B<-x>I Expand conventional syntax constructions into equivalent ones that expose -their internal operation. I should be a digit, with higher values -meaning more expansion. As with B<-q>, this actually involves turning off +their internal operation. I should be a digit, with higher values +meaning more expansion. As with B<-q>, this actually involves turning off special cases in B::Deparse's normal operations. If I is at least 3, C loops will be translated into equivalent @@ -4657,7 +4997,7 @@ programs. $deparse = B::Deparse->new(OPTIONS) Create an object to store the state of a deparsing operation and any -options. The options are the same as those that can be given on the +options. The options are the same as those that can be given on the command line (see L); options that are separated by commas after B<-MO=Deparse> should be given as separate strings. @@ -4666,7 +5006,7 @@ after B<-MO=Deparse> should be given as separate strings. $deparse->ambient_pragmas(strict => 'all', '$[' => $[); The compilation of a subroutine can be affected by a few compiler -directives, B. These are: +directives, B. These are: =over 4 @@ -4703,15 +5043,15 @@ use re; Ordinarily, if you use B::Deparse on a subroutine which has been compiled in the presence of one or more of these pragmas, the output will include statements to turn on the appropriate -directives. So if you then compile the code returned by coderef2text, +directives. So if you then compile the code returned by coderef2text, it will behave the same way as the subroutine which you deparsed. However, you may know that you intend to use the results in a -particular context, where some pragmas are already in scope. In +particular context, where some pragmas are already in scope. In this case, you use the B method to describe the assumptions you wish to make. -Not all of the options currently have any useful effect. See +Not all of the options currently have any useful effect. See L for more details. The parameters it accepts are: @@ -4721,7 +5061,7 @@ The parameters it accepts are: =item strict Takes a string, possibly containing several values separated -by whitespace. The special values "all" and "none" mean what you'd +by whitespace. The special values "all" and "none" mean what you'd expect. $deparse->ambient_pragmas(strict => 'subs refs'); @@ -4729,6 +5069,7 @@ expect. =item $[ Takes a number, the value of the array base $[. +Cannot be non-zero on Perl 5.15.3 or later. =item bytes @@ -4742,7 +5083,7 @@ be in the ambient scope, otherwise not. =item re Takes a string, possibly containing a whitespace-separated list of -values. The values "all" and "none" are special. It's also permissible +values. The values "all" and "none" are special. It's also permissible to pass an array reference here. $deparser->ambient_pragmas(re => 'eval'); @@ -4751,14 +5092,14 @@ to pass an array reference here. =item warnings Takes a string, possibly containing a whitespace-separated list of -values. The values "all" and "none" are special, again. It's also +values. The values "all" and "none" are special, again. It's also permissible to pass an array reference here. $deparser->ambient_pragmas(warnings => [qw[void io]]); If one of the values is the string "FATAL", then all the warnings in that list will be considered fatal, just as with the B -pragma itself. Should you need to specify that some warnings are +pragma itself. Should you need to specify that some warnings are fatal, and others are merely enabled, you can pass the B parameter twice: @@ -4803,10 +5144,10 @@ stored in the special hash %^H. Return source code for the body of a subroutine (a block, optionally preceded by a prototype in parens), given a reference to the -sub. Because a subroutine can have no names, or more than one name, +sub. Because a subroutine can have no names, or more than one name, this method doesn't return a complete subroutine definition -- if you want to eval the result, you should prepend "sub subname ", or "sub " -for an anonymous function constructor. Unless the sub was defined in +for an anonymous function constructor. Unless the sub was defined in the main:: package, the code will include a package declaration. =head1 BUGS @@ -4816,7 +5157,8 @@ the main:: package, the code will include a package declaration. =item * The only pragmas to be completely supported are: C, -C, C, and C. (C<$[>, which +C, C, C +and C. (C<$[>, which behaves like a pragma, is also supported.) Excepting those listed above, we're currently unable to guarantee that @@ -4831,7 +5173,7 @@ than in the input file. In fact, the above is a specific instance of a more general problem: we can't guarantee to produce BEGIN blocks or C declarations in -exactly the right place. So if you use a module which affects compilation +exactly the right place. So if you use a module which affects compilation (such as by over-riding keywords, overloading constants or whatever) then the output code might not work as intended. @@ -4840,14 +5182,6 @@ from the Perl core to fix. =item * -If a keyword is over-ridden, and your program explicitly calls -the built-in version by using CORE::keyword, the output of B::Deparse -will not reflect this. If you run the resulting code, it will call -the over-ridden version rather than the built-in one. (Maybe there -should be an option to B print keyword calls as C.) - -=item * - Some constants don't print correctly either with or without B<-d>. For instance, neither B::Deparse nor Data::Dumper know how to print dual-valued scalars correctly, as in: @@ -4865,7 +5199,8 @@ produced is already ordinary Perl which shouldn't be filtered again. =item * -Optimised away statements are rendered as '???'. This includes statements that +Optimised away statements are rendered as +'???'. This includes statements that have a compile-time side-effect, such as the obscure my $x if 0; @@ -4879,7 +5214,7 @@ which is not, consequently, deparsed correctly. =item * Lexical (my) variables declared in scopes external to a subroutine -appear in code2ref output text as package variables. This is a tricky +appear in code2ref output text as package variables. This is a tricky problem, as perl has no native facility for referring to a lexical variable defined within a different scope, although L is a good start. diff --git a/Master/tlpkg/tlperl/lib/B/Lint.pm b/Master/tlpkg/tlperl/lib/B/Lint.pm index a38ee323d0d..a080af778df 100644 --- a/Master/tlpkg/tlperl/lib/B/Lint.pm +++ b/Master/tlpkg/tlperl/lib/B/Lint.pm @@ -1,6 +1,6 @@ package B::Lint; -our $VERSION = '1.13'; ## no critic +our $VERSION = '1.14'; ## no critic =head1 NAME diff --git a/Master/tlpkg/tlperl/lib/B/Lint/Debug.pm b/Master/tlpkg/tlperl/lib/B/Lint/Debug.pm index 1a4bf31f7f6..6ba09708cbf 100644 --- a/Master/tlpkg/tlperl/lib/B/Lint/Debug.pm +++ b/Master/tlpkg/tlperl/lib/B/Lint/Debug.pm @@ -1,6 +1,6 @@ package B::Lint::Debug; -our $VERSION = '1.12'; +our $VERSION = '1.14'; =head1 NAME @@ -13,13 +13,15 @@ should not be loaded unless you're debugging. =cut -package B::SPECIAL; +package # hide from PAUSE + B::SPECIAL; use overload '""' => sub { my $self = shift @_; "SPECIAL($$self)"; }; -package B::OP; +package # hide from PAUSE + B::OP; use overload '""' => sub { my $self = shift @_; my $class = ref $self; @@ -28,7 +30,8 @@ use overload '""' => sub { "$class($name)"; }; -package B::SVOP; +package # hide from PAUSE + B::SVOP; use overload '""' => sub { my $self = shift @_; my $class = ref $self; @@ -37,7 +40,8 @@ use overload '""' => sub { "$class($name," . $self->sv . "," . $self->gv . ")"; }; -package B::SPECIAL; +package # hide from PAUSE + B::SPECIAL; sub DESTROY { } our $AUTOLOAD; @@ -45,7 +49,8 @@ sub AUTOLOAD { my $cx = 0; print "AUTOLOAD $AUTOLOAD\n"; - package DB; + package # hide from PAUSE + DB; while ( my @stuff = caller $cx ) { print "$cx: [@DB::args] [@stuff]\n"; diff --git a/Master/tlpkg/tlperl/lib/B/Terse.pm b/Master/tlpkg/tlperl/lib/B/Terse.pm index 562c58abd83..8e551c5a62f 100644 --- a/Master/tlpkg/tlperl/lib/B/Terse.pm +++ b/Master/tlpkg/tlperl/lib/B/Terse.pm @@ -1,6 +1,6 @@ package B::Terse; -our $VERSION = '1.05'; +our $VERSION = '1.06'; use strict; use B qw(class @specialsv_name); @@ -78,7 +78,15 @@ B::Terse - Walk Perl syntax tree, printing terse info about ops =head1 DESCRIPTION -This version of B::Terse is really just a wrapper that calls B::Concise +This module prints the contents of the parse tree, but without as much +information as L. For comparison, C +produced 96 lines of output from B::Debug, but only 6 from B::Terse. + +This module is useful for people who are writing their own back end, +or who are learning about the Perl internals. It's not useful to the +average programmer. + +This version of B::Terse is really just a wrapper that calls L with the B<-terse> option. It is provided for compatibility with old scripts (and habits) but using B::Concise directly is now recommended instead. diff --git a/Master/tlpkg/tlperl/lib/B/Xref.pm b/Master/tlpkg/tlperl/lib/B/Xref.pm index 64e677ccb82..f3a362c3f6a 100644 --- a/Master/tlpkg/tlperl/lib/B/Xref.pm +++ b/Master/tlpkg/tlperl/lib/B/Xref.pm @@ -1,6 +1,6 @@ package B::Xref; -our $VERSION = '1.02'; +our $VERSION = '1.03'; =head1 NAME @@ -48,6 +48,56 @@ letter "i". Subroutine and method calls are indicated by the character "&". Subroutine definitions are indicated by "s" and format definitions by "f". +For instance, here's part of the report from the I program that +comes with Perl: + + Subroutine clear_noremap + Package (lexical) + $ready_to_print i1069, 1079 + Package main + $& 1086 + $. 1086 + $0 1086 + $1 1087 + $2 1085, 1085 + $3 1085, 1085 + $ARGV 1086 + %HTML_Escapes 1085, 1085 + +This shows the variables used in the subroutine C. The +variable C<$ready_to_print> is a my() (lexical) variable, +Bntroduced (first declared with my()) on line 1069, and used on +line 1079. The variable C<$&> from the main package is used on 1086, +and so on. + +A line number may be prefixed by a single letter: + +=over 4 + +=item i + +Lexical variable introduced (declared with my()) for the first time. + +=item & + +Subroutine or method call. + +=item s + +Subroutine defined. + +=item r + +Format defined. + +=back + +The most useful option the cross referencer has is to save the report +to a separate file. For instance, to save the report on +I to the file I: + + $ perl -MO=Xref,-oreport myperlprogram + =head1 OPTIONS Option words are separated by commas (not whitespace) and follow the diff --git a/Master/tlpkg/tlperl/lib/Benchmark.pm b/Master/tlpkg/tlperl/lib/Benchmark.pm index 39bf041968d..8fc9799736f 100644 --- a/Master/tlpkg/tlperl/lib/Benchmark.pm +++ b/Master/tlpkg/tlperl/lib/Benchmark.pm @@ -385,7 +385,7 @@ code and therefore the difference might end up being E 0. =head1 SEE ALSO -L - a Perl code profiler +L - a Perl code profiler =head1 AUTHORS @@ -440,7 +440,7 @@ our(@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $VERSION); clearcache clearallcache disablecache enablecache); %EXPORT_TAGS=( all => [ @EXPORT, @EXPORT_OK ] ) ; -$VERSION = 1.12; +$VERSION = 1.13; # --- ':hireswallclock' special handling diff --git a/Master/tlpkg/tlperl/lib/CGI.pm b/Master/tlpkg/tlperl/lib/CGI.pm index eed7e6b5ee2..6084f0f89e9 100644 --- a/Master/tlpkg/tlperl/lib/CGI.pm +++ b/Master/tlpkg/tlperl/lib/CGI.pm @@ -1,5 +1,5 @@ package CGI; -require 5.006; +require 5.008001; use Carp 'croak'; # See the bottom of this file for the POD documentation. Search for the @@ -20,7 +20,7 @@ use Carp 'croak'; # The revision is no longer being updated since moving to git. $CGI::revision = '$Id: CGI.pm,v 1.266 2009/07/30 16:32:34 lstein Exp $'; -$CGI::VERSION='3.52'; +$CGI::VERSION='3.59'; # HARD-CODED LOCATION FOR FILE UPLOAD TEMPORARY FILES. # UNCOMMENT THIS ONLY IF YOU KNOW WHAT YOU'RE DOING. @@ -386,7 +386,7 @@ sub new { # user is still holding any reference to them as well. sub DESTROY { my $self = shift; - if ($OS eq 'WINDOWS') { + if ($OS eq 'WINDOWS' || $OS eq 'VMS') { for my $href (values %{$self->{'.tmpfiles'}}) { $href->{hndl}->DESTROY if defined $href->{hndl}; $href->{name}->DESTROY if defined $href->{name}; @@ -525,7 +525,7 @@ sub init { # if we get called more than once, we want to initialize # ourselves from the original query (which may be gone # if it was read from STDIN originally.) - if (defined(@QUERY_PARAM) && !defined($initializer)) { + if (@QUERY_PARAM && !defined($initializer)) { for my $name (@QUERY_PARAM) { my $val = $QUERY_PARAM{$name}; # always an arrayref; $self->param('-name'=>$name,'-value'=> $val); @@ -648,9 +648,9 @@ sub init { last METHOD; } - # If method is GET or HEAD, fetch the query from + # If method is GET, HEAD or DELETE, fetch the query from # the environment. - if ($is_xforms || $meth=~/^(GET|HEAD)$/) { + if ($is_xforms || $meth=~/^(GET|HEAD|DELETE)$/) { if ($MOD_PERL) { $query_string = $self->r->args; } else { @@ -664,14 +664,6 @@ sub init { if ( $content_length > 0 ) { $self->read_from_client(\$query_string,$content_length,0); } - elsif (not defined $ENV{CONTENT_LENGTH}) { - $self->read_from_stdin(\$query_string); - # should this be PUTDATA in case of PUT ? - my($param) = $meth . 'DATA' ; - $self->add_parameter($param) ; - push (@{$self->{param}{$param}},$query_string); - undef $query_string ; - } # Some people want to have their cake and eat it too! # Uncomment this line to have the contents of the query string # APPENDED to the POST data. @@ -1024,47 +1016,6 @@ sub read_from_client { } END_OF_FUNC -'read_from_stdin' => <<'END_OF_FUNC', -# Read data from stdin until all is read -sub read_from_stdin { - my($self, $buff) = @_; - local $^W=0; # prevent a warning - - # - # TODO: loop over STDIN until all is read - # - - my($eoffound) = 0; - my($localbuf) = ''; - my($tempbuf) = ''; - my($bufsiz) = 1024; - my($res); - while ($eoffound == 0) { - if ( $MOD_PERL ) { - $res = $self->r->read($tempbuf, $bufsiz, 0) - } - else { - $res = read(\*STDIN, $tempbuf, $bufsiz); - } - - if ( !defined($res) ) { - # TODO: how to do error reporting ? - $eoffound = 1; - last; - } - if ( $res == 0 ) { - $eoffound = 1; - last; - } - $localbuf .= $tempbuf; - } - - $$buff = $localbuf; - - return $res; -} -END_OF_FUNC - 'delete' => <<'END_OF_FUNC', #### Method: delete # Deletes the named parameter entirely. @@ -2856,7 +2807,6 @@ sub url { my $query_str = $self->query_string; my $rewrite_in_use = $request_uri && $request_uri !~ /^\Q$script_name/; - undef $path if $rewrite_in_use && $rewrite; # path not valid when rewriting active my $uri = $rewrite && $request_uri ? $request_uri : $script_name; $uri =~ s/\?.*$//s; # remove query string @@ -3531,11 +3481,11 @@ sub read_from_cmdline { if ($DEBUG && @ARGV) { @words = @ARGV; } elsif ($DEBUG > 1) { - require "shellwords.pl"; + require Text::ParseWords; print STDERR "(offline mode: enter name=value pairs on standard input; press ^D or ^Z when done)\n"; chomp(@lines = ); # remove newlines $input = join(" ",@lines); - @words = &shellwords($input); + @words = &Text::ParseWords::old_shellwords($input); } for (@words) { s/\\=/%3D/g; @@ -4524,7 +4474,7 @@ HTML "standards". $query = CGI->new; -This will parse the input (from both POST and GET methods) and store +This will parse the input (from POST, GET and DELETE methods) and store it into a perl5 object called $query. Any filehandles from file uploads will have their position reset to @@ -5566,13 +5516,13 @@ place to put HTML extensions, such as colors and wallpaper patterns. =head2 ENDING THE HTML DOCUMENT: - print end_html + print $q->end_html; This ends an HTML document by printing the tags. =head2 CREATING A SELF-REFERENCING URL THAT PRESERVES STATE INFORMATION: - $myself = self_url; + $myself = $q->self_url; print q(I'm talking to myself.); self_url() will return a URL, that, when selected, will reinvoke @@ -5581,7 +5531,7 @@ useful when you want to jump around within the document using internal anchors but you don't want to disrupt the current contents of the form(s). Something like this will do the trick. - $myself = self_url; + $myself = $q->self_url; print "See table 1"; print "See table 2"; print "See for yourself"; @@ -5591,7 +5541,10 @@ method instead. You can also retrieve the unprocessed query string with query_string(): - $the_string = query_string; + $the_string = $q->query_string(); + +The behavior of calling query_string is currently undefined when the HTTP method is +something other than GET. =head2 OBTAINING THE SCRIPT'S URL @@ -5653,9 +5606,7 @@ If Apache's mod_rewrite is turned on, then the script name and path info probably won't match the request that the user sent. Set -rewrite=>1 (default) to return URLs that match what the user sent (the original request URI). Set -rewrite=>0 to return URLs that match -the URL after mod_rewrite's rules have run. Because the additional -path information only makes sense in the context of the rewritten URL, --rewrite is set to false when you request path info in the URL. +the URL after mod_rewrite's rules have run. =back @@ -7950,7 +7901,7 @@ C<:cgi-lib> and C<:standard> method: =head2 Cgi-lib functions that are available in CGI.pm -In compatability mode, the following cgi-lib.pl functions are +In compatibility mode, the following cgi-lib.pl functions are available for your use: ReadParse() @@ -7991,15 +7942,15 @@ available for your use: =head1 AUTHOR INFORMATION -The CGI.pm distribution is copyright 1995-2007, Lincoln D. Stein. It is -distributed under GPL and the Artistic License 2.0. +The CGI.pm distribution is copyright 1995-2007, Lincoln D. Stein. It is +distributed under GPL and the Artistic License 2.0. It is currently +maintained by Mark Stosberg with help from many contributors. -Address bug reports and comments to: lstein@cshl.org. When sending -bug reports, please provide the version of CGI.pm, the version of -Perl, the name and version of your Web server, and the name and -version of the operating system you are using. If the problem is even -remotely browser dependent, please provide information about the -affected browsers as well. +Address bug reports and comments to: https://rt.cpan.org/Public/Dist/Display.html?Queue=CGI.pm +When sending bug reports, please provide the version of CGI.pm, the version of +Perl, the name and version of your Web server, and the name and version of the +operating system you are using. If the problem is even remotely browser +dependent, please provide information about the affected browsers as well. =head1 CREDITS diff --git a/Master/tlpkg/tlperl/lib/CGI/Fast.pm b/Master/tlpkg/tlperl/lib/CGI/Fast.pm index e31dac3f50f..288d854a9d5 100644 --- a/Master/tlpkg/tlperl/lib/CGI/Fast.pm +++ b/Master/tlpkg/tlperl/lib/CGI/Fast.pm @@ -19,7 +19,7 @@ local $^W = 1; # wish, but if you redistribute a modified version, please attach a note # listing the modifications you have made. -$CGI::Fast::VERSION='1.08'; +$CGI::Fast::VERSION='1.09'; use CGI; use FCGI; @@ -43,27 +43,23 @@ sub save_request { # in this package variable. use vars qw($Ext_Request); BEGIN { - # If ENV{FCGI_SOCKET_PATH} is given, explicitly open the socket, - # and keep the request handle around from which to call Accept(). - if ($ENV{FCGI_SOCKET_PATH}) { - my $path = $ENV{FCGI_SOCKET_PATH}; - my $backlog = $ENV{FCGI_LISTEN_QUEUE} || 100; - my $socket = FCGI::OpenSocket( $path, $backlog ); - $Ext_Request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, - \%ENV, $socket, 1 ); - } + # If ENV{FCGI_SOCKET_PATH} is given, explicitly open the socket. + if ($ENV{FCGI_SOCKET_PATH}) { + my $path = $ENV{FCGI_SOCKET_PATH}; + my $backlog = $ENV{FCGI_LISTEN_QUEUE} || 100; + my $socket = FCGI::OpenSocket( $path, $backlog ); + $Ext_Request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, + \%ENV, $socket, 1 ); + } + else { + $Ext_Request = FCGI::Request(); + } } -# New is slightly different in that it calls FCGI's -# accept() method. sub new { my ($self, $initializer, @param) = @_; unless (defined $initializer) { - if ($Ext_Request) { - return undef unless $Ext_Request->Accept() >= 0; - } else { - return undef unless FCGI::accept() >= 0; - } + return undef unless $Ext_Request->Accept() >= 0; } CGI->_reset_globals; $self->_setup_symbols(@CGI::SAVED_SYMBOLS) if @CGI::SAVED_SYMBOLS; diff --git a/Master/tlpkg/tlperl/lib/CGI/Util.pm b/Master/tlpkg/tlperl/lib/CGI/Util.pm index ef95c9f0189..b059281d8e5 100644 --- a/Master/tlpkg/tlperl/lib/CGI/Util.pm +++ b/Master/tlpkg/tlperl/lib/CGI/Util.pm @@ -1,18 +1,17 @@ package CGI::Util; - +require 5.008001; use strict; -use vars qw($VERSION @EXPORT_OK @ISA @A2E @E2A); require Exporter; -@ISA = qw(Exporter); -@EXPORT_OK = qw(rearrange rearrange_header make_attributes unescape escape +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(rearrange rearrange_header make_attributes unescape escape expires ebcdic2ascii ascii2ebcdic); -$VERSION = '3.51'; +our $VERSION = '3.53'; use constant EBCDIC => "\t" ne "\011"; # (ord('^') == 95) for codepage 1047 as on os390, vmesa -@A2E = ( +our @A2E = ( 0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 21, 11, 12, 13, 14, 15, 16, 17, 18, 19, 60, 61, 50, 38, 24, 25, 63, 39, 28, 29, 30, 31, 64, 90,127,123, 91,108, 80,125, 77, 93, 92, 78,107, 96, 75, 97, @@ -30,7 +29,7 @@ use constant EBCDIC => "\t" ne "\011"; 68, 69, 66, 70, 67, 71,156, 72, 84, 81, 82, 83, 88, 85, 86, 87, 140, 73,205,206,203,207,204,225,112,221,222,219,220,141,142,223 ); -@E2A = ( +our @E2A = ( 0, 1, 2, 3,156, 9,134,127,151,141,142, 11, 12, 13, 14, 15, 16, 17, 18, 19,157, 10, 8,135, 24, 25,146,143, 28, 29, 30, 31, 128,129,130,131,132,133, 23, 27,136,137,138,139,140, 5, 6, 7, @@ -162,47 +161,10 @@ sub simple_escape { } sub utf8_chr { - my $c = shift(@_); - if ($] >= 5.006){ - require utf8; - my $u = chr($c); - utf8::encode($u); # drop utf8 flag - return $u; - } - if ($c < 0x80) { - return sprintf("%c", $c); - } elsif ($c < 0x800) { - return sprintf("%c%c", 0xc0 | ($c >> 6), 0x80 | ($c & 0x3f)); - } elsif ($c < 0x10000) { - return sprintf("%c%c%c", - 0xe0 | ($c >> 12), - 0x80 | (($c >> 6) & 0x3f), - 0x80 | ( $c & 0x3f)); - } elsif ($c < 0x200000) { - return sprintf("%c%c%c%c", - 0xf0 | ($c >> 18), - 0x80 | (($c >> 12) & 0x3f), - 0x80 | (($c >> 6) & 0x3f), - 0x80 | ( $c & 0x3f)); - } elsif ($c < 0x4000000) { - return sprintf("%c%c%c%c%c", - 0xf8 | ($c >> 24), - 0x80 | (($c >> 18) & 0x3f), - 0x80 | (($c >> 12) & 0x3f), - 0x80 | (($c >> 6) & 0x3f), - 0x80 | ( $c & 0x3f)); - - } elsif ($c < 0x80000000) { - return sprintf("%c%c%c%c%c%c", - 0xfc | ($c >> 30), - 0x80 | (($c >> 24) & 0x3f), - 0x80 | (($c >> 18) & 0x3f), - 0x80 | (($c >> 12) & 0x3f), - 0x80 | (($c >> 6) & 0x3f), - 0x80 | ( $c & 0x3f)); - } else { - return utf8_chr(0xfffd); - } + my $c = shift(@_); + my $u = chr($c); + utf8::encode($u); # drop utf8 flag + return $u; } # unescape URL-encoded data @@ -236,7 +198,7 @@ sub unescape { # We cannot use the %u escapes, they were rejected by W3C, so the official # way is %XX-escaped utf-8 encoding. # Naturally, Unicode strings have to be converted to their utf-8 byte -# representation. (No action is required on 5.6.) +# representation. # Byte strings were traditionally used directly as a sequence of octets. # This worked if they actually represented binary data (i.e. in CGI::Compress). # This also worked if these byte strings were actually utf-8 encoded; e.g., @@ -245,39 +207,13 @@ sub unescape { # was always so and cannot be fixed without breaking the binary data case. # -- Stepan Kasal # -if ($] == 5.008) { - package utf8; - - no warnings 'redefine'; # needed for Perl 5.8.1+ - - my $is_utf8_redefinition = <<'EOR'; - sub is_utf8 { - my ($text) = @_; - - my $ctext = pack q{C0a*}, $text; - - return ($text ne $ctext) && ($ctext =~ m/^( - [\x09\x0A\x0D\x20-\x7E] - | [\xC2-\xDF][\x80-\xBF] - | \xE0[\xA0-\xBF][\x80-\xBF] - | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} - | \xED[\x80-\x9F][\x80-\xBF] - | \xF0[\x90-\xBF][\x80-\xBF]{2} - | [\xF1-\xF3][\x80-\xBF]{3} - | \xF4[\x80-\x8F][\x80-\xBF]{2} - )*$/xo); - } -EOR - - eval $is_utf8_redefinition; -} sub escape { # If we being called in an OO-context, discard the first argument. shift() if @_ > 1 and ( ref($_[0]) || (defined $_[1] && $_[0] eq $CGI::DefaultClass)); my $toencode = shift; return undef unless defined($toencode); - utf8::encode($toencode) if ($] >= 5.008 && utf8::is_utf8($toencode)); + utf8::encode($toencode) if utf8::is_utf8($toencode); if (EBCDIC) { $toencode=~s/([^a-zA-Z0-9_.~-])/uc sprintf("%%%02x",$E2A[ord($1)])/eg; } else { diff --git a/Master/tlpkg/tlperl/lib/CORE.pod b/Master/tlpkg/tlperl/lib/CORE.pod index c917bba44a0..ec6a8047a4d 100644 --- a/Master/tlpkg/tlperl/lib/CORE.pod +++ b/Master/tlpkg/tlperl/lib/CORE.pod @@ -1,6 +1,6 @@ =head1 NAME -CORE - Pseudo-namespace for Perl's core routines +CORE - Namespace for Perl's core routines =head1 SYNOPSIS @@ -10,16 +10,40 @@ CORE - Pseudo-namespace for Perl's core routines print hex("0x50"),"\n"; # prints 1 print CORE::hex("0x50"),"\n"; # prints 80 + CORE::say "yes"; # prints yes + + BEGIN { *shove = \&CORE::push; } + shove @array, 1,2,3; # pushes on to @array =head1 DESCRIPTION The C namespace gives access to the original built-in functions of -Perl. There is no C package, and therefore you do not need to use or -require an hypothetical "CORE" module prior to accessing routines in this +Perl. The C package is built into +Perl, and therefore you do not need to use or +require a hypothetical "CORE" module prior to accessing routines in this namespace. A list of the built-in functions in Perl can be found in L. +For all Perl keywords, a C prefix will force the built-in function +to be used, even if it has been overridden or would normally require the +L pragma. Despite appearances, this has nothing to do with the +CORE package, but is part of Perl's syntax. + +For many Perl functions, the CORE package contains real subroutines. This +feature is new in Perl 5.16. You can take references to these and make +aliases. However, some can only be called as barewords; i.e., you cannot +use ampersand syntax (C<&foo>) or call them through references. See the +C example above. These subroutines exist for all overridable +keywords, except for C and the infix operators. Calling with +ampersand syntax and through references does not work for the following +functions, as they have special syntax that cannot always be translated +into a simple list (e.g., C vs C): + +C, C, C, C, C, C, C, C, +C, C, C, C, C, C, C, +C, C, C + =head1 OVERRIDING CORE FUNCTIONS To override a Perl built-in routine with your own version, you need to diff --git a/Master/tlpkg/tlperl/lib/CORE/XSUB.h b/Master/tlpkg/tlperl/lib/CORE/XSUB.h index a2cfccd8db2..4e439f17feb 100644 --- a/Master/tlpkg/tlperl/lib/CORE/XSUB.h +++ b/Master/tlpkg/tlperl/lib/CORE/XSUB.h @@ -48,7 +48,15 @@ Used to access elements on the XSUB's stack. =for apidoc AmU||XS Macro to declare an XSUB and its C parameter list. This is handled by -C. +C. It is the same as using the more explicit XS_EXTERNAL macro. + +=for apidoc AmU||XS_INTERNAL +Macro to declare an XSUB and its C parameter list without exporting the symbols. +This is handled by C and generally preferable over exporting the XSUB +symbols unnecessarily. + +=for apidoc AmU||XS_EXTERNAL +Macro to declare an XSUB and its C parameter list explicitly exporting the symbols. =for apidoc Ams||dAX Sets up the C variable. @@ -107,27 +115,46 @@ is a lexical $_ in scope. * Don't forget to change the __attribute__unused__ version of XS() * below too if you change XSPROTO() here. */ + +/* XS_INTERNAL is the explicit static-linkage variant of the default + * XS macro. + * + * XS_EXTERNAL is the same as XS_INTERNAL except it does not include + * "STATIC", ie. it exports XSUB symbols. You probably don't want that. + */ + #define XSPROTO(name) void name(pTHX_ CV* cv) #undef XS +#undef XS_EXTERNAL +#undef XS_INTERNAL #if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING) -# define XS(name) __declspec(dllexport) XSPROTO(name) +# define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name) +# define XS_INTERNAL(name) STATIC XSPROTO(name) #endif #if defined(__SYMBIAN32__) -# define XS(name) EXPORT_C XSPROTO(name) +# define XS_EXTERNAL(name) EXPORT_C XSPROTO(name) +# define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name) #endif -#ifndef XS +#ifndef XS_EXTERNAL # if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus) -# define XS(name) void name(pTHX_ CV* cv __attribute__unused__) +# define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__) +# define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__) # else # ifdef __cplusplus -# define XS(name) extern "C" XSPROTO(name) +# define XS_EXTERNAL(name) extern "C" XSPROTO(name) +# define XS_INTERNAL(name) static XSPROTO(name) # else -# define XS(name) XSPROTO(name) +# define XS_EXTERNAL(name) XSPROTO(name) +# define XS_INTERNAL(name) STATIC XSPROTO(name) # endif # endif #endif +/* We do export xsub symbols by default for the public XS macro. + * Try explicitly using XS_INTERNAL/XS_EXTERNAL instead, please. */ +#define XS(name) XS_EXTERNAL(name) + #define dAX const I32 ax = (I32)(MARK - PL_stack_base + 1) #define dAXMARK \ @@ -367,7 +394,6 @@ Rethrows a previously caught exception. See L. # define VTBL_sv &PL_vtbl_sv # define VTBL_env &PL_vtbl_env # define VTBL_envelem &PL_vtbl_envelem -# define VTBL_sig &PL_vtbl_sig # define VTBL_sigelem &PL_vtbl_sigelem # define VTBL_pack &PL_vtbl_pack # define VTBL_packelem &PL_vtbl_packelem diff --git a/Master/tlpkg/tlperl/lib/CORE/av.h b/Master/tlpkg/tlperl/lib/CORE/av.h index de54fa92826..8d18d25af15 100644 --- a/Master/tlpkg/tlperl/lib/CORE/av.h +++ b/Master/tlpkg/tlperl/lib/CORE/av.h @@ -83,6 +83,8 @@ Same as C. Deprecated, use C instead. Creates a new AV. The reference count is set to 1. +Perl equivalent: C. + =cut */ diff --git a/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h b/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h new file mode 100644 index 00000000000..368410fd378 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/CORE/charclass_invlists.h @@ -0,0 +1,533 @@ +/* -*- buffer-read-only: t -*- + * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + * This file is built by regen/mk_invlists.pl from Unicode::UCD. + * Any changes made here will be lost! + */ + +/* See the generating file for comments */ + + +UV Latin1_invlist[] = { + 2, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 0, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 256, + 0 +}; + +UV AboveLatin1_invlist[] = { + 1, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 256 +}; + +UV ASCII_invlist[] = { + 2, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 0, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 128, + 0 +}; + +UV L1Cased_invlist[] = { + 16, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 65, + 91, + 97, + 123, + 170, + 171, + 181, + 182, + 186, + 187, + 192, + 215, + 216, + 247, + 248, + 443 +}; + +UV VertSpace_invlist[] = { + 6, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 10, + 14, + 133, + 134, + 8232, + 8234 +}; + +UV PerlSpace_invlist[] = { + 6, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 9, + 11, + 12, + 14, + 32, + 33 +}; + +UV XPerlSpace_invlist[] = { + 24, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 9, + 11, + 12, + 14, + 32, + 33, + 133, + 134, + 160, + 161, + 5760, + 5761, + 6158, + 6159, + 8192, + 8203, + 8232, + 8234, + 8239, + 8240, + 8287, + 8288, + 12288, + 12289 +}; + +UV PosixAlnum_invlist[] = { + 6, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 48, + 58, + 65, + 91, + 97, + 123 +}; + +UV L1PosixAlnum_invlist[] = { + 18, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 48, + 58, + 65, + 91, + 97, + 123, + 170, + 171, + 181, + 182, + 186, + 187, + 192, + 215, + 216, + 247, + 248, + 706 +}; + +UV PosixAlpha_invlist[] = { + 4, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 65, + 91, + 97, + 123 +}; + +UV L1PosixAlpha_invlist[] = { + 16, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 65, + 91, + 97, + 123, + 170, + 171, + 181, + 182, + 186, + 187, + 192, + 215, + 216, + 247, + 248, + 706 +}; + +UV PosixBlank_invlist[] = { + 4, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 9, + 10, + 32, + 33 +}; + +UV XPosixBlank_invlist[] = { + 18, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 9, + 10, + 32, + 33, + 160, + 161, + 5760, + 5761, + 6158, + 6159, + 8192, + 8203, + 8239, + 8240, + 8287, + 8288, + 12288, + 12289 +}; + +UV PosixCntrl_invlist[] = { + 4, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 0, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 32, + 127, + 128, + 0 +}; + +UV XPosixCntrl_invlist[] = { + 4, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 0, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 32, + 127, + 160, + 0 +}; + +UV PosixDigit_invlist[] = { + 2, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 48, + 58 +}; + +UV PosixGraph_invlist[] = { + 2, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 33, + 127 +}; + +UV L1PosixGraph_invlist[] = { + 4, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 33, + 127, + 161, + 888 +}; + +UV PosixLower_invlist[] = { + 2, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 97, + 123 +}; + +UV L1PosixLower_invlist[] = { + 12, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 97, + 123, + 170, + 171, + 181, + 182, + 186, + 187, + 223, + 247, + 248, + 256 +}; + +UV PosixPrint_invlist[] = { + 2, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 32, + 127 +}; + +UV L1PosixPrint_invlist[] = { + 4, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 32, + 127, + 160, + 888 +}; + +UV PosixPunct_invlist[] = { + 8, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 33, + 48, + 58, + 65, + 91, + 97, + 123, + 127 +}; + +UV L1PosixPunct_invlist[] = { + 20, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 33, + 48, + 58, + 65, + 91, + 97, + 123, + 127, + 161, + 162, + 167, + 168, + 171, + 172, + 182, + 184, + 187, + 188, + 191, + 192 +}; + +UV PosixSpace_invlist[] = { + 4, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 9, + 14, + 32, + 33 +}; + +UV XPosixSpace_invlist[] = { + 22, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 9, + 14, + 32, + 33, + 133, + 134, + 160, + 161, + 5760, + 5761, + 6158, + 6159, + 8192, + 8203, + 8232, + 8234, + 8239, + 8240, + 8287, + 8288, + 12288, + 12289 +}; + +UV PosixUpper_invlist[] = { + 2, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 65, + 91 +}; + +UV L1PosixUpper_invlist[] = { + 6, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 65, + 91, + 192, + 215, + 216, + 223 +}; + +UV PosixWord_invlist[] = { + 8, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 48, + 58, + 65, + 91, + 95, + 96, + 97, + 123 +}; + +UV L1PosixWord_invlist[] = { + 20, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 48, + 58, + 65, + 91, + 95, + 96, + 97, + 123, + 170, + 171, + 181, + 182, + 186, + 187, + 192, + 215, + 216, + 247, + 248, + 706 +}; + +UV PosixXDigit_invlist[] = { + 6, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 48, + 58, + 65, + 71, + 97, + 103 +}; + +UV XPosixXDigit_invlist[] = { + 12, /* Number of elements */ + 0, /* Current iteration position */ + 1064334010, /* Version and data structure type */ + 1, /* 0 if this is the first element of the list proper; + 1 if the next element is the first */ + 48, + 58, + 65, + 71, + 97, + 103, + 65296, + 65306, + 65313, + 65319, + 65345, + 65351 +}; + +/* ex: set ro: */ diff --git a/Master/tlpkg/tlperl/lib/CORE/config.h b/Master/tlpkg/tlperl/lib/CORE/config.h index 8a65c234e73..c9fb7ad382f 100644 --- a/Master/tlpkg/tlperl/lib/CORE/config.h +++ b/Master/tlpkg/tlperl/lib/CORE/config.h @@ -9,7 +9,7 @@ /* Package name : perl5 * Source directory : - * Configuration time: Fri May 18 10:52:25 2012 + * Configuration time: Fri Nov 16 21:24:42 2012 * Configured by : siepo * Target system : */ @@ -879,46 +879,18 @@ #define _V(args) () #endif -/* INTSIZE: - * This symbol contains the value of sizeof(int) so that the C - * preprocessor can make decisions based on it. - */ -/* LONGSIZE: - * This symbol contains the value of sizeof(long) so that the C - * preprocessor can make decisions based on it. - */ -/* SHORTSIZE: - * This symbol contains the value of sizeof(short) so that the C - * preprocessor can make decisions based on it. - */ -#define INTSIZE 4 /**/ -#define LONGSIZE 4 /**/ -#define SHORTSIZE 2 /**/ - -/* MULTIARCH: - * This symbol, if defined, signifies that the build - * process will produce some binary files that are going to be - * used in a cross-platform environment. This is the case for - * example with the NeXT "fat" binaries that contain executables - * for several CPUs. +/* OSNAME: + * This symbol contains the name of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. */ -/*#define MULTIARCH / **/ - -/* HAS_QUAD: - * This symbol, if defined, tells that there's a 64-bit integer type, - * Quad_t, and its unsigned counterpart, Uquad_t. QUADKIND will be one - * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T. +/* OSVERS: + * This symbol contains the version of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. */ -#define HAS_QUAD /**/ -#ifdef HAS_QUAD -# define Quad_t long long /**/ -# define Uquad_t unsigned long long /**/ -# define QUADKIND 3 /**/ -# define QUAD_IS_INT 1 -# define QUAD_IS_LONG 2 -# define QUAD_IS_LONG_LONG 3 -# define QUAD_IS_INT64_T 4 -#endif +#define OSNAME "MSWin32" /**/ +#define OSVERS "5.1" /**/ /* USE_CROSS_COMPILE: * This symbol, if defined, indicates that Perl is being cross-compiled. @@ -932,6 +904,15 @@ #define PERL_TARGETARCH "" /**/ #endif +/* MULTIARCH: + * This symbol, if defined, signifies that the build + * process will produce some binary files that are going to be + * used in a cross-platform environment. This is the case for + * example with the NeXT "fat" binaries that contain executables + * for several CPUs. + */ +/*#define MULTIARCH / **/ + /* MEM_ALIGNBYTES: * This symbol contains the number of bytes required to align a * double, or a long double when applicable. Usual values are 2, @@ -956,7 +937,7 @@ * This symbol contains the ~name expanded version of ARCHLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define ARCHLIB "x:\\tlperl\\lib" /**/ +#define ARCHLIB "c:\\perl\\lib" /**/ /*#define ARCHLIB_EXP "" / **/ /* ARCHNAME: @@ -979,9 +960,25 @@ * This symbol, if defined, indicates that we'd like to relocate entries * in @INC at run time based on the location of the perl binary. */ -#define BIN "x:\\tlperl\\bin" /**/ -#define BIN_EXP "x:\\tlperl\\bin" /**/ -#define PERL_RELOCATABLE_INC "undef" /**/ +#define BIN "c:\\perl\\bin" /**/ +#define BIN_EXP "c:\\perl\\bin" /**/ +/*#define PERL_RELOCATABLE_INC / **/ + +/* INTSIZE: + * This symbol contains the value of sizeof(int) so that the C + * preprocessor can make decisions based on it. + */ +/* LONGSIZE: + * This symbol contains the value of sizeof(long) so that the C + * preprocessor can make decisions based on it. + */ +/* SHORTSIZE: + * This symbol contains the value of sizeof(short) so that the C + * preprocessor can make decisions based on it. + */ +#define INTSIZE 4 /**/ +#define LONGSIZE 4 /**/ +#define SHORTSIZE 2 /**/ /* BYTEORDER: * This symbol holds the hexadecimal constant defined in byteorder, @@ -1032,6 +1029,64 @@ */ #define CHARBITS 8 /**/ +/* CAT2: + * This macro concatenates 2 tokens together. + */ +/* STRINGIFY: + * This macro surrounds its token with double quotes. + */ +#if 42 == 1 +#define CAT2(a,b) a/**/b +#define STRINGIFY(a) "a" +#endif +#if 42 == 42 +#define PeRl_CaTiFy(a, b) a ## b +#define PeRl_StGiFy(a) #a +#define CAT2(a,b) PeRl_CaTiFy(a,b) +#define StGiFy(a) PeRl_StGiFy(a) +#define STRINGIFY(a) PeRl_StGiFy(a) +#endif +#if 42 != 1 && 42 != 42 +#include "Bletch: How does this C preprocessor concatenate tokens?" +#endif + +/* CPPSTDIN: + * This symbol contains the first part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. Typical value of "cc -E" or "/lib/cpp", but it can also + * call a wrapper. See CPPRUN. + */ +/* CPPMINUS: + * This symbol contains the second part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. This symbol will have the value "-" if CPPSTDIN needs a minus + * to specify standard input, otherwise the value is "". + */ +/* CPPRUN: + * This symbol contains the string which will invoke a C preprocessor on + * the standard input and produce to standard output. It needs to end + * with CPPLAST, after all other preprocessor flags have been specified. + * The main difference with CPPSTDIN is that this program will never be a + * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is + * available directly to the user. Note that it may well be different from + * the preprocessor used to compile the C program. + */ +/* CPPLAST: + * This symbol is intended to be used along with CPPRUN in the same manner + * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". + */ +#define CPPSTDIN "gcc -E" +#define CPPMINUS "-" +#define CPPRUN "gcc -E" +#define CPPLAST "" + +/* HAS_ACCESS: + * This manifest constant lets the C program know that the access() + * system call is available to check for accessibility using real UID/GID. + * (always present on UNIX.) + */ +#define HAS_ACCESS /**/ + /* HAS_ACCESSX: * This symbol, if defined, indicates that the accessx routine is * available to do extended access checks. @@ -1051,6 +1106,43 @@ /*#define HAS_ASCTIME_R / **/ #define ASCTIME_R_PROTO 0 /**/ +/* HASATTRIBUTE_FORMAT: + * Can we handle GCC attribute for checking printf-style formats + */ +/* PRINTF_FORMAT_NULL_OK: + * Allows __printf__ format to be null when checking printf-style + */ +/* HASATTRIBUTE_MALLOC: + * Can we handle GCC attribute for malloc-style functions. + */ +/* HASATTRIBUTE_NONNULL: + * Can we handle GCC attribute for nonnull function parms. + */ +/* HASATTRIBUTE_NORETURN: + * Can we handle GCC attribute for functions that do not return + */ +/* HASATTRIBUTE_PURE: + * Can we handle GCC attribute for pure functions + */ +/* HASATTRIBUTE_UNUSED: + * Can we handle GCC attribute for unused variables and arguments + */ +/* HASATTRIBUTE_DEPRECATED: + * Can we handle GCC attribute for marking deprecated APIs + */ +/* HASATTRIBUTE_WARN_UNUSED_RESULT: + * Can we handle GCC attribute for warning on unused results + */ +/*#define HASATTRIBUTE_DEPRECATED / **/ +/*#define HASATTRIBUTE_FORMAT / **/ +/*#define PRINTF_FORMAT_NULL_OK / **/ +/*#define HASATTRIBUTE_NORETURN / **/ +/*#define HASATTRIBUTE_MALLOC / **/ +/*#define HASATTRIBUTE_NONNULL / **/ +/*#define HASATTRIBUTE_PURE / **/ +/*#define HASATTRIBUTE_UNUSED / **/ +/*#define HASATTRIBUTE_WARN_UNUSED_RESULT / **/ + /* CASTI32: * This symbol is defined if the C compiler can cast negative * or large floating point numbers to 32-bit ints. @@ -1078,6 +1170,17 @@ */ /*#define VOID_CLOSEDIR / **/ +/* HASCONST: + * This symbol, if defined, indicates that this C compiler knows about + * the const type. There is no need to actually test for that symbol + * within your programs. The mere use of the "const" keyword will + * trigger the necessary tests. + */ +#define HASCONST /**/ +#ifndef HASCONST +#define const +#endif + /* HAS_CRYPT_R: * This symbol, if defined, indicates that the crypt_r routine * is available to crypt re-entrantly. @@ -1091,6 +1194,17 @@ /*#define HAS_CRYPT_R / **/ #define CRYPT_R_PROTO 0 /**/ +/* HAS_CSH: + * This symbol, if defined, indicates that the C-shell exists. + */ +/* CSH: + * This symbol, if defined, contains the full pathname of csh. + */ +/*#define HAS_CSH / **/ +#ifdef HAS_CSH +#define CSH "" /**/ +#endif + /* HAS_CTERMID_R: * This symbol, if defined, indicates that the ctermid_r routine * is available to ctermid re-entrantly. @@ -1117,6 +1231,26 @@ /*#define HAS_CTIME_R / **/ #define CTIME_R_PROTO 0 /**/ +/* SETUID_SCRIPTS_ARE_SECURE_NOW: + * This symbol, if defined, indicates that the bug that prevents + * setuid scripts from being secure is not present in this kernel. + */ +/* DOSUID: + * This symbol, if defined, indicates that the C program should + * check the script that it is executing for setuid/setgid bits, and + * attempt to emulate setuid/setgid on systems that have disabled + * setuid #! scripts because the kernel can't do it securely. + * It is up to the package designer to make sure that this emulation + * is done securely. Among other things, it should do an fstat on + * the script it just opened to make sure it really is a setuid/setgid + * script, it should make sure the arguments passed correspond exactly + * to the argument on the #! line, and it should not trust any + * subprocesses to which it must pass the filename rather than the + * file descriptor of the script to be executed. + */ +/*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/ +/*#define DOSUID / **/ + /* HAS_DRAND48_R: * This symbol, if defined, indicates that the drand48_r routine * is available to drand48 re-entrantly. @@ -1130,12 +1264,26 @@ /*#define HAS_DRAND48_R / **/ #define DRAND48_R_PROTO 0 /**/ +/* HAS_DRAND48_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the drand48() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern double drand48(void); + */ +/*#define HAS_DRAND48_PROTO / **/ + /* HAS_EACCESS: * This symbol, if defined, indicates that the eaccess routine is * available to do extended access checks. */ /*#define HAS_EACCESS / **/ +/* HAS_ENDGRENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for finalizing sequential access of the group database. + */ +/*#define HAS_ENDGRENT / **/ + /* HAS_ENDGRENT_R: * This symbol, if defined, indicates that the endgrent_r routine * is available to endgrent re-entrantly. @@ -1149,6 +1297,12 @@ /*#define HAS_ENDGRENT_R / **/ #define ENDGRENT_R_PROTO 0 /**/ +/* HAS_ENDHOSTENT: + * This symbol, if defined, indicates that the endhostent() routine is + * available to close whatever was being used for host queries. + */ +/*#define HAS_ENDHOSTENT / **/ + /* HAS_ENDHOSTENT_R: * This symbol, if defined, indicates that the endhostent_r routine * is available to endhostent re-entrantly. @@ -1162,6 +1316,12 @@ /*#define HAS_ENDHOSTENT_R / **/ #define ENDHOSTENT_R_PROTO 0 /**/ +/* HAS_ENDNETENT: + * This symbol, if defined, indicates that the endnetent() routine is + * available to close whatever was being used for network queries. + */ +/*#define HAS_ENDNETENT / **/ + /* HAS_ENDNETENT_R: * This symbol, if defined, indicates that the endnetent_r routine * is available to endnetent re-entrantly. @@ -1175,6 +1335,12 @@ /*#define HAS_ENDNETENT_R / **/ #define ENDNETENT_R_PROTO 0 /**/ +/* HAS_ENDPROTOENT: + * This symbol, if defined, indicates that the endprotoent() routine is + * available to close whatever was being used for protocol queries. + */ +/*#define HAS_ENDPROTOENT / **/ + /* HAS_ENDPROTOENT_R: * This symbol, if defined, indicates that the endprotoent_r routine * is available to endprotoent re-entrantly. @@ -1188,6 +1354,12 @@ /*#define HAS_ENDPROTOENT_R / **/ #define ENDPROTOENT_R_PROTO 0 /**/ +/* HAS_ENDPWENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for finalizing sequential access of the passwd database. + */ +/*#define HAS_ENDPWENT / **/ + /* HAS_ENDPWENT_R: * This symbol, if defined, indicates that the endpwent_r routine * is available to endpwent re-entrantly. @@ -1201,6 +1373,12 @@ /*#define HAS_ENDPWENT_R / **/ #define ENDPWENT_R_PROTO 0 /**/ +/* HAS_ENDSERVENT: + * This symbol, if defined, indicates that the endservent() routine is + * available to close whatever was being used for service queries. + */ +/*#define HAS_ENDSERVENT / **/ + /* HAS_ENDSERVENT_R: * This symbol, if defined, indicates that the endservent_r routine * is available to endservent re-entrantly. @@ -1220,9 +1398,15 @@ */ #define HAS_FD_SET /**/ -/* Gconvert: - * This preprocessor macro is defined to convert a floating point - * number to a string without a trailing decimal point. This +/* FLEXFILENAMES: + * This symbol, if defined, indicates that the system supports filenames + * longer than 14 characters. + */ +#define FLEXFILENAMES /**/ + +/* Gconvert: + * This preprocessor macro is defined to convert a floating point + * number to a string without a trailing decimal point. This * emulates the behavior of sprintf("%g"), but is sometimes much more * efficient. If gconvert() is not available, but gcvt() drops the * trailing decimal point, then gcvt() is used. If all else fails, @@ -1237,6 +1421,12 @@ */ #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) +/* HAS_GETGRENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for sequential access of the group database. + */ +/*#define HAS_GETGRENT / **/ + /* HAS_GETGRENT_R: * This symbol, if defined, indicates that the getgrent_r routine * is available to getgrent re-entrantly. @@ -1276,6 +1466,53 @@ /*#define HAS_GETGRNAM_R / **/ #define GETGRNAM_R_PROTO 0 /**/ +/* HAS_GETHOSTBYADDR: + * This symbol, if defined, indicates that the gethostbyaddr() routine is + * available to look up hosts by their IP addresses. + */ +#define HAS_GETHOSTBYADDR /**/ + +/* HAS_GETHOSTBYNAME: + * This symbol, if defined, indicates that the gethostbyname() routine is + * available to look up host names in some data base or other. + */ +#define HAS_GETHOSTBYNAME /**/ + +/* HAS_GETHOSTENT: + * This symbol, if defined, indicates that the gethostent() routine is + * available to look up host names in some data base or another. + */ +/*#define HAS_GETHOSTENT / **/ + +/* HAS_GETHOSTNAME: + * This symbol, if defined, indicates that the C program may use the + * gethostname() routine to derive the host name. See also HAS_UNAME + * and PHOSTNAME. + */ +/* HAS_UNAME: + * This symbol, if defined, indicates that the C program may use the + * uname() routine to derive the host name. See also HAS_GETHOSTNAME + * and PHOSTNAME. + */ +/* PHOSTNAME: + * This symbol, if defined, indicates the command to feed to the + * popen() routine to derive the host name. See also HAS_GETHOSTNAME + * and HAS_UNAME. Note that the command uses a fully qualified path, + * so that it is safe even if used by a process with super-user + * privileges. + */ +/* HAS_PHOSTNAME: + * This symbol, if defined, indicates that the C program may use the + * contents of PHOSTNAME as a command to feed to the popen() routine + * to derive the host name. + */ +#define HAS_GETHOSTNAME /**/ +#define HAS_UNAME /**/ +/*#define HAS_PHOSTNAME / **/ +#ifdef HAS_PHOSTNAME +#define PHOSTNAME "" /* How to get the host name */ +#endif + /* HAS_GETHOSTBYADDR_R: * This symbol, if defined, indicates that the gethostbyaddr_r routine * is available to gethostbyaddr re-entrantly. @@ -1315,6 +1552,14 @@ /*#define HAS_GETHOSTENT_R / **/ #define GETHOSTENT_R_PROTO 0 /**/ +/* HAS_GETHOST_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for gethostent(), gethostbyname(), and + * gethostbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ +#define HAS_GETHOST_PROTOS /**/ + /* HAS_GETLOGIN_R: * This symbol, if defined, indicates that the getlogin_r routine * is available to getlogin re-entrantly. @@ -1328,6 +1573,24 @@ /*#define HAS_GETLOGIN_R / **/ #define GETLOGIN_R_PROTO 0 /**/ +/* HAS_GETNETBYADDR: + * This symbol, if defined, indicates that the getnetbyaddr() routine is + * available to look up networks by their IP addresses. + */ +/*#define HAS_GETNETBYADDR / **/ + +/* HAS_GETNETBYNAME: + * This symbol, if defined, indicates that the getnetbyname() routine is + * available to look up networks by their names. + */ +/*#define HAS_GETNETBYNAME / **/ + +/* HAS_GETNETENT: + * This symbol, if defined, indicates that the getnetent() routine is + * available to look up network names in some data base or another. + */ +/*#define HAS_GETNETENT / **/ + /* HAS_GETNETBYADDR_R: * This symbol, if defined, indicates that the getnetbyaddr_r routine * is available to getnetbyaddr re-entrantly. @@ -1367,6 +1630,14 @@ /*#define HAS_GETNETENT_R / **/ #define GETNETENT_R_PROTO 0 /**/ +/* HAS_GETNET_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getnetent(), getnetbyname(), and + * getnetbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ +/*#define HAS_GETNET_PROTOS / **/ + /* HAS_GETPAGESIZE: * This symbol, if defined, indicates that the getpagesize system call * is available to get system page size, which is the granularity of @@ -1374,6 +1645,34 @@ */ /*#define HAS_GETPAGESIZE / **/ +/* HAS_GETPROTOENT: + * This symbol, if defined, indicates that the getprotoent() routine is + * available to look up protocols in some data base or another. + */ +/*#define HAS_GETPROTOENT / **/ + +/* HAS_GETPGRP: + * This symbol, if defined, indicates that the getpgrp routine is + * available to get the current process group. + */ +/* USE_BSD_GETPGRP: + * This symbol, if defined, indicates that getpgrp needs one + * arguments whereas USG one needs none. + */ +/*#define HAS_GETPGRP / **/ +/*#define USE_BSD_GETPGRP / **/ + +/* HAS_GETPROTOBYNAME: + * This symbol, if defined, indicates that the getprotobyname() + * routine is available to look up protocols by their name. + */ +/* HAS_GETPROTOBYNUMBER: + * This symbol, if defined, indicates that the getprotobynumber() + * routine is available to look up protocols by their number. + */ +#define HAS_GETPROTOBYNAME /**/ +#define HAS_GETPROTOBYNUMBER /**/ + /* HAS_GETPROTOBYNAME_R: * This symbol, if defined, indicates that the getprotobyname_r routine * is available to getprotobyname re-entrantly. @@ -1413,6 +1712,21 @@ /*#define HAS_GETPROTOENT_R / **/ #define GETPROTOENT_R_PROTO 0 /**/ +/* HAS_GETPROTO_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getprotoent(), getprotobyname(), and + * getprotobyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ +#define HAS_GETPROTO_PROTOS /**/ + +/* HAS_GETPWENT: + * This symbol, if defined, indicates that the getpwent routine is + * available for sequential access of the passwd database. + * If this is not available, the older getpw() function may be available. + */ +/*#define HAS_GETPWENT / **/ + /* HAS_GETPWENT_R: * This symbol, if defined, indicates that the getpwent_r routine * is available to getpwent re-entrantly. @@ -1452,6 +1766,12 @@ /*#define HAS_GETPWUID_R / **/ #define GETPWUID_R_PROTO 0 /**/ +/* HAS_GETSERVENT: + * This symbol, if defined, indicates that the getservent() routine is + * available to look up network services in some data base or another. + */ +/*#define HAS_GETSERVENT / **/ + /* HAS_GETSERVBYNAME_R: * This symbol, if defined, indicates that the getservbyname_r routine * is available to getservbyname re-entrantly. @@ -1491,6 +1811,14 @@ /*#define HAS_GETSERVENT_R / **/ #define GETSERVENT_R_PROTO 0 /**/ +/* HAS_GETSERV_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getservent(), getservbyname(), and + * getservbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ +#define HAS_GETSERV_PROTOS /**/ + /* HAS_GETSPNAM_R: * This symbol, if defined, indicates that the getspnam_r routine * is available to getspnam re-entrantly. @@ -1504,6 +1832,17 @@ /*#define HAS_GETSPNAM_R / **/ #define GETSPNAM_R_PROTO 0 /**/ +/* HAS_GETSERVBYNAME: + * This symbol, if defined, indicates that the getservbyname() + * routine is available to look up services by their name. + */ +/* HAS_GETSERVBYPORT: + * This symbol, if defined, indicates that the getservbyport() + * routine is available to look up services by their port. + */ +#define HAS_GETSERVBYNAME /**/ +#define HAS_GETSERVBYPORT /**/ + /* HAS_GMTIME_R: * This symbol, if defined, indicates that the gmtime_r routine * is available to gmtime re-entrantly. @@ -1527,6 +1866,31 @@ # define _GNU_SOURCE #endif +/* HAS_HTONL: + * This symbol, if defined, indicates that the htonl() routine (and + * friends htons() ntohl() ntohs()) are available to do network + * order byte swapping. + */ +/* HAS_HTONS: + * This symbol, if defined, indicates that the htons() routine (and + * friends htonl() ntohl() ntohs()) are available to do network + * order byte swapping. + */ +/* HAS_NTOHL: + * This symbol, if defined, indicates that the ntohl() routine (and + * friends htonl() htons() ntohs()) are available to do network + * order byte swapping. + */ +/* HAS_NTOHS: + * This symbol, if defined, indicates that the ntohs() routine (and + * friends htonl() htons() ntohl()) are available to do network + * order byte swapping. + */ +#define HAS_HTONL /**/ +#define HAS_HTONS /**/ +#define HAS_NTOHL /**/ +#define HAS_NTOHS /**/ + /* HAS_ISASCII: * This manifest constant lets the C program know that isascii * is available. @@ -1566,6 +1930,72 @@ /*#define HAS_LOCALTIME_R / **/ #define LOCALTIME_R_PROTO 0 /**/ +/* HAS_LONG_DOUBLE: + * This symbol will be defined if the C compiler supports long + * doubles. + */ +/* LONG_DOUBLESIZE: + * This symbol contains the size of a long double, so that the + * C preprocessor can make decisions based on it. It is only + * defined if the system supports long doubles. + */ +#define HAS_LONG_DOUBLE /**/ +#ifdef HAS_LONG_DOUBLE +#define LONG_DOUBLESIZE 12 /**/ +#endif + +/* HAS_LONG_LONG: + * This symbol will be defined if the C compiler supports long long. + */ +/* LONGLONGSIZE: + * This symbol contains the size of a long long, so that the + * C preprocessor can make decisions based on it. It is only + * defined if the system supports long long. + */ +/*#define HAS_LONG_LONG / **/ +#ifdef HAS_LONG_LONG +#define LONGLONGSIZE 8 /**/ +#endif + +/* HAS_LSEEK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the lseek() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern off_t lseek(int, off_t, int); + */ +#define HAS_LSEEK_PROTO /**/ + +/* HAS_MEMCHR: + * This symbol, if defined, indicates that the memchr routine is available + * to locate characters within a C string. + */ +#define HAS_MEMCHR /**/ + +/* HAS_MKSTEMP: + * This symbol, if defined, indicates that the mkstemp routine is + * available to exclusively create and open a uniquely named + * temporary file. + */ +/*#define HAS_MKSTEMP / **/ + +/* HAS_MMAP: + * This symbol, if defined, indicates that the mmap system call is + * available to map a file into memory. + */ +/* Mmap_t: + * This symbol holds the return type of the mmap() system call + * (and simultaneously the type of the first argument). + * Usually set to 'void *' or 'caddr_t'. + */ +/*#define HAS_MMAP / **/ +#define Mmap_t void * /**/ + +/* HAS_MSG: + * This symbol, if defined, indicates that the entire msg*(2) library is + * supported (IPC mechanism based on message queues). + */ +/*#define HAS_MSG / **/ + /* HAS_OPEN3: * This manifest constant lets the C program know that the three * argument form of open(2) is available. @@ -1669,7 +2099,19 @@ */ #define HAS_SANE_MEMCMP /**/ -/* HAS_SETGRENT_R: +/* HAS_SEM: + * This symbol, if defined, indicates that the entire sem*(2) library is + * supported. + */ +/*#define HAS_SEM / **/ + +/* HAS_SETGRENT: + * This symbol, if defined, indicates that the setgrent routine is + * available for initializing sequential access of the group database. + */ +/*#define HAS_SETGRENT / **/ + +/* HAS_SETGRENT_R: * This symbol, if defined, indicates that the setgrent_r routine * is available to setgrent re-entrantly. */ @@ -1682,6 +2124,12 @@ /*#define HAS_SETGRENT_R / **/ #define SETGRENT_R_PROTO 0 /**/ +/* HAS_SETHOSTENT: + * This symbol, if defined, indicates that the sethostent() routine is + * available. + */ +/*#define HAS_SETHOSTENT / **/ + /* HAS_SETHOSTENT_R: * This symbol, if defined, indicates that the sethostent_r routine * is available to sethostent re-entrantly. @@ -1708,6 +2156,12 @@ /*#define HAS_SETLOCALE_R / **/ #define SETLOCALE_R_PROTO 0 /**/ +/* HAS_SETNETENT: + * This symbol, if defined, indicates that the setnetent() routine is + * available. + */ +/*#define HAS_SETNETENT / **/ + /* HAS_SETNETENT_R: * This symbol, if defined, indicates that the setnetent_r routine * is available to setnetent re-entrantly. @@ -1721,6 +2175,24 @@ /*#define HAS_SETNETENT_R / **/ #define SETNETENT_R_PROTO 0 /**/ +/* HAS_SETPROTOENT: + * This symbol, if defined, indicates that the setprotoent() routine is + * available. + */ +/*#define HAS_SETPROTOENT / **/ + +/* HAS_SETPGRP: + * This symbol, if defined, indicates that the setpgrp routine is + * available to set the current process group. + */ +/* USE_BSD_SETPGRP: + * This symbol, if defined, indicates that setpgrp needs two + * arguments whereas USG one needs none. See also HAS_SETPGID + * for a POSIX interface. + */ +/*#define HAS_SETPGRP / **/ +/*#define USE_BSD_SETPGRP / **/ + /* HAS_SETPROTOENT_R: * This symbol, if defined, indicates that the setprotoent_r routine * is available to setprotoent re-entrantly. @@ -1734,6 +2206,12 @@ /*#define HAS_SETPROTOENT_R / **/ #define SETPROTOENT_R_PROTO 0 /**/ +/* HAS_SETPWENT: + * This symbol, if defined, indicates that the setpwent routine is + * available for initializing sequential access of the passwd database. + */ +/*#define HAS_SETPWENT / **/ + /* HAS_SETPWENT_R: * This symbol, if defined, indicates that the setpwent_r routine * is available to setpwent re-entrantly. @@ -1747,6 +2225,12 @@ /*#define HAS_SETPWENT_R / **/ #define SETPWENT_R_PROTO 0 /**/ +/* HAS_SETSERVENT: + * This symbol, if defined, indicates that the setservent() routine is + * available. + */ +/*#define HAS_SETSERVENT / **/ + /* HAS_SETSERVENT_R: * This symbol, if defined, indicates that the setservent_r routine * is available to setservent re-entrantly. @@ -1760,6 +2244,33 @@ /*#define HAS_SETSERVENT_R / **/ #define SETSERVENT_R_PROTO 0 /**/ +/* HAS_SETVBUF: + * This symbol, if defined, indicates that the setvbuf routine is + * available to change buffering on an open stdio stream. + * to a line-buffered mode. + */ +#define HAS_SETVBUF /**/ + +/* HAS_SHM: + * This symbol, if defined, indicates that the entire shm*(2) library is + * supported. + */ +/*#define HAS_SHM / **/ + +/* Shmat_t: + * This symbol holds the return type of the shmat() system call. + * Usually set to 'void *' or 'char *'. + */ +/* HAS_SHMAT_PROTOTYPE: + * This symbol, if defined, indicates that the sys/shm.h includes + * a prototype for shmat(). Otherwise, it is up to the program to + * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess, + * but not always right so it should be emitted by the program only + * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. + */ +#define Shmat_t void * /**/ +/*#define HAS_SHMAT_PROTOTYPE / **/ + /* HAS_SIGACTION: * This symbol, if defined, indicates that Vr4's sigaction() routine * is available. @@ -1797,6 +2308,74 @@ #define Siglongjmp(buf,retval) longjmp((buf),(retval)) #endif +/* HAS_SOCKET: + * This symbol, if defined, indicates that the BSD socket interface is + * supported. + */ +/* HAS_SOCKETPAIR: + * This symbol, if defined, indicates that the BSD socketpair() call is + * supported. + */ +/* HAS_MSG_CTRUNC: + * This symbol, if defined, indicates that the MSG_CTRUNC is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_DONTROUTE: + * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_OOB: + * This symbol, if defined, indicates that the MSG_OOB is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_PEEK: + * This symbol, if defined, indicates that the MSG_PEEK is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_PROXY: + * This symbol, if defined, indicates that the MSG_PROXY is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_SCM_RIGHTS: + * This symbol, if defined, indicates that the SCM_RIGHTS is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_SOCKADDR_SA_LEN: + * This symbol, if defined, indicates that the struct sockaddr + * structure has a member called sa_len, indicating the length of + * the structure. + */ +/* HAS_SOCKADDR_IN6: + * This symbol, if defined, indicates the availability of + * struct sockaddr_in6; + */ +/* HAS_SIN6_SCOPE_ID: + * This symbol, if defined, indicates that the struct sockaddr_in6 + * structure has a member called sin6_scope_id. + */ +/* HAS_IPV6_MREQ: + * This symbol, if defined, indicates the availability of + * struct ipv6_mreq; + */ +#define HAS_SOCKET /**/ +/*#define HAS_SOCKETPAIR / **/ +/*#define HAS_SOCKADDR_SA_LEN / **/ +/*#define HAS_MSG_CTRUNC / **/ +/*#define HAS_MSG_DONTROUTE / **/ +/*#define HAS_MSG_OOB / **/ +/*#define HAS_MSG_PEEK / **/ +/*#define HAS_MSG_PROXY / **/ +/*#define HAS_SCM_RIGHTS / **/ +/*#define HAS_SOCKADDR_IN6 / **/ +#define HAS_SIN6_SCOPE_ID /**/ +/*#define HAS_IPV6_MREQ / **/ + /* HAS_SRAND48_R: * This symbol, if defined, indicates that the srand48_r routine * is available to srand48 re-entrantly. @@ -1823,6 +2402,35 @@ /*#define HAS_SRANDOM_R / **/ #define SRANDOM_R_PROTO 0 /**/ +/* USE_STAT_BLOCKS: + * This symbol is defined if this system has a stat structure declaring + * st_blksize and st_blocks. + */ +#ifndef USE_STAT_BLOCKS +/*#define USE_STAT_BLOCKS / **/ +#endif + +/* HAS_STATIC_INLINE: + * This symbol, if defined, indicates that the C compiler supports + * C99-style static inline. That is, the function can't be called + * from another translation unit. + */ +/* PERL_STATIC_INLINE: + * This symbol gives the best-guess incantation to use for static + * inline functions. If HAS_STATIC_INLINE is defined, this will + * give C99-style inline. If HAS_STATIC_INLINE is not defined, + * this will give a plain 'static'. It will always be defined + * to something that gives static linkage. + * Possibilities include + * static inline (c99) + * static __inline__ (gcc -ansi) + * static __inline (MSVC) + * static _inline (older MSVC) + * static (c89 compilers) + */ +#define HAS_STATIC_INLINE /**/ +#define PERL_STATIC_INLINE static __inline__ /**/ + /* USE_STDIO_PTR: * This symbol is defined if the _ptr and _cnt fields (or similar) * of the stdio FILE structure can be used to access the stdio buffer @@ -1893,6 +2501,32 @@ #define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base) #endif +/* USE_STRUCT_COPY: + * This symbol, if defined, indicates that this C compiler knows how + * to copy structures. If undefined, you'll need to use a block copy + * routine of some sort instead. + */ +#define USE_STRUCT_COPY /**/ + +/* HAS_STRERROR: + * This symbol, if defined, indicates that the strerror routine is + * available to translate error numbers to strings. See the writeup + * of Strerror() in this file before you try to define your own. + */ +/* HAS_SYS_ERRLIST: + * This symbol, if defined, indicates that the sys_errlist array is + * available to translate error numbers to strings. The extern int + * sys_nerr gives the size of that table. + */ +/* Strerror: + * This preprocessor symbol is defined as a macro if strerror() is + * not available to translate error numbers to strings but sys_errlist[] + * array is there. + */ +#define HAS_STRERROR /**/ +#define HAS_SYS_ERRLIST /**/ +#define Strerror(e) strerror(e) + /* HAS_STRERROR_R: * This symbol, if defined, indicates that the strerror_r routine * is available to strerror re-entrantly. @@ -1906,6 +2540,30 @@ /*#define HAS_STRERROR_R / **/ #define STRERROR_R_PROTO 0 /**/ +/* HAS_STRTOUL: + * This symbol, if defined, indicates that the strtoul routine is + * available to provide conversion of strings to unsigned long. + */ +#define HAS_STRTOUL /**/ + +/* HAS_TIME: + * This symbol, if defined, indicates that the time() routine exists. + */ +/* Time_t: + * This symbol holds the type returned by time(). It can be long, + * or time_t on BSD sites (in which case should be + * included). + */ +#define HAS_TIME /**/ +#define Time_t time_t /* Time type */ + +/* HAS_TIMES: + * This symbol, if defined, indicates that the times() routine exists. + * Note that this became obsolete on some systems (SUNOS), which now + * use getrusage(). It may be necessary to include . + */ +#define HAS_TIMES /**/ + /* HAS_TMPNAM_R: * This symbol, if defined, indicates that the tmpnam_r routine * is available to tmpnam re-entrantly. @@ -1932,907 +2590,27 @@ /*#define HAS_TTYNAME_R / **/ #define TTYNAME_R_PROTO 0 /**/ -/* HAS_VPRINTF: - * This symbol, if defined, indicates that the vprintf routine is available - * to printf with a pointer to an argument list. If unavailable, you - * may need to write your own, probably in terms of _doprnt(). +/* HAS_UNION_SEMUN: + * This symbol, if defined, indicates that the union semun is + * defined by including . If not, the user code + * probably needs to define it as: + * union semun { + * int val; + * struct semid_ds *buf; + * unsigned short *array; + * } */ -/* USE_CHAR_VSPRINTF: - * This symbol is defined if this system has vsprintf() returning type - * (char*). The trend seems to be to declare it as "int vsprintf()". It - * is up to the package author to declare vsprintf correctly based on the - * symbol. +/* USE_SEMCTL_SEMUN: + * This symbol, if defined, indicates that union semun is + * used for semctl IPC_STAT. */ -#define HAS_VPRINTF /**/ -/*#define USE_CHAR_VSPRINTF / **/ - -/* DOUBLESIZE: - * This symbol contains the size of a double, so that the C preprocessor - * can make decisions based on it. +/* USE_SEMCTL_SEMID_DS: + * This symbol, if defined, indicates that struct semid_ds * is + * used for semctl IPC_STAT. */ -#define DOUBLESIZE 8 /**/ - -/* I_MACH_CTHREADS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_MACH_CTHREADS / **/ - -/* I_PTHREAD: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_PTHREAD / **/ - -/* I_SYS_ACCESS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_ACCESS / **/ - -/* I_SYS_SECURITY: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_SECURITY / **/ - -/* I_TIME: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* I_SYS_TIME: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* I_SYS_TIME_KERNEL: - * This symbol, if defined, indicates to the C program that it should - * include with KERNEL defined. - */ -/* HAS_TM_TM_ZONE: - * This symbol, if defined, indicates to the C program that - * the struct tm has a tm_zone field. - */ -/* HAS_TM_TM_GMTOFF: - * This symbol, if defined, indicates to the C program that - * the struct tm has a tm_gmtoff field. - */ -#define I_TIME /**/ -/*#define I_SYS_TIME / **/ -/*#define I_SYS_TIME_KERNEL / **/ -/*#define HAS_TM_TM_ZONE / **/ -/*#define HAS_TM_TM_GMTOFF / **/ - -/* PERL_INC_VERSION_LIST: - * This variable specifies the list of subdirectories in over - * which perl.c:incpush() and lib/lib.pm will automatically - * search when adding directories to @INC, in a format suitable - * for a C initialization string. See the inc_version_list entry - * in Porting/Glossary for more details. - */ -/*#define PERL_INC_VERSION_LIST 0 / **/ - -/* INSTALL_USR_BIN_PERL: - * This symbol, if defined, indicates that Perl is to be installed - * also as /usr/bin/perl. - */ -/*#define INSTALL_USR_BIN_PERL / **/ - -/* VAL_O_NONBLOCK: - * This symbol is to be used during open() or fcntl(F_SETFL) to turn on - * non-blocking I/O for the file descriptor. Note that there is no way - * back, i.e. you cannot turn it blocking again this way. If you wish to - * alternatively switch between blocking and non-blocking, use the - * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. - */ -/* VAL_EAGAIN: - * This symbol holds the errno error code set by read() when no data was - * present on the non-blocking file descriptor. - */ -/* RD_NODATA: - * This symbol holds the return code from read() when no data is present - * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is - * not defined, then you can't distinguish between no data and EOF by - * issuing a read(). You'll have to find another way to tell for sure! - */ -/* EOF_NONBLOCK: - * This symbol, if defined, indicates to the C program that a read() on - * a non-blocking file descriptor will return 0 on EOF, and not the value - * held in RD_NODATA (-1 usually, in that case!). - */ -#define VAL_O_NONBLOCK O_NONBLOCK -#define VAL_EAGAIN EAGAIN -#define RD_NODATA -1 -#define EOF_NONBLOCK - -/* PERL_OTHERLIBDIRS: - * This variable contains a colon-separated set of paths for the perl - * binary to search for additional library files or modules. - * These directories will be tacked to the end of @INC. - * Perl will automatically search below each path for version- - * and architecture-specific directories. See PERL_INC_VERSION_LIST - * for more details. - */ -/*#define PERL_OTHERLIBDIRS "" / **/ - -/* PRIVLIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - */ -/* PRIVLIB_EXP: - * This symbol contains the ~name expanded version of PRIVLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define PRIVLIB "x:\\tlperl\\lib" /**/ -#define PRIVLIB_EXP (win32_get_privlib(PERL_VERSION_STRING, NULL)) /**/ - -/* PTRSIZE: - * This symbol contains the size of a pointer, so that the C preprocessor - * can make decisions based on it. It will be sizeof(void *) if - * the compiler supports (void *); otherwise it will be - * sizeof(char *). - */ -#define PTRSIZE 4 /**/ - -/* Drand01: - * This macro is to be used to generate uniformly distributed - * random numbers over the range [0., 1.[. You may have to supply - * an 'extern double drand48();' in your program since SunOS 4.1.3 - * doesn't provide you with anything relevant in its headers. - * See HAS_DRAND48_PROTO. - */ -/* Rand_seed_t: - * This symbol defines the type of the argument of the - * random seed function. - */ -/* seedDrand01: - * This symbol defines the macro to be used in seeding the - * random number generator (see Drand01). - */ -/* RANDBITS: - * This symbol indicates how many bits are produced by the - * function used to generate normalized random numbers. - * Values include 15, 16, 31, and 48. - */ -#define Drand01() (rand()/(double)((unsigned)1< or - * to get any typedef'ed information. - * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). - */ -#define SSize_t int /* signed count of bytes */ - -/* USE_ITHREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the interpreter-based threading implementation. - */ -/* USE_5005THREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the 5.005-based threading implementation. - * Only valid up to 5.8.x. - */ -/* OLD_PTHREADS_API: - * This symbol, if defined, indicates that Perl should - * be built to use the old draft POSIX threads API. - */ -/* USE_REENTRANT_API: - * This symbol, if defined, indicates that Perl should - * try to use the various _r versions of library functions. - * This is extremely experimental. - */ -/*#define USE_5005THREADS / **/ -#define USE_ITHREADS /**/ -#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) -#define USE_THREADS /* until src is revised*/ -#endif -/*#define OLD_PTHREADS_API / **/ -/*#define USE_REENTRANT_API / **/ - -/* PERL_VENDORARCH: - * If defined, this symbol contains the name of a private library. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. - * It may have a ~ on the front. - * The standard distribution will put nothing in this directory. - * Vendors who distribute perl may wish to place their own - * architecture-dependent modules and extensions in this directory with - * MakeMaker Makefile.PL INSTALLDIRS=vendor - * or equivalent. See INSTALL for details. - */ -/* PERL_VENDORARCH_EXP: - * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/*#define PERL_VENDORARCH "" / **/ -/*#define PERL_VENDORARCH_EXP "" / **/ - -/* PERL_VENDORLIB_EXP: - * This symbol contains the ~name expanded version of VENDORLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* PERL_VENDORLIB_STEM: - * This define is PERL_VENDORLIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -/*#define PERL_VENDORLIB_EXP "" / **/ -/*#define PERL_VENDORLIB_STEM "" / **/ - -/* HAS_STATIC_INLINE: - * This symbol, if defined, indicates that the C compiler supports - * C99-style static inline. That is, the function can't be called - * from another translation unit. - */ -/* PERL_STATIC_INLINE: - * This symbol gives the best-guess incantation to use for static - * inline functions. If HAS_STATIC_INLINE is defined, this will - * give C99-style inline. If HAS_STATIC_INLINE is not defined, - * this will give a plain 'static'. It will always be defined - * to something that gives static linkage. - * Possibilities include - * static inline (c99) - * static __inline__ (gcc -ansi) - * static __inline (MSVC) - * static _inline (older MSVC) - * static (c89 compilers) - */ -#define HAS_STATIC_INLINE /**/ -#define PERL_STATIC_INLINE static __inline__ /**/ - -/* EBCDIC: - * This symbol, if defined, indicates that this system uses - * EBCDIC encoding. - */ -/*#define EBCDIC / **/ - -/* OSNAME: - * This symbol contains the name of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -/* OSVERS: - * This symbol contains the version of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -#define OSNAME "MSWin32" /**/ -#define OSVERS "5.1" /**/ - -/* CAT2: - * This macro concatenates 2 tokens together. - */ -/* STRINGIFY: - * This macro surrounds its token with double quotes. - */ -#if 42 == 1 -#define CAT2(a,b) a/**/b -#define STRINGIFY(a) "a" -#endif -#if 42 == 42 -#define PeRl_CaTiFy(a, b) a ## b -#define PeRl_StGiFy(a) #a -#define CAT2(a,b) PeRl_CaTiFy(a,b) -#define StGiFy(a) PeRl_StGiFy(a) -#define STRINGIFY(a) PeRl_StGiFy(a) -#endif -#if 42 != 1 && 42 != 42 -#include "Bletch: How does this C preprocessor concatenate tokens?" -#endif - -/* CPPSTDIN: - * This symbol contains the first part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. Typical value of "cc -E" or "/lib/cpp", but it can also - * call a wrapper. See CPPRUN. - */ -/* CPPMINUS: - * This symbol contains the second part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. This symbol will have the value "-" if CPPSTDIN needs a minus - * to specify standard input, otherwise the value is "". - */ -/* CPPRUN: - * This symbol contains the string which will invoke a C preprocessor on - * the standard input and produce to standard output. It needs to end - * with CPPLAST, after all other preprocessor flags have been specified. - * The main difference with CPPSTDIN is that this program will never be a - * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is - * available directly to the user. Note that it may well be different from - * the preprocessor used to compile the C program. - */ -/* CPPLAST: - * This symbol is intended to be used along with CPPRUN in the same manner - * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". - */ -#define CPPSTDIN "gcc -E" -#define CPPMINUS "-" -#define CPPRUN "gcc -E" -#define CPPLAST "" - -/* HAS_ACCESS: - * This manifest constant lets the C program know that the access() - * system call is available to check for accessibility using real UID/GID. - * (always present on UNIX.) - */ -#define HAS_ACCESS /**/ - -/* HASATTRIBUTE_FORMAT: - * Can we handle GCC attribute for checking printf-style formats - */ -/* PRINTF_FORMAT_NULL_OK: - * Allows __printf__ format to be null when checking printf-style - */ -/* HASATTRIBUTE_MALLOC: - * Can we handle GCC attribute for malloc-style functions. - */ -/* HASATTRIBUTE_NONNULL: - * Can we handle GCC attribute for nonnull function parms. - */ -/* HASATTRIBUTE_NORETURN: - * Can we handle GCC attribute for functions that do not return - */ -/* HASATTRIBUTE_PURE: - * Can we handle GCC attribute for pure functions - */ -/* HASATTRIBUTE_UNUSED: - * Can we handle GCC attribute for unused variables and arguments - */ -/* HASATTRIBUTE_DEPRECATED: - * Can we handle GCC attribute for marking deprecated APIs - */ -/* HASATTRIBUTE_WARN_UNUSED_RESULT: - * Can we handle GCC attribute for warning on unused results - */ -/*#define HASATTRIBUTE_DEPRECATED / **/ -/*#define HASATTRIBUTE_FORMAT / **/ -/*#define PRINTF_FORMAT_NULL_OK / **/ -/*#define HASATTRIBUTE_NORETURN / **/ -/*#define HASATTRIBUTE_MALLOC / **/ -/*#define HASATTRIBUTE_NONNULL / **/ -/*#define HASATTRIBUTE_PURE / **/ -/*#define HASATTRIBUTE_UNUSED / **/ -/*#define HASATTRIBUTE_WARN_UNUSED_RESULT / **/ - -/* HASCONST: - * This symbol, if defined, indicates that this C compiler knows about - * the const type. There is no need to actually test for that symbol - * within your programs. The mere use of the "const" keyword will - * trigger the necessary tests. - */ -#define HASCONST /**/ -#ifndef HASCONST -#define const -#endif - -/* HAS_CSH: - * This symbol, if defined, indicates that the C-shell exists. - */ -/* CSH: - * This symbol, if defined, contains the full pathname of csh. - */ -/*#define HAS_CSH / **/ -#ifdef HAS_CSH -#define CSH "" /**/ -#endif - -/* SETUID_SCRIPTS_ARE_SECURE_NOW: - * This symbol, if defined, indicates that the bug that prevents - * setuid scripts from being secure is not present in this kernel. - */ -/* DOSUID: - * This symbol, if defined, indicates that the C program should - * check the script that it is executing for setuid/setgid bits, and - * attempt to emulate setuid/setgid on systems that have disabled - * setuid #! scripts because the kernel can't do it securely. - * It is up to the package designer to make sure that this emulation - * is done securely. Among other things, it should do an fstat on - * the script it just opened to make sure it really is a setuid/setgid - * script, it should make sure the arguments passed correspond exactly - * to the argument on the #! line, and it should not trust any - * subprocesses to which it must pass the filename rather than the - * file descriptor of the script to be executed. - */ -/*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/ -/*#define DOSUID / **/ - -/* HAS_ENDGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the group database. - */ -/*#define HAS_ENDGRENT / **/ - -/* HAS_ENDHOSTENT: - * This symbol, if defined, indicates that the endhostent() routine is - * available to close whatever was being used for host queries. - */ -/*#define HAS_ENDHOSTENT / **/ - -/* HAS_ENDNETENT: - * This symbol, if defined, indicates that the endnetent() routine is - * available to close whatever was being used for network queries. - */ -/*#define HAS_ENDNETENT / **/ - -/* HAS_ENDPROTOENT: - * This symbol, if defined, indicates that the endprotoent() routine is - * available to close whatever was being used for protocol queries. - */ -/*#define HAS_ENDPROTOENT / **/ - -/* HAS_ENDPWENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the passwd database. - */ -/*#define HAS_ENDPWENT / **/ - -/* HAS_ENDSERVENT: - * This symbol, if defined, indicates that the endservent() routine is - * available to close whatever was being used for service queries. - */ -/*#define HAS_ENDSERVENT / **/ - -/* FLEXFILENAMES: - * This symbol, if defined, indicates that the system supports filenames - * longer than 14 characters. - */ -#define FLEXFILENAMES /**/ - -/* HAS_GETGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for sequential access of the group database. - */ -/*#define HAS_GETGRENT / **/ - -/* HAS_GETHOSTBYADDR: - * This symbol, if defined, indicates that the gethostbyaddr() routine is - * available to look up hosts by their IP addresses. - */ -#define HAS_GETHOSTBYADDR /**/ - -/* HAS_GETHOSTBYNAME: - * This symbol, if defined, indicates that the gethostbyname() routine is - * available to look up host names in some data base or other. - */ -#define HAS_GETHOSTBYNAME /**/ - -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent() routine is - * available to look up host names in some data base or another. - */ -/*#define HAS_GETHOSTENT / **/ - -/* HAS_GETHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * gethostname() routine to derive the host name. See also HAS_UNAME - * and PHOSTNAME. - */ -/* HAS_UNAME: - * This symbol, if defined, indicates that the C program may use the - * uname() routine to derive the host name. See also HAS_GETHOSTNAME - * and PHOSTNAME. - */ -/* PHOSTNAME: - * This symbol, if defined, indicates the command to feed to the - * popen() routine to derive the host name. See also HAS_GETHOSTNAME - * and HAS_UNAME. Note that the command uses a fully qualified path, - * so that it is safe even if used by a process with super-user - * privileges. - */ -/* HAS_PHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * contents of PHOSTNAME as a command to feed to the popen() routine - * to derive the host name. - */ -#define HAS_GETHOSTNAME /**/ -#define HAS_UNAME /**/ -/*#define HAS_PHOSTNAME / **/ -#ifdef HAS_PHOSTNAME -#define PHOSTNAME "" /* How to get the host name */ -#endif - -/* HAS_GETNETBYADDR: - * This symbol, if defined, indicates that the getnetbyaddr() routine is - * available to look up networks by their IP addresses. - */ -/*#define HAS_GETNETBYADDR / **/ - -/* HAS_GETNETBYNAME: - * This symbol, if defined, indicates that the getnetbyname() routine is - * available to look up networks by their names. - */ -/*#define HAS_GETNETBYNAME / **/ - -/* HAS_GETNETENT: - * This symbol, if defined, indicates that the getnetent() routine is - * available to look up network names in some data base or another. - */ -/*#define HAS_GETNETENT / **/ - -/* HAS_GETPROTOENT: - * This symbol, if defined, indicates that the getprotoent() routine is - * available to look up protocols in some data base or another. - */ -/*#define HAS_GETPROTOENT / **/ - -/* HAS_GETPGRP: - * This symbol, if defined, indicates that the getpgrp routine is - * available to get the current process group. - */ -/* USE_BSD_GETPGRP: - * This symbol, if defined, indicates that getpgrp needs one - * arguments whereas USG one needs none. - */ -/*#define HAS_GETPGRP / **/ -/*#define USE_BSD_GETPGRP / **/ - -/* HAS_GETPROTOBYNAME: - * This symbol, if defined, indicates that the getprotobyname() - * routine is available to look up protocols by their name. - */ -/* HAS_GETPROTOBYNUMBER: - * This symbol, if defined, indicates that the getprotobynumber() - * routine is available to look up protocols by their number. - */ -#define HAS_GETPROTOBYNAME /**/ -#define HAS_GETPROTOBYNUMBER /**/ - -/* HAS_GETPWENT: - * This symbol, if defined, indicates that the getpwent routine is - * available for sequential access of the passwd database. - * If this is not available, the older getpw() function may be available. - */ -/*#define HAS_GETPWENT / **/ - -/* HAS_GETSERVENT: - * This symbol, if defined, indicates that the getservent() routine is - * available to look up network services in some data base or another. - */ -/*#define HAS_GETSERVENT / **/ - -/* HAS_GETSERVBYNAME: - * This symbol, if defined, indicates that the getservbyname() - * routine is available to look up services by their name. - */ -/* HAS_GETSERVBYPORT: - * This symbol, if defined, indicates that the getservbyport() - * routine is available to look up services by their port. - */ -#define HAS_GETSERVBYNAME /**/ -#define HAS_GETSERVBYPORT /**/ - -/* HAS_HTONL: - * This symbol, if defined, indicates that the htonl() routine (and - * friends htons() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_HTONS: - * This symbol, if defined, indicates that the htons() routine (and - * friends htonl() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHL: - * This symbol, if defined, indicates that the ntohl() routine (and - * friends htonl() htons() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHS: - * This symbol, if defined, indicates that the ntohs() routine (and - * friends htonl() htons() ntohl()) are available to do network - * order byte swapping. - */ -#define HAS_HTONL /**/ -#define HAS_HTONS /**/ -#define HAS_NTOHL /**/ -#define HAS_NTOHS /**/ - -/* HAS_LONG_DOUBLE: - * This symbol will be defined if the C compiler supports long - * doubles. - */ -/* LONG_DOUBLESIZE: - * This symbol contains the size of a long double, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long doubles. - */ -#define HAS_LONG_DOUBLE /**/ -#ifdef HAS_LONG_DOUBLE -#define LONG_DOUBLESIZE 12 /**/ -#endif - -/* HAS_LONG_LONG: - * This symbol will be defined if the C compiler supports long long. - */ -/* LONGLONGSIZE: - * This symbol contains the size of a long long, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long long. - */ -/*#define HAS_LONG_LONG / **/ -#ifdef HAS_LONG_LONG -#define LONGLONGSIZE 8 /**/ -#endif - -/* HAS_MEMCHR: - * This symbol, if defined, indicates that the memchr routine is available - * to locate characters within a C string. - */ -#define HAS_MEMCHR /**/ - -/* HAS_MKSTEMP: - * This symbol, if defined, indicates that the mkstemp routine is - * available to exclusively create and open a uniquely named - * temporary file. - */ -/*#define HAS_MKSTEMP / **/ - -/* HAS_MMAP: - * This symbol, if defined, indicates that the mmap system call is - * available to map a file into memory. - */ -/* Mmap_t: - * This symbol holds the return type of the mmap() system call - * (and simultaneously the type of the first argument). - * Usually set to 'void *' or 'caddr_t'. - */ -/*#define HAS_MMAP / **/ -#define Mmap_t void * /**/ - -/* HAS_MSG: - * This symbol, if defined, indicates that the entire msg*(2) library is - * supported (IPC mechanism based on message queues). - */ -/*#define HAS_MSG / **/ - -/* HAS_SEM: - * This symbol, if defined, indicates that the entire sem*(2) library is - * supported. - */ -/*#define HAS_SEM / **/ - -/* HAS_SETGRENT: - * This symbol, if defined, indicates that the setgrent routine is - * available for initializing sequential access of the group database. - */ -/*#define HAS_SETGRENT / **/ - -/* HAS_SETHOSTENT: - * This symbol, if defined, indicates that the sethostent() routine is - * available. - */ -/*#define HAS_SETHOSTENT / **/ - -/* HAS_SETNETENT: - * This symbol, if defined, indicates that the setnetent() routine is - * available. - */ -/*#define HAS_SETNETENT / **/ - -/* HAS_SETPROTOENT: - * This symbol, if defined, indicates that the setprotoent() routine is - * available. - */ -/*#define HAS_SETPROTOENT / **/ - -/* HAS_SETPGRP: - * This symbol, if defined, indicates that the setpgrp routine is - * available to set the current process group. - */ -/* USE_BSD_SETPGRP: - * This symbol, if defined, indicates that setpgrp needs two - * arguments whereas USG one needs none. See also HAS_SETPGID - * for a POSIX interface. - */ -/*#define HAS_SETPGRP / **/ -/*#define USE_BSD_SETPGRP / **/ - -/* HAS_SETPWENT: - * This symbol, if defined, indicates that the setpwent routine is - * available for initializing sequential access of the passwd database. - */ -/*#define HAS_SETPWENT / **/ - -/* HAS_SETSERVENT: - * This symbol, if defined, indicates that the setservent() routine is - * available. - */ -/*#define HAS_SETSERVENT / **/ - -/* HAS_SETVBUF: - * This symbol, if defined, indicates that the setvbuf routine is - * available to change buffering on an open stdio stream. - * to a line-buffered mode. - */ -#define HAS_SETVBUF /**/ - -/* HAS_SHM: - * This symbol, if defined, indicates that the entire shm*(2) library is - * supported. - */ -/*#define HAS_SHM / **/ - -/* Shmat_t: - * This symbol holds the return type of the shmat() system call. - * Usually set to 'void *' or 'char *'. - */ -/* HAS_SHMAT_PROTOTYPE: - * This symbol, if defined, indicates that the sys/shm.h includes - * a prototype for shmat(). Otherwise, it is up to the program to - * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess, - * but not always right so it should be emitted by the program only - * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. - */ -#define Shmat_t void * /**/ -/*#define HAS_SHMAT_PROTOTYPE / **/ - -/* HAS_SOCKET: - * This symbol, if defined, indicates that the BSD socket interface is - * supported. - */ -/* HAS_SOCKETPAIR: - * This symbol, if defined, indicates that the BSD socketpair() call is - * supported. - */ -/* HAS_MSG_CTRUNC: - * This symbol, if defined, indicates that the MSG_CTRUNC is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_DONTROUTE: - * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_OOB: - * This symbol, if defined, indicates that the MSG_OOB is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PEEK: - * This symbol, if defined, indicates that the MSG_PEEK is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PROXY: - * This symbol, if defined, indicates that the MSG_PROXY is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_SCM_RIGHTS: - * This symbol, if defined, indicates that the SCM_RIGHTS is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_SOCKADDR_SA_LEN: - * This symbol, if defined, indicates that the struct sockaddr - * structure has a member called sa_len, indicating the length of - * the structure. - */ -/* HAS_SIN6_SCOPE_ID: - * This symbol, if defined, indicates that the struct sockaddr_in6 - * structure has a member called sin6_scope_id. - */ -#define HAS_SOCKET /**/ -/*#define HAS_SOCKETPAIR / **/ -/*#define HAS_SOCKADDR_SA_LEN / **/ -/*#define HAS_MSG_CTRUNC / **/ -/*#define HAS_MSG_DONTROUTE / **/ -/*#define HAS_MSG_OOB / **/ -/*#define HAS_MSG_PEEK / **/ -/*#define HAS_MSG_PROXY / **/ -/*#define HAS_SCM_RIGHTS / **/ -#define HAS_SIN6_SCOPE_ID /**/ - -/* USE_STAT_BLOCKS: - * This symbol is defined if this system has a stat structure declaring - * st_blksize and st_blocks. - */ -#ifndef USE_STAT_BLOCKS -/*#define USE_STAT_BLOCKS / **/ -#endif - -/* USE_STRUCT_COPY: - * This symbol, if defined, indicates that this C compiler knows how - * to copy structures. If undefined, you'll need to use a block copy - * routine of some sort instead. - */ -#define USE_STRUCT_COPY /**/ - -/* HAS_STRERROR: - * This symbol, if defined, indicates that the strerror routine is - * available to translate error numbers to strings. See the writeup - * of Strerror() in this file before you try to define your own. - */ -/* HAS_SYS_ERRLIST: - * This symbol, if defined, indicates that the sys_errlist array is - * available to translate error numbers to strings. The extern int - * sys_nerr gives the size of that table. - */ -/* Strerror: - * This preprocessor symbol is defined as a macro if strerror() is - * not available to translate error numbers to strings but sys_errlist[] - * array is there. - */ -#define HAS_STRERROR /**/ -#define HAS_SYS_ERRLIST /**/ -#define Strerror(e) strerror(e) - -/* HAS_STRTOUL: - * This symbol, if defined, indicates that the strtoul routine is - * available to provide conversion of strings to unsigned long. - */ -#define HAS_STRTOUL /**/ - -/* HAS_UNION_SEMUN: - * This symbol, if defined, indicates that the union semun is - * defined by including . If not, the user code - * probably needs to define it as: - * union semun { - * int val; - * struct semid_ds *buf; - * unsigned short *array; - * } - */ -/* USE_SEMCTL_SEMUN: - * This symbol, if defined, indicates that union semun is - * used for semctl IPC_STAT. - */ -/* USE_SEMCTL_SEMID_DS: - * This symbol, if defined, indicates that struct semid_ds * is - * used for semctl IPC_STAT. - */ -#define HAS_UNION_SEMUN /**/ -/*#define USE_SEMCTL_SEMUN / **/ -/*#define USE_SEMCTL_SEMID_DS / **/ +#define HAS_UNION_SEMUN /**/ +/*#define USE_SEMCTL_SEMUN / **/ +/*#define USE_SEMCTL_SEMID_DS / **/ /* HAS_VFORK: * This symbol, if defined, indicates that vfork() exists. @@ -2862,6 +2640,64 @@ #define volatile #endif +/* HAS_VPRINTF: + * This symbol, if defined, indicates that the vprintf routine is available + * to printf with a pointer to an argument list. If unavailable, you + * may need to write your own, probably in terms of _doprnt(). + */ +/* USE_CHAR_VSPRINTF: + * This symbol is defined if this system has vsprintf() returning type + * (char*). The trend seems to be to declare it as "int vsprintf()". It + * is up to the package author to declare vsprintf correctly based on the + * symbol. + */ +#define HAS_VPRINTF /**/ +/*#define USE_CHAR_VSPRINTF / **/ + +/* DOUBLESIZE: + * This symbol contains the size of a double, so that the C preprocessor + * can make decisions based on it. + */ +#define DOUBLESIZE 8 /**/ + +/* EBCDIC: + * This symbol, if defined, indicates that this system uses + * EBCDIC encoding. + */ +/*#define EBCDIC / **/ + +/* Fpos_t: + * This symbol holds the type used to declare file positions in libc. + * It can be fpos_t, long, uint, etc... It may be necessary to include + * to get any typedef'ed information. + */ +#define Fpos_t fpos_t /* File position type */ + +/* Gid_t_f: + * This symbol defines the format string used for printing a Gid_t. + */ +#define Gid_t_f "ld" /**/ + +/* Gid_t_sign: + * This symbol holds the signedess of a Gid_t. + * 1 for unsigned, -1 for signed. + */ +#define Gid_t_sign -1 /* GID sign */ + +/* Gid_t_size: + * This symbol holds the size of a Gid_t in bytes. + */ +#define Gid_t_size 4 /* GID size */ + +/* Gid_t: + * This symbol holds the return type of getgid() and the type of + * argument to setrgid() and related functions. Typically, + * it is the type of group ids in the kernel. It can be int, ushort, + * gid_t, etc... It may be necessary to include to get + * any typedef'ed information. + */ +#define Gid_t gid_t /* Type for getgid(), etc... */ + /* I_DIRENT: * This symbol, if defined, indicates to the C program that it should * include . Using this symbol also triggers the definition @@ -2893,6 +2729,12 @@ /*#define I_GRP / **/ /*#define GRPASSWD / **/ +/* I_MACH_CTHREADS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/*#define I_MACH_CTHREADS / **/ + /* I_NDBM: * This symbol, if defined, indicates that exists and should * be included. @@ -2944,6 +2786,12 @@ */ /*#define I_NET_ERRNO / **/ +/* I_PTHREAD: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/*#define I_PTHREAD / **/ + /* I_PWD: * This symbol, if defined, indicates to the C program that it should * include . @@ -2990,42 +2838,196 @@ /*#define PWGECOS / **/ /*#define PWPASSWD / **/ +/* I_SYS_ACCESS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/*#define I_SYS_ACCESS / **/ + +/* I_SYS_SECURITY: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/*#define I_SYS_SECURITY / **/ + /* I_SYSUIO: * This symbol, if defined, indicates that exists and * should be included. */ -/*#define I_SYSUIO / **/ +/*#define I_SYSUIO / **/ + +/* I_TIME: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/* I_SYS_TIME: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/* I_SYS_TIME_KERNEL: + * This symbol, if defined, indicates to the C program that it should + * include with KERNEL defined. + */ +/* HAS_TM_TM_ZONE: + * This symbol, if defined, indicates to the C program that + * the struct tm has a tm_zone field. + */ +/* HAS_TM_TM_GMTOFF: + * This symbol, if defined, indicates to the C program that + * the struct tm has a tm_gmtoff field. + */ +#define I_TIME /**/ +/*#define I_SYS_TIME / **/ +/*#define I_SYS_TIME_KERNEL / **/ +/*#define HAS_TM_TM_ZONE / **/ +/*#define HAS_TM_TM_GMTOFF / **/ + +/* I_STDARG: + * This symbol, if defined, indicates that exists and should + * be included. + */ +/* I_VARARGS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +#define I_STDARG /**/ +/*#define I_VARARGS / **/ + +/* PERL_INC_VERSION_LIST: + * This variable specifies the list of subdirectories in over + * which perl.c:incpush() and lib/lib.pm will automatically + * search when adding directories to @INC, in a format suitable + * for a C initialization string. See the inc_version_list entry + * in Porting/Glossary for more details. + */ +/*#define PERL_INC_VERSION_LIST 0 / **/ + +/* INSTALL_USR_BIN_PERL: + * This symbol, if defined, indicates that Perl is to be installed + * also as /usr/bin/perl. + */ +/*#define INSTALL_USR_BIN_PERL / **/ + +/* Off_t: + * This symbol holds the type used to declare offsets in the kernel. + * It can be int, long, off_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ +/* LSEEKSIZE: + * This symbol holds the number of bytes used by the Off_t. + */ +/* Off_t_size: + * This symbol holds the number of bytes used by the Off_t. + */ +#define Off_t long long /* type */ +#define LSEEKSIZE 8 /* size */ +#define Off_t_size 8 /* size */ + +/* Free_t: + * This variable contains the return type of free(). It is usually + * void, but occasionally int. + */ +/* Malloc_t: + * This symbol is the type of pointer returned by malloc and realloc. + */ +#define Malloc_t void * /**/ +#define Free_t void /**/ + +/* PERL_MALLOC_WRAP: + * This symbol, if defined, indicates that we'd like malloc wrap checks. + */ +#define PERL_MALLOC_WRAP /**/ + +/* MYMALLOC: + * This symbol, if defined, indicates that we're using our own malloc. + */ +/*#define MYMALLOC / **/ + +/* Mode_t: + * This symbol holds the type used to declare file modes + * for systems calls. It is usually mode_t, but may be + * int or unsigned short. It may be necessary to include + * to get any typedef'ed information. + */ +#define Mode_t mode_t /* file mode parameter for system calls */ + +/* VAL_O_NONBLOCK: + * This symbol is to be used during open() or fcntl(F_SETFL) to turn on + * non-blocking I/O for the file descriptor. Note that there is no way + * back, i.e. you cannot turn it blocking again this way. If you wish to + * alternatively switch between blocking and non-blocking, use the + * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. + */ +/* VAL_EAGAIN: + * This symbol holds the errno error code set by read() when no data was + * present on the non-blocking file descriptor. + */ +/* RD_NODATA: + * This symbol holds the return code from read() when no data is present + * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is + * not defined, then you can't distinguish between no data and EOF by + * issuing a read(). You'll have to find another way to tell for sure! + */ +/* EOF_NONBLOCK: + * This symbol, if defined, indicates to the C program that a read() on + * a non-blocking file descriptor will return 0 on EOF, and not the value + * held in RD_NODATA (-1 usually, in that case!). + */ +#define VAL_O_NONBLOCK O_NONBLOCK +#define VAL_EAGAIN EAGAIN +#define RD_NODATA -1 +#define EOF_NONBLOCK -/* I_STDARG: - * This symbol, if defined, indicates that exists and should - * be included. +/* Netdb_host_t: + * This symbol holds the type used for the 1st argument + * to gethostbyaddr(). */ -/* I_VARARGS: - * This symbol, if defined, indicates to the C program that it should - * include . +/* Netdb_hlen_t: + * This symbol holds the type used for the 2nd argument + * to gethostbyaddr(). */ -#define I_STDARG /**/ -/*#define I_VARARGS / **/ - -/* Free_t: - * This variable contains the return type of free(). It is usually - * void, but occasionally int. +/* Netdb_name_t: + * This symbol holds the type used for the argument to + * gethostbyname(). */ -/* Malloc_t: - * This symbol is the type of pointer returned by malloc and realloc. +/* Netdb_net_t: + * This symbol holds the type used for the 1st argument to + * getnetbyaddr(). */ -#define Malloc_t void * /**/ -#define Free_t void /**/ +#define Netdb_host_t char * /**/ +#define Netdb_hlen_t int /**/ +#define Netdb_name_t char * /**/ +#define Netdb_net_t long /**/ -/* PERL_MALLOC_WRAP: - * This symbol, if defined, indicates that we'd like malloc wrap checks. +/* PERL_OTHERLIBDIRS: + * This variable contains a colon-separated set of paths for the perl + * binary to search for additional library files or modules. + * These directories will be tacked to the end of @INC. + * Perl will automatically search below each path for version- + * and architecture-specific directories. See PERL_INC_VERSION_LIST + * for more details. */ -#define PERL_MALLOC_WRAP /**/ +/*#define PERL_OTHERLIBDIRS "" / **/ -/* MYMALLOC: - * This symbol, if defined, indicates that we're using our own malloc. +/* Pid_t: + * This symbol holds the type used to declare process ids in the kernel. + * It can be int, uint, pid_t, etc... It may be necessary to include + * to get any typedef'ed information. */ -/*#define MYMALLOC / **/ +#define Pid_t int /* PID type */ + +/* PRIVLIB: + * This symbol contains the name of the private library for this package. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. The program + * should be prepared to do ~ expansion. + */ +/* PRIVLIB_EXP: + * This symbol contains the ~name expanded version of PRIVLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +#define PRIVLIB "c:\\perl\\lib" /**/ +#define PRIVLIB_EXP (win32_get_privlib(PERL_VERSION_STRING, NULL)) /**/ /* CAN_PROTOTYPE: * If defined, this macro indicates that the C compiler can handle @@ -3045,6 +3047,65 @@ #define _(args) () #endif +/* PTRSIZE: + * This symbol contains the size of a pointer, so that the C preprocessor + * can make decisions based on it. It will be sizeof(void *) if + * the compiler supports (void *); otherwise it will be + * sizeof(char *). + */ +#define PTRSIZE 4 /**/ + +/* HAS_QUAD: + * This symbol, if defined, tells that there's a 64-bit integer type, + * Quad_t, and its unsigned counterpart, Uquad_t. QUADKIND will be one + * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, QUAD_IS_INT64_T, + * or QUAD_IS___INT64. + */ +#define HAS_QUAD /**/ +#ifdef HAS_QUAD +# define Quad_t long long /**/ +# define Uquad_t unsigned long long /**/ +# define QUADKIND 3 /**/ +# define QUAD_IS_INT 1 +# define QUAD_IS_LONG 2 +# define QUAD_IS_LONG_LONG 3 +# define QUAD_IS_INT64_T 4 +# define QUAD_IS___INT64 5 +#endif + +/* Drand01: + * This macro is to be used to generate uniformly distributed + * random numbers over the range [0., 1.[. You may have to supply + * an 'extern double drand48();' in your program since SunOS 4.1.3 + * doesn't provide you with anything relevant in its headers. + * See HAS_DRAND48_PROTO. + */ +/* Rand_seed_t: + * This symbol defines the type of the argument of the + * random seed function. + */ +/* seedDrand01: + * This symbol defines the macro to be used in seeding the + * random number generator (see Drand01). + */ +/* RANDBITS: + * This symbol indicates how many bits are produced by the + * function used to generate normalized random numbers. + * Values include 15, 16, 31, and 48. + */ +#define Drand01() (rand()/(double)((unsigned)1< to get any typedef'ed information. + */ +#define Size_t size_t /* length parameter for string functions */ + +/* Sock_size_t: + * This symbol holds the type used for the size argument of + * various socket calls (just the base type, not the pointer-to). + */ +#define Sock_size_t int /**/ + +/* SSize_t: + * This symbol holds the type used by functions that return + * a count of bytes or an error condition. It must be a signed type. + * It is usually ssize_t, but may be long or int, etc. + * It may be necessary to include or + * to get any typedef'ed information. + * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). + */ +#define SSize_t int /* signed count of bytes */ + +/* STDCHAR: + * This symbol is defined to be the type of char used in stdio.h. + * It has the values "unsigned char" or "char". + */ +#define STDCHAR char /**/ + +/* Uid_t_f: + * This symbol defines the format string used for printing a Uid_t. + */ +#define Uid_t_f "ld" /**/ + +/* Uid_t_sign: + * This symbol holds the signedess of a Uid_t. + * 1 for unsigned, -1 for signed. + */ +#define Uid_t_sign -1 /* UID sign */ + +/* Uid_t_size: + * This symbol holds the size of a Uid_t in bytes. + */ +#define Uid_t_size 4 /* UID size */ + +/* Uid_t: + * This symbol holds the type used to declare user ids in the kernel. + * It can be int, ushort, uid_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ +#define Uid_t uid_t /* UID type */ + +/* USE_ITHREADS: + * This symbol, if defined, indicates that Perl should be built to + * use the interpreter-based threading implementation. + */ +/* USE_5005THREADS: + * This symbol, if defined, indicates that Perl should be built to + * use the 5.005-based threading implementation. + * Only valid up to 5.8.x. + */ +/* OLD_PTHREADS_API: + * This symbol, if defined, indicates that Perl should + * be built to use the old draft POSIX threads API. + */ +/* USE_REENTRANT_API: + * This symbol, if defined, indicates that Perl should + * try to use the various _r versions of library functions. + * This is extremely experimental. + */ +/*#define USE_5005THREADS / **/ +#define USE_ITHREADS /**/ +#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) +#define USE_THREADS /* until src is revised*/ +#endif +/*#define OLD_PTHREADS_API / **/ +/*#define USE_REENTRANT_API / **/ + +/* PERL_VENDORARCH: + * If defined, this symbol contains the name of a private library. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. + * It may have a ~ on the front. + * The standard distribution will put nothing in this directory. + * Vendors who distribute perl may wish to place their own + * architecture-dependent modules and extensions in this directory with + * MakeMaker Makefile.PL INSTALLDIRS=vendor + * or equivalent. See INSTALL for details. */ -#define SIG_NAME "ZERO", "HUP", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/ -#define SIG_NUM 0, 1, 2, 21, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0 /**/ -#define SIG_SIZE 27 /**/ +/* PERL_VENDORARCH_EXP: + * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +/*#define PERL_VENDORARCH "" / **/ +/*#define PERL_VENDORARCH_EXP "" / **/ -/* STDCHAR: - * This symbol is defined to be the type of char used in stdio.h. - * It has the values "unsigned char" or "char". +/* PERL_VENDORLIB_EXP: + * This symbol contains the ~name expanded version of VENDORLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define STDCHAR char /**/ +/* PERL_VENDORLIB_STEM: + * This define is PERL_VENDORLIB_EXP with any trailing version-specific component + * removed. The elements in inc_version_list (inc_version_list.U) can + * be tacked onto this variable to generate a list of directories to search. + */ +/*#define PERL_VENDORLIB_EXP "" / **/ +/*#define PERL_VENDORLIB_STEM "" / **/ /* VOIDFLAGS: * This symbol indicates how much support of the void type is given by this @@ -3489,6 +3700,12 @@ */ /*#define HAS_INT64_T / **/ +/* HAS_ISBLANK: + * This manifest constant lets the C program know that isblank + * is available. + */ +/*#define HAS_ISBLANK / **/ + /* HAS_ISFINITE: * This symbol, if defined, indicates that the isfinite routine is * available to check whether a double is finite (non-infinity non-NaN). @@ -4085,6 +4302,12 @@ */ /*#define I_SOCKS / **/ +/* I_STDBOOL: + * This symbol, if defined, indicates that exists and + * can be included. + */ +/*#define I_STDBOOL / **/ + /* I_SUNMATH: * This symbol, if defined, indicates that exists and * should be included. @@ -4354,6 +4577,16 @@ */ #define SELECT_MIN_BITS 32 /**/ +/* ST_INO_SIZE: + * This variable contains the size of struct stat's st_ino in bytes. + */ +/* ST_INO_SIGN: + * This symbol holds the signedess of struct stat's st_ino. + * 1 for unsigned, -1 for signed. + */ +#define ST_INO_SIGN 1 /* st_ino sign */ +#define ST_INO_SIZE 4 /* st_ino size */ + /* STARTPERL: * This variable contains the string to put in front of a perl * script to make sure (one hopes) that it runs with perl and not @@ -4435,6 +4668,13 @@ /*#define USE_FAST_STDIO / **/ #endif +/* USE_KERN_PROC_PATHNAME: + * This symbol, if defined, indicates that we can use sysctl with + * KERN_PROC_PATHNAME to get a full path for the executable, and hence + * convert $^X to an absolute path. + */ +/*#define USE_KERN_PROC_PATHNAME / **/ + /* USE_LARGE_FILES: * This symbol, if defined, indicates that large file support * should be used when available. @@ -4467,6 +4707,13 @@ #define MULTIPLICITY /**/ #endif +/* USE_NSGETEXECUTABLEPATH: + * This symbol, if defined, indicates that we can use _NSGetExecutablePath + * and realpath to get a full path for the executable, and hence convert + * $^X to an absolute path. + */ +/*#define USE_NSGETEXECUTABLEPATH / **/ + /* USE_PERLIO: * This symbol, if defined, indicates that the PerlIO abstraction should * be used throughout. If not defined, stdio should be @@ -4484,203 +4731,4 @@ /*#define USE_SOCKS / **/ #endif -/* HAS_DRAND48_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the drand48() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern double drand48(void); - */ -/*#define HAS_DRAND48_PROTO / **/ - -/* HAS_GETHOST_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for gethostent(), gethostbyname(), and - * gethostbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETHOST_PROTOS /**/ - -/* HAS_GETNET_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getnetent(), getnetbyname(), and - * getnetbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -/*#define HAS_GETNET_PROTOS / **/ - -/* HAS_GETPROTO_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getprotoent(), getprotobyname(), and - * getprotobyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETPROTO_PROTOS /**/ - -/* HAS_GETSERV_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getservent(), getservbyname(), and - * getservbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETSERV_PROTOS /**/ - -/* HAS_LSEEK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the lseek() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern off_t lseek(int, off_t, int); - */ -#define HAS_LSEEK_PROTO /**/ - -/* Netdb_host_t: - * This symbol holds the type used for the 1st argument - * to gethostbyaddr(). - */ -/* Netdb_hlen_t: - * This symbol holds the type used for the 2nd argument - * to gethostbyaddr(). - */ -/* Netdb_name_t: - * This symbol holds the type used for the argument to - * gethostbyname(). - */ -/* Netdb_net_t: - * This symbol holds the type used for the 1st argument to - * getnetbyaddr(). - */ -#define Netdb_host_t char * /**/ -#define Netdb_hlen_t int /**/ -#define Netdb_name_t char * /**/ -#define Netdb_net_t long /**/ - -/* Select_fd_set_t: - * This symbol holds the type used for the 2nd, 3rd, and 4th - * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET - * is defined, and 'int *' otherwise. This is only useful if you - * have select(), of course. - */ -#define Select_fd_set_t Perl_fd_set * /**/ - -/* Sock_size_t: - * This symbol holds the type used for the size argument of - * various socket calls (just the base type, not the pointer-to). - */ -#define Sock_size_t int /**/ - -/* HAS_TIME: - * This symbol, if defined, indicates that the time() routine exists. - */ -/* Time_t: - * This symbol holds the type returned by time(). It can be long, - * or time_t on BSD sites (in which case should be - * included). - */ -#define HAS_TIME /**/ -#define Time_t time_t /* Time type */ - -/* HAS_TIMES: - * This symbol, if defined, indicates that the times() routine exists. - * Note that this became obsolete on some systems (SUNOS), which now - * use getrusage(). It may be necessary to include . - */ -#define HAS_TIMES /**/ - -/* Fpos_t: - * This symbol holds the type used to declare file positions in libc. - * It can be fpos_t, long, uint, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Fpos_t fpos_t /* File position type */ - -/* Gid_t_f: - * This symbol defines the format string used for printing a Gid_t. - */ -#define Gid_t_f "ld" /**/ - -/* Gid_t_sign: - * This symbol holds the signedess of a Gid_t. - * 1 for unsigned, -1 for signed. - */ -#define Gid_t_sign -1 /* GID sign */ - -/* Gid_t_size: - * This symbol holds the size of a Gid_t in bytes. - */ -#define Gid_t_size 4 /* GID size */ - -/* Gid_t: - * This symbol holds the return type of getgid() and the type of - * argument to setrgid() and related functions. Typically, - * it is the type of group ids in the kernel. It can be int, ushort, - * gid_t, etc... It may be necessary to include to get - * any typedef'ed information. - */ -#define Gid_t gid_t /* Type for getgid(), etc... */ - -/* Off_t: - * This symbol holds the type used to declare offsets in the kernel. - * It can be int, long, off_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -/* LSEEKSIZE: - * This symbol holds the number of bytes used by the Off_t. - */ -/* Off_t_size: - * This symbol holds the number of bytes used by the Off_t. - */ -#define Off_t long long /* type */ -#define LSEEKSIZE 8 /* size */ -#define Off_t_size 8 /* size */ - -/* Mode_t: - * This symbol holds the type used to declare file modes - * for systems calls. It is usually mode_t, but may be - * int or unsigned short. It may be necessary to include - * to get any typedef'ed information. - */ -#define Mode_t mode_t /* file mode parameter for system calls */ - -/* Pid_t: - * This symbol holds the type used to declare process ids in the kernel. - * It can be int, uint, pid_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Pid_t int /* PID type */ - -/* Size_t_size: - * This symbol holds the size of a Size_t in bytes. - */ -#define Size_t_size 4 /**/ - -/* Size_t: - * This symbol holds the type used to declare length parameters - * for string functions. It is usually size_t, but may be - * unsigned long, int, etc. It may be necessary to include - * to get any typedef'ed information. - */ -#define Size_t size_t /* length parameter for string functions */ - -/* Uid_t_f: - * This symbol defines the format string used for printing a Uid_t. - */ -#define Uid_t_f "ld" /**/ - -/* Uid_t_sign: - * This symbol holds the signedess of a Uid_t. - * 1 for unsigned, -1 for signed. - */ -#define Uid_t_sign -1 /* UID sign */ - -/* Uid_t_size: - * This symbol holds the size of a Uid_t in bytes. - */ -#define Uid_t_size 4 /* UID size */ - -/* Uid_t: - * This symbol holds the type used to declare user ids in the kernel. - * It can be int, ushort, uid_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Uid_t uid_t /* UID type */ - #endif diff --git a/Master/tlpkg/tlperl/lib/CORE/cop.h b/Master/tlpkg/tlperl/lib/CORE/cop.h index ad0ee9b7239..0cfeb447146 100644 --- a/Master/tlpkg/tlperl/lib/CORE/cop.h +++ b/Master/tlpkg/tlperl/lib/CORE/cop.h @@ -138,7 +138,7 @@ typedef struct jmpenv JMPENV; PerlProc_longjmp(PL_top_env->je_buf, (v)); \ if ((v) == 2) \ PerlProc_exit(STATUS_EXIT); \ - PerlIO_printf(PerlIO_stderr(), "panic: top_env\n"); \ + PerlIO_printf(PerlIO_stderr(), "panic: top_env, v=%d\n", (int)v); \ PerlProc_exit(1); \ } STMT_END @@ -389,6 +389,7 @@ struct cop { #ifdef USE_ITHREADS char * cop_stashpv; /* package line was compiled in */ char * cop_file; /* file name the following line # is from */ + I32 cop_stashlen; /* negative for UTF8 */ #else HV * cop_stash; /* package line was compiled in */ GV * cop_filegv; /* file the following line # is from */ @@ -428,14 +429,32 @@ struct cop { # define CopSTASHPV(c) ((c)->cop_stashpv) # ifdef NETWARE -# define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : NULL)) +# define CopSTASHPV_set(c,pv,n) ((c)->cop_stashpv = \ + ((pv) ? savepvn(pv,n) : NULL)) # else -# define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = savesharedpv(pv)) +# define CopSTASHPV_set(c,pv,n) ((c)->cop_stashpv = (pv) \ + ? savesharedpvn(pv,n) : NULL) # endif -# define CopSTASH(c) (CopSTASHPV(c) \ - ? gv_stashpv(CopSTASHPV(c),GV_ADD) : NULL) -# define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME_get(hv) : NULL) +# define CopSTASH_len_set(c,n) ((c)->cop_stashlen = (n)) +# define CopSTASH_len(c) ((c)->cop_stashlen) + +# define CopSTASH(c) (CopSTASHPV(c) \ + ? gv_stashpvn(CopSTASHPV(c), \ + CopSTASH_len(c) < 0 \ + ? -CopSTASH_len(c) \ + : CopSTASH_len(c), \ + GV_ADD|SVf_UTF8*(CopSTASH_len(c) < 0) \ + ) \ + : NULL) +# define CopSTASH_set(c,hv) (CopSTASHPV_set(c, \ + (hv) ? HvNAME_get(hv) : NULL, \ + (hv) ? HvNAMELEN(hv) : 0), \ + CopSTASH_len_set(c, \ + (hv) ? HvNAMEUTF8(hv) \ + ? -HvNAMELEN(hv) \ + : HvNAMELEN(hv) \ + : 0)) # define CopSTASH_eq(c,hv) ((hv) && stashpv_hvname_match(c,hv)) # ifdef NETWARE # define CopSTASH_free(c) SAVECOPSTASH_FREE(c) @@ -542,7 +561,9 @@ be zero. #define cop_hints_2hv(cop, flags) \ cophh_2hv(CopHINTHASH_get(cop), flags) -#define CopLABEL(c) Perl_fetch_cop_label(aTHX_ (c), NULL, NULL) +#define CopLABEL(c) Perl_cop_fetch_label(aTHX_ (c), NULL, NULL) +#define CopLABEL_len(c,len) Perl_cop_fetch_label(aTHX_ (c), len, NULL) +#define CopLABEL_len_flags(c,len,flags) Perl_cop_fetch_label(aTHX_ (c), len, flags) #define CopLABEL_alloc(pv) ((pv)?savepv(pv):NULL) #define CopSTASH_ne(c,hv) (!CopSTASH_eq(c,hv)) @@ -554,30 +575,6 @@ be zero. /* OutCopFILE() is CopFILE for output (caller, die, warn, etc.) */ #define OutCopFILE(c) CopFILE(c) -/* If $[ is non-zero, it's stored in cop_hints under the key "$[", and - HINT_ARYBASE is set to indicate this. - Setting it is inefficient due to the need to create 2 mortal SVs, but as - using $[ is highly discouraged, no sane Perl code will be using it. */ -#define CopARYBASE_get(c) \ - ((CopHINTS_get(c) & HINT_ARYBASE) \ - ? SvIV(cop_hints_fetch_pvs((c), "$[", 0)) \ - : 0) -#define CopARYBASE_set(c, b) STMT_START { \ - if (b || ((c)->cop_hints & HINT_ARYBASE)) { \ - (c)->cop_hints |= HINT_ARYBASE; \ - if ((c) == &PL_compiling) { \ - SV *val = newSViv(b); \ - (void)hv_stores(GvHV(PL_hintgv), "$[", val); \ - mg_set(val); \ - PL_hints |= HINT_ARYBASE; \ - } else { \ - CopHINTHASH_set((c), \ - cophh_store_pvs(CopHINTHASH_get((c)), "$[", \ - sv_2mortal(newSViv(b)), 0)); \ - } \ - } \ - } STMT_END - /* FIXME NATIVE_HINTS if this is changed from op_private (see perl.h) */ #define CopHINTS_get(c) ((c)->cop_hints + 0) #define CopHINTS_set(c, h) STMT_START { \ @@ -633,9 +630,18 @@ struct block_format { #define PUSHSUB(cx) \ + { \ + /* If the context is indeterminate, then only the lvalue */ \ + /* flags that the caller also has are applicable. */ \ + U8 phlags = \ + (PL_op->op_flags & OPf_WANT) \ + ? OPpENTERSUB_LVAL_MASK \ + : !(PL_op->op_private & OPpENTERSUB_LVAL_MASK) \ + ? 0 : Perl_was_lvalue_sub(aTHX); \ PUSHSUB_BASE(cx) \ cx->blk_u16 = PL_op->op_private & \ - (OPpLVAL_INTRO|OPpENTERSUB_INARGS); + (phlags|OPpDEREF); \ + } /* variant for use by OP_DBSTATE, where op_private holds hint bits */ #define PUSHSUB_DB(cx) \ @@ -782,6 +788,8 @@ struct block_loop { : (SV**)NULL) #define CxLABEL(c) (0 + CopLABEL((c)->blk_oldcop)) +#define CxLABEL_len(c,len) (0 + CopLABEL_len((c)->blk_oldcop, len)) +#define CxLABEL_len_flags(c,len,flags) (0 + CopLABEL_len_flags((c)->blk_oldcop, len, flags)) #define CxHASARGS(c) (((c)->cx_type & CXp_HASARGS) == CXp_HASARGS) #define CxLVAL(c) (0 + (c)->blk_u16) @@ -1174,18 +1182,18 @@ typedef struct stackinfo PERL_SI; =head1 Multicall Functions =for apidoc Ams||dMULTICALL -Declare local variables for a multicall. See L. +Declare local variables for a multicall. See L. =for apidoc Ams||PUSH_MULTICALL Opening bracket for a lightweight callback. -See L. +See L. =for apidoc Ams||MULTICALL -Make a lightweight callback. See L. +Make a lightweight callback. See L. =for apidoc Ams||POP_MULTICALL Closing bracket for a lightweight callback. -See L. +See L. =cut */ diff --git a/Master/tlpkg/tlperl/lib/CORE/cv.h b/Master/tlpkg/tlperl/lib/CORE/cv.h index 6fdf5cbaf2a..a3b9865c48e 100644 --- a/Master/tlpkg/tlperl/lib/CORE/cv.h +++ b/Master/tlpkg/tlperl/lib/CORE/cv.h @@ -8,7 +8,7 @@ * */ -/* This structure must the beginning of XPVFM in sv.h */ +/* This structure must match the beginning of XPVFM in sv.h */ struct xpvcv { _XPV_HEAD; @@ -26,8 +26,16 @@ Null CV pointer. =head1 CV Manipulation Functions +This section documents functions to manipulate CVs which are code-values, +or subroutines. For more information, see L. + =for apidoc Am|HV*|CvSTASH|CV* cv -Returns the stash of the CV. +Returns the stash of the CV. A stash is the symbol table hash, containing +the package-scoped variables in the package where the subroutine was defined. +For more information, see L. + +This also has a special use with XS AUTOLOAD subs. +See L. =cut */ @@ -46,9 +54,11 @@ Returns the stash of the CV. #define CvGV_set(cv,gv) Perl_cvgv_set(aTHX_ cv, gv) #define CvFILE(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_file #ifdef USE_ITHREADS -# define CvFILE_set_from_cop(sv, cop) (CvFILE(sv) = savepv(CopFILE(cop))) +# define CvFILE_set_from_cop(sv, cop) \ + (CvFILE(sv) = savepv(CopFILE(cop)), CvDYNFILE_on(sv)) #else -# define CvFILE_set_from_cop(sv, cop) (CvFILE(sv) = CopFILE(cop)) +# define CvFILE_set_from_cop(sv, cop) \ + (CvFILE(sv) = CopFILE(cop), CvDYNFILE_off(sv)) #endif #define CvFILEGV(sv) (gv_fetchfile(CvFILE(sv))) #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) @@ -64,6 +74,23 @@ Returns the stash of the CV. #define CvFLAGS(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_flags #define CvOUTSIDE_SEQ(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_outside_seq +/* These two are sometimes called on non-CVs */ +#define CvPROTO(sv) \ + ( \ + SvPOK(sv) \ + ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \ + ? SvEND(sv)+1 : SvPVX_const(sv) \ + : NULL \ + ) +#define CvPROTOLEN(sv) \ + ( \ + SvPOK(sv) \ + ? SvTYPE(sv) == SVt_PVCV && CvAUTOLOAD(sv) \ + ? SvLEN(sv)-SvCUR(sv)-2 \ + : SvCUR(sv) \ + : 0 \ + ) + #define CVf_METHOD 0x0001 /* CV is explicitly marked as a method */ #define CVf_LVALUE 0x0002 /* CV return value can be used as lvalue */ #define CVf_CONST 0x0004 /* inlinable sub */ @@ -78,6 +105,8 @@ Returns the stash of the CV. #define CVf_NODEBUG 0x0200 /* no DB::sub indirection for this CV (esp. useful for special XSUBs) */ #define CVf_CVGV_RC 0x0400 /* CvGV is reference counted */ +#define CVf_DYNFILE 0x1000 /* The filename isn't static */ +#define CVf_AUTOLOAD 0x2000 /* SvPVX contains AUTOLOADed sub name */ /* This symbol for optimised communication between toke.c and op.c: */ #define CVf_BUILTIN_ATTRS (CVf_METHOD|CVf_LVALUE) @@ -135,6 +164,14 @@ Returns the stash of the CV. #define CvCVGV_RC_on(cv) (CvFLAGS(cv) |= CVf_CVGV_RC) #define CvCVGV_RC_off(cv) (CvFLAGS(cv) &= ~CVf_CVGV_RC) +#define CvDYNFILE(cv) (CvFLAGS(cv) & CVf_DYNFILE) +#define CvDYNFILE_on(cv) (CvFLAGS(cv) |= CVf_DYNFILE) +#define CvDYNFILE_off(cv) (CvFLAGS(cv) &= ~CVf_DYNFILE) + +#define CvAUTOLOAD(cv) (CvFLAGS(cv) & CVf_AUTOLOAD) +#define CvAUTOLOAD_on(cv) (CvFLAGS(cv) |= CVf_AUTOLOAD) +#define CvAUTOLOAD_off(cv) (CvFLAGS(cv) &= ~CVf_AUTOLOAD) + /* Flags for newXS_flags */ #define XS_DYNAMIC_FILENAME 0x01 /* The filename isn't static */ diff --git a/Master/tlpkg/tlperl/lib/CORE/dosish.h b/Master/tlpkg/tlperl/lib/CORE/dosish.h index 59bf122859b..e9c59fa5468 100644 --- a/Master/tlpkg/tlperl/lib/CORE/dosish.h +++ b/Master/tlpkg/tlperl/lib/CORE/dosish.h @@ -52,7 +52,9 @@ #endif /* DJGPP */ #ifndef PERL_SYS_TERM_BODY -# define PERL_SYS_TERM_BODY() HINTS_REFCNT_TERM; OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM +# define PERL_SYS_TERM_BODY() \ + HINTS_REFCNT_TERM; OP_CHECK_MUTEX_TERM; \ + OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM #endif #define dXSUB_SYS @@ -88,12 +90,7 @@ * information. */ #if defined(WIN64) || defined(USE_LARGE_FILES) -# if defined(__BORLANDC__) /* buk */ -# include -# define Stat_t struct stati64 -# else #define Stat_t struct _stati64 -# endif #else #if defined(UNDER_CE) #define Stat_t struct xcestat diff --git a/Master/tlpkg/tlperl/lib/CORE/embed.h b/Master/tlpkg/tlperl/lib/CORE/embed.h index 04b32d18089..f7db1e06135 100644 --- a/Master/tlpkg/tlperl/lib/CORE/embed.h +++ b/Master/tlpkg/tlperl/lib/CORE/embed.h @@ -28,7 +28,10 @@ #define Gv_AMupdate(a,b) Perl_Gv_AMupdate(aTHX_ a,b) #define _to_uni_fold_flags(a,b,c,d) Perl__to_uni_fold_flags(aTHX_ a,b,c,d) -#define _to_utf8_fold_flags(a,b,c,d) Perl__to_utf8_fold_flags(aTHX_ a,b,c,d) +#define _to_utf8_fold_flags(a,b,c,d,e) Perl__to_utf8_fold_flags(aTHX_ a,b,c,d,e) +#define _to_utf8_lower_flags(a,b,c,d,e) Perl__to_utf8_lower_flags(aTHX_ a,b,c,d,e) +#define _to_utf8_title_flags(a,b,c,d,e) Perl__to_utf8_title_flags(aTHX_ a,b,c,d,e) +#define _to_utf8_upper_flags(a,b,c,d,e) Perl__to_utf8_upper_flags(aTHX_ a,b,c,d,e) #define amagic_call(a,b,c,d) Perl_amagic_call(aTHX_ a,b,c,d) #define amagic_deref_call(a,b) Perl_amagic_deref_call(aTHX_ a,b) #define apply_attrs_string(a,b,c,d) Perl_apply_attrs_string(aTHX_ a,b,c,d) @@ -78,6 +81,7 @@ #define croak_xs_usage(a,b) Perl_croak_xs_usage(aTHX_ a,b) #define custom_op_desc(a) Perl_custom_op_desc(aTHX_ a) #define custom_op_name(a) Perl_custom_op_name(aTHX_ a) +#define cv_clone(a) Perl_cv_clone(aTHX_ a) #define cv_const_sv(a) Perl_cv_const_sv(aTHX_ a) #define cv_get_call_checker(a,b,c) Perl_cv_get_call_checker(aTHX_ a,b,c) #define cv_set_call_checker(a,b,c) Perl_cv_set_call_checker(aTHX_ a,b,c) @@ -160,7 +164,9 @@ #define grok_numeric_radix(a,b) Perl_grok_numeric_radix(aTHX_ a,b) #define grok_oct(a,b,c,d) Perl_grok_oct(aTHX_ a,b,c,d) #define gv_add_by_type(a,b) Perl_gv_add_by_type(aTHX_ a,b) -#define gv_autoload4(a,b,c,d) Perl_gv_autoload4(aTHX_ a,b,c,d) +#define gv_autoload_pv(a,b,c) Perl_gv_autoload_pv(aTHX_ a,b,c) +#define gv_autoload_pvn(a,b,c,d) Perl_gv_autoload_pvn(aTHX_ a,b,c,d) +#define gv_autoload_sv(a,b,c) Perl_gv_autoload_sv(aTHX_ a,b,c) #define gv_check(a) Perl_gv_check(aTHX_ a) #define gv_const_sv(a) Perl_gv_const_sv(aTHX_ a) #define gv_dump(a) Perl_gv_dump(aTHX_ a) @@ -168,17 +174,25 @@ #define gv_efullname4(a,b,c,d) Perl_gv_efullname4(aTHX_ a,b,c,d) #define gv_fetchfile(a) Perl_gv_fetchfile(aTHX_ a) #define gv_fetchfile_flags(a,b,c) Perl_gv_fetchfile_flags(aTHX_ a,b,c) -#define gv_fetchmeth(a,b,c,d) Perl_gv_fetchmeth(aTHX_ a,b,c,d) -#define gv_fetchmeth_autoload(a,b,c,d) Perl_gv_fetchmeth_autoload(aTHX_ a,b,c,d) +#define gv_fetchmeth_pv(a,b,c,d) Perl_gv_fetchmeth_pv(aTHX_ a,b,c,d) +#define gv_fetchmeth_pv_autoload(a,b,c,d) Perl_gv_fetchmeth_pv_autoload(aTHX_ a,b,c,d) +#define gv_fetchmeth_pvn(a,b,c,d,e) Perl_gv_fetchmeth_pvn(aTHX_ a,b,c,d,e) +#define gv_fetchmeth_pvn_autoload(a,b,c,d,e) Perl_gv_fetchmeth_pvn_autoload(aTHX_ a,b,c,d,e) +#define gv_fetchmeth_sv(a,b,c,d) Perl_gv_fetchmeth_sv(aTHX_ a,b,c,d) +#define gv_fetchmeth_sv_autoload(a,b,c,d) Perl_gv_fetchmeth_sv_autoload(aTHX_ a,b,c,d) #define gv_fetchmethod_autoload(a,b,c) Perl_gv_fetchmethod_autoload(aTHX_ a,b,c) -#define gv_fetchmethod_flags(a,b,c) Perl_gv_fetchmethod_flags(aTHX_ a,b,c) +#define gv_fetchmethod_pv_flags(a,b,c) Perl_gv_fetchmethod_pv_flags(aTHX_ a,b,c) +#define gv_fetchmethod_pvn_flags(a,b,c,d) Perl_gv_fetchmethod_pvn_flags(aTHX_ a,b,c,d) +#define gv_fetchmethod_sv_flags(a,b,c) Perl_gv_fetchmethod_sv_flags(aTHX_ a,b,c) #define gv_fetchpv(a,b,c) Perl_gv_fetchpv(aTHX_ a,b,c) #define gv_fetchpvn_flags(a,b,c,d) Perl_gv_fetchpvn_flags(aTHX_ a,b,c,d) #define gv_fetchsv(a,b,c) Perl_gv_fetchsv(aTHX_ a,b,c) #define gv_fullname(a,b) Perl_gv_fullname(aTHX_ a,b) #define gv_fullname4(a,b,c,d) Perl_gv_fullname4(aTHX_ a,b,c,d) #define gv_handler(a,b) Perl_gv_handler(aTHX_ a,b) -#define gv_init(a,b,c,d,e) Perl_gv_init(aTHX_ a,b,c,d,e) +#define gv_init_pv(a,b,c,d) Perl_gv_init_pv(aTHX_ a,b,c,d) +#define gv_init_pvn(a,b,c,d,e) Perl_gv_init_pvn(aTHX_ a,b,c,d,e) +#define gv_init_sv(a,b,c,d) Perl_gv_init_sv(aTHX_ a,b,c,d) #define gv_name_set(a,b,c,d) Perl_gv_name_set(aTHX_ a,b,c,d) #define gv_stashpv(a,b) Perl_gv_stashpv(aTHX_ a,b) #define gv_stashpvn(a,b,c) Perl_gv_stashpvn(aTHX_ a,b,c) @@ -236,6 +250,7 @@ #define is_utf8_alpha(a) Perl_is_utf8_alpha(aTHX_ a) #define is_utf8_ascii(a) Perl_is_utf8_ascii(aTHX_ a) #define is_utf8_char Perl_is_utf8_char +#define is_utf8_char_buf Perl_is_utf8_char_buf #define is_utf8_cntrl(a) Perl_is_utf8_cntrl(aTHX_ a) #define is_utf8_digit(a) Perl_is_utf8_digit(aTHX_ a) #define is_utf8_graph(a) Perl_is_utf8_graph(aTHX_ a) @@ -301,8 +316,6 @@ #define my_failure_exit() Perl_my_failure_exit(aTHX) #define my_fflush_all() Perl_my_fflush_all(aTHX) #define my_fork Perl_my_fork -#define my_pclose(a) Perl_my_pclose(aTHX_ a) -#define my_popen(a,b) Perl_my_popen(aTHX_ a,b) #define my_popen_list(a,b,c) Perl_my_popen_list(aTHX_ a,b,c) #define my_setenv(a,b) Perl_my_setenv(aTHX_ a,b) #define my_socketpair Perl_my_socketpair @@ -317,12 +330,13 @@ #define newBINOP(a,b,c,d) Perl_newBINOP(aTHX_ a,b,c,d) #define newCONDOP(a,b,c,d) Perl_newCONDOP(aTHX_ a,b,c,d) #define newCONSTSUB(a,b,c) Perl_newCONSTSUB(aTHX_ a,b,c) +#define newCONSTSUB_flags(a,b,c,d,e) Perl_newCONSTSUB_flags(aTHX_ a,b,c,d,e) #define newCVREF(a,b) Perl_newCVREF(aTHX_ a,b) #define newFOROP(a,b,c,d,e) Perl_newFOROP(aTHX_ a,b,c,d,e) #define newGIVENOP(a,b,c) Perl_newGIVENOP(aTHX_ a,b,c) #define newGVOP(a,b,c) Perl_newGVOP(aTHX_ a,b,c) #define newGVREF(a,b) Perl_newGVREF(aTHX_ a,b) -#define newGVgen(a) Perl_newGVgen(aTHX_ a) +#define newGVgen_flags(a,b) Perl_newGVgen_flags(aTHX_ a,b) #define newHVREF(a) Perl_newHVREF(aTHX_ a) #define newHVhv(a) Perl_newHVhv(aTHX_ a) #define newLISTOP(a,b,c,d) Perl_newLISTOP(aTHX_ a,b,c,d) @@ -375,7 +389,6 @@ #define op_dump(a) Perl_op_dump(aTHX_ a) #define op_free(a) Perl_op_free(aTHX_ a) #define op_linklist(a) Perl_op_linklist(aTHX_ a) -#define op_lvalue(a,b) Perl_op_lvalue(aTHX_ a,b) #define op_null(a) Perl_op_null(aTHX_ a) #define op_prepend_elem(a,b,c) Perl_op_prepend_elem(aTHX_ a,b,c) #define op_refcnt_lock() Perl_op_refcnt_lock(aTHX) @@ -383,7 +396,17 @@ #define op_scope(a) Perl_op_scope(aTHX_ a) #define pack_cat(a,b,c,d,e,f,g) Perl_pack_cat(aTHX_ a,b,c,d,e,f,g) #define packlist(a,b,c,d,e) Perl_packlist(aTHX_ a,b,c,d,e) -#define pad_findmy(a,b,c) Perl_pad_findmy(aTHX_ a,b,c) +#define pad_add_anon(a,b) Perl_pad_add_anon(aTHX_ a,b) +#define pad_add_name_pv(a,b,c,d) Perl_pad_add_name_pv(aTHX_ a,b,c,d) +#define pad_add_name_pvn(a,b,c,d,e) Perl_pad_add_name_pvn(aTHX_ a,b,c,d,e) +#define pad_add_name_sv(a,b,c,d) Perl_pad_add_name_sv(aTHX_ a,b,c,d) +#define pad_alloc(a,b) Perl_pad_alloc(aTHX_ a,b) +#define pad_compname_type(a) Perl_pad_compname_type(aTHX_ a) +#define pad_findmy_pv(a,b) Perl_pad_findmy_pv(aTHX_ a,b) +#define pad_findmy_pvn(a,b,c) Perl_pad_findmy_pvn(aTHX_ a,b,c) +#define pad_findmy_sv(a,b) Perl_pad_findmy_sv(aTHX_ a,b) +#define pad_new(a) Perl_pad_new(aTHX_ a) +#define pad_tidy(a) Perl_pad_tidy(aTHX_ a) #define parse_arithexpr(a) Perl_parse_arithexpr(aTHX_ a) #define parse_barestmt(a) Perl_parse_barestmt(aTHX_ a) #define parse_block(a) Perl_parse_block(aTHX_ a) @@ -537,8 +560,14 @@ #define sv_dec(a) Perl_sv_dec(aTHX_ a) #define sv_dec_nomg(a) Perl_sv_dec_nomg(aTHX_ a) #define sv_derived_from(a,b) Perl_sv_derived_from(aTHX_ a,b) +#define sv_derived_from_pv(a,b,c) Perl_sv_derived_from_pv(aTHX_ a,b,c) +#define sv_derived_from_pvn(a,b,c,d) Perl_sv_derived_from_pvn(aTHX_ a,b,c,d) +#define sv_derived_from_sv(a,b,c) Perl_sv_derived_from_sv(aTHX_ a,b,c) #define sv_destroyable(a) Perl_sv_destroyable(aTHX_ a) #define sv_does(a,b) Perl_sv_does(aTHX_ a,b) +#define sv_does_pv(a,b,c) Perl_sv_does_pv(aTHX_ a,b,c) +#define sv_does_pvn(a,b,c,d) Perl_sv_does_pvn(aTHX_ a,b,c,d) +#define sv_does_sv(a,b,c) Perl_sv_does_sv(aTHX_ a,b,c) #define sv_dump(a) Perl_sv_dump(aTHX_ a) #define sv_eq_flags(a,b,c) Perl_sv_eq_flags(aTHX_ a,b,c) #define sv_force_normal_flags(a,b) Perl_sv_force_normal_flags(aTHX_ a,b) @@ -632,9 +661,6 @@ #define to_uni_upper(a,b,c) Perl_to_uni_upper(aTHX_ a,b,c) #define to_uni_upper_lc(a) Perl_to_uni_upper_lc(aTHX_ a) #define to_utf8_case(a,b,c,d,e,f) Perl_to_utf8_case(aTHX_ a,b,c,d,e,f) -#define to_utf8_lower(a,b,c) Perl_to_utf8_lower(aTHX_ a,b,c) -#define to_utf8_title(a,b,c) Perl_to_utf8_title(aTHX_ a,b,c) -#define to_utf8_upper(a,b,c) Perl_to_utf8_upper(aTHX_ a,b,c) #define unpack_str(a,b,c,d,e,f,g,h) Perl_unpack_str(aTHX_ a,b,c,d,e,f,g,h) #define unpackstring(a,b,c,d,e) Perl_unpackstring(aTHX_ a,b,c,d,e) #define unsharepvn(a,b,c) Perl_unsharepvn(aTHX_ a,b,c) @@ -646,10 +672,14 @@ #define utf8_length(a,b) Perl_utf8_length(aTHX_ a,b) #define utf8_to_bytes(a,b) Perl_utf8_to_bytes(aTHX_ a,b) #define utf8_to_uvchr(a,b) Perl_utf8_to_uvchr(aTHX_ a,b) +#define utf8_to_uvchr_buf(a,b,c) Perl_utf8_to_uvchr_buf(aTHX_ a,b,c) #define utf8_to_uvuni(a,b) Perl_utf8_to_uvuni(aTHX_ a,b) +#define utf8_to_uvuni_buf(a,b,c) Perl_utf8_to_uvuni_buf(aTHX_ a,b,c) #define utf8n_to_uvuni(a,b,c,d) Perl_utf8n_to_uvuni(aTHX_ a,b,c,d) #define uvchr_to_utf8_flags(a,b,c) Perl_uvchr_to_utf8_flags(aTHX_ a,b,c) #define uvuni_to_utf8_flags(a,b,c) Perl_uvuni_to_utf8_flags(aTHX_ a,b,c) +#define valid_utf8_to_uvchr(a,b) Perl_valid_utf8_to_uvchr(aTHX_ a,b) +#define valid_utf8_to_uvuni(a,b) Perl_valid_utf8_to_uvuni(aTHX_ a,b) #define vcmp(a,b) Perl_vcmp(aTHX_ a,b) #define vcroak(a,b) Perl_vcroak(aTHX_ a,b) #define vdeb(a,b) Perl_vdeb(aTHX_ a,b) @@ -670,7 +700,10 @@ #ifndef PERL_IMPLICIT_CONTEXT #define warner Perl_warner #endif -#define whichsig(a) Perl_whichsig(aTHX_ a) +#define whichsig_pv(a) Perl_whichsig_pv(aTHX_ a) +#define whichsig_pvn(a,b) Perl_whichsig_pvn(aTHX_ a,b) +#define whichsig_sv(a) Perl_whichsig_sv(aTHX_ a) +#define wrap_op_checker(a,b,c) Perl_wrap_op_checker(aTHX_ a,b,c) #if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO)) #define csighandler Perl_csighandler #endif @@ -693,10 +726,15 @@ #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP) #define my_chsize(a,b) Perl_my_chsize(aTHX_ a,b) #endif +#if !defined(PERL_IMPLICIT_SYS) +#define my_pclose(a) Perl_my_pclose(aTHX_ a) +#define my_popen(a,b) Perl_my_popen(aTHX_ a,b) +#endif #if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY)) #define my_bcopy Perl_my_bcopy #endif #if defined(DEBUGGING) +#define pad_setsv(a,b) Perl_pad_setsv(aTHX_ a,b) #define pad_sv(a) Perl_pad_sv(aTHX_ a) #endif #if defined(DUMP_FDS) @@ -747,6 +785,9 @@ #define warn_nocontext Perl_warn_nocontext #define warner_nocontext Perl_warner_nocontext #endif +#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C) +#define _is_utf8_quotemeta(a) Perl__is_utf8_quotemeta(aTHX_ a) +#endif #if defined(PERL_MAD) #define newFORM(a,b,c) Perl_newFORM(aTHX_ a,b,c) #define newMYSUB(a,b,c,d,e) Perl_newMYSUB(aTHX_ a,b,c,d,e) @@ -816,10 +857,7 @@ #define do_spawn_nowait(a) Perl_do_spawn_nowait(aTHX_ a) #endif #if defined(PERL_CORE) || defined(PERL_EXT) -#define _append_range_to_invlist(a,b,c) Perl__append_range_to_invlist(aTHX_ a,b,c) -#define _new_invlist(a) Perl__new_invlist(aTHX_ a) -#define _swash_inversion_hash(a) Perl__swash_inversion_hash(aTHX_ a) -#define _swash_to_invlist(a) Perl__swash_to_invlist(aTHX_ a) +#define _is_utf8__perl_idstart(a) Perl__is_utf8__perl_idstart(aTHX_ a) #define av_reify(a) Perl_av_reify(aTHX_ a) #define is_utf8_X_L(a) Perl_is_utf8_X_L(aTHX_ a) #define is_utf8_X_LV(a) Perl_is_utf8_X_LV(aTHX_ a) @@ -831,7 +869,6 @@ #define is_utf8_X_extend(a) Perl_is_utf8_X_extend(aTHX_ a) #define is_utf8_X_non_hangul(a) Perl_is_utf8_X_non_hangul(aTHX_ a) #define is_utf8_X_prepend(a) Perl_is_utf8_X_prepend(aTHX_ a) -#define mod(a,b) Perl_mod(aTHX_ a,b) #define op_clear(a) Perl_op_clear(aTHX_ a) #define qerror(a) Perl_qerror(aTHX_ a) #define reg_named_buff(a,b,c,d) Perl_reg_named_buff(aTHX_ a,b,c,d) @@ -866,27 +903,33 @@ #define regcurly(a) S_regcurly(aTHX_ a) # endif # if defined(PERL_IN_REGCOMP_C) +#define _append_range_to_invlist(a,b,c) S__append_range_to_invlist(aTHX_ a,b,c) +#define _invlist_array_init(a,b) S__invlist_array_init(aTHX_ a,b) +#define _new_invlist_C_array(a) S__new_invlist_C_array(aTHX_ a) #define add_alternate(a,b,c) S_add_alternate(aTHX_ a,b,c) #define add_cp_to_invlist(a,b) S_add_cp_to_invlist(aTHX_ a,b) #define add_data S_add_data -#define add_range_to_invlist(a,b,c) S_add_range_to_invlist(aTHX_ a,b,c) #define checkposixcc(a) S_checkposixcc(aTHX_ a) #define cl_and S_cl_and #define cl_anything S_cl_anything #define cl_init S_cl_init #define cl_is_anything S_cl_is_anything #define cl_or S_cl_or +#define get_invlist_iter_addr(a) S_get_invlist_iter_addr(aTHX_ a) +#define get_invlist_len_addr(a) S_get_invlist_len_addr(aTHX_ a) +#define get_invlist_version_id_addr(a) S_get_invlist_version_id_addr(aTHX_ a) +#define get_invlist_zero_addr(a) S_get_invlist_zero_addr(aTHX_ a) #define invlist_array(a) S_invlist_array(aTHX_ a) -#define invlist_destroy(a) S_invlist_destroy(aTHX_ a) +#define invlist_clone(a) S_invlist_clone(aTHX_ a) #define invlist_extend(a,b) S_invlist_extend(aTHX_ a,b) -#define invlist_intersection(a,b) S_invlist_intersection(aTHX_ a,b) +#define invlist_iterinit(a) S_invlist_iterinit(aTHX_ a) +#define invlist_iternext(a,b,c) S_invlist_iternext(aTHX_ a,b,c) #define invlist_len(a) S_invlist_len(aTHX_ a) #define invlist_max(a) S_invlist_max(aTHX_ a) +#define invlist_search(a,b) S_invlist_search(aTHX_ a,b) #define invlist_set_len(a,b) S_invlist_set_len(aTHX_ a,b) -#define invlist_set_max(a,b) S_invlist_set_max(aTHX_ a,b) #define invlist_trim(a) S_invlist_trim(aTHX_ a) -#define invlist_union(a,b) S_invlist_union(aTHX_ a,b) -#define join_exact(a,b,c,d,e,f) S_join_exact(aTHX_ a,b,c,d,e,f) +#define join_exact(a,b,c,d,e,f,g) S_join_exact(aTHX_ a,b,c,d,e,f,g) #define make_trie(a,b,c,d,e,f,g,h) S_make_trie(aTHX_ a,b,c,d,e,f,g,h) #define make_trie_failtable(a,b,c,d) S_make_trie_failtable(aTHX_ a,b,c,d) #define nextchar(a) S_nextchar(aTHX_ a) @@ -911,7 +954,23 @@ #define set_regclass_bit_fold(a,b,c,d,e) S_set_regclass_bit_fold(aTHX_ a,b,c,d,e) #define study_chunk(a,b,c,d,e,f,g,h,i,j,k) S_study_chunk(aTHX_ a,b,c,d,e,f,g,h,i,j,k) # endif +# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C) +#define _core_swash_init(a,b,c,d,e,f,g,h) Perl__core_swash_init(aTHX_ a,b,c,d,e,f,g,h) +#define _invlist_contents(a) Perl__invlist_contents(aTHX_ a) +# endif +# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C) +#define _add_range_to_invlist(a,b,c) Perl__add_range_to_invlist(aTHX_ a,b,c) +#define _invlist_intersection_maybe_complement_2nd(a,b,c,d) Perl__invlist_intersection_maybe_complement_2nd(aTHX_ a,b,c,d) +#define _invlist_invert(a) Perl__invlist_invert(aTHX_ a) +#define _invlist_invert_prop(a) Perl__invlist_invert_prop(aTHX_ a) +#define _invlist_populate_swatch(a,b,c,d) Perl__invlist_populate_swatch(aTHX_ a,b,c,d) +#define _invlist_union_maybe_complement_2nd(a,b,c,d) Perl__invlist_union_maybe_complement_2nd(aTHX_ a,b,c,d) +#define _new_invlist(a) Perl__new_invlist(aTHX_ a) +#define _swash_inversion_hash(a) Perl__swash_inversion_hash(aTHX_ a) +#define _swash_to_invlist(a) Perl__swash_to_invlist(aTHX_ a) +# endif # if defined(PERL_IN_REGEXEC_C) +#define core_regclass_swash(a,b,c,d,e) S_core_regclass_swash(aTHX_ a,b,c,d,e) #define find_byclass(a,b,c,d,e) S_find_byclass(aTHX_ a,b,c,d,e) #define reg_check_named_buff_matched(a,b) S_reg_check_named_buff_matched(aTHX_ a,b) #define regcppop(a) S_regcppop(aTHX_ a) @@ -928,12 +987,16 @@ #define reghop4 S_reghop4 # endif # endif +# if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) +#define _to_fold_latin1(a,b,c,d) Perl__to_fold_latin1(aTHX_ a,b,c,d) +# endif # if defined(PERL_OLD_COPY_ON_WRITE) #define sv_setsv_cow(a,b) Perl_sv_setsv_cow(aTHX_ a,b) # endif #endif #ifdef PERL_CORE #define allocmy(a,b,c) Perl_allocmy(aTHX_ a,b,c) +#define amagic_is_enabled(a) Perl_amagic_is_enabled(aTHX_ a) #define apply(a,b,c) Perl_apply(aTHX_ a,b,c) #define bind_match(a,b,c) Perl_bind_match(aTHX_ a,b,c) #define block_end(a,b) Perl_block_end(aTHX_ a,b) @@ -946,6 +1009,7 @@ #define ck_anoncode(a) Perl_ck_anoncode(aTHX_ a) #define ck_bitop(a) Perl_ck_bitop(aTHX_ a) #define ck_chdir(a) Perl_ck_chdir(aTHX_ a) +#define ck_cmp(a) Perl_ck_cmp(aTHX_ a) #define ck_concat(a) Perl_ck_concat(aTHX_ a) #define ck_defined(a) Perl_ck_defined(aTHX_ a) #define ck_delete(a) Perl_ck_delete(aTHX_ a) @@ -962,6 +1026,7 @@ #define ck_grep(a) Perl_ck_grep(aTHX_ a) #define ck_index(a) Perl_ck_index(aTHX_ a) #define ck_join(a) Perl_ck_join(aTHX_ a) +#define ck_length(a) Perl_ck_length(aTHX_ a) #define ck_lfun(a) Perl_ck_lfun(aTHX_ a) #define ck_listiob(a) Perl_ck_listiob(aTHX_ a) #define ck_match(a) Perl_ck_match(aTHX_ a) @@ -984,12 +1049,13 @@ #define ck_subr(a) Perl_ck_subr(aTHX_ a) #define ck_substr(a) Perl_ck_substr(aTHX_ a) #define ck_svconst(a) Perl_ck_svconst(aTHX_ a) +#define ck_tell(a) Perl_ck_tell(aTHX_ a) #define ck_trunc(a) Perl_ck_trunc(aTHX_ a) -#define ck_unpack(a) Perl_ck_unpack(aTHX_ a) #define convert(a,b,c) Perl_convert(aTHX_ a,b,c) +#define core_prototype(a,b,c,d) Perl_core_prototype(aTHX_ a,b,c,d) +#define coresub_op(a,b,c) Perl_coresub_op(aTHX_ a,b,c) #define create_eval_scope(a) Perl_create_eval_scope(aTHX_ a) -#define cv_ckproto_len(a,b,c,d) Perl_cv_ckproto_len(aTHX_ a,b,c,d) -#define cv_clone(a) Perl_cv_clone(aTHX_ a) +#define cv_ckproto_len_flags(a,b,c,d,e) Perl_cv_ckproto_len_flags(aTHX_ a,b,c,d,e) #define cvgv_set(a,b) Perl_cvgv_set(aTHX_ a,b) #define cvstash_set(a,b) Perl_cvstash_set(aTHX_ a,b) #define deb_stack_all() Perl_deb_stack_all(aTHX) @@ -999,6 +1065,7 @@ #define do_dump_pad(a,b,c,d) Perl_do_dump_pad(aTHX_ a,b,c,d) #define do_eof(a) Perl_do_eof(aTHX_ a) #define do_execfree() Perl_do_execfree(aTHX) +#define do_ncmp(a,b) Perl_do_ncmp(aTHX_ a,b) #define do_print(a,b) Perl_do_print(aTHX_ a,b) #define do_readline() Perl_do_readline(aTHX) #define do_seek(a,b,c) Perl_do_seek(aTHX_ a,b,c) @@ -1012,6 +1079,8 @@ #define dump_all_perl(a) Perl_dump_all_perl(aTHX_ a) #define dump_packsubs_perl(a,b) Perl_dump_packsubs_perl(aTHX_ a,b) #define dump_sub_perl(a,b) Perl_dump_sub_perl(aTHX_ a,b) +#define finalize_optree(a) Perl_finalize_optree(aTHX_ a) +#define find_rundefsv2(a,b) Perl_find_rundefsv2(aTHX_ a,b) #define find_script(a,b,c,d) Perl_find_script(aTHX_ a,b,c,d) #define free_tied_hv_pool() Perl_free_tied_hv_pool(aTHX) #define get_hash_seed() Perl_get_hash_seed(aTHX) @@ -1025,7 +1094,6 @@ #define intro_my() Perl_intro_my(aTHX) #define invert(a) Perl_invert(aTHX_ a) #define io_close(a,b) Perl_io_close(aTHX_ a,b) -#define is_gv_magical_sv(a,b) Perl_is_gv_magical_sv(aTHX_ a,b) #define jmaybe(a) Perl_jmaybe(aTHX_ a) #define keyword(a,b,c) Perl_keyword(aTHX_ a,b,c) #define list(a) Perl_list(aTHX_ a) @@ -1078,6 +1146,7 @@ #define magic_setutf8(a,b) Perl_magic_setutf8(aTHX_ a,b) #define magic_setuvar(a,b) Perl_magic_setuvar(aTHX_ a,b) #define magic_setvec(a,b) Perl_magic_setvec(aTHX_ a,b) +#define magic_setvstring(a,b) Perl_magic_setvstring(aTHX_ a,b) #define magic_sizepack(a,b) Perl_magic_sizepack(aTHX_ a,b) #define magic_wipepack(a,b) Perl_magic_wipepack(aTHX_ a,b) #define mg_localize(a,b,c) Perl_mg_localize(aTHX_ a,b,c) @@ -1091,23 +1160,19 @@ #define my_stat_flags(a) Perl_my_stat_flags(aTHX_ a) #define my_swabn Perl_my_swabn #define my_unexec() Perl_my_unexec(aTHX) +#define newATTRSUB_flags(a,b,c,d,e,f) Perl_newATTRSUB_flags(aTHX_ a,b,c,d,e,f) +#define newXS_len_flags(a,b,c,d,e,f,g) Perl_newXS_len_flags(aTHX_ a,b,c,d,e,f,g) #define nextargv(a) Perl_nextargv(aTHX_ a) #define oopsAV(a) Perl_oopsAV(aTHX_ a) #define oopsHV(a) Perl_oopsHV(aTHX_ a) #define op_const_sv(a,b) Perl_op_const_sv(aTHX_ a,b) #define package_version(a) Perl_package_version(aTHX_ a) -#define pad_add_anon(a,b) Perl_pad_add_anon(aTHX_ a,b) -#define pad_add_name(a,b,c,d,e) Perl_pad_add_name(aTHX_ a,b,c,d,e) -#define pad_alloc(a,b) Perl_pad_alloc(aTHX_ a,b) #define pad_block_start(a) Perl_pad_block_start(aTHX_ a) -#define pad_compname_type(a) Perl_pad_compname_type(aTHX_ a) #define pad_fixup_inner_anons(a,b,c) Perl_pad_fixup_inner_anons(aTHX_ a,b,c) #define pad_free(a) Perl_pad_free(aTHX_ a) #define pad_leavemy() Perl_pad_leavemy(aTHX) -#define pad_new(a) Perl_pad_new(aTHX_ a) #define pad_push(a,b) Perl_pad_push(aTHX_ a,b) #define pad_swipe(a,b) Perl_pad_swipe(aTHX_ a,b) -#define pad_tidy(a) Perl_pad_tidy(aTHX_ a) #define parse_unicode_opts(a) Perl_parse_unicode_opts(aTHX_ a) #define parser_free(a) Perl_parser_free(aTHX_ a) #define peep(a) Perl_peep(aTHX_ a) @@ -1136,6 +1201,8 @@ #define sv_clean_objs() Perl_sv_clean_objs(aTHX) #define sv_del_backref(a,b) Perl_sv_del_backref(aTHX_ a,b) #define sv_free_arenas() Perl_sv_free_arenas(aTHX) +#define sv_ref(a,b,c) Perl_sv_ref(aTHX_ a,b,c) +#define sv_sethek(a,b) Perl_sv_sethek(aTHX_ a,b) #ifndef PERL_IMPLICIT_CONTEXT #define tied_method Perl_tied_method #endif @@ -1145,6 +1212,8 @@ #define watch(a) Perl_watch(aTHX_ a) #define write_to_stderr(a) Perl_write_to_stderr(aTHX_ a) #define yyerror(a) Perl_yyerror(aTHX_ a) +#define yyerror_pv(a,b) Perl_yyerror_pv(aTHX_ a,b) +#define yyerror_pvn(a,b,c) Perl_yyerror_pvn(aTHX_ a,b,c) #define yyparse(a) Perl_yyparse(aTHX_ a) #define yyunlex() Perl_yyunlex(aTHX) # if !(defined(DEBUGGING)) @@ -1203,7 +1272,6 @@ # endif # if defined(DEBUGGING) #define get_debug_opts(a,b) Perl_get_debug_opts(aTHX_ a,b) -#define pad_setsv(a,b) Perl_pad_setsv(aTHX_ a,b) # if defined(PERL_IN_PAD_C) #define cv_dump(a,b) S_cv_dump(aTHX_ a,b) # endif @@ -1268,13 +1336,11 @@ #define deb_curcv(a) S_deb_curcv(aTHX_ a) #define debprof(a) S_debprof(aTHX_ a) #define pm_description(a) S_pm_description(aTHX_ a) -#define sequence(a) S_sequence(aTHX_ a) #define sequence_num(a) S_sequence_num(aTHX_ a) -#define sequence_tail(a) S_sequence_tail(aTHX_ a) # endif # if defined(PERL_IN_GV_C) -#define gv_get_super_pkg(a,b) S_gv_get_super_pkg(aTHX_ a,b) -#define gv_init_sv(a,b) S_gv_init_sv(aTHX_ a,b) +#define gv_get_super_pkg(a,b,c) S_gv_get_super_pkg(aTHX_ a,b,c) +#define gv_init_svtype(a,b) S_gv_init_svtype(aTHX_ a,b) #define gv_magicalize_isa(a) S_gv_magicalize_isa(aTHX_ a) #define gv_magicalize_overload(a) S_gv_magicalize_overload(aTHX_ a) #define require_tie_mod(a,b,c,d,e) S_require_tie_mod(aTHX_ a,b,c,d,e) @@ -1285,6 +1351,7 @@ #define hsplit(a) S_hsplit(aTHX_ a) #define hv_auxinit S_hv_auxinit #define hv_delete_common(a,b,c,d,e,f,g) S_hv_delete_common(aTHX_ a,b,c,d,e,f,g) +#define hv_free_ent_ret(a,b) S_hv_free_ent_ret(aTHX_ a,b) #define hv_magic_check S_hv_magic_check #define hv_notallowed(a,b,c,d) S_hv_notallowed(aTHX_ a,b,c,d) #define new_he() S_new_he(aTHX) @@ -1305,8 +1372,11 @@ #define save_magic(a,b) S_save_magic(aTHX_ a,b) #define unwind_handler_stack(a) S_unwind_handler_stack(aTHX_ a) # endif +# if defined(PERL_IN_MG_C) || defined(PERL_IN_PP_C) +#define translate_substr_offsets(a,b,c,d,e,f,g) Perl_translate_substr_offsets(aTHX_ a,b,c,d,e,f,g) +# endif # if defined(PERL_IN_MRO_C) -#define mro_clean_isarev(a,b,c,d) S_mro_clean_isarev(aTHX_ a,b,c,d) +#define mro_clean_isarev(a,b,c,d,e) S_mro_clean_isarev(aTHX_ a,b,c,d,e) #define mro_gather_and_rename(a,b,c,d,e) S_mro_gather_and_rename(aTHX_ a,b,c,d,e) #define mro_get_linear_isa_dfs(a,b) S_mro_get_linear_isa_dfs(aTHX_ a,b) # endif @@ -1314,18 +1384,21 @@ #define mulexp10 S_mulexp10 # endif # if defined(PERL_IN_OP_C) +#define aassign_common_vars(a) S_aassign_common_vars(aTHX_ a) #define apply_attrs(a,b,c,d) S_apply_attrs(aTHX_ a,b,c,d) #define apply_attrs_my(a,b,c,d) S_apply_attrs_my(aTHX_ a,b,c,d) -#define bad_type(a,b,c,d) S_bad_type(aTHX_ a,b,c,d) +#define bad_type_pv(a,b,c,d,e) S_bad_type_pv(aTHX_ a,b,c,d,e) +#define bad_type_sv(a,b,c,d,e) S_bad_type_sv(aTHX_ a,b,c,d,e) #define cop_free(a) S_cop_free(aTHX_ a) #define dup_attrlist(a) S_dup_attrlist(aTHX_ a) +#define finalize_op(a) S_finalize_op(aTHX_ a) #define find_and_forget_pmops(a) S_find_and_forget_pmops(aTHX_ a) #define fold_constants(a) S_fold_constants(aTHX_ a) #define force_list(a) S_force_list(aTHX_ a) #define gen_constant_list(a) S_gen_constant_list(aTHX_ a) #define gv_ename(a) S_gv_ename(aTHX_ a) +#define inplace_aassign(a) S_inplace_aassign(aTHX_ a) #define is_handle_constructor S_is_handle_constructor -#define is_inplace_av(a,b) S_is_inplace_av(aTHX_ a,b) #define is_list_assignment(a) S_is_list_assignment(aTHX_ a) #define listkids(a) S_listkids(aTHX_ a) #define looks_like_bool(a) S_looks_like_bool(aTHX_ a) @@ -1336,6 +1409,8 @@ #define new_logop(a,b,c,d) S_new_logop(aTHX_ a,b,c,d) #define no_bareword_allowed(a) S_no_bareword_allowed(aTHX_ a) #define no_fh_allowed(a) S_no_fh_allowed(aTHX_ a) +#define op_integerize(a) S_op_integerize(aTHX_ a) +#define op_std_init(a) S_op_std_init(aTHX_ a) #define opt_scalarhv(a) S_opt_scalarhv(aTHX_ a) #define pmtrans(a,b,c) S_pmtrans(aTHX_ a,b,c) #define process_special_blocks(a,b,c) S_process_special_blocks(aTHX_ a,b,c) @@ -1347,13 +1422,18 @@ #define scalarseq(a) S_scalarseq(aTHX_ a) #define search_const(a) S_search_const(aTHX_ a) #define simplify_sort(a) S_simplify_sort(aTHX_ a) -#define too_few_arguments(a,b) S_too_few_arguments(aTHX_ a,b) -#define too_many_arguments(a,b) S_too_many_arguments(aTHX_ a,b) +#define too_few_arguments_pv(a,b,c) S_too_few_arguments_pv(aTHX_ a,b,c) +#define too_few_arguments_sv(a,b,c) S_too_few_arguments_sv(aTHX_ a,b,c) +#define too_many_arguments_pv(a,b,c) S_too_many_arguments_pv(aTHX_ a,b,c) +#define too_many_arguments_sv(a,b,c) S_too_many_arguments_sv(aTHX_ a,b,c) +# endif +# if defined(PERL_IN_OP_C) || defined(PERL_IN_SV_C) +#define report_redefined_cv(a,b,c) Perl_report_redefined_cv(aTHX_ a,b,c) # endif # if defined(PERL_IN_PAD_C) -#define pad_add_name_sv(a,b,c,d) S_pad_add_name_sv(aTHX_ a,b,c,d) +#define pad_alloc_name(a,b,c,d) S_pad_alloc_name(aTHX_ a,b,c,d) #define pad_check_dup(a,b,c) S_pad_check_dup(aTHX_ a,b,c) -#define pad_findlex(a,b,c,d,e,f,g) S_pad_findlex(aTHX_ a,b,c,d,e,f,g) +#define pad_findlex(a,b,c,d,e,f,g,h,i) S_pad_findlex(aTHX_ a,b,c,d,e,f,g,h,i) #define pad_reset() S_pad_reset(aTHX) # endif # if defined(PERL_IN_PERL_C) @@ -1367,12 +1447,14 @@ #define init_perllib() S_init_perllib(aTHX) #define init_postdump_symbols(a,b,c) S_init_postdump_symbols(aTHX_ a,b,c) #define init_predump_symbols() S_init_predump_symbols(aTHX) +#define mayberelocate(a,b,c) S_mayberelocate(aTHX_ a,b,c) +#define minus_v() S_minus_v(aTHX) #define my_exit_jump() S_my_exit_jump(aTHX) #define nuke_stacks() S_nuke_stacks(aTHX) -#define open_script(a,b,c,d) S_open_script(aTHX_ a,b,c,d) +#define open_script(a,b,c) S_open_script(aTHX_ a,b,c) #define parse_body(a,b) S_parse_body(aTHX_ a,b) #define run_body(a) S_run_body(aTHX_ a) -#define usage(a) S_usage(aTHX_ a) +#define usage() S_usage(aTHX) # endif # if defined(PERL_IN_PP_C) #define do_chomp(a,b,c) S_do_chomp(aTHX_ a,b,c) @@ -1380,16 +1462,17 @@ #define refto(a) S_refto(aTHX_ a) # endif # if defined(PERL_IN_PP_CTL_C) +#define adjust_stack_on_leave(a,b,c,d,e) S_adjust_stack_on_leave(aTHX_ a,b,c,d,e) #define check_type_and_open(a) S_check_type_and_open(aTHX_ a) #define destroy_matcher(a) S_destroy_matcher(aTHX_ a) -#define do_smartmatch(a,b) S_do_smartmatch(aTHX_ a,b) +#define do_smartmatch(a,b,c) S_do_smartmatch(aTHX_ a,b,c) #define docatch(a) S_docatch(aTHX_ a) -#define doeval(a,b,c,d) S_doeval(aTHX_ a,b,c,d) -#define dofindlabel(a,b,c,d) S_dofindlabel(aTHX_ a,b,c,d) +#define doeval(a,b,c,d,e) S_doeval(aTHX_ a,b,c,d,e) +#define dofindlabel(a,b,c,d,e,f) S_dofindlabel(aTHX_ a,b,c,d,e,f) #define doparseform(a) S_doparseform(aTHX_ a) #define dopoptoeval(a) S_dopoptoeval(aTHX_ a) #define dopoptogiven(a) S_dopoptogiven(aTHX_ a) -#define dopoptolabel(a) S_dopoptolabel(aTHX_ a) +#define dopoptolabel(a,b,c) S_dopoptolabel(aTHX_ a,b,c) #define dopoptoloop(a) S_dopoptoloop(aTHX_ a) #define dopoptosub_at(a,b) S_dopoptosub_at(aTHX_ a,b) #define dopoptowhen(a) S_dopoptowhen(aTHX_ a) @@ -1462,11 +1545,10 @@ #define sv_pos_u2b_cached(a,b,c,d,e,f,g) S_sv_pos_u2b_cached(aTHX_ a,b,c,d,e,f,g) #define sv_pos_u2b_forwards S_sv_pos_u2b_forwards #define sv_pos_u2b_midway S_sv_pos_u2b_midway -#define sv_unglob(a) S_sv_unglob(aTHX_ a) +#define sv_unglob(a,b) S_sv_unglob(aTHX_ a,b) #define uiv_2buf S_uiv_2buf #define utf8_mg_len_cache_update(a,b,c) S_utf8_mg_len_cache_update(aTHX_ a,b,c) #define utf8_mg_pos_cache_update(a,b,c,d,e) S_utf8_mg_pos_cache_update(aTHX_ a,b,c,d,e) -#define varname(a,b,c,d,e,f) S_varname(aTHX_ a,b,c,d,e,f) #define visit(a,b,c) S_visit(aTHX_ a,b,c) # if defined(PERL_OLD_COPY_ON_WRITE) #define sv_release_COW(a,b,c) S_sv_release_COW(aTHX_ a,b,c) @@ -1477,6 +1559,9 @@ #define unreferenced_to_tmp_stack(a) S_unreferenced_to_tmp_stack(aTHX_ a) # endif # endif +# if defined(PERL_IN_SV_C) || defined (PERL_IN_OP_C) +#define varname(a,b,c,d,e,f) Perl_varname(aTHX_ a,b,c,d,e,f) +# endif # if defined(PERL_IN_TOKE_C) #define ao(a) S_ao(aTHX_ a) #define check_uni() S_check_uni(aTHX) @@ -1514,7 +1599,7 @@ #define tokenize_use(a,b) S_tokenize_use(aTHX_ a,b) #define tokeq(a) S_tokeq(aTHX_ a) #define update_debugger_info(a,b,c) S_update_debugger_info(aTHX_ a,b,c) -#define yywarn(a) S_yywarn(aTHX_ a) +#define yywarn(a,b) S_yywarn(aTHX_ a,b) # if defined(PERL_MAD) #define curmad(a,b) S_curmad(aTHX_ a,b) #define skipspace0(a) S_skipspace0(aTHX_ a) @@ -1524,12 +1609,17 @@ # endif # endif # if defined(PERL_IN_UNIVERSAL_C) -#define isa_lookup(a,b) S_isa_lookup(aTHX_ a,b) +#define isa_lookup(a,b,c,d) S_isa_lookup(aTHX_ a,b,c,d) # endif # if defined(PERL_IN_UTF8_C) +#define check_locale_boundary_crossing(a,b,c,d) S_check_locale_boundary_crossing(aTHX_ a,b,c,d) #define is_utf8_char_slow S_is_utf8_char_slow #define is_utf8_common(a,b,c) S_is_utf8_common(aTHX_ a,b,c) -#define swash_get(a,b,c) S_swash_get(aTHX_ a,b,c) +#define swatch_get(a,b,c) S_swatch_get(aTHX_ a,b,c) +#define to_lower_latin1(a,b,c) S_to_lower_latin1(aTHX_ a,b,c) +# endif +# if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C) +#define _to_upper_title_latin1(a,b,c,d) Perl__to_upper_title_latin1(aTHX_ a,b,c,d) # endif # if defined(PERL_IN_UTIL_C) #define ckwarn_common(a) S_ckwarn_common(aTHX_ a) diff --git a/Master/tlpkg/tlperl/lib/CORE/embedvar.h b/Master/tlpkg/tlperl/lib/CORE/embedvar.h index bb179fdcf44..24d99e96104 100644 --- a/Master/tlpkg/tlperl/lib/CORE/embedvar.h +++ b/Master/tlpkg/tlperl/lib/CORE/embedvar.h @@ -40,6 +40,8 @@ # define vTHX PERL_GET_INTERP # endif +#define PL_ASCII (vTHX->IASCII) +#define PL_AboveLatin1 (vTHX->IAboveLatin1) #define PL_Argv (vTHX->IArgv) #define PL_Cmd (vTHX->ICmd) #define PL_DBcv (vTHX->IDBcv) @@ -51,17 +53,47 @@ #define PL_DBtrace (vTHX->IDBtrace) #define PL_Dir (vTHX->IDir) #define PL_Env (vTHX->IEnv) +#define PL_L1Cased (vTHX->IL1Cased) +#define PL_L1PosixAlnum (vTHX->IL1PosixAlnum) +#define PL_L1PosixAlpha (vTHX->IL1PosixAlpha) +#define PL_L1PosixGraph (vTHX->IL1PosixGraph) +#define PL_L1PosixLower (vTHX->IL1PosixLower) +#define PL_L1PosixPrint (vTHX->IL1PosixPrint) +#define PL_L1PosixPunct (vTHX->IL1PosixPunct) +#define PL_L1PosixUpper (vTHX->IL1PosixUpper) +#define PL_L1PosixWord (vTHX->IL1PosixWord) #define PL_LIO (vTHX->ILIO) +#define PL_Latin1 (vTHX->ILatin1) #define PL_Mem (vTHX->IMem) #define PL_MemParse (vTHX->IMemParse) #define PL_MemShared (vTHX->IMemShared) #define PL_OpPtr (vTHX->IOpPtr) #define PL_OpSlab (vTHX->IOpSlab) #define PL_OpSpace (vTHX->IOpSpace) +#define PL_PerlSpace (vTHX->IPerlSpace) +#define PL_PosixAlnum (vTHX->IPosixAlnum) +#define PL_PosixAlpha (vTHX->IPosixAlpha) +#define PL_PosixBlank (vTHX->IPosixBlank) +#define PL_PosixCntrl (vTHX->IPosixCntrl) +#define PL_PosixDigit (vTHX->IPosixDigit) +#define PL_PosixGraph (vTHX->IPosixGraph) +#define PL_PosixLower (vTHX->IPosixLower) +#define PL_PosixPrint (vTHX->IPosixPrint) +#define PL_PosixPunct (vTHX->IPosixPunct) +#define PL_PosixSpace (vTHX->IPosixSpace) +#define PL_PosixUpper (vTHX->IPosixUpper) +#define PL_PosixWord (vTHX->IPosixWord) +#define PL_PosixXDigit (vTHX->IPosixXDigit) #define PL_Proc (vTHX->IProc) #define PL_Sock (vTHX->ISock) #define PL_StdIO (vTHX->IStdIO) #define PL_Sv (vTHX->ISv) +#define PL_VertSpace (vTHX->IVertSpace) +#define PL_XPerlSpace (vTHX->IXPerlSpace) +#define PL_XPosixBlank (vTHX->IXPosixBlank) +#define PL_XPosixCntrl (vTHX->IXPosixCntrl) +#define PL_XPosixSpace (vTHX->IXPosixSpace) +#define PL_XPosixXDigit (vTHX->IXPosixXDigit) #define PL_Xpv (vTHX->IXpv) #define PL_amagic_generation (vTHX->Iamagic_generation) #define PL_an (vTHX->Ian) @@ -117,6 +149,10 @@ #define PL_defoutgv (vTHX->Idefoutgv) #define PL_defstash (vTHX->Idefstash) #define PL_delaymagic (vTHX->Idelaymagic) +#define PL_delaymagic_egid (vTHX->Idelaymagic_egid) +#define PL_delaymagic_euid (vTHX->Idelaymagic_euid) +#define PL_delaymagic_gid (vTHX->Idelaymagic_gid) +#define PL_delaymagic_uid (vTHX->Idelaymagic_uid) #define PL_destroyhook (vTHX->Idestroyhook) #define PL_diehook (vTHX->Idiehook) #define PL_doswitches (vTHX->Idoswitches) @@ -126,13 +162,11 @@ #define PL_e_script (vTHX->Ie_script) #define PL_efloatbuf (vTHX->Iefloatbuf) #define PL_efloatsize (vTHX->Iefloatsize) -#define PL_egid (vTHX->Iegid) #define PL_encoding (vTHX->Iencoding) #define PL_endav (vTHX->Iendav) #define PL_envgv (vTHX->Ienvgv) #define PL_errgv (vTHX->Ierrgv) #define PL_errors (vTHX->Ierrors) -#define PL_euid (vTHX->Ieuid) #define PL_eval_root (vTHX->Ieval_root) #define PL_eval_start (vTHX->Ieval_start) #define PL_evalseq (vTHX->Ievalseq) @@ -147,9 +181,9 @@ #define PL_formtarget (vTHX->Iformtarget) #define PL_generation (vTHX->Igeneration) #define PL_gensym (vTHX->Igensym) -#define PL_gid (vTHX->Igid) #define PL_glob_index (vTHX->Iglob_index) #define PL_globalstash (vTHX->Iglobalstash) +#define PL_globhook (vTHX->Iglobhook) #define PL_hash_seed (vTHX->Ihash_seed) #define PL_hintgv (vTHX->Ihintgv) #define PL_hints (vTHX->Ihints) @@ -171,7 +205,6 @@ #define PL_last_swash_tmps (vTHX->Ilast_swash_tmps) #define PL_lastfd (vTHX->Ilastfd) #define PL_lastgotoprobe (vTHX->Ilastgotoprobe) -#define PL_lastscream (vTHX->Ilastscream) #define PL_laststatval (vTHX->Ilaststatval) #define PL_laststype (vTHX->Ilaststype) #define PL_localizing (vTHX->Ilocalizing) @@ -187,7 +220,6 @@ #define PL_markstack_ptr (vTHX->Imarkstack_ptr) #define PL_max_intro_pending (vTHX->Imax_intro_pending) #define PL_maxo (vTHX->Imaxo) -#define PL_maxscream (vTHX->Imaxscream) #define PL_maxsysfd (vTHX->Imaxsysfd) #define PL_memory_debug_header (vTHX->Imemory_debug_header) #define PL_mess_sv (vTHX->Imess_sv) @@ -234,7 +266,6 @@ #define PL_perlio (vTHX->Iperlio) #define PL_phase (vTHX->Iphase) #define PL_pidstatus (vTHX->Ipidstatus) -#define PL_ppid (vTHX->Ippid) #define PL_preambleav (vTHX->Ipreambleav) #define PL_profiledata (vTHX->Iprofiledata) #define PL_psig_name (vTHX->Ipsig_name) @@ -268,8 +299,6 @@ #define PL_scopestack_ix (vTHX->Iscopestack_ix) #define PL_scopestack_max (vTHX->Iscopestack_max) #define PL_scopestack_name (vTHX->Iscopestack_name) -#define PL_screamfirst (vTHX->Iscreamfirst) -#define PL_screamnext (vTHX->Iscreamnext) #define PL_secondgv (vTHX->Isecondgv) #define PL_sharehook (vTHX->Isharehook) #define PL_sig_pending (vTHX->Isig_pending) @@ -321,7 +350,6 @@ #define PL_tmps_stack (vTHX->Itmps_stack) #define PL_top_env (vTHX->Itop_env) #define PL_toptarget (vTHX->Itoptarget) -#define PL_uid (vTHX->Iuid) #define PL_unicode (vTHX->Iunicode) #define PL_unitcheckav (vTHX->Iunitcheckav) #define PL_unitcheckav_save (vTHX->Iunitcheckav_save) @@ -339,8 +367,6 @@ #define PL_utf8_X_prepend (vTHX->Iutf8_X_prepend) #define PL_utf8_alnum (vTHX->Iutf8_alnum) #define PL_utf8_alpha (vTHX->Iutf8_alpha) -#define PL_utf8_ascii (vTHX->Iutf8_ascii) -#define PL_utf8_cntrl (vTHX->Iutf8_cntrl) #define PL_utf8_digit (vTHX->Iutf8_digit) #define PL_utf8_foldable (vTHX->Iutf8_foldable) #define PL_utf8_foldclosures (vTHX->Iutf8_foldclosures) @@ -349,11 +375,10 @@ #define PL_utf8_idstart (vTHX->Iutf8_idstart) #define PL_utf8_lower (vTHX->Iutf8_lower) #define PL_utf8_mark (vTHX->Iutf8_mark) -#define PL_utf8_perl_space (vTHX->Iutf8_perl_space) -#define PL_utf8_perl_word (vTHX->Iutf8_perl_word) -#define PL_utf8_posix_digit (vTHX->Iutf8_posix_digit) +#define PL_utf8_perl_idstart (vTHX->Iutf8_perl_idstart) #define PL_utf8_print (vTHX->Iutf8_print) #define PL_utf8_punct (vTHX->Iutf8_punct) +#define PL_utf8_quotemeta (vTHX->Iutf8_quotemeta) #define PL_utf8_space (vTHX->Iutf8_space) #define PL_utf8_tofold (vTHX->Iutf8_tofold) #define PL_utf8_tolower (vTHX->Iutf8_tolower) @@ -370,355 +395,16 @@ #define PL_watchok (vTHX->Iwatchok) #define PL_xmlfp (vTHX->Ixmlfp) -#else /* !MULTIPLICITY */ - -/* case 1 above */ - -#define PL_IArgv PL_Argv -#define PL_ICmd PL_Cmd -#define PL_IDBcv PL_DBcv -#define PL_IDBgv PL_DBgv -#define PL_IDBline PL_DBline -#define PL_IDBsignal PL_DBsignal -#define PL_IDBsingle PL_DBsingle -#define PL_IDBsub PL_DBsub -#define PL_IDBtrace PL_DBtrace -#define PL_IDir PL_Dir -#define PL_IEnv PL_Env -#define PL_ILIO PL_LIO -#define PL_IMem PL_Mem -#define PL_IMemParse PL_MemParse -#define PL_IMemShared PL_MemShared -#define PL_IOpPtr PL_OpPtr -#define PL_IOpSlab PL_OpSlab -#define PL_IOpSpace PL_OpSpace -#define PL_IProc PL_Proc -#define PL_ISock PL_Sock -#define PL_IStdIO PL_StdIO -#define PL_ISv PL_Sv -#define PL_IXpv PL_Xpv -#define PL_Iamagic_generation PL_amagic_generation -#define PL_Ian PL_an -#define PL_Iapiversion PL_apiversion -#define PL_Iargvgv PL_argvgv -#define PL_Iargvout_stack PL_argvout_stack -#define PL_Iargvoutgv PL_argvoutgv -#define PL_Ibasetime PL_basetime -#define PL_Ibeginav PL_beginav -#define PL_Ibeginav_save PL_beginav_save -#define PL_Iblockhooks PL_blockhooks -#define PL_Ibody_arenas PL_body_arenas -#define PL_Ibody_roots PL_body_roots -#define PL_Ibodytarget PL_bodytarget -#define PL_Ibreakable_sub_gen PL_breakable_sub_gen -#define PL_Icheckav PL_checkav -#define PL_Icheckav_save PL_checkav_save -#define PL_Ichopset PL_chopset -#define PL_Iclocktick PL_clocktick -#define PL_Icollation_ix PL_collation_ix -#define PL_Icollation_name PL_collation_name -#define PL_Icollation_standard PL_collation_standard -#define PL_Icollxfrm_base PL_collxfrm_base -#define PL_Icollxfrm_mult PL_collxfrm_mult -#define PL_Icolors PL_colors -#define PL_Icolorset PL_colorset -#define PL_Icompcv PL_compcv -#define PL_Icompiling PL_compiling -#define PL_Icomppad PL_comppad -#define PL_Icomppad_name PL_comppad_name -#define PL_Icomppad_name_fill PL_comppad_name_fill -#define PL_Icomppad_name_floor PL_comppad_name_floor -#define PL_Icop_seqmax PL_cop_seqmax -#define PL_Icryptseen PL_cryptseen -#define PL_Icurcop PL_curcop -#define PL_Icurcopdb PL_curcopdb -#define PL_Icurpad PL_curpad -#define PL_Icurpm PL_curpm -#define PL_Icurstack PL_curstack -#define PL_Icurstackinfo PL_curstackinfo -#define PL_Icurstash PL_curstash -#define PL_Icurstname PL_curstname -#define PL_Icustom_op_descs PL_custom_op_descs -#define PL_Icustom_op_names PL_custom_op_names -#define PL_Icustom_ops PL_custom_ops -#define PL_Icv_has_eval PL_cv_has_eval -#define PL_Idbargs PL_dbargs -#define PL_Idebstash PL_debstash -#define PL_Idebug PL_debug -#define PL_Idebug_pad PL_debug_pad -#define PL_Idef_layerlist PL_def_layerlist -#define PL_Idefgv PL_defgv -#define PL_Idefoutgv PL_defoutgv -#define PL_Idefstash PL_defstash -#define PL_Idelaymagic PL_delaymagic -#define PL_Idestroyhook PL_destroyhook -#define PL_Idiehook PL_diehook -#define PL_Idoswitches PL_doswitches -#define PL_Idowarn PL_dowarn -#define PL_Idumper_fd PL_dumper_fd -#define PL_Idumpindent PL_dumpindent -#define PL_Ie_script PL_e_script -#define PL_Iefloatbuf PL_efloatbuf -#define PL_Iefloatsize PL_efloatsize -#define PL_Iegid PL_egid -#define PL_Iencoding PL_encoding -#define PL_Iendav PL_endav -#define PL_Ienvgv PL_envgv -#define PL_Ierrgv PL_errgv -#define PL_Ierrors PL_errors -#define PL_Ieuid PL_euid -#define PL_Ieval_root PL_eval_root -#define PL_Ieval_start PL_eval_start -#define PL_Ievalseq PL_evalseq -#define PL_Iexit_flags PL_exit_flags -#define PL_Iexitlist PL_exitlist -#define PL_Iexitlistlen PL_exitlistlen -#define PL_Ifdpid PL_fdpid -#define PL_Ifilemode PL_filemode -#define PL_Ifirstgv PL_firstgv -#define PL_Iforkprocess PL_forkprocess -#define PL_Iformfeed PL_formfeed -#define PL_Iformtarget PL_formtarget -#define PL_Igeneration PL_generation -#define PL_Igensym PL_gensym -#define PL_Igid PL_gid -#define PL_Iglob_index PL_glob_index -#define PL_Iglobalstash PL_globalstash -#define PL_Ihash_seed PL_hash_seed -#define PL_Ihintgv PL_hintgv -#define PL_Ihints PL_hints -#define PL_Ihv_fetch_ent_mh PL_hv_fetch_ent_mh -#define PL_Iin_clean_all PL_in_clean_all -#define PL_Iin_clean_objs PL_in_clean_objs -#define PL_Iin_eval PL_in_eval -#define PL_Iin_load_module PL_in_load_module -#define PL_Iincgv PL_incgv -#define PL_Iinitav PL_initav -#define PL_Iinplace PL_inplace -#define PL_Iisarev PL_isarev -#define PL_Iknown_layers PL_known_layers -#define PL_Ilast_in_gv PL_last_in_gv -#define PL_Ilast_swash_hv PL_last_swash_hv -#define PL_Ilast_swash_key PL_last_swash_key -#define PL_Ilast_swash_klen PL_last_swash_klen -#define PL_Ilast_swash_slen PL_last_swash_slen -#define PL_Ilast_swash_tmps PL_last_swash_tmps -#define PL_Ilastfd PL_lastfd -#define PL_Ilastgotoprobe PL_lastgotoprobe -#define PL_Ilastscream PL_lastscream -#define PL_Ilaststatval PL_laststatval -#define PL_Ilaststype PL_laststype -#define PL_Ilocalizing PL_localizing -#define PL_Ilocalpatches PL_localpatches -#define PL_Ilockhook PL_lockhook -#define PL_Imadskills PL_madskills -#define PL_Imain_cv PL_main_cv -#define PL_Imain_root PL_main_root -#define PL_Imain_start PL_main_start -#define PL_Imainstack PL_mainstack -#define PL_Imarkstack PL_markstack -#define PL_Imarkstack_max PL_markstack_max -#define PL_Imarkstack_ptr PL_markstack_ptr -#define PL_Imax_intro_pending PL_max_intro_pending -#define PL_Imaxo PL_maxo -#define PL_Imaxscream PL_maxscream -#define PL_Imaxsysfd PL_maxsysfd -#define PL_Imemory_debug_header PL_memory_debug_header -#define PL_Imess_sv PL_mess_sv -#define PL_Imin_intro_pending PL_min_intro_pending -#define PL_Iminus_E PL_minus_E -#define PL_Iminus_F PL_minus_F -#define PL_Iminus_a PL_minus_a -#define PL_Iminus_c PL_minus_c -#define PL_Iminus_l PL_minus_l -#define PL_Iminus_n PL_minus_n -#define PL_Iminus_p PL_minus_p -#define PL_Imodcount PL_modcount -#define PL_Imodglobal PL_modglobal -#define PL_Imy_cxt_keys PL_my_cxt_keys -#define PL_Imy_cxt_list PL_my_cxt_list -#define PL_Imy_cxt_size PL_my_cxt_size -#define PL_Ina PL_na -#define PL_Inomemok PL_nomemok -#define PL_Inumeric_local PL_numeric_local -#define PL_Inumeric_name PL_numeric_name -#define PL_Inumeric_radix_sv PL_numeric_radix_sv -#define PL_Inumeric_standard PL_numeric_standard -#define PL_Iofsgv PL_ofsgv -#define PL_Ioldname PL_oldname -#define PL_Iop PL_op -#define PL_Iop_mask PL_op_mask -#define PL_Iopfreehook PL_opfreehook -#define PL_Iopsave PL_opsave -#define PL_Iorigalen PL_origalen -#define PL_Iorigargc PL_origargc -#define PL_Iorigargv PL_origargv -#define PL_Iorigenviron PL_origenviron -#define PL_Iorigfilename PL_origfilename -#define PL_Iors_sv PL_ors_sv -#define PL_Iosname PL_osname -#define PL_Ipad_reset_pending PL_pad_reset_pending -#define PL_Ipadix PL_padix -#define PL_Ipadix_floor PL_padix_floor -#define PL_Iparser PL_parser -#define PL_Ipatchlevel PL_patchlevel -#define PL_Ipeepp PL_peepp -#define PL_Iperl_destruct_level PL_perl_destruct_level -#define PL_Iperldb PL_perldb -#define PL_Iperlio PL_perlio -#define PL_Iphase PL_phase -#define PL_Ipidstatus PL_pidstatus -#define PL_Ippid PL_ppid -#define PL_Ipreambleav PL_preambleav -#define PL_Iprofiledata PL_profiledata -#define PL_Ipsig_name PL_psig_name -#define PL_Ipsig_pend PL_psig_pend -#define PL_Ipsig_ptr PL_psig_ptr -#define PL_Iptr_table PL_ptr_table -#define PL_Ireentrant_buffer PL_reentrant_buffer -#define PL_Ireentrant_retint PL_reentrant_retint -#define PL_Ireg_state PL_reg_state -#define PL_Iregdummy PL_regdummy -#define PL_Iregex_pad PL_regex_pad -#define PL_Iregex_padav PL_regex_padav -#define PL_Ireginterp_cnt PL_reginterp_cnt -#define PL_Iregistered_mros PL_registered_mros -#define PL_Iregmatch_slab PL_regmatch_slab -#define PL_Iregmatch_state PL_regmatch_state -#define PL_Irehash_seed PL_rehash_seed -#define PL_Irehash_seed_set PL_rehash_seed_set -#define PL_Ireplgv PL_replgv -#define PL_Irestartjmpenv PL_restartjmpenv -#define PL_Irestartop PL_restartop -#define PL_Irpeepp PL_rpeepp -#define PL_Irs PL_rs -#define PL_Irunops PL_runops -#define PL_Isavebegin PL_savebegin -#define PL_Isavestack PL_savestack -#define PL_Isavestack_ix PL_savestack_ix -#define PL_Isavestack_max PL_savestack_max -#define PL_Isawampersand PL_sawampersand -#define PL_Iscopestack PL_scopestack -#define PL_Iscopestack_ix PL_scopestack_ix -#define PL_Iscopestack_max PL_scopestack_max -#define PL_Iscopestack_name PL_scopestack_name -#define PL_Iscreamfirst PL_screamfirst -#define PL_Iscreamnext PL_screamnext -#define PL_Isecondgv PL_secondgv -#define PL_Isharehook PL_sharehook -#define PL_Isig_pending PL_sig_pending -#define PL_Isighandlerp PL_sighandlerp -#define PL_Isignalhook PL_signalhook -#define PL_Isignals PL_signals -#define PL_Islab_count PL_slab_count -#define PL_Islabs PL_slabs -#define PL_Isort_RealCmp PL_sort_RealCmp -#define PL_Isortcop PL_sortcop -#define PL_Isortstash PL_sortstash -#define PL_Isplitstr PL_splitstr -#define PL_Isrand_called PL_srand_called -#define PL_Istack_base PL_stack_base -#define PL_Istack_max PL_stack_max -#define PL_Istack_sp PL_stack_sp -#define PL_Istart_env PL_start_env -#define PL_Istashcache PL_stashcache -#define PL_Istatbuf PL_statbuf -#define PL_Istatcache PL_statcache -#define PL_Istatgv PL_statgv -#define PL_Istatname PL_statname -#define PL_Istatusvalue PL_statusvalue -#define PL_Istatusvalue_posix PL_statusvalue_posix -#define PL_Istatusvalue_vms PL_statusvalue_vms -#define PL_Istderrgv PL_stderrgv -#define PL_Istdingv PL_stdingv -#define PL_Istrtab PL_strtab -#define PL_Isub_generation PL_sub_generation -#define PL_Isubline PL_subline -#define PL_Isubname PL_subname -#define PL_Isv_arenaroot PL_sv_arenaroot -#define PL_Isv_count PL_sv_count -#define PL_Isv_no PL_sv_no -#define PL_Isv_objcount PL_sv_objcount -#define PL_Isv_root PL_sv_root -#define PL_Isv_serial PL_sv_serial -#define PL_Isv_undef PL_sv_undef -#define PL_Isv_yes PL_sv_yes -#define PL_Isys_intern PL_sys_intern -#define PL_Itaint_warn PL_taint_warn -#define PL_Itainted PL_tainted -#define PL_Itainting PL_tainting -#define PL_Ithreadhook PL_threadhook -#define PL_Itimesbuf PL_timesbuf -#define PL_Itmps_floor PL_tmps_floor -#define PL_Itmps_ix PL_tmps_ix -#define PL_Itmps_max PL_tmps_max -#define PL_Itmps_stack PL_tmps_stack -#define PL_Itop_env PL_top_env -#define PL_Itoptarget PL_toptarget -#define PL_Iuid PL_uid -#define PL_Iunicode PL_unicode -#define PL_Iunitcheckav PL_unitcheckav -#define PL_Iunitcheckav_save PL_unitcheckav_save -#define PL_Iunlockhook PL_unlockhook -#define PL_Iunsafe PL_unsafe -#define PL_Iutf8_X_L PL_utf8_X_L -#define PL_Iutf8_X_LV PL_utf8_X_LV -#define PL_Iutf8_X_LVT PL_utf8_X_LVT -#define PL_Iutf8_X_LV_LVT_V PL_utf8_X_LV_LVT_V -#define PL_Iutf8_X_T PL_utf8_X_T -#define PL_Iutf8_X_V PL_utf8_X_V -#define PL_Iutf8_X_begin PL_utf8_X_begin -#define PL_Iutf8_X_extend PL_utf8_X_extend -#define PL_Iutf8_X_non_hangul PL_utf8_X_non_hangul -#define PL_Iutf8_X_prepend PL_utf8_X_prepend -#define PL_Iutf8_alnum PL_utf8_alnum -#define PL_Iutf8_alpha PL_utf8_alpha -#define PL_Iutf8_ascii PL_utf8_ascii -#define PL_Iutf8_cntrl PL_utf8_cntrl -#define PL_Iutf8_digit PL_utf8_digit -#define PL_Iutf8_foldable PL_utf8_foldable -#define PL_Iutf8_foldclosures PL_utf8_foldclosures -#define PL_Iutf8_graph PL_utf8_graph -#define PL_Iutf8_idcont PL_utf8_idcont -#define PL_Iutf8_idstart PL_utf8_idstart -#define PL_Iutf8_lower PL_utf8_lower -#define PL_Iutf8_mark PL_utf8_mark -#define PL_Iutf8_perl_space PL_utf8_perl_space -#define PL_Iutf8_perl_word PL_utf8_perl_word -#define PL_Iutf8_posix_digit PL_utf8_posix_digit -#define PL_Iutf8_print PL_utf8_print -#define PL_Iutf8_punct PL_utf8_punct -#define PL_Iutf8_space PL_utf8_space -#define PL_Iutf8_tofold PL_utf8_tofold -#define PL_Iutf8_tolower PL_utf8_tolower -#define PL_Iutf8_totitle PL_utf8_totitle -#define PL_Iutf8_toupper PL_utf8_toupper -#define PL_Iutf8_upper PL_utf8_upper -#define PL_Iutf8_xdigit PL_utf8_xdigit -#define PL_Iutf8_xidcont PL_utf8_xidcont -#define PL_Iutf8_xidstart PL_utf8_xidstart -#define PL_Iutf8cache PL_utf8cache -#define PL_Iutf8locale PL_utf8locale -#define PL_Iwarnhook PL_warnhook -#define PL_Iwatchaddr PL_watchaddr -#define PL_Iwatchok PL_watchok -#define PL_Ixmlfp PL_xmlfp - - #endif /* MULTIPLICITY */ #if defined(PERL_GLOBAL_STRUCT) -#define PL_No (my_vars->GNo) -#define PL_GNo (my_vars->GNo) -#define PL_Yes (my_vars->GYes) -#define PL_GYes (my_vars->GYes) #define PL_appctx (my_vars->Gappctx) #define PL_Gappctx (my_vars->Gappctx) -#define PL_charclass (my_vars->Gcharclass) -#define PL_Gcharclass (my_vars->Gcharclass) #define PL_check (my_vars->Gcheck) #define PL_Gcheck (my_vars->Gcheck) +#define PL_check_mutex (my_vars->Gcheck_mutex) +#define PL_Gcheck_mutex (my_vars->Gcheck_mutex) #define PL_csighandlerp (my_vars->Gcsighandlerp) #define PL_Gcsighandlerp (my_vars->Gcsighandlerp) #define PL_curinterp (my_vars->Gcurinterp) @@ -729,16 +415,8 @@ #define PL_Gdollarzero_mutex (my_vars->Gdollarzero_mutex) #define PL_fold_locale (my_vars->Gfold_locale) #define PL_Gfold_locale (my_vars->Gfold_locale) -#define PL_global_struct_size (my_vars->Gglobal_struct_size) -#define PL_Gglobal_struct_size (my_vars->Gglobal_struct_size) -#define PL_hexdigit (my_vars->Ghexdigit) -#define PL_Ghexdigit (my_vars->Ghexdigit) #define PL_hints_mutex (my_vars->Ghints_mutex) #define PL_Ghints_mutex (my_vars->Ghints_mutex) -#define PL_interp_size (my_vars->Ginterp_size) -#define PL_Ginterp_size (my_vars->Ginterp_size) -#define PL_interp_size_5_10_0 (my_vars->Ginterp_size_5_10_0) -#define PL_Ginterp_size_5_10_0 (my_vars->Ginterp_size_5_10_0) #define PL_keyword_plugin (my_vars->Gkeyword_plugin) #define PL_Gkeyword_plugin (my_vars->Gkeyword_plugin) #define PL_malloc_mutex (my_vars->Gmalloc_mutex) @@ -755,8 +433,6 @@ #define PL_Gop_seq (my_vars->Gop_seq) #define PL_op_sequence (my_vars->Gop_sequence) #define PL_Gop_sequence (my_vars->Gop_sequence) -#define PL_patleave (my_vars->Gpatleave) -#define PL_Gpatleave (my_vars->Gpatleave) #define PL_perlio_debug_fd (my_vars->Gperlio_debug_fd) #define PL_Gperlio_debug_fd (my_vars->Gperlio_debug_fd) #define PL_perlio_fd_refcnt (my_vars->Gperlio_fd_refcnt) @@ -767,14 +443,10 @@ #define PL_Gperlio_mutex (my_vars->Gperlio_mutex) #define PL_ppaddr (my_vars->Gppaddr) #define PL_Gppaddr (my_vars->Gppaddr) -#define PL_revision (my_vars->Grevision) -#define PL_Grevision (my_vars->Grevision) -#define PL_runops_dbg (my_vars->Grunops_dbg) -#define PL_Grunops_dbg (my_vars->Grunops_dbg) -#define PL_runops_std (my_vars->Grunops_std) -#define PL_Grunops_std (my_vars->Grunops_std) +#ifdef OS2 #define PL_sh_path (my_vars->Gsh_path) #define PL_Gsh_path (my_vars->Gsh_path) +#endif #define PL_sig_defaulting (my_vars->Gsig_defaulting) #define PL_Gsig_defaulting (my_vars->Gsig_defaulting) #define PL_sig_handlers_initted (my_vars->Gsig_handlers_initted) @@ -785,8 +457,6 @@ #define PL_Gsig_trapped (my_vars->Gsig_trapped) #define PL_sigfpe_saved (my_vars->Gsigfpe_saved) #define PL_Gsigfpe_saved (my_vars->Gsigfpe_saved) -#define PL_subversion (my_vars->Gsubversion) -#define PL_Gsubversion (my_vars->Gsubversion) #define PL_sv_placeholder (my_vars->Gsv_placeholder) #define PL_Gsv_placeholder (my_vars->Gsv_placeholder) #define PL_thr_key (my_vars->Gthr_key) @@ -795,62 +465,11 @@ #define PL_Gtimesbase (my_vars->Gtimesbase) #define PL_use_safe_putenv (my_vars->Guse_safe_putenv) #define PL_Guse_safe_putenv (my_vars->Guse_safe_putenv) -#define PL_version (my_vars->Gversion) -#define PL_Gversion (my_vars->Gversion) #define PL_veto_cleanup (my_vars->Gveto_cleanup) #define PL_Gveto_cleanup (my_vars->Gveto_cleanup) #define PL_watch_pvx (my_vars->Gwatch_pvx) #define PL_Gwatch_pvx (my_vars->Gwatch_pvx) -#else /* !PERL_GLOBAL_STRUCT */ - -#define PL_GNo PL_No -#define PL_GYes PL_Yes -#define PL_Gappctx PL_appctx -#define PL_Gcharclass PL_charclass -#define PL_Gcheck PL_check -#define PL_Gcsighandlerp PL_csighandlerp -#define PL_Gcurinterp PL_curinterp -#define PL_Gdo_undump PL_do_undump -#define PL_Gdollarzero_mutex PL_dollarzero_mutex -#define PL_Gfold_locale PL_fold_locale -#define PL_Gglobal_struct_size PL_global_struct_size -#define PL_Ghexdigit PL_hexdigit -#define PL_Ghints_mutex PL_hints_mutex -#define PL_Ginterp_size PL_interp_size -#define PL_Ginterp_size_5_10_0 PL_interp_size_5_10_0 -#define PL_Gkeyword_plugin PL_keyword_plugin -#define PL_Gmalloc_mutex PL_malloc_mutex -#define PL_Gmmap_page_size PL_mmap_page_size -#define PL_Gmy_ctx_mutex PL_my_ctx_mutex -#define PL_Gmy_cxt_index PL_my_cxt_index -#define PL_Gop_mutex PL_op_mutex -#define PL_Gop_seq PL_op_seq -#define PL_Gop_sequence PL_op_sequence -#define PL_Gpatleave PL_patleave -#define PL_Gperlio_debug_fd PL_perlio_debug_fd -#define PL_Gperlio_fd_refcnt PL_perlio_fd_refcnt -#define PL_Gperlio_fd_refcnt_size PL_perlio_fd_refcnt_size -#define PL_Gperlio_mutex PL_perlio_mutex -#define PL_Gppaddr PL_ppaddr -#define PL_Grevision PL_revision -#define PL_Grunops_dbg PL_runops_dbg -#define PL_Grunops_std PL_runops_std -#define PL_Gsh_path PL_sh_path -#define PL_Gsig_defaulting PL_sig_defaulting -#define PL_Gsig_handlers_initted PL_sig_handlers_initted -#define PL_Gsig_ignoring PL_sig_ignoring -#define PL_Gsig_trapped PL_sig_trapped -#define PL_Gsigfpe_saved PL_sigfpe_saved -#define PL_Gsubversion PL_subversion -#define PL_Gsv_placeholder PL_sv_placeholder -#define PL_Gthr_key PL_thr_key -#define PL_Gtimesbase PL_timesbase -#define PL_Guse_safe_putenv PL_use_safe_putenv -#define PL_Gversion PL_version -#define PL_Gveto_cleanup PL_veto_cleanup -#define PL_Gwatch_pvx PL_watch_pvx - #endif /* PERL_GLOBAL_STRUCT */ /* ex: set ro: */ diff --git a/Master/tlpkg/tlperl/lib/CORE/feature.h b/Master/tlpkg/tlperl/lib/CORE/feature.h new file mode 100644 index 00000000000..dc9696ec9c3 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/CORE/feature.h @@ -0,0 +1,127 @@ +/* -*- buffer-read-only: t -*- + !!!!!!! DO NOT EDIT THIS FILE !!!!!!! + This file is built by regen/feature.pl. + Any changes made here will be lost! + */ + + +#if defined(PERL_CORE) || defined (PERL_EXT) + +#define HINT_FEATURE_SHIFT 26 + +#define FEATURE_BUNDLE_DEFAULT 0 +#define FEATURE_BUNDLE_510 1 +#define FEATURE_BUNDLE_511 2 +#define FEATURE_BUNDLE_515 3 +#define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT) + +#define CURRENT_HINTS \ + (PL_curcop == &PL_compiling ? PL_hints : PL_curcop->cop_hints) +#define CURRENT_FEATURE_BUNDLE \ + ((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT) + +/* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in + the HP-UX cc on PA-RISC */ +#define FEATURE_IS_ENABLED(name) \ + ((CURRENT_HINTS \ + & HINT_LOCALIZE_HH) \ + ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE) +/* The longest string we pass in. */ +#define MAX_FEATURE_LEN (sizeof("evalbytes")-1) + +#define FEATURE_FC_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_515 \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED("fc")) \ + ) + +#define FEATURE_SAY_IS_ENABLED \ + ( \ + (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_515) \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED("say")) \ + ) + +#define FEATURE_STATE_IS_ENABLED \ + ( \ + (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_515) \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED("state")) \ + ) + +#define FEATURE_SWITCH_IS_ENABLED \ + ( \ + (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_515) \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED("switch")) \ + ) + +#define FEATURE_EVALBYTES_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_515 \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED("evalbytes")) \ + ) + +#define FEATURE_ARYBASE_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_511 \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED("arybase")) \ + ) + +#define FEATURE___SUB___IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_515 \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED("__SUB__")) \ + ) + +#define FEATURE_UNIEVAL_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_515 \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED("unieval")) \ + ) + +#define FEATURE_UNICODE_IS_ENABLED \ + ( \ + (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_511 && \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_515) \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED("unicode")) \ + ) + + +#endif /* PERL_CORE or PERL_EXT */ + +#ifdef PERL_IN_OP_C +PERL_STATIC_INLINE void +S_enable_feature_bundle(pTHX_ SV *ver) +{ + SV *comp_ver = sv_newmortal(); + PL_hints = (PL_hints &~ HINT_FEATURE_MASK) + | ( + (sv_setnv(comp_ver, 5.015), + vcmp(ver, upg_version(comp_ver, FALSE)) >= 0) + ? FEATURE_BUNDLE_515 : + (sv_setnv(comp_ver, 5.011), + vcmp(ver, upg_version(comp_ver, FALSE)) >= 0) + ? FEATURE_BUNDLE_511 : + (sv_setnv(comp_ver, 5.009005), + vcmp(ver, upg_version(comp_ver, FALSE)) >= 0) + ? FEATURE_BUNDLE_510 : + FEATURE_BUNDLE_DEFAULT + ) << HINT_FEATURE_SHIFT; + /* special case */ + assert(PL_curcop == &PL_compiling); + if (FEATURE_UNICODE_IS_ENABLED) PL_hints |= HINT_UNI_8_BIT; + else PL_hints &= ~HINT_UNI_8_BIT; +} +#endif /* PERL_IN_OP_C */ + +/* ex: set ro: */ diff --git a/Master/tlpkg/tlperl/lib/CORE/form.h b/Master/tlpkg/tlperl/lib/CORE/form.h index 114d6d4475f..7ddeb715edf 100644 --- a/Master/tlpkg/tlperl/lib/CORE/form.h +++ b/Master/tlpkg/tlperl/lib/CORE/form.h @@ -1,27 +1,27 @@ /* form.h * - * Copyright (C) 1991, 1992, 1993, 2000, 2004 by Larry Wall and others + * Copyright (C) 1991, 1992, 1993, 2000, 2004, 2011 by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * */ -#define FF_END 0 -#define FF_LINEMARK 1 -#define FF_LITERAL 2 -#define FF_SKIP 3 -#define FF_FETCH 4 -#define FF_CHECKNL 5 -#define FF_CHECKCHOP 6 -#define FF_SPACE 7 -#define FF_HALFSPACE 8 -#define FF_ITEM 9 -#define FF_CHOP 10 -#define FF_LINEGLOB 11 -#define FF_DECIMAL 12 -#define FF_NEWLINE 13 -#define FF_BLANK 14 -#define FF_MORE 15 -#define FF_0DECIMAL 16 -#define FF_LINESNGL 17 +#define FF_END 0 /* tidy up, then return */ +#define FF_LINEMARK 1 /* start (or end) of a line */ +#define FF_LITERAL 2 /* append literal chars */ +#define FF_SKIP 3 /* skip chars in format */ +#define FF_FETCH 4 /* get next item and set field size to */ +#define FF_CHECKNL 5 /* find max len of item (up to \n) that fits field */ +#define FF_CHECKCHOP 6 /* like CHECKNL, but up to highest split point */ +#define FF_SPACE 7 /* append padding space (diff of field, item size) */ +#define FF_HALFSPACE 8 /* like FF_SPACE, but only append half as many */ +#define FF_ITEM 9 /* append a text item, while blanking ctrl chars */ +#define FF_CHOP 10 /* (for ^*) chop the current item */ +#define FF_LINEGLOB 11 /* process @* */ +#define FF_DECIMAL 12 /* do @##, ^##, where =(precision|flags) */ +#define FF_NEWLINE 13 /* delete trailing spaces, then append \n */ +#define FF_BLANK 14 /* for arg==0: do '~'; for arg>0 : do '~~' */ +#define FF_MORE 15 /* replace long end of string with '...' */ +#define FF_0DECIMAL 16 /* like FF_DECIMAL but for 0### */ +#define FF_LINESNGL 17 /* process ^* */ diff --git a/Master/tlpkg/tlperl/lib/CORE/gv.h b/Master/tlpkg/tlperl/lib/CORE/gv.h index ab5c7889872..a3932620163 100644 --- a/Master/tlpkg/tlperl/lib/CORE/gv.h +++ b/Master/tlpkg/tlperl/lib/CORE/gv.h @@ -56,6 +56,7 @@ struct gp { })) # define GvNAME_get(gv) ({ assert(GvNAME_HEK(gv)); (char *)HEK_KEY(GvNAME_HEK(gv)); }) # define GvNAMELEN_get(gv) ({ assert(GvNAME_HEK(gv)); HEK_LEN(GvNAME_HEK(gv)); }) +# define GvNAMEUTF8(gv) ({ assert(GvNAME_HEK(gv)); HEK_UTF8(GvNAME_HEK(gv)); }) #else # define GvGP(gv) (0+(gv)->sv_u.svu_gp) # define GvGP_set(gv,gp) ((gv)->sv_u.svu_gp = (gp)) @@ -64,6 +65,7 @@ struct gp { # define GvNAME_HEK(gv) (GvXPVGV(gv)->xiv_u.xivu_namehek) # define GvNAME_get(gv) HEK_KEY(GvNAME_HEK(gv)) # define GvNAMELEN_get(gv) HEK_LEN(GvNAME_HEK(gv)) +# define GvNAMEUTF8(gv) HEK_UTF8(GvNAME_HEK(gv)) #endif #define GvNAME(gv) GvNAME_get(gv) @@ -133,6 +135,9 @@ Return the SV from the GV. #define GvEGV(gv) (GvGP(gv)->gp_egv) #define GvEGVx(gv) (isGV_with_GP(gv) ? GvEGV(gv) : NULL) #define GvENAME(gv) GvNAME(GvEGV(gv) ? GvEGV(gv) : gv) +#define GvENAMELEN(gv) GvNAMELEN(GvEGV(gv) ? GvEGV(gv) : gv) +#define GvENAMEUTF8(gv) GvNAMEUTF8(GvEGV(gv) ? GvEGV(gv) : gv) +#define GvENAME_HEK(gv) GvNAME_HEK(GvEGV(gv) ? GvEGV(gv) : gv) #define GvESTASH(gv) GvSTASH(GvEGV(gv) ? GvEGV(gv) : gv) #define GVf_INTRO 0x01 @@ -145,9 +150,6 @@ Return the SV from the GV. #define GVf_IMPORTED_HV 0x40 #define GVf_IMPORTED_CV 0x80 -/* Temporary flag for the tie $handle deprecation warnings. */ -#define GVf_TIEWARNED 0x100 - #define GvINTRO(gv) (GvFLAGS(gv) & GVf_INTRO) #define GvINTRO_on(gv) (GvFLAGS(gv) |= GVf_INTRO) #define GvINTRO_off(gv) (GvFLAGS(gv) &= ~GVf_INTRO) @@ -203,7 +205,8 @@ Return the SV from the GV. #define GV_ADD 0x01 /* add, if symbol not already there For gv_name_set, adding a HEK for the first time, so don't try to free what's there. */ -#define GV_ADDMULTI 0x02 /* add, pretending it has been added already */ +#define GV_ADDMULTI 0x02 /* add, pretending it has been added + already; used also by gv_init_* */ #define GV_ADDWARN 0x04 /* add, but warn if symbol wasn't already there */ #define GV_ADDINEVAL 0x08 /* add, as though we're doing so within an eval */ #define GV_NOINIT 0x10 /* add, but don't init symbol, if type != PVGV */ @@ -216,17 +219,36 @@ Return the SV from the GV. package (so skip checks for :: and ') */ #define GV_AUTOLOAD 0x100 /* gv_fetchmethod_flags() should AUTOLOAD */ #define GV_CROAK 0x200 /* gv_fetchmethod_flags() should croak */ +#define GV_ADDMG 0x400 /* add if magical */ +#define GV_NO_SVGMAGIC 0x800 /* Skip get-magic on an SV argument; + used only by gv_fetchsv(_nomg) */ + +/* Flags for gv_autoload_*/ +#define GV_AUTOLOAD_ISMETHOD 1 /* autoloading a method? */ /* SVf_UTF8 (more accurately the return value from SvUTF8) is also valid - as a flag to gv_fetch_pvn_flags, so ensure it lies outside this range. + as a flag to various gv_* functions, so ensure it lies + outside this range. */ -#define GV_NOADD_MASK (SVf_UTF8|GV_NOADD_NOINIT|GV_NOEXPAND|GV_NOTQUAL) -/* The bit flags that don't cause gv_fetchpv() to add a symbol if not found */ +#define GV_NOADD_MASK \ + (SVf_UTF8|GV_NOADD_NOINIT|GV_NOEXPAND|GV_NOTQUAL|GV_ADDMG|GV_NO_SVGMAGIC) +/* The bit flags that don't cause gv_fetchpv() to add a symbol if not + found (with the exception GV_ADDMG, which *might* cause the symbol + to be added) */ #define gv_fullname3(sv,gv,prefix) gv_fullname4(sv,gv,prefix,TRUE) #define gv_efullname3(sv,gv,prefix) gv_efullname4(sv,gv,prefix,TRUE) #define gv_fetchmethod(stash, name) gv_fetchmethod_autoload(stash, name, TRUE) +#define gv_fetchsv_nomg(n,f,t) gv_fetchsv(n,(f)|GV_NO_SVGMAGIC,t) +#define gv_init(gv,stash,name,len,multi) \ + gv_init_pvn(gv,stash,name,len,GV_ADDMULTI*!!(multi)) +#define gv_fetchmeth(stash,name,len,level) gv_fetchmeth_pvn(stash, name, len, level, 0) +#define gv_fetchmeth_autoload(stash,name,len,level) gv_fetchmeth_pvn_autoload(stash, name, len, level, 0) +#define gv_fetchmethod_flags(stash,name,flags) gv_fetchmethod_pv_flags(stash, name, flags) +#define gv_autoload4(stash, name, len, method) \ + gv_autoload_pvn(stash, name, len, !!(method)) +#define newGVgen(pack) newGVgen_flags(pack, 0) #define gv_AVadd(gv) gv_add_by_type((gv), SVt_PVAV) #define gv_HVadd(gv) gv_add_by_type((gv), SVt_PVHV) diff --git a/Master/tlpkg/tlperl/lib/CORE/handy.h b/Master/tlpkg/tlperl/lib/CORE/handy.h index 6541c95c357..c90a8764dd3 100644 --- a/Master/tlpkg/tlperl/lib/CORE/handy.h +++ b/Master/tlpkg/tlperl/lib/CORE/handy.h @@ -70,10 +70,13 @@ Null SV pointer. (No longer available when C is defined.) #define MUTABLE_IO(p) ((IO *)MUTABLE_PTR(p)) #define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p)) -/* XXX Configure ought to have a test for a boolean type, if I can - just figure out all the headers such a test needs. - Andy Dougherty August 1996 -*/ +#ifdef I_STDBOOL +# include +# ifndef HAS_BOOL +# define HAS_BOOL 1 +# endif +#endif + /* bool is built-in for g++-2.6.3 and later, which might be used for extensions. <_G_config.h> defines _G_HAVE_BOOL, but we can't be sure _G_config.h will be included before this file. _G_config.h @@ -112,9 +115,10 @@ Null SV pointer. (No longer available when C is defined.) /* a simple (bool) cast may not do the right thing: if bool is defined * as char for example, then the cast from int is implementation-defined + * (bool)!!(cbool) in a ternary triggers a bug in xlc on AIX */ -#define cBOOL(cbool) ((bool)!!(cbool)) +#define cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0) /* Try to figure out __func__ or __FUNCTION__ equivalent, if any. * XXX Should really be a Configure probe, with HAS__FUNCTION__ @@ -470,7 +474,7 @@ There are three variants for all the functions in this section. The base ones operate using the character set of the platform Perl is running on. The ones with an C<_A> suffix operate on the ASCII character set, and the ones with an C<_L1> suffix operate on the full Latin1 character set. All are unaffected by -locale +locale and by C. For ASCII platforms, the base function with no suffix and the one with the C<_A> suffix are identical. The function with the C<_L1> suffix imposes the @@ -559,27 +563,38 @@ patched there. The file as of this writing is cpan/Devel-PPPort/parts/inc/misc */ -/* FITS_IN_8_BITS(c) returns true if c occupies no more than 8 bits. It is - * designed to be hopefully bomb-proof, making sure that no bits of - * information are lost even on a 64-bit machine, but to get the compiler to - * optimize it out if possible. This is because Configure makes sure that the - * machine has an 8-bit byte, so if c is stored in a byte, the sizeof() - * guarantees that this evaluates to a constant true at compile time. The use - * of the mask instead of '< 256' keeps gcc from complaining that it is alway - * true, when c's storage class is a byte. Use U64TYPE because U64 is known - * only in the perl core, and this macro can be called from outside that */ +/* Specify the widest unsigned type on the platform. Use U64TYPE because U64 + * is known only in the perl core, and this macro can be called from outside + * that */ #ifdef HAS_QUAD -# define FITS_IN_8_BITS(c) ((sizeof(c) == 1) || (((U64TYPE)(c) & 0xFF) == (U64TYPE)(c))) +# define WIDEST_UTYPE U64TYPE +#else +# define WIDEST_UTYPE U32 +#endif + +/* FITS_IN_8_BITS(c) returns true if c doesn't have a bit set other than in + * the lower 8. It is designed to be hopefully bomb-proof, making sure that no + * bits of information are lost even on a 64-bit machine, but to get the + * compiler to optimize it out if possible. This is because Configure makes + * sure that the machine has an 8-bit byte, so if c is stored in a byte, the + * sizeof() guarantees that this evaluates to a constant true at compile time. + */ +#define FITS_IN_8_BITS(c) ((sizeof(c) == 1) || !(((WIDEST_UTYPE)(c)) & ~0xFF)) + +#ifdef EBCDIC +# define isASCII(c) (FITS_IN_8_BITS(c) && (NATIVE_TO_UNI((U8) (c)) < 128)) #else -# define FITS_IN_8_BITS(c) ((sizeof(c) == 1) || (((U32)(c) & 0xFF) == (U32)(c))) +# define isASCII(c) ((WIDEST_UTYPE)(c) < 128) #endif -#define isASCII(c) (FITS_IN_8_BITS(c) ? NATIVE_TO_UNI((U8) c) <= 127 : 0) #define isASCII_A(c) isASCII(c) +#define isASCII_L1(c) isASCII(c) /* ASCII range only */ #ifdef H_PERL /* If have access to perl.h, lookup in its table */ -/* Bits for PL_charclass[] */ +/* Bits for PL_charclass[]. These use names used in l1_char_class_tab.h but + * their actual definitions are here. If that has a name not used here, it + * won't compile. */ # define _CC_ALNUMC_A (1<<0) # define _CC_ALNUMC_L1 (1<<1) # define _CC_ALPHA_A (1<<2) @@ -611,8 +626,12 @@ patched there. The file as of this writing is cpan/Devel-PPPort/parts/inc/misc # define _CC_WORDCHAR_L1 (1<<28) # define _CC_XDIGIT_A (1<<29) # define _CC_NONLATIN1_FOLD (1<<30) -/* Unused - * (1<<31) +# define _CC_QUOTEMETA (1U<<31) /* 1U keeps Solaris from griping */ +/* Unused: None + * If more are needed, can give up some of the above. The first ones to go + * would be those that require just two tests to verify, either there are two + * code points, like BLANK_A, or occupy a single range like OCTAL_A, DIGIT_A, + * UPPER_A, and LOWER_A. */ # ifdef DOINIT @@ -643,8 +662,9 @@ EXTCONST U32 PL_charclass[]; /* Either participates in a fold with a character above 255, or is a * multi-char fold */ # define _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(c) ((! cBOOL(FITS_IN_8_BITS(c))) || (PL_charclass[(U8) NATIVE_TO_UNI(c)] & _CC_NONLATIN1_FOLD)) +# define _isQUOTEMETA(c) cBOOL(FITS_IN_8_BITS(c) && (PL_charclass[(U8) NATIVE_TO_UNI(c)] & _CC_QUOTEMETA)) #else /* No perl.h. */ -# define isOCTAL_A(c) ((c) >= '0' && (c) <= '9') +# define isOCTAL_A(c) ((c) <= '7' && (c) >= '0') # ifdef EBCDIC # define isALNUMC_A(c) (isASCII(c) && isALNUMC(c)) # define isALPHA_A(c) (isASCII(c) && isALPHA(c)) @@ -665,8 +685,8 @@ EXTCONST U32 PL_charclass[]; # define isALNUMC_A(c) (isALPHA_A(c) || isDIGIT_A(c)) # define isALPHA_A(c) (isUPPER_A(c) || isLOWER_A(c)) # define isBLANK_A(c) ((c) == ' ' || (c) == '\t') -# define isCNTRL_A(c) (FITS_IN_8_BITS(c) ? ((U8) (c) < ' ' || (c) == 127) : 0) -# define isDIGIT_A(c) ((c) >= '0' && (c) <= '9') +# define isCNTRL_A(c) (FITS_IN_8_BITS(c) && ((U8) (c) < ' ' || (c) == 127)) +# define isDIGIT_A(c) ((c) <= '9' && (c) >= '0') # define isGRAPH_A(c) (isWORDCHAR_A(c) || isPUNCT_A(c)) # define isIDFIRST_A(c) (isALPHA_A(c) || (c) == '_') # define isLOWER_A(c) ((c) >= 'a' && (c) <= 'z') @@ -674,9 +694,9 @@ EXTCONST U32 PL_charclass[]; # define isPSXSPC_A(c) (isSPACE_A(c) || (c) == '\v') # define isPUNCT_A(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126)) # define isSPACE_A(c) ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) =='\r' || (c) == '\f') -# define isUPPER_A(c) ((c) >= 'A' && (c) <= 'Z') +# define isUPPER_A(c) ((c) <= 'Z' && (c) >= 'A') # define isWORDCHAR_A(c) (isALPHA_A(c) || isDIGIT_A(c) || (c) == '_') -# define isXDIGIT_A(c) (isDIGIT_A(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) +# define isXDIGIT_A(c) (isDIGIT_A(c) || ((c) >= 'a' && (c) <= 'f') || ((c) <= 'F' && (c) >= 'A')) # endif #endif /* ASCII range definitions */ @@ -792,6 +812,8 @@ EXTCONST U32 PL_charclass[]; # define isIDFIRST_LC(c) \ (NXIsAlpha((unsigned int)(c)) || (char)(c) == '_') # define isALPHA_LC(c) NXIsAlpha((unsigned int)(c)) +# define isASCII_LC(c) isASCII((unsigned int)(c)) +# define isBLANK_LC(c) isBLANK((unsigned int)(c)) # define isSPACE_LC(c) NXIsSpace((unsigned int)(c)) # define isDIGIT_LC(c) NXIsDigit((unsigned int)(c)) # define isUPPER_LC(c) NXIsUpper((unsigned int)(c)) @@ -808,9 +830,23 @@ EXTCONST U32 PL_charclass[]; # if defined(CTYPE256) || (!defined(isascii) && !defined(HAS_ISASCII)) +/* Note that the foo_LC() macros in this case generally are defined only on + * code points 0-256, and give undefined, unwarned results if called with + * values outside that range */ + # define isALNUM_LC(c) (isalnum((unsigned char)(c)) || (char)(c) == '_') # define isIDFIRST_LC(c) (isalpha((unsigned char)(c)) || (char)(c) == '_') # define isALPHA_LC(c) isalpha((unsigned char)(c)) +# ifdef HAS_ISASCII +# define isASCII_LC(c) isascii((unsigned char)(c)) +# else +# define isASCII_LC(c) isASCII((unsigned char)(c)) +# endif +# ifdef HAS_ISBLANK +# define isBLANK_LC(c) isblank((unsigned char)(c)) +# else +# define isBLANK_LC(c) isBLANK((unsigned char)(c)) +# endif # define isSPACE_LC(c) isspace((unsigned char)(c)) # define isDIGIT_LC(c) isdigit((unsigned char)(c)) # define isUPPER_LC(c) isupper((unsigned char)(c)) @@ -828,6 +864,12 @@ EXTCONST U32 PL_charclass[]; # define isALNUM_LC(c) (isascii(c) && (isalnum(c) || (c) == '_')) # define isIDFIRST_LC(c) (isascii(c) && (isalpha(c) || (c) == '_')) # define isALPHA_LC(c) (isascii(c) && isalpha(c)) +# define isASCII_LC(c) isascii(c) +# ifdef HAS_ISBLANK +# define isBLANK_LC(c) (isascii(c) && isblank(c)) +# else +# define isBLANK_LC(c) isBLANK(c) +# endif # define isSPACE_LC(c) (isascii(c) && isspace(c)) # define isDIGIT_LC(c) (isascii(c) && isdigit(c)) # define isUPPER_LC(c) (isascii(c) && isupper(c)) @@ -844,27 +886,39 @@ EXTCONST U32 PL_charclass[]; #endif /* USE_NEXT_CTYPE */ #define isPSXSPC_LC(c) (isSPACE_LC(c) || (c) == '\v') -#define isBLANK_LC(c) isBLANK(c) /* could be wrong */ - -#define isALNUM_uni(c) is_uni_alnum(c) -#define isIDFIRST_uni(c) is_uni_idfirst(c) -#define isALPHA_uni(c) is_uni_alpha(c) -#define isSPACE_uni(c) is_uni_space(c) -#define isDIGIT_uni(c) is_uni_digit(c) -#define isUPPER_uni(c) is_uni_upper(c) -#define isLOWER_uni(c) is_uni_lower(c) -#define isASCII_uni(c) is_uni_ascii(c) -#define isCNTRL_uni(c) is_uni_cntrl(c) -#define isGRAPH_uni(c) is_uni_graph(c) -#define isPRINT_uni(c) is_uni_print(c) -#define isPUNCT_uni(c) is_uni_punct(c) -#define isXDIGIT_uni(c) is_uni_xdigit(c) + +/* For use in the macros just below. If the input is Latin1, use the Latin1 + * (_L1) version of the macro; otherwise use the function. Won't compile if + * 'c' isn't unsigned, as won't match function prototype. The macros do bounds + * checking, so have duplicate checks here, so could create versions of the + * macros that don't, but experiments show that gcc optimizes them out anyway. + */ +#define generic_uni(macro, function, c) ((c) < 256 \ + ? CAT2(macro, _L1)(c) \ + : function(c)) +/* Note that all ignore 'use bytes' */ + +#define isALNUM_uni(c) generic_uni(isWORDCHAR, is_uni_alnum, c) +#define isIDFIRST_uni(c) generic_uni(isIDFIRST, is_uni_idfirst, c) +#define isALPHA_uni(c) generic_uni(isALPHA, is_uni_alpha, c) +#define isSPACE_uni(c) generic_uni(isSPACE, is_uni_space, c) +#define isDIGIT_uni(c) generic_uni(isDIGIT, is_uni_digit, c) +#define isUPPER_uni(c) generic_uni(isUPPER, is_uni_upper, c) +#define isLOWER_uni(c) generic_uni(isLOWER, is_uni_lower, c) +#define isASCII_uni(c) isASCII(c) +/* All controls are in Latin1 */ +#define isCNTRL_uni(c) ((c) < 256 && isCNTRL_L1(c)) +#define isGRAPH_uni(c) generic_uni(isGRAPH, is_uni_graph, c) +#define isPRINT_uni(c) generic_uni(isPRINT, is_uni_print, c) +#define isPUNCT_uni(c) generic_uni(isPUNCT, is_uni_punct, c) +#define isXDIGIT_uni(c) generic_uni(isXDIGIT, is_uni_xdigit, c) #define toUPPER_uni(c,s,l) to_uni_upper(c,s,l) #define toTITLE_uni(c,s,l) to_uni_title(c,s,l) #define toLOWER_uni(c,s,l) to_uni_lower(c,s,l) #define toFOLD_uni(c,s,l) to_uni_fold(c,s,l) -#define isPSXSPC_uni(c) (isSPACE_uni(c) ||(c) == '\f') +/* Posix and regular space differ only in U+000B, which is in Latin1 */ +#define isPSXSPC_uni(c) ((c) < 256 ? isPSXSPC_L1(c) : isSPACE_uni(c)) #define isBLANK_uni(c) isBLANK(c) /* could be wrong */ #define isALNUM_LC_uvchr(c) (c < 256 ? isALNUM_LC(c) : is_uni_alnum_lc(c)) @@ -882,44 +936,75 @@ EXTCONST U32 PL_charclass[]; #define isPSXSPC_LC_uni(c) (isSPACE_LC_uni(c) ||(c) == '\f') #define isBLANK_LC_uni(c) isBLANK(c) /* could be wrong */ -#define isALNUM_utf8(p) is_utf8_alnum(p) +/* For use in the macros just below. If the input is ASCII, use the ASCII (_A) + * version of the macro; if the input is in the upper Latin1 range, use the + * Latin1 (_L1) version of the macro, after converting from utf8; otherwise use + * the function. This relies on the fact that ASCII characters have the same + * representation whether utf8 or not */ +#define generic_utf8(macro, function, p) (isASCII(*(p)) \ + ? CAT2(CAT2(macro,_),A)(*(p)) \ + : (UTF8_IS_DOWNGRADEABLE_START(*(p))) \ + ? CAT2(macro, _L1) \ + (TWO_BYTE_UTF8_TO_UNI(*(p), \ + *((p)+1))) \ + : function(p)) + +/* Note that all assume that the utf8 has been validated, and ignore 'use + * bytes' */ + +#define isALNUM_utf8(p) generic_utf8(isWORDCHAR, is_utf8_alnum, p) /* To prevent S_scan_word in toke.c from hanging, we have to make sure that * IDFIRST is an alnum. See - * http://rt.perl.org/rt3/Ticket/Display.html?id=74022 - * for more detail than you ever wanted to know about. This used to be not the - * XID version, but we decided to go with the more modern Unicode definition */ -#define isIDFIRST_utf8(p) (is_utf8_xidfirst(p) && is_utf8_alnum(p)) -#define isIDCONT_utf8(p) is_utf8_xidcont(p) -#define isALPHA_utf8(p) is_utf8_alpha(p) -#define isSPACE_utf8(p) is_utf8_space(p) -#define isDIGIT_utf8(p) is_utf8_digit(p) -#define isUPPER_utf8(p) is_utf8_upper(p) -#define isLOWER_utf8(p) is_utf8_lower(p) -#define isASCII_utf8(p) is_utf8_ascii(p) -#define isCNTRL_utf8(p) is_utf8_cntrl(p) -#define isGRAPH_utf8(p) is_utf8_graph(p) -#define isPRINT_utf8(p) is_utf8_print(p) -#define isPUNCT_utf8(p) is_utf8_punct(p) -#define isXDIGIT_utf8(p) is_utf8_xdigit(p) + * http://rt.perl.org/rt3/Ticket/Display.html?id=74022 for more detail than you + * ever wanted to know about. XXX It is unclear if this should extend to + * isIDFIRST_uni() which it hasn't so far. (In the ASCII range, there isn't a + * difference.) This used to be not the XID version, but we decided to go with + * the more modern Unicode definition */ +#define isIDFIRST_utf8(p) (isASCII(*(p)) \ + ? isIDFIRST_A(*(p)) \ + : (UTF8_IS_DOWNGRADEABLE_START(*(p))) \ + ? isIDFIRST_L1(TWO_BYTE_UTF8_TO_UNI(*(p), \ + *((p)+1)))\ + : Perl__is_utf8__perl_idstart(aTHX_ p)) +#define isIDCONT_utf8(p) generic_utf8(isWORDCHAR, is_utf8_xidcont, p) +#define isALPHA_utf8(p) generic_utf8(isALPHA, is_utf8_alpha, p) +#define isSPACE_utf8(p) generic_utf8(isSPACE, is_utf8_space, p) +#define isDIGIT_utf8(p) generic_utf8(isDIGIT, is_utf8_digit, p) +#define isUPPER_utf8(p) generic_utf8(isUPPER, is_utf8_upper, p) +#define isLOWER_utf8(p) generic_utf8(isLOWER, is_utf8_lower, p) +/* Because ASCII is invariant under utf8, the non-utf8 macro works */ +#define isASCII_utf8(p) isASCII(p) +#define isCNTRL_utf8(p) generic_utf8(isCNTRL, is_utf8_cntrl, p) +#define isGRAPH_utf8(p) generic_utf8(isGRAPH, is_utf8_graph, p) +#define isPRINT_utf8(p) generic_utf8(isPRINT, is_utf8_print, p) +#define isPUNCT_utf8(p) generic_utf8(isPUNCT, is_utf8_punct, p) +#define isXDIGIT_utf8(p) generic_utf8(isXDIGIT, is_utf8_xdigit, p) #define toUPPER_utf8(p,s,l) to_utf8_upper(p,s,l) #define toTITLE_utf8(p,s,l) to_utf8_title(p,s,l) #define toLOWER_utf8(p,s,l) to_utf8_lower(p,s,l) -#define isPSXSPC_utf8(c) (isSPACE_utf8(c) ||(c) == '\f') +/* Posix and regular space differ only in U+000B, which is in ASCII (and hence + * Latin1 */ +#define isPSXSPC_utf8(p) ((isASCII(*(p))) \ + ? isPSXSPC_A(*(p)) \ + : (UTF8_IS_DOWNGRADEABLE_START(*(p)) \ + ? isPSXSPC_L1(TWO_BYTE_UTF8_TO_UNI(*(p), \ + *((p)+1)))\ + : isSPACE_utf8(p))) #define isBLANK_utf8(c) isBLANK(c) /* could be wrong */ -#define isALNUM_LC_utf8(p) isALNUM_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isIDFIRST_LC_utf8(p) isIDFIRST_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isALPHA_LC_utf8(p) isALPHA_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isSPACE_LC_utf8(p) isSPACE_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isDIGIT_LC_utf8(p) isDIGIT_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isUPPER_LC_utf8(p) isUPPER_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isLOWER_LC_utf8(p) isLOWER_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isALNUMC_LC_utf8(p) isALNUMC_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isCNTRL_LC_utf8(p) isCNTRL_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isGRAPH_LC_utf8(p) isGRAPH_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isPRINT_LC_utf8(p) isPRINT_LC_uvchr(utf8_to_uvchr(p, 0)) -#define isPUNCT_LC_utf8(p) isPUNCT_LC_uvchr(utf8_to_uvchr(p, 0)) +#define isALNUM_LC_utf8(p) isALNUM_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isIDFIRST_LC_utf8(p) isIDFIRST_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isALPHA_LC_utf8(p) isALPHA_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isSPACE_LC_utf8(p) isSPACE_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isDIGIT_LC_utf8(p) isDIGIT_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isUPPER_LC_utf8(p) isUPPER_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isLOWER_LC_utf8(p) isLOWER_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isALNUMC_LC_utf8(p) isALNUMC_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isCNTRL_LC_utf8(p) isCNTRL_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isGRAPH_LC_utf8(p) isGRAPH_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isPRINT_LC_utf8(p) isPRINT_LC_uvchr(valid_utf8_to_uvchr(p, 0)) +#define isPUNCT_LC_utf8(p) isPUNCT_LC_uvchr(valid_utf8_to_uvchr(p, 0)) #define isPSXSPC_LC_utf8(c) (isSPACE_LC_utf8(c) ||(c) == '\f') #define isBLANK_LC_utf8(c) isBLANK(c) /* could be wrong */ @@ -954,7 +1039,7 @@ The XSUB-writer's interface to the C C function. In 5.9.3, Newx() and friends replace the older New() API, and drops the first parameter, I, a debug aid which allowed callers to identify themselves. This aid has been superseded by a new build option, -PERL_MEM_LOG (see L). The older API is still +PERL_MEM_LOG (see L). The older API is still there for use in XS modules supporting older perls. =for apidoc Am|void|Newxc|void* ptr|int nitems|type|cast diff --git a/Master/tlpkg/tlperl/lib/CORE/hv.h b/Master/tlpkg/tlperl/lib/CORE/hv.h index eae1e70df65..05245d58a7f 100644 --- a/Master/tlpkg/tlperl/lib/CORE/hv.h +++ b/Master/tlpkg/tlperl/lib/CORE/hv.h @@ -127,30 +127,23 @@ struct xpvhv { # define PERL_HASH_SEED 0 # endif #endif -#define PERL_HASH(hash,str,len) \ - STMT_START { \ - register const char * const s_PeRlHaSh_tmp = str; \ - register const unsigned char *s_PeRlHaSh = (const unsigned char *)s_PeRlHaSh_tmp; \ - register I32 i_PeRlHaSh = len; \ - register U32 hash_PeRlHaSh = PERL_HASH_SEED; \ - while (i_PeRlHaSh--) { \ - hash_PeRlHaSh += *s_PeRlHaSh++; \ - hash_PeRlHaSh += (hash_PeRlHaSh << 10); \ - hash_PeRlHaSh ^= (hash_PeRlHaSh >> 6); \ - } \ - hash_PeRlHaSh += (hash_PeRlHaSh << 3); \ - hash_PeRlHaSh ^= (hash_PeRlHaSh >> 11); \ - (hash) = (hash_PeRlHaSh + (hash_PeRlHaSh << 15)); \ - } STMT_END + +#define PERL_HASH(hash,str,len) PERL_HASH_INTERNAL_(hash,str,len,0) /* Only hv.c and mod_perl should be doing this. */ #ifdef PERL_HASH_INTERNAL_ACCESS -#define PERL_HASH_INTERNAL(hash,str,len) \ +#define PERL_HASH_INTERNAL(hash,str,len) PERL_HASH_INTERNAL_(hash,str,len,1) +#endif + +/* Common base for PERL_HASH and PERL_HASH_INTERNAL that parameterises + * the source of the seed. Not for direct use outside of hv.c. */ + +#define PERL_HASH_INTERNAL_(hash,str,len,internal) \ STMT_START { \ register const char * const s_PeRlHaSh_tmp = str; \ register const unsigned char *s_PeRlHaSh = (const unsigned char *)s_PeRlHaSh_tmp; \ register I32 i_PeRlHaSh = len; \ - register U32 hash_PeRlHaSh = PL_rehash_seed; \ + register U32 hash_PeRlHaSh = (internal ? PL_rehash_seed : PERL_HASH_SEED); \ while (i_PeRlHaSh--) { \ hash_PeRlHaSh += *s_PeRlHaSh++; \ hash_PeRlHaSh += (hash_PeRlHaSh << 10); \ @@ -160,7 +153,6 @@ struct xpvhv { hash_PeRlHaSh ^= (hash_PeRlHaSh >> 11); \ (hash) = (hash_PeRlHaSh + (hash_PeRlHaSh << 15)); \ } STMT_END -#endif /* =head1 Hash Manipulation Functions @@ -183,6 +175,12 @@ Null HV pointer. Returns the package name of a stash, or NULL if C isn't a stash. See C, C. +=for apidoc Am|STRLEN|HvNAMELEN|HV *stash +Returns the length of the stash's name. + +=for apidoc Am|unsigned char|HvNAMEUTF8|HV *stash +Returns true if the name is in UTF8 encoding. + =for apidoc Am|char*|HvENAME|HV* stash Returns the effective name of a stash, or NULL if there is none. The effective name represents a location in the symbol table where this stash @@ -191,6 +189,12 @@ A stash that is no longer in the symbol table has no effective name. This name is preferable to C for use in MRO linearisations and isa caches. +=for apidoc Am|STRLEN|HvENAMELEN|HV *stash +Returns the length of the stash's effective name. + +=for apidoc Am|unsigned char|HvENAMEUTF8|HV *stash +Returns true if the effective name is in UTF8 encoding. + =for apidoc Am|void*|HeKEY|HE* he Returns the actual pointer stored in the key slot of the hash entry. The pointer may be either C or C, depending on the value of @@ -266,7 +270,9 @@ C. #define HvRITER_get(hv) (SvOOK(hv) ? HvAUX(hv)->xhv_riter : -1) #define HvEITER_get(hv) (SvOOK(hv) ? HvAUX(hv)->xhv_eiter : NULL) #define HvNAME(hv) HvNAME_get(hv) +#define HvNAMELEN(hv) HvNAMELEN_get(hv) #define HvENAME(hv) HvENAME_get(hv) +#define HvENAMELEN(hv) HvENAMELEN_get(hv) /* Checking that hv is a valid package stash is the caller's responsibility */ @@ -274,8 +280,6 @@ C. ? HvAUX(hv)->xhv_mro_meta \ : Perl_mro_meta_init(aTHX_ hv)) -/* FIXME - all of these should use a UTF8 aware API, which should also involve - getting the length. */ #define HvNAME_HEK_NN(hv) \ ( \ HvAUX(hv)->xhv_name_count \ @@ -291,6 +295,9 @@ C. #define HvNAMELEN_get(hv) \ ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ ? HEK_LEN(HvNAME_HEK_NN(hv)) : 0) +#define HvNAMEUTF8(hv) \ + ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ + ? HEK_UTF8(HvNAME_HEK_NN(hv)) : 0) #define HvENAME_HEK_NN(hv) \ ( \ HvAUX(hv)->xhv_name_count > 0 ? HvAUX(hv)->xhv_name_u.xhvnameu_names[0] : \ @@ -301,11 +308,14 @@ C. #define HvENAME_HEK(hv) \ (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvENAME_HEK_NN(hv) : NULL) #define HvENAME_get(hv) \ - ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvENAME_HEK_NN(hv)) \ + ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \ ? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL) #define HvENAMELEN_get(hv) \ - ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvENAME_HEK_NN(hv)) \ + ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \ ? HEK_LEN(HvENAME_HEK_NN(hv)) : 0) +#define HvENAMEUTF8(hv) \ + ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \ + ? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0) /* the number of keys (including any placeholders) */ #define XHvTOTALKEYS(xhv) ((xhv)->xhv_keys) @@ -442,9 +452,8 @@ C. #define hv_magic(hv, gv, how) sv_magic(MUTABLE_SV(hv), MUTABLE_SV(gv), how, NULL, 0) #define hv_undef(hv) Perl_hv_undef_flags(aTHX_ hv, 0) -/* available as a function in hv.c */ -#define Perl_sharepvn(sv, len, hash) HEK_KEY(share_hek(sv, len, hash)) -#define sharepvn(sv, len, hash) Perl_sharepvn(sv, len, hash) +#define Perl_sharepvn(pv, len, hash) HEK_KEY(share_hek(pv, len, hash)) +#define sharepvn(pv, len, hash) Perl_sharepvn(pv, len, hash) #define share_hek_hek(hek) \ (++(((struct shared_he *)(((char *)hek) \ @@ -500,6 +509,9 @@ struct refcounted_he; /* flags for the refcounted_he API */ #define REFCOUNTED_HE_KEY_UTF8 0x00000001 +#ifdef PERL_CORE +# define REFCOUNTED_HE_EXISTS 0x00000002 +#endif #ifdef PERL_CORE diff --git a/Master/tlpkg/tlperl/lib/CORE/intrpvar.h b/Master/tlpkg/tlperl/lib/CORE/intrpvar.h index 824bf20820b..cc9e46ededd 100644 --- a/Master/tlpkg/tlperl/lib/CORE/intrpvar.h +++ b/Master/tlpkg/tlperl/lib/CORE/intrpvar.h @@ -17,11 +17,9 @@ * Don't forget to re-run regen/embed.pl to propagate changes! */ -/* New variables must be added to the very end for binary compatibility. - * XSUB.h provides wrapper functions via perlapi.h that make this - * irrelevant, but not all code may be expected to #include XSUB.h. */ +/* New variables must be added to the very end for binary compatibility. */ -/* Don't forget to add your variable also to perl_clone()! */ +/* Don't forget to add your variable also to perl_clone()! (in sv.c) */ /* The 'I' prefix is only needed for vars that need appropriate #defines * generated when built with or without MULTIPLICITY. It is also used @@ -32,43 +30,43 @@ * * Important ones in the first cache line (if alignment is done right) */ -PERLVAR(Istack_sp, SV **) /* top of the stack */ +PERLVAR(I, stack_sp, SV **) /* top of the stack */ #ifdef OP_IN_REGISTER -PERLVAR(Iopsave, OP *) +PERLVAR(I, opsave, OP *) #else -PERLVAR(Iop, OP *) /* currently executing op */ +PERLVAR(I, op, OP *) /* currently executing op */ #endif -PERLVAR(Icurpad, SV **) /* active pad (lexicals+tmps) */ +PERLVAR(I, curpad, SV **) /* active pad (lexicals+tmps) */ -PERLVAR(Istack_base, SV **) -PERLVAR(Istack_max, SV **) +PERLVAR(I, stack_base, SV **) +PERLVAR(I, stack_max, SV **) -PERLVAR(Iscopestack, I32 *) /* scopes we've ENTERed */ +PERLVAR(I, scopestack, I32 *) /* scopes we've ENTERed */ /* name of the scopes we've ENTERed. Only used with -DDEBUGGING, but needs to be present always, as -DDEUBGGING must be binary compatible with non. */ -PERLVARI(Iscopestack_name, const char * *, NULL) -PERLVAR(Iscopestack_ix, I32) -PERLVAR(Iscopestack_max,I32) +PERLVARI(I, scopestack_name, const char * *, NULL) +PERLVAR(I, scopestack_ix, I32) +PERLVAR(I, scopestack_max, I32) -PERLVAR(Isavestack, ANY *) /* items that need to be restored when +PERLVAR(I, savestack, ANY *) /* items that need to be restored when LEAVEing scopes we've ENTERed */ -PERLVAR(Isavestack_ix, I32) -PERLVAR(Isavestack_max, I32) - -PERLVAR(Itmps_stack, SV **) /* mortals we've made */ -PERLVARI(Itmps_ix, I32, -1) -PERLVARI(Itmps_floor, I32, -1) -PERLVAR(Itmps_max, I32) -PERLVAR(Imodcount, I32) /* how much op_lvalue()ification in +PERLVAR(I, savestack_ix, I32) +PERLVAR(I, savestack_max, I32) + +PERLVAR(I, tmps_stack, SV **) /* mortals we've made */ +PERLVARI(I, tmps_ix, I32, -1) +PERLVARI(I, tmps_floor, I32, -1) +PERLVAR(I, tmps_max, I32) +PERLVAR(I, modcount, I32) /* how much op_lvalue()ification in assignment? */ -PERLVAR(Imarkstack, I32 *) /* stack_sp locations we're +PERLVAR(I, markstack, I32 *) /* stack_sp locations we're remembering */ -PERLVAR(Imarkstack_ptr, I32 *) -PERLVAR(Imarkstack_max, I32 *) +PERLVAR(I, markstack_ptr, I32 *) +PERLVAR(I, markstack_max, I32 *) -PERLVAR(ISv, SV *) /* used to hold temporary values */ -PERLVAR(IXpv, XPV *) /* used to hold temporary values */ +PERLVAR(I, Sv, SV *) /* used to hold temporary values */ +PERLVAR(I, Xpv, XPV *) /* used to hold temporary values */ /* =for apidoc Amn|STRLEN|PL_na @@ -81,21 +79,21 @@ C macro. =cut */ -PERLVAR(Ina, STRLEN) /* for use in SvPV when length is +PERLVAR(I, na, STRLEN) /* for use in SvPV when length is Not Applicable */ /* stat stuff */ -PERLVAR(Istatbuf, Stat_t) -PERLVAR(Istatcache, Stat_t) /* _ */ -PERLVAR(Istatgv, GV *) -PERLVARI(Istatname, SV *, NULL) +PERLVAR(I, statbuf, Stat_t) +PERLVAR(I, statcache, Stat_t) /* _ */ +PERLVAR(I, statgv, GV *) +PERLVARI(I, statname, SV *, NULL) #ifdef HAS_TIMES -PERLVAR(Itimesbuf, struct tms) +PERLVAR(I, timesbuf, struct tms) #endif /* Fields used by magic variables such as $@, $/ and so on */ -PERLVAR(Icurpm, PMOP *) /* what to do \ interps in REs from */ +PERLVAR(I, curpm, PMOP *) /* what to do \ interps in REs from */ /* =for apidoc mn|SV*|PL_rs @@ -113,64 +111,60 @@ The glob containing the output field separator - C<*,> in Perl space. =cut */ -PERLVAR(Irs, SV *) /* input record separator $/ */ -PERLVAR(Ilast_in_gv, GV *) /* GV used in last */ -PERLVAR(Iofsgv, GV *) /* GV of output field separator *, */ -PERLVAR(Idefoutgv, GV *) /* default FH for output */ -PERLVARI(Ichopset, const char *, " \n-") /* $: */ -PERLVAR(Iformtarget, SV *) -PERLVAR(Ibodytarget, SV *) -PERLVAR(Itoptarget, SV *) +PERLVAR(I, rs, SV *) /* input record separator $/ */ +PERLVAR(I, last_in_gv, GV *) /* GV used in last */ +PERLVAR(I, ofsgv, GV *) /* GV of output field separator *, */ +PERLVAR(I, defoutgv, GV *) /* default FH for output */ +PERLVARI(I, chopset, const char *, " \n-") /* $: */ +PERLVAR(I, formtarget, SV *) +PERLVAR(I, bodytarget, SV *) +PERLVAR(I, toptarget, SV *) /* Stashes */ -PERLVAR(Idefstash, HV *) /* main symbol table */ -PERLVAR(Icurstash, HV *) /* symbol table for current package */ - -PERLVAR(Irestartop, OP *) /* propagating an error from croak? */ -PERLVAR(Irestartjmpenv, JMPENV *) /* target frame for longjmp in die */ -PERLVAR(Icurcop, COP *) -PERLVAR(Icurstack, AV *) /* THE STACK */ -PERLVAR(Icurstackinfo, PERL_SI *) /* current stack + context */ -PERLVAR(Imainstack, AV *) /* the stack when nothing funny is +PERLVAR(I, defstash, HV *) /* main symbol table */ +PERLVAR(I, curstash, HV *) /* symbol table for current package */ + +PERLVAR(I, restartop, OP *) /* propagating an error from croak? */ +PERLVAR(I, restartjmpenv, JMPENV *) /* target frame for longjmp in die */ +PERLVAR(I, curcop, COP *) +PERLVAR(I, curstack, AV *) /* THE STACK */ +PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */ +PERLVAR(I, mainstack, AV *) /* the stack when nothing funny is happening */ -PERLVAR(Itop_env, JMPENV *) /* ptr to current sigjmp environment */ -PERLVAR(Istart_env, JMPENV) /* empty startup sigjmp environment */ -PERLVARI(Ierrors, SV *, NULL) /* outstanding queued errors */ +PERLVAR(I, top_env, JMPENV *) /* ptr to current sigjmp environment */ +PERLVAR(I, start_env, JMPENV) /* empty startup sigjmp environment */ +PERLVARI(I, errors, SV *, NULL) /* outstanding queued errors */ /* statics "owned" by various functions */ -PERLVAR(Ihv_fetch_ent_mh, HE*) /* owned by hv_fetch_ent() */ +PERLVAR(I, hv_fetch_ent_mh, HE*) /* owned by hv_fetch_ent() */ -PERLVAR(Ilastgotoprobe, OP*) /* from pp_ctl.c */ +PERLVAR(I, lastgotoprobe, OP*) /* from pp_ctl.c */ /* sort stuff */ -PERLVAR(Isortcop, OP *) /* user defined sort routine */ -PERLVAR(Isortstash, HV *) /* which is in some package or other */ -PERLVAR(Ifirstgv, GV *) /* $a */ -PERLVAR(Isecondgv, GV *) /* $b */ +PERLVAR(I, sortcop, OP *) /* user defined sort routine */ +PERLVAR(I, sortstash, HV *) /* which is in some package or other */ +PERLVAR(I, firstgv, GV *) /* $a */ +PERLVAR(I, secondgv, GV *) /* $b */ /* float buffer */ -PERLVAR(Iefloatbuf, char *) -PERLVAR(Iefloatsize, STRLEN) +PERLVAR(I, efloatbuf, char *) +PERLVAR(I, efloatsize, STRLEN) /* regex stuff */ -PERLVAR(Iscreamfirst, I32 *) -PERLVAR(Iscreamnext, I32 *) -PERLVAR(Ilastscream, SV *) - -PERLVAR(Ireg_state, struct re_save_state) +PERLVAR(I, reg_state, struct re_save_state) -PERLVAR(Iregdummy, regnode) /* from regcomp.c */ +PERLVAR(I, regdummy, regnode) /* from regcomp.c */ -PERLVARI(Idumpindent, U16, 4) /* number of blanks per dump +PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump indentation level */ -PERLVAR(Iutf8locale, bool) /* utf8 locale detected */ -PERLVARI(Irehash_seed_set, bool, FALSE) /* 582 hash initialized? */ +PERLVAR(I, utf8locale, bool) /* utf8 locale detected */ +PERLVARI(I, rehash_seed_set, bool, FALSE) /* 582 hash initialized? */ -PERLVARA(Icolors,6, char *) /* from regcomp.c */ +PERLVARA(I, colors,6, char *) /* from regcomp.c */ /* =for apidoc Amn|peep_t|PL_peepp @@ -193,7 +187,7 @@ convenient to wrap the L hook. =cut */ -PERLVARI(Ipeepp, peep_t, Perl_peep) +PERLVARI(I, peepp, peep_t, Perl_peep) /* =for apidoc Amn|peep_t|PL_rpeepp @@ -217,7 +211,7 @@ to wrap the L hook. =cut */ -PERLVARI(Irpeepp, peep_t, Perl_rpeep) +PERLVARI(I, rpeepp, peep_t, Perl_rpeep) /* =for apidoc Amn|Perl_ophook_t|PL_opfreehook @@ -231,61 +225,62 @@ When you replace this variable, it is considered a good practice to store the po =cut */ -PERLVARI(Iopfreehook, Perl_ophook_t, 0) /* op_free() hook */ +PERLVARI(I, opfreehook, Perl_ophook_t, 0) /* op_free() hook */ -PERLVARI(Imaxscream, I32, -1) -PERLVARI(Ireginterp_cnt,I32, 0) /* Whether "Regexp" was interpolated. */ -PERLVARI(Iwatchaddr, char **, 0) -PERLVAR(Iwatchok, char *) +PERLVARI(I, watchaddr, char **, 0) +PERLVAR(I, watchok, char *) /* the currently active slab in a chain of slabs of regmatch states, * and the currently active state within that slab */ -PERLVARI(Iregmatch_slab, regmatch_slab *, NULL) -PERLVAR(Iregmatch_state, regmatch_state *) +PERLVARI(I, regmatch_slab, regmatch_slab *, NULL) +PERLVAR(I, regmatch_state, regmatch_state *) /* Put anything new that is pointer aligned here. */ -PERLVAR(Idelaymagic, U16) /* ($<,$>) = ... */ -PERLVAR(Ilocalizing, U8) /* are we processing a local() list? */ -PERLVAR(Icolorset, bool) /* from regcomp.c */ -PERLVAR(Iin_eval, U8) /* trap "fatal" errors? */ -PERLVAR(Itainted, bool) /* using variables controlled by $< */ - -/* current phase the interpreter is in */ -PERLVARI(Iphase, enum perl_phase, PERL_PHASE_CONSTRUCT) +PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */ +PERLVAR(I, localizing, U8) /* are we processing a local() list? */ +PERLVAR(I, colorset, bool) /* from regcomp.c */ +PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */ +PERLVAR(I, tainted, bool) /* using variables controlled by $< */ +PERLVAR(I, tainting, bool) /* doing taint checks */ /* This value may be set when embedding for full cleanup */ /* 0=none, 1=full, 2=full with checks */ /* mod_perl is special, and also assigns a meaning -1 */ -PERLVARI(Iperl_destruct_level, signed char, 0) +PERLVARI(I, perl_destruct_level, signed char, 0) + +/* current phase the interpreter is in */ +PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT) + +PERLVAR(I, perldb, U32) -PERLVAR(Iperldb, U32) +PERLVAR(I, signals, U32) /* Using which pre-5.8 signals */ /* pseudo environmental stuff */ -PERLVAR(Iorigargc, int) -PERLVAR(Iorigargv, char **) -PERLVAR(Ienvgv, GV *) -PERLVAR(Iincgv, GV *) -PERLVAR(Ihintgv, GV *) -PERLVAR(Iorigfilename, char *) -PERLVAR(Idiehook, SV *) -PERLVAR(Iwarnhook, SV *) +PERLVAR(I, origargc, int) +PERLVAR(I, origargv, char **) +PERLVAR(I, envgv, GV *) +PERLVAR(I, incgv, GV *) +PERLVAR(I, hintgv, GV *) +PERLVAR(I, origfilename, char *) +PERLVAR(I, diehook, SV *) +PERLVAR(I, warnhook, SV *) /* switches */ -PERLVAR(Ipatchlevel, SV *) -PERLVAR(Iapiversion, SV *) -PERLVAR(Ilocalpatches, const char * const *) -PERLVARI(Isplitstr, const char *, " ") - -PERLVAR(Iminus_c, bool) -PERLVAR(Iminus_n, bool) -PERLVAR(Iminus_p, bool) -PERLVAR(Iminus_l, bool) -PERLVAR(Iminus_a, bool) -PERLVAR(Iminus_F, bool) -PERLVAR(Idoswitches, bool) -PERLVAR(Iminus_E, bool) +PERLVAR(I, patchlevel, SV *) +PERLVAR(I, apiversion, SV *) +PERLVAR(I, localpatches, const char * const *) +PERLVARI(I, splitstr, const char *, " ") + +PERLVAR(I, minus_c, bool) +PERLVAR(I, minus_n, bool) +PERLVAR(I, minus_p, bool) +PERLVAR(I, minus_l, bool) +PERLVAR(I, minus_a, bool) +PERLVAR(I, minus_F, bool) +PERLVAR(I, doswitches, bool) +PERLVAR(I, minus_E, bool) /* @@ -296,52 +291,50 @@ The C variable which corresponds to Perl's $^W warning variable. =cut */ -PERLVAR(Idowarn, U8) - /* Space for a U8 */ -PERLVAR(Isawampersand, bool) /* must save all match strings */ -PERLVAR(Iunsafe, bool) -PERLVAR(Iexit_flags, U8) /* was exit() unexpected, etc. */ -PERLVAR(Isrand_called, bool) -/* Part of internal state, but makes the 16th 1 byte variable in a row. */ -PERLVAR(Itainting, bool) /* doing taint checks */ -PERLVARI(Iin_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */ -PERLVAR(Iinplace, char *) -PERLVAR(Ie_script, SV *) +PERLVAR(I, dowarn, U8) +PERLVAR(I, sawampersand, bool) /* must save all match strings */ +PERLVAR(I, unsafe, bool) +PERLVAR(I, exit_flags, U8) /* was exit() unexpected, etc. */ + +PERLVARI(I, reginterp_cnt, I32, 0) /* Whether "Regexp" was interpolated. */ + +PERLVAR(I, inplace, char *) +PERLVAR(I, e_script, SV *) /* magical thingies */ -PERLVAR(Ibasetime, Time_t) /* $^T */ -PERLVAR(Iformfeed, SV *) /* $^L */ +PERLVAR(I, basetime, Time_t) /* $^T */ +PERLVAR(I, formfeed, SV *) /* $^L */ -PERLVARI(Imaxsysfd, I32, MAXSYSFD) +PERLVARI(I, maxsysfd, I32, MAXSYSFD) /* top fd to pass to subprocesses */ -PERLVAR(Istatusvalue, I32) /* $? */ +PERLVAR(I, statusvalue, I32) /* $? */ #ifdef VMS -PERLVAR(Istatusvalue_vms,U32) +PERLVAR(I, statusvalue_vms, U32) #else -PERLVAR(Istatusvalue_posix,I32) +PERLVAR(I, statusvalue_posix, I32) #endif -PERLVARI(Isig_pending, int,0) /* Number if highest signal pending */ -PERLVAR(Ipsig_pend, int *) /* per-signal "count" of pending */ +PERLVARI(I, sig_pending, int, 0) /* Number if highest signal pending */ +PERLVAR(I, psig_pend, int *) /* per-signal "count" of pending */ /* shortcuts to various I/O objects */ -PERLVAR(Istdingv, GV *) /* *STDIN */ -PERLVAR(Istderrgv, GV *) /* *STDERR */ -PERLVAR(Idefgv, GV *) -PERLVAR(Iargvgv, GV *) /* *ARGV */ -PERLVAR(Iargvoutgv, GV *) /* *ARGVOUT */ -PERLVAR(Iargvout_stack, AV *) +PERLVAR(I, stdingv, GV *) /* *STDIN */ +PERLVAR(I, stderrgv, GV *) /* *STDERR */ +PERLVAR(I, defgv, GV *) +PERLVAR(I, argvgv, GV *) /* *ARGV */ +PERLVAR(I, argvoutgv, GV *) /* *ARGVOUT */ +PERLVAR(I, argvout_stack, AV *) /* shortcuts to regexp stuff */ -PERLVAR(Ireplgv, GV *) /* *^R */ +PERLVAR(I, replgv, GV *) /* *^R */ /* shortcuts to misc objects */ -PERLVAR(Ierrgv, GV *) /* *@ */ +PERLVAR(I, errgv, GV *) /* *@ */ /* shortcuts to debugging objects */ -PERLVAR(IDBgv, GV *) /* *DB::DB */ -PERLVAR(IDBline, GV *) /* *DB::line */ +PERLVAR(I, DBgv, GV *) /* *DB::DB */ +PERLVAR(I, DBline, GV *) /* *DB::line */ /* =for apidoc mn|GV *|PL_DBsub @@ -365,71 +358,71 @@ variable. See C. =cut */ -PERLVAR(IDBsub, GV *) /* *DB::sub */ -PERLVAR(IDBsingle, SV *) /* $DB::single */ -PERLVAR(IDBtrace, SV *) /* $DB::trace */ -PERLVAR(IDBsignal, SV *) /* $DB::signal */ -PERLVAR(Idbargs, AV *) /* args to call listed by caller function */ +PERLVAR(I, DBsub, GV *) /* *DB::sub */ +PERLVAR(I, DBsingle, SV *) /* $DB::single */ +PERLVAR(I, DBtrace, SV *) /* $DB::trace */ +PERLVAR(I, DBsignal, SV *) /* $DB::signal */ +PERLVAR(I, dbargs, AV *) /* args to call listed by caller function */ /* symbol tables */ -PERLVAR(Idebstash, HV *) /* symbol table for perldb package */ -PERLVAR(Iglobalstash, HV *) /* global keyword overrides imported here */ -PERLVAR(Icurstname, SV *) /* name of current package */ -PERLVAR(Ibeginav, AV *) /* names of BEGIN subroutines */ -PERLVAR(Iendav, AV *) /* names of END subroutines */ -PERLVAR(Iunitcheckav, AV *) /* names of UNITCHECK subroutines */ -PERLVAR(Icheckav, AV *) /* names of CHECK subroutines */ -PERLVAR(Iinitav, AV *) /* names of INIT subroutines */ -PERLVAR(Istrtab, HV *) /* shared string table */ -PERLVARI(Isub_generation,U32,1) /* incr to invalidate method cache */ +PERLVAR(I, debstash, HV *) /* symbol table for perldb package */ +PERLVAR(I, globalstash, HV *) /* global keyword overrides imported here */ +PERLVAR(I, curstname, SV *) /* name of current package */ +PERLVAR(I, beginav, AV *) /* names of BEGIN subroutines */ +PERLVAR(I, endav, AV *) /* names of END subroutines */ +PERLVAR(I, unitcheckav, AV *) /* names of UNITCHECK subroutines */ +PERLVAR(I, checkav, AV *) /* names of CHECK subroutines */ +PERLVAR(I, initav, AV *) /* names of INIT subroutines */ +PERLVAR(I, strtab, HV *) /* shared string table */ +PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */ /* funky return mechanisms */ -PERLVAR(Iforkprocess, int) /* so do_open |- can return proc# */ +PERLVAR(I, forkprocess, int) /* so do_open |- can return proc# */ /* memory management */ -PERLVAR(Isv_count, I32) /* how many SV* are currently allocated */ -PERLVAR(Isv_objcount, I32) /* how many objects are currently allocated */ -PERLVAR(Isv_root, SV*) /* storage for SVs belonging to interp */ -PERLVAR(Isv_arenaroot, SV*) /* list of areas for garbage collection */ +PERLVAR(I, sv_count, I32) /* how many SV* are currently allocated */ +PERLVAR(I, sv_objcount, I32) /* how many objects are currently allocated */ +PERLVAR(I, sv_root, SV *) /* storage for SVs belonging to interp */ +PERLVAR(I, sv_arenaroot, SV *) /* list of areas for garbage collection */ /* subprocess state */ -PERLVAR(Ifdpid, AV *) /* keep fd-to-pid mappings for my_popen */ +PERLVAR(I, fdpid, AV *) /* keep fd-to-pid mappings for my_popen */ /* internal state */ -PERLVARI(Iop_mask, char *, NULL) /* masked operations for safe evals */ +PERLVARI(I, op_mask, char *, NULL) /* masked operations for safe evals */ /* current interpreter roots */ -PERLVAR(Imain_cv, CV *) -PERLVAR(Imain_root, OP *) -PERLVAR(Imain_start, OP *) -PERLVAR(Ieval_root, OP *) -PERLVAR(Ieval_start, OP *) +PERLVAR(I, main_cv, CV *) +PERLVAR(I, main_root, OP *) +PERLVAR(I, main_start, OP *) +PERLVAR(I, eval_root, OP *) +PERLVAR(I, eval_start, OP *) /* runtime control stuff */ -PERLVARI(Icurcopdb, COP *, NULL) +PERLVARI(I, curcopdb, COP *, NULL) -PERLVAR(Ifilemode, int) /* so nextargv() can preserve mode */ -PERLVAR(Ilastfd, int) /* what to preserve mode on */ -PERLVAR(Ioldname, char *) /* what to preserve mode on */ -PERLVAR(IArgv, const char **) /* stuff to free from do_aexec, vfork safe */ -PERLVAR(ICmd, char *) /* stuff to free from do_aexec, vfork safe */ +PERLVAR(I, filemode, int) /* so nextargv() can preserve mode */ +PERLVAR(I, lastfd, int) /* what to preserve mode on */ +PERLVAR(I, oldname, char *) /* what to preserve mode on */ +PERLVAR(I, Argv, const char **) /* stuff to free from do_aexec, vfork safe */ +PERLVAR(I, Cmd, char *) /* stuff to free from do_aexec, vfork safe */ /* Elements in this array have ';' appended and are injected as a single line into the tokeniser. You can't put any (literal) newlines into any program you stuff in into this array, as the point where it's injected is expecting a single physical line. */ -PERLVAR(Ipreambleav, AV *) -PERLVAR(Imess_sv, SV *) -PERLVAR(Iors_sv, SV *) /* output record separator $\ */ +PERLVAR(I, preambleav, AV *) +PERLVAR(I, mess_sv, SV *) +PERLVAR(I, ors_sv, SV *) /* output record separator $\ */ /* statics moved here for shared library purposes */ -PERLVARI(Igensym, I32, 0) /* next symbol for getsym() to define */ -PERLVARI(Icv_has_eval, bool, FALSE) /* PL_compcv includes an entereval or similar */ -PERLVAR(Itaint_warn, bool) /* taint warns instead of dying */ -PERLVARI(Ilaststype, U16, OP_STAT) -PERLVARI(Ilaststatval, int, -1) +PERLVARI(I, gensym, I32, 0) /* next symbol for getsym() to define */ +PERLVARI(I, cv_has_eval, bool, FALSE) /* PL_compcv includes an entereval or similar */ +PERLVAR(I, taint_warn, bool) /* taint warns instead of dying */ +PERLVARI(I, laststype, U16, OP_STAT) +PERLVARI(I, laststatval, int, -1) /* interpreter atexit processing */ -PERLVARI(Iexitlistlen, I32, 0) /* length of same */ -PERLVARI(Iexitlist, PerlExitListEntry *, NULL) +PERLVARI(I, exitlistlen, I32, 0) /* length of same */ +PERLVARI(I, exitlist, PerlExitListEntry *, NULL) /* list of exit functions */ /* @@ -444,38 +437,38 @@ prefixed by the package name of the extension that owns the data. =cut */ -PERLVAR(Imodglobal, HV *) /* per-interp module data */ +PERLVAR(I, modglobal, HV *) /* per-interp module data */ /* these used to be in global before 5.004_68 */ -PERLVARI(Iprofiledata, U32 *, NULL) /* table of ops, counts */ +PERLVARI(I, profiledata, U32 *, NULL) /* table of ops, counts */ -PERLVAR(Icompiling, COP) /* compiling/done executing marker */ +PERLVAR(I, compiling, COP) /* compiling/done executing marker */ -PERLVAR(Icompcv, CV *) /* currently compiling subroutine */ -PERLVAR(Icomppad, AV *) /* storage for lexically scoped temporaries */ -PERLVAR(Icomppad_name, AV *) /* variable names for "my" variables */ -PERLVAR(Icomppad_name_fill, I32) /* last "introduced" variable offset */ -PERLVAR(Icomppad_name_floor, I32) /* start of vars in innermost block */ +PERLVAR(I, compcv, CV *) /* currently compiling subroutine */ +PERLVAR(I, comppad, AV *) /* storage for lexically scoped temporaries */ +PERLVAR(I, comppad_name, AV *) /* variable names for "my" variables */ +PERLVAR(I, comppad_name_fill, I32) /* last "introduced" variable offset */ +PERLVAR(I, comppad_name_floor, I32) /* start of vars in innermost block */ #ifdef HAVE_INTERP_INTERN -PERLVAR(Isys_intern, struct interp_intern) +PERLVAR(I, sys_intern, struct interp_intern) /* platform internals */ #endif /* more statics moved here */ -PERLVAR(IDBcv, CV *) /* from perl.c */ -PERLVARI(Igeneration, int, 100) /* from op.c */ +PERLVAR(I, DBcv, CV *) /* from perl.c */ +PERLVARI(I, generation, int, 100) /* from op.c */ -PERLVARI(Iin_clean_objs,bool, FALSE) /* from sv.c */ -PERLVARI(Iin_clean_all, bool, FALSE) /* ptrs to freed SVs now legal */ -PERLVAR(Inomemok, bool) /* let malloc context handle nomem */ -PERLVARI(Isavebegin, bool, FALSE) /* save BEGINs for compiler */ +PERLVARI(I, in_clean_objs,bool, FALSE) /* from sv.c */ +PERLVARI(I, in_clean_all, bool, FALSE) /* ptrs to freed SVs now legal */ +PERLVAR(I, nomemok, bool) /* let malloc context handle nomem */ +PERLVARI(I, savebegin, bool, FALSE) /* save BEGINs for compiler */ -PERLVAR(Iuid, Uid_t) /* current real user id */ -PERLVAR(Ieuid, Uid_t) /* current effective user id */ -PERLVAR(Igid, Gid_t) /* current real group id */ -PERLVAR(Iegid, Gid_t) /* current effective group id */ -PERLVARI(Ian, U32, 0) /* malloc sequence number */ +PERLVAR(I, delaymagic_uid, Uid_t) /* current real user id, only for delaymagic */ +PERLVAR(I, delaymagic_euid, Uid_t) /* current effective user id, only for delaymagic */ +PERLVAR(I, delaymagic_gid, Gid_t) /* current real group id, only for delaymagic */ +PERLVAR(I, delaymagic_egid, Gid_t) /* current effective group id, only for delaymagic */ +PERLVARI(I, an, U32, 0) /* malloc sequence number */ #ifdef DEBUGGING /* exercise wrap-around */ @@ -483,26 +476,26 @@ PERLVARI(Ian, U32, 0) /* malloc sequence number */ #else #define PERL_COP_SEQMAX 0 #endif -PERLVARI(Icop_seqmax, U32, PERL_COP_SEQMAX) /* statement sequence number */ +PERLVARI(I, cop_seqmax, U32, PERL_COP_SEQMAX) /* statement sequence number */ #undef PERL_COP_SEQMAX -PERLVARI(Ievalseq, U32, 0) /* eval sequence number */ -PERLVAR(Iorigalen, U32) -PERLVAR(Iorigenviron, char **) +PERLVARI(I, evalseq, U32, 0) /* eval sequence number */ +PERLVAR(I, origalen, U32) +PERLVAR(I, origenviron, char **) #ifdef PERL_USES_PL_PIDSTATUS -PERLVAR(Ipidstatus, HV *) /* pid-to-status mappings for waitpid */ +PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */ #endif -PERLVAR(Iosname, char *) /* operating system */ +PERLVAR(I, osname, char *) /* operating system */ -PERLVAR(Isighandlerp, Sighandler_t) +PERLVAR(I, sighandlerp, Sighandler_t) -PERLVARA(Ibody_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */ +PERLVARA(I, body_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */ -PERLVAR(Iunicode, U32) /* Unicode features: $ENV{PERL_UNICODE} or -C */ +PERLVAR(I, unicode, U32) /* Unicode features: $ENV{PERL_UNICODE} or -C */ -PERLVARI(Imaxo, int, MAXO) /* maximum number of ops */ +PERLVARI(I, maxo, int, MAXO) /* maximum number of ops */ -PERLVARI(Irunops, runops_proc_t, RUNOPS_DEFAULT) +PERLVARI(I, runops, runops_proc_t, RUNOPS_DEFAULT) /* =for apidoc Amn|SV|PL_sv_undef @@ -519,35 +512,35 @@ C<&PL_sv_yes>. =cut */ -PERLVAR(Isv_undef, SV) -PERLVAR(Isv_no, SV) -PERLVAR(Isv_yes, SV) +PERLVAR(I, sv_undef, SV) +PERLVAR(I, sv_no, SV) +PERLVAR(I, sv_yes, SV) -PERLVAR(Isubname, SV *) /* name of current subroutine */ +PERLVAR(I, subname, SV *) /* name of current subroutine */ -PERLVAR(Isubline, I32) /* line this subroutine began on */ -PERLVAR(Imin_intro_pending, I32) /* start of vars to introduce */ +PERLVAR(I, subline, I32) /* line this subroutine began on */ +PERLVAR(I, min_intro_pending, I32) /* start of vars to introduce */ -PERLVAR(Imax_intro_pending, I32) /* end of vars to introduce */ -PERLVAR(Ipadix, I32) /* max used index in current "register" pad */ +PERLVAR(I, max_intro_pending, I32) /* end of vars to introduce */ +PERLVAR(I, padix, I32) /* max used index in current "register" pad */ -PERLVAR(Ipadix_floor, I32) /* how low may inner block reset padix */ +PERLVAR(I, padix_floor, I32) /* how low may inner block reset padix */ -PERLVAR(Ihints, U32) /* pragma-tic compile-time flags */ +PERLVAR(I, hints, U32) /* pragma-tic compile-time flags */ -PERLVAR(Idebug, VOL U32) /* flags given to -D switch */ +PERLVAR(I, debug, VOL U32) /* flags given to -D switch */ /* Perl_Ibreakable_sub_generation_ptr was too long for VMS, hence "gen" */ -PERLVARI(Ibreakable_sub_gen, U32, 0) +PERLVARI(I, breakable_sub_gen, U32, 0) -PERLVARI(Iamagic_generation, long, 0) +PERLVARI(I, amagic_generation, long, 0) #ifdef USE_LOCALE_COLLATE -PERLVAR(Icollation_name,char *) /* Name of current collation */ -PERLVAR(Icollxfrm_base, Size_t) /* Basic overhead in *xfrm() */ -PERLVARI(Icollxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */ -PERLVARI(Icollation_ix, U32, 0) /* Collation generation index */ -PERLVARI(Icollation_standard, bool, TRUE) +PERLVAR(I, collation_name, char *) /* Name of current collation */ +PERLVAR(I, collxfrm_base, Size_t) /* Basic overhead in *xfrm() */ +PERLVARI(I, collxfrm_mult,Size_t, 2) /* Expansion factor in *xfrm() */ +PERLVARI(I, collation_ix, U32, 0) /* Collation generation index */ +PERLVARI(I, collation_standard, bool, TRUE) /* Assume simple collation */ #endif /* USE_LOCALE_COLLATE */ @@ -557,103 +550,144 @@ PERLVARI(Icollation_standard, bool, TRUE) #else # define PERL___I 1 #endif -PERLVARI(Iutf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */ +PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */ #undef PERL___I #ifdef USE_LOCALE_NUMERIC -PERLVARI(Inumeric_standard, bool, TRUE) +PERLVARI(I, numeric_standard, bool, TRUE) /* Assume simple numerics */ -PERLVARI(Inumeric_local, bool, TRUE) +PERLVARI(I, numeric_local, bool, TRUE) /* Assume local numerics */ -PERLVAR(Inumeric_name, char *) /* Name of current numeric locale */ +PERLVAR(I, numeric_name, char *) /* Name of current numeric locale */ +PERLVAR(I, numeric_radix_sv, SV *) /* The radix separator if not '.' */ + #endif /* !USE_LOCALE_NUMERIC */ -/* utf8 character classes */ -PERLVAR(Iutf8_alnum, SV *) -PERLVAR(Iutf8_ascii, SV *) -PERLVAR(Iutf8_alpha, SV *) -PERLVAR(Iutf8_space, SV *) -PERLVAR(Iutf8_perl_space, SV *) -PERLVAR(Iutf8_perl_word, SV *) -PERLVAR(Iutf8_posix_digit, SV *) -PERLVAR(Iutf8_cntrl, SV *) -PERLVAR(Iutf8_graph, SV *) -PERLVAR(Iutf8_digit, SV *) -PERLVAR(Iutf8_upper, SV *) -PERLVAR(Iutf8_lower, SV *) -PERLVAR(Iutf8_print, SV *) -PERLVAR(Iutf8_punct, SV *) -PERLVAR(Iutf8_xdigit, SV *) -PERLVAR(Iutf8_mark, SV *) -PERLVAR(Iutf8_X_begin, SV *) -PERLVAR(Iutf8_X_extend, SV *) -PERLVAR(Iutf8_X_prepend, SV *) -PERLVAR(Iutf8_X_non_hangul, SV *) -PERLVAR(Iutf8_X_L, SV *) -PERLVAR(Iutf8_X_LV, SV *) -PERLVAR(Iutf8_X_LVT, SV *) -PERLVAR(Iutf8_X_T, SV *) -PERLVAR(Iutf8_X_V, SV *) -PERLVAR(Iutf8_X_LV_LVT_V, SV *) -PERLVAR(Iutf8_toupper, SV *) -PERLVAR(Iutf8_totitle, SV *) -PERLVAR(Iutf8_tolower, SV *) -PERLVAR(Iutf8_tofold, SV *) -PERLVAR(Ilast_swash_hv, HV *) -PERLVAR(Ilast_swash_tmps, U8 *) -PERLVAR(Ilast_swash_slen, STRLEN) -PERLVARA(Ilast_swash_key,10, U8) -PERLVAR(Ilast_swash_klen, U8) /* Only needs to store 0-10 */ +/* Unicode inversion lists */ +PERLVAR(I, ASCII, SV *) +PERLVAR(I, Latin1, SV *) +PERLVAR(I, AboveLatin1, SV *) + +PERLVAR(I, PerlSpace, SV *) +PERLVAR(I, XPerlSpace, SV *) + +PERLVAR(I, L1PosixAlnum,SV *) +PERLVAR(I, PosixAlnum, SV *) + +PERLVAR(I, L1PosixAlpha,SV *) +PERLVAR(I, PosixAlpha, SV *) + +PERLVAR(I, PosixBlank, SV *) +PERLVAR(I, XPosixBlank, SV *) + +PERLVAR(I, L1Cased, SV *) + +PERLVAR(I, PosixCntrl, SV *) +PERLVAR(I, XPosixCntrl, SV *) + +PERLVAR(I, PosixDigit, SV *) + +PERLVAR(I, L1PosixGraph,SV *) +PERLVAR(I, PosixGraph, SV *) + +PERLVAR(I, L1PosixLower,SV *) +PERLVAR(I, PosixLower, SV *) + +PERLVAR(I, L1PosixPrint,SV *) +PERLVAR(I, PosixPrint, SV *) + +PERLVAR(I, L1PosixPunct,SV *) +PERLVAR(I, PosixPunct, SV *) + +PERLVAR(I, PosixSpace, SV *) +PERLVAR(I, XPosixSpace, SV *) + +PERLVAR(I, L1PosixUpper,SV *) +PERLVAR(I, PosixUpper, SV *) + +PERLVAR(I, L1PosixWord, SV *) +PERLVAR(I, PosixWord, SV *) + +PERLVAR(I, PosixXDigit, SV *) +PERLVAR(I, XPosixXDigit, SV *) + +PERLVAR(I, VertSpace, SV *) + +/* utf8 character class swashes */ +PERLVAR(I, utf8_alnum, SV *) +PERLVAR(I, utf8_alpha, SV *) +PERLVAR(I, utf8_space, SV *) +PERLVAR(I, utf8_graph, SV *) +PERLVAR(I, utf8_digit, SV *) +PERLVAR(I, utf8_upper, SV *) +PERLVAR(I, utf8_lower, SV *) +PERLVAR(I, utf8_print, SV *) +PERLVAR(I, utf8_punct, SV *) +PERLVAR(I, utf8_xdigit, SV *) +PERLVAR(I, utf8_mark, SV *) +PERLVAR(I, utf8_X_begin, SV *) +PERLVAR(I, utf8_X_extend, SV *) +PERLVAR(I, utf8_X_prepend, SV *) +PERLVAR(I, utf8_X_non_hangul, SV *) +PERLVAR(I, utf8_X_L, SV *) +PERLVAR(I, utf8_X_LV, SV *) +PERLVAR(I, utf8_X_LVT, SV *) +PERLVAR(I, utf8_X_T, SV *) +PERLVAR(I, utf8_X_V, SV *) +PERLVAR(I, utf8_X_LV_LVT_V, SV *) +PERLVAR(I, utf8_toupper, SV *) +PERLVAR(I, utf8_totitle, SV *) +PERLVAR(I, utf8_tolower, SV *) +PERLVAR(I, utf8_tofold, SV *) +PERLVAR(I, utf8_quotemeta, SV *) +PERLVAR(I, last_swash_hv, HV *) +PERLVAR(I, last_swash_tmps, U8 *) +PERLVAR(I, last_swash_slen, STRLEN) +PERLVARA(I, last_swash_key,12, U8) +PERLVAR(I, last_swash_klen, U8) /* Only needs to store 0-12 */ #ifdef FCRYPT -PERLVARI(Icryptseen, bool, FALSE) /* has fast crypt() been initialized? */ +PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */ #endif -PERLVAR(Ipad_reset_pending, bool) /* reset pad on next attempted alloc */ - -PERLVARI(Iglob_index, int, 0) +PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */ +PERLVAR(I, srand_called, bool) +PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */ - -PERLVAR(Iparser, yy_parser *) /* current parser state */ +PERLVAR(I, parser, yy_parser *) /* current parser state */ /* Array of signal handlers, indexed by signal number, through which the C signal handler dispatches. */ -PERLVAR(Ipsig_ptr, SV**) +PERLVAR(I, psig_ptr, SV **) /* Array of names of signals, indexed by signal number, for (re)use as the first argument to a signal handler. Only one block of memory is allocated for both psig_name and psig_ptr. */ -PERLVAR(Ipsig_name, SV**) +PERLVAR(I, psig_name, SV **) #if defined(PERL_IMPLICIT_SYS) -PERLVAR(IMem, struct IPerlMem*) -PERLVAR(IMemShared, struct IPerlMem*) -PERLVAR(IMemParse, struct IPerlMem*) -PERLVAR(IEnv, struct IPerlEnv*) -PERLVAR(IStdIO, struct IPerlStdIO*) -PERLVAR(ILIO, struct IPerlLIO*) -PERLVAR(IDir, struct IPerlDir*) -PERLVAR(ISock, struct IPerlSock*) -PERLVAR(IProc, struct IPerlProc*) +PERLVAR(I, Mem, struct IPerlMem *) +PERLVAR(I, MemShared, struct IPerlMem *) +PERLVAR(I, MemParse, struct IPerlMem *) +PERLVAR(I, Env, struct IPerlEnv *) +PERLVAR(I, StdIO, struct IPerlStdIO *) +PERLVAR(I, LIO, struct IPerlLIO *) +PERLVAR(I, Dir, struct IPerlDir *) +PERLVAR(I, Sock, struct IPerlSock *) +PERLVAR(I, Proc, struct IPerlProc *) #endif -PERLVAR(Iptr_table, PTR_TBL_t*) -PERLVARI(Ibeginav_save, AV*, NULL) /* save BEGIN{}s when compiling */ - -PERLVAR(Ibody_arenas, void*) /* pointer to list of body-arenas */ - +PERLVAR(I, ptr_table, PTR_TBL_t *) +PERLVARI(I, beginav_save, AV *, NULL) /* save BEGIN{}s when compiling */ -#ifdef USE_LOCALE_NUMERIC - -PERLVAR(Inumeric_radix_sv, SV *) /* The radix separator if not '.' */ +PERLVAR(I, body_arenas, void *) /* pointer to list of body-arenas */ -#endif #if defined(USE_ITHREADS) -PERLVAR(Iregex_pad, SV**) /* Shortcut into the array of +PERLVAR(I, regex_pad, SV **) /* Shortcut into the array of regex_padav */ -PERLVAR(Iregex_padav, AV*) /* All regex objects, indexed via the +PERLVAR(I, regex_padav, AV *) /* All regex objects, indexed via the values in op_pmoffset of pmop. Entry 0 is an SV whose PV is a "packed" list of IVs listing @@ -661,136 +695,134 @@ PERLVAR(Iregex_padav, AV*) /* All regex objects, indexed via the #endif #ifdef USE_REENTRANT_API -PERLVAR(Ireentrant_buffer, REENTR*) /* here we store the _r buffers */ +PERLVAR(I, reentrant_buffer, REENTR *) /* here we store the _r buffers */ #endif -PERLVAR(Icustom_op_names, HV*) /* Names of user defined ops */ -PERLVAR(Icustom_op_descs, HV*) /* Descriptions of user defined ops */ +PERLVAR(I, custom_op_names, HV *) /* Names of user defined ops */ +PERLVAR(I, custom_op_descs, HV *) /* Descriptions of user defined ops */ #ifdef PERLIO_LAYERS -PERLVARI(Iperlio, PerlIOl *,NULL) -PERLVARI(Iknown_layers, PerlIO_list_t *,NULL) -PERLVARI(Idef_layerlist, PerlIO_list_t *,NULL) +PERLVARI(I, perlio, PerlIOl *, NULL) +PERLVARI(I, known_layers, PerlIO_list_t *, NULL) +PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL) #endif -PERLVARI(Iencoding, SV*, NULL) /* character encoding */ - -PERLVAR(Idebug_pad, struct perl_debug_pad) /* always needed because of the re extension */ +PERLVARI(I, encoding, SV *, NULL) /* character encoding */ -PERLVAR(Iutf8_idstart, SV *) -PERLVAR(Iutf8_idcont, SV *) -PERLVAR(Iutf8_xidstart, SV *) -PERLVAR(Iutf8_xidcont, SV *) +PERLVAR(I, debug_pad, struct perl_debug_pad) /* always needed because of the re extension */ -PERLVAR(Isort_RealCmp, SVCOMPARE_t) +PERLVAR(I, utf8_idstart, SV *) +PERLVAR(I, utf8_idcont, SV *) +PERLVAR(I, utf8_xidstart, SV *) +PERLVAR(I, utf8_perl_idstart, SV *) +PERLVAR(I, utf8_xidcont, SV *) -PERLVARI(Icheckav_save, AV*, NULL) /* save CHECK{}s when compiling */ -PERLVARI(Iunitcheckav_save, AV*, NULL) /* save UNITCHECK{}s when compiling */ +PERLVAR(I, sort_RealCmp, SVCOMPARE_t) -PERLVARI(Iclocktick, long, 0) /* this many times() ticks in a second */ +PERLVARI(I, checkav_save, AV *, NULL) /* save CHECK{}s when compiling */ +PERLVARI(I, unitcheckav_save, AV *, NULL) + /* save UNITCHECK{}s when compiling */ -PERLVAR(Isignals, U32) /* Using which pre-5.8 signals */ +PERLVARI(I, clocktick, long, 0) /* this many times() ticks in a second */ -PERLVAR(Ireentrant_retint, int) /* Integer return value from reentrant functions */ - -PERLVAR(Istashcache, HV *) /* Cache to speed up S_method_common */ +PERLVAR(I, stashcache, HV *) /* Cache to speed up S_method_common */ /* Hooks to shared SVs and locks. */ -PERLVARI(Isharehook, share_proc_t, Perl_sv_nosharing) -PERLVARI(Ilockhook, share_proc_t, Perl_sv_nosharing) +PERLVARI(I, sharehook, share_proc_t, Perl_sv_nosharing) +PERLVARI(I, lockhook, share_proc_t, Perl_sv_nosharing) #ifdef NO_MATHOMS # define PERL_UNLOCK_HOOK Perl_sv_nosharing #else /* This reference ensures that the mathoms are linked with perl */ # define PERL_UNLOCK_HOOK Perl_sv_nounlocking #endif -PERLVARI(Iunlockhook, share_proc_t, PERL_UNLOCK_HOOK) +PERLVARI(I, unlockhook, share_proc_t, PERL_UNLOCK_HOOK) + +PERLVARI(I, threadhook, thrhook_proc_t, Perl_nothreadhook) -PERLVARI(Ithreadhook, thrhook_proc_t, Perl_nothreadhook) +/* Can shared object be destroyed */ +PERLVARI(I, destroyhook, destroyable_proc_t, Perl_sv_destroyable) #ifndef PERL_MICRO -PERLVARI(Isignalhook, despatch_signals_proc_t, Perl_despatch_signals) +PERLVARI(I, signalhook, despatch_signals_proc_t, Perl_despatch_signals) #endif -PERLVARI(Ihash_seed, UV, 0) /* Hash initializer */ +PERLVARI(I, hash_seed, UV, 0) /* Hash initializer */ + +PERLVARI(I, rehash_seed, UV, 0) /* 582 hash initializer */ + +PERLVARI(I, isarev, HV *, NULL) /* Reverse map of @ISA dependencies */ + +/* Register of known Method Resolution Orders. + What this actually points to is an implementation detail (it may change to + a structure incorporating a reference count - use mro_get_from_name to + retrieve a C */ +PERLVAR(I, registered_mros, HV *) + +/* Compile-time block start/end hooks */ +PERLVAR(I, blockhooks, AV *) + +/* Everything that folds to a given character, for case insensitivity regex + * matching */ +PERLVARI(I, utf8_foldclosures, HV *, NULL) + +/* List of characters that participate in folds (except marks, etc in + * multi-char folds) */ +PERLVARI(I, utf8_foldable, SV *, NULL) + +PERLVAR(I, custom_ops, HV *) /* custom op registrations */ -PERLVARI(Irehash_seed, UV, 0) /* 582 hash initializer */ +/* Hook for File::Glob */ +PERLVARI(I, globhook, globhook_t, NULL) -PERLVARI(Iisarev, HV*, NULL) /* Reverse map of @ISA dependencies */ +PERLVARI(I, glob_index, int, 0) +PERLVAR(I, reentrant_retint, int) /* Integer return value from reentrant functions */ /* The last unconditional member of the interpreter structure when 5.10.0 was released. The offset of the end of this is baked into a global variable in any shared perl library which will allow a sanity test in future perl releases. */ -#define PERL_LAST_5_10_0_INTERP_MEMBER Iisarev +#define PERL_LAST_5_16_0_INTERP_MEMBER Ireentrant_retint #ifdef PERL_IMPLICIT_CONTEXT -PERLVARI(Imy_cxt_size, int, 0) /* size of PL_my_cxt_list */ -PERLVARI(Imy_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */ +PERLVARI(I, my_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */ +PERLVARI(I, my_cxt_size, int, 0) /* size of PL_my_cxt_list */ # ifdef PERL_GLOBAL_STRUCT_PRIVATE -PERLVARI(Imy_cxt_keys, const char **, NULL) /* per-module array of pointers to MY_CXT_KEY constants */ +PERLVARI(I, my_cxt_keys, const char **, NULL) /* per-module array of pointers to MY_CXT_KEY constants */ # endif #endif #ifdef PERL_TRACK_MEMPOOL /* For use with the memory debugging code in util.c */ -PERLVAR(Imemory_debug_header, struct perl_memory_debug_header) +PERLVAR(I, memory_debug_header, struct perl_memory_debug_header) #endif #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP /* File descriptor to talk to the child which dumps scalars. */ -PERLVARI(Idumper_fd, int, -1) -#endif - -/* Stores the PPID */ -#ifdef THREADS_HAVE_PIDS -PERLVARI(Ippid, IV, 0) +PERLVARI(I, dumper_fd, int, -1) #endif #ifdef PERL_MAD -PERLVARI(Imadskills, bool, FALSE) /* preserve all syntactic info */ +PERLVARI(I, madskills, bool, FALSE) /* preserve all syntactic info */ /* (MAD = Misc Attribute Decoration) */ -PERLVARI(Ixmlfp, PerlIO *,NULL) +PERLVARI(I, xmlfp, PerlIO *, NULL) #endif #ifdef PL_OP_SLAB_ALLOC -PERLVAR(IOpPtr,I32 **) -PERLVARI(IOpSpace,I32,0) -PERLVAR(IOpSlab,I32 *) +PERLVAR(I, OpPtr, I32 **) +PERLVARI(I, OpSpace, I32, 0) +PERLVAR(I, OpSlab, I32 *) #endif #ifdef PERL_DEBUG_READONLY_OPS -PERLVARI(Islabs, I32**, NULL) /* Array of slabs that have been allocated */ -PERLVARI(Islab_count, U32, 0) /* Size of the array */ +PERLVARI(I, slabs, I32**, NULL) /* Array of slabs that have been allocated */ +PERLVARI(I, slab_count, U32, 0) /* Size of the array */ #endif -/* Can shared object be destroyed */ -PERLVARI(Idestroyhook, destroyable_proc_t, Perl_sv_destroyable) - #ifdef DEBUG_LEAKING_SCALARS -PERLVARI(Isv_serial, U32, 0) /* SV serial number, used in sv.c */ +PERLVARI(I, sv_serial, U32, 0) /* SV serial number, used in sv.c */ #endif -/* Register of known Method Resolution Orders. - What this actually points to is an implementation detail (it may change to - a structure incorporating a reference count - use mro_get_from_name to - retrieve a C */ -PERLVAR(Iregistered_mros, HV *) - -/* Compile-time block start/end hooks */ -PERLVAR(Iblockhooks, AV *) - - -/* Everything that folds to a given character, for case insensitivity regex - * matching */ -PERLVARI(Iutf8_foldclosures, HV *, NULL) - -/* List of characters that participate in folds (except marks, etc in - * multi-char folds) */ -PERLVARI(Iutf8_foldable, HV *, NULL) - -PERLVAR(Icustom_ops, HV *) /* custom op registrations */ - /* If you are adding a U8 or U16, check to see if there are 'Space' comments * above on where there are gaps which currently will be structure padding. */ diff --git a/Master/tlpkg/tlperl/lib/CORE/keywords.h b/Master/tlpkg/tlperl/lib/CORE/keywords.h index b821121780b..5ebde874ff7 100644 --- a/Master/tlpkg/tlperl/lib/CORE/keywords.h +++ b/Master/tlpkg/tlperl/lib/CORE/keywords.h @@ -19,254 +19,257 @@ #define KEY___PACKAGE__ 3 #define KEY___DATA__ 4 #define KEY___END__ 5 -#define KEY_AUTOLOAD 6 -#define KEY_BEGIN 7 -#define KEY_UNITCHECK 8 -#define KEY_CORE 9 -#define KEY_DESTROY 10 -#define KEY_END 11 -#define KEY_INIT 12 -#define KEY_CHECK 13 -#define KEY_abs 14 -#define KEY_accept 15 -#define KEY_alarm 16 -#define KEY_and 17 -#define KEY_atan2 18 -#define KEY_bind 19 -#define KEY_binmode 20 -#define KEY_bless 21 -#define KEY_break 22 -#define KEY_caller 23 -#define KEY_chdir 24 -#define KEY_chmod 25 -#define KEY_chomp 26 -#define KEY_chop 27 -#define KEY_chown 28 -#define KEY_chr 29 -#define KEY_chroot 30 -#define KEY_close 31 -#define KEY_closedir 32 -#define KEY_cmp 33 -#define KEY_connect 34 -#define KEY_continue 35 -#define KEY_cos 36 -#define KEY_crypt 37 -#define KEY_dbmclose 38 -#define KEY_dbmopen 39 -#define KEY_default 40 -#define KEY_defined 41 -#define KEY_delete 42 -#define KEY_die 43 -#define KEY_do 44 -#define KEY_dump 45 -#define KEY_each 46 -#define KEY_else 47 -#define KEY_elsif 48 -#define KEY_endgrent 49 -#define KEY_endhostent 50 -#define KEY_endnetent 51 -#define KEY_endprotoent 52 -#define KEY_endpwent 53 -#define KEY_endservent 54 -#define KEY_eof 55 -#define KEY_eq 56 -#define KEY_eval 57 -#define KEY_exec 58 -#define KEY_exists 59 -#define KEY_exit 60 -#define KEY_exp 61 -#define KEY_fcntl 62 -#define KEY_fileno 63 -#define KEY_flock 64 -#define KEY_for 65 -#define KEY_foreach 66 -#define KEY_fork 67 -#define KEY_format 68 -#define KEY_formline 69 -#define KEY_ge 70 -#define KEY_getc 71 -#define KEY_getgrent 72 -#define KEY_getgrgid 73 -#define KEY_getgrnam 74 -#define KEY_gethostbyaddr 75 -#define KEY_gethostbyname 76 -#define KEY_gethostent 77 -#define KEY_getlogin 78 -#define KEY_getnetbyaddr 79 -#define KEY_getnetbyname 80 -#define KEY_getnetent 81 -#define KEY_getpeername 82 -#define KEY_getpgrp 83 -#define KEY_getppid 84 -#define KEY_getpriority 85 -#define KEY_getprotobyname 86 -#define KEY_getprotobynumber 87 -#define KEY_getprotoent 88 -#define KEY_getpwent 89 -#define KEY_getpwnam 90 -#define KEY_getpwuid 91 -#define KEY_getservbyname 92 -#define KEY_getservbyport 93 -#define KEY_getservent 94 -#define KEY_getsockname 95 -#define KEY_getsockopt 96 -#define KEY_given 97 -#define KEY_glob 98 -#define KEY_gmtime 99 -#define KEY_goto 100 -#define KEY_grep 101 -#define KEY_gt 102 -#define KEY_hex 103 -#define KEY_if 104 -#define KEY_index 105 -#define KEY_int 106 -#define KEY_ioctl 107 -#define KEY_join 108 -#define KEY_keys 109 -#define KEY_kill 110 -#define KEY_last 111 -#define KEY_lc 112 -#define KEY_lcfirst 113 -#define KEY_le 114 -#define KEY_length 115 -#define KEY_link 116 -#define KEY_listen 117 -#define KEY_local 118 -#define KEY_localtime 119 -#define KEY_lock 120 -#define KEY_log 121 -#define KEY_lstat 122 -#define KEY_lt 123 -#define KEY_m 124 -#define KEY_map 125 -#define KEY_mkdir 126 -#define KEY_msgctl 127 -#define KEY_msgget 128 -#define KEY_msgrcv 129 -#define KEY_msgsnd 130 -#define KEY_my 131 -#define KEY_ne 132 -#define KEY_next 133 -#define KEY_no 134 -#define KEY_not 135 -#define KEY_oct 136 -#define KEY_open 137 -#define KEY_opendir 138 -#define KEY_or 139 -#define KEY_ord 140 -#define KEY_our 141 -#define KEY_pack 142 -#define KEY_package 143 -#define KEY_pipe 144 -#define KEY_pop 145 -#define KEY_pos 146 -#define KEY_print 147 -#define KEY_printf 148 -#define KEY_prototype 149 -#define KEY_push 150 -#define KEY_q 151 -#define KEY_qq 152 -#define KEY_qr 153 -#define KEY_quotemeta 154 -#define KEY_qw 155 -#define KEY_qx 156 -#define KEY_rand 157 -#define KEY_read 158 -#define KEY_readdir 159 -#define KEY_readline 160 -#define KEY_readlink 161 -#define KEY_readpipe 162 -#define KEY_recv 163 -#define KEY_redo 164 -#define KEY_ref 165 -#define KEY_rename 166 -#define KEY_require 167 -#define KEY_reset 168 -#define KEY_return 169 -#define KEY_reverse 170 -#define KEY_rewinddir 171 -#define KEY_rindex 172 -#define KEY_rmdir 173 -#define KEY_s 174 -#define KEY_say 175 -#define KEY_scalar 176 -#define KEY_seek 177 -#define KEY_seekdir 178 -#define KEY_select 179 -#define KEY_semctl 180 -#define KEY_semget 181 -#define KEY_semop 182 -#define KEY_send 183 -#define KEY_setgrent 184 -#define KEY_sethostent 185 -#define KEY_setnetent 186 -#define KEY_setpgrp 187 -#define KEY_setpriority 188 -#define KEY_setprotoent 189 -#define KEY_setpwent 190 -#define KEY_setservent 191 -#define KEY_setsockopt 192 -#define KEY_shift 193 -#define KEY_shmctl 194 -#define KEY_shmget 195 -#define KEY_shmread 196 -#define KEY_shmwrite 197 -#define KEY_shutdown 198 -#define KEY_sin 199 -#define KEY_sleep 200 -#define KEY_socket 201 -#define KEY_socketpair 202 -#define KEY_sort 203 -#define KEY_splice 204 -#define KEY_split 205 -#define KEY_sprintf 206 -#define KEY_sqrt 207 -#define KEY_srand 208 -#define KEY_stat 209 -#define KEY_state 210 -#define KEY_study 211 -#define KEY_sub 212 -#define KEY_substr 213 -#define KEY_symlink 214 -#define KEY_syscall 215 -#define KEY_sysopen 216 -#define KEY_sysread 217 -#define KEY_sysseek 218 -#define KEY_system 219 -#define KEY_syswrite 220 -#define KEY_tell 221 -#define KEY_telldir 222 -#define KEY_tie 223 -#define KEY_tied 224 -#define KEY_time 225 -#define KEY_times 226 -#define KEY_tr 227 -#define KEY_truncate 228 -#define KEY_uc 229 -#define KEY_ucfirst 230 -#define KEY_umask 231 -#define KEY_undef 232 -#define KEY_unless 233 -#define KEY_unlink 234 -#define KEY_unpack 235 -#define KEY_unshift 236 -#define KEY_untie 237 -#define KEY_until 238 -#define KEY_use 239 -#define KEY_utime 240 -#define KEY_values 241 -#define KEY_vec 242 -#define KEY_wait 243 -#define KEY_waitpid 244 -#define KEY_wantarray 245 -#define KEY_warn 246 -#define KEY_when 247 -#define KEY_while 248 -#define KEY_write 249 -#define KEY_x 250 -#define KEY_xor 251 -#define KEY_y 252 +#define KEY___SUB__ 6 +#define KEY_AUTOLOAD 7 +#define KEY_BEGIN 8 +#define KEY_UNITCHECK 9 +#define KEY_CORE 10 +#define KEY_DESTROY 11 +#define KEY_END 12 +#define KEY_INIT 13 +#define KEY_CHECK 14 +#define KEY_abs 15 +#define KEY_accept 16 +#define KEY_alarm 17 +#define KEY_and 18 +#define KEY_atan2 19 +#define KEY_bind 20 +#define KEY_binmode 21 +#define KEY_bless 22 +#define KEY_break 23 +#define KEY_caller 24 +#define KEY_chdir 25 +#define KEY_chmod 26 +#define KEY_chomp 27 +#define KEY_chop 28 +#define KEY_chown 29 +#define KEY_chr 30 +#define KEY_chroot 31 +#define KEY_close 32 +#define KEY_closedir 33 +#define KEY_cmp 34 +#define KEY_connect 35 +#define KEY_continue 36 +#define KEY_cos 37 +#define KEY_crypt 38 +#define KEY_dbmclose 39 +#define KEY_dbmopen 40 +#define KEY_default 41 +#define KEY_defined 42 +#define KEY_delete 43 +#define KEY_die 44 +#define KEY_do 45 +#define KEY_dump 46 +#define KEY_each 47 +#define KEY_else 48 +#define KEY_elsif 49 +#define KEY_endgrent 50 +#define KEY_endhostent 51 +#define KEY_endnetent 52 +#define KEY_endprotoent 53 +#define KEY_endpwent 54 +#define KEY_endservent 55 +#define KEY_eof 56 +#define KEY_eq 57 +#define KEY_eval 58 +#define KEY_evalbytes 59 +#define KEY_exec 60 +#define KEY_exists 61 +#define KEY_exit 62 +#define KEY_exp 63 +#define KEY_fc 64 +#define KEY_fcntl 65 +#define KEY_fileno 66 +#define KEY_flock 67 +#define KEY_for 68 +#define KEY_foreach 69 +#define KEY_fork 70 +#define KEY_format 71 +#define KEY_formline 72 +#define KEY_ge 73 +#define KEY_getc 74 +#define KEY_getgrent 75 +#define KEY_getgrgid 76 +#define KEY_getgrnam 77 +#define KEY_gethostbyaddr 78 +#define KEY_gethostbyname 79 +#define KEY_gethostent 80 +#define KEY_getlogin 81 +#define KEY_getnetbyaddr 82 +#define KEY_getnetbyname 83 +#define KEY_getnetent 84 +#define KEY_getpeername 85 +#define KEY_getpgrp 86 +#define KEY_getppid 87 +#define KEY_getpriority 88 +#define KEY_getprotobyname 89 +#define KEY_getprotobynumber 90 +#define KEY_getprotoent 91 +#define KEY_getpwent 92 +#define KEY_getpwnam 93 +#define KEY_getpwuid 94 +#define KEY_getservbyname 95 +#define KEY_getservbyport 96 +#define KEY_getservent 97 +#define KEY_getsockname 98 +#define KEY_getsockopt 99 +#define KEY_given 100 +#define KEY_glob 101 +#define KEY_gmtime 102 +#define KEY_goto 103 +#define KEY_grep 104 +#define KEY_gt 105 +#define KEY_hex 106 +#define KEY_if 107 +#define KEY_index 108 +#define KEY_int 109 +#define KEY_ioctl 110 +#define KEY_join 111 +#define KEY_keys 112 +#define KEY_kill 113 +#define KEY_last 114 +#define KEY_lc 115 +#define KEY_lcfirst 116 +#define KEY_le 117 +#define KEY_length 118 +#define KEY_link 119 +#define KEY_listen 120 +#define KEY_local 121 +#define KEY_localtime 122 +#define KEY_lock 123 +#define KEY_log 124 +#define KEY_lstat 125 +#define KEY_lt 126 +#define KEY_m 127 +#define KEY_map 128 +#define KEY_mkdir 129 +#define KEY_msgctl 130 +#define KEY_msgget 131 +#define KEY_msgrcv 132 +#define KEY_msgsnd 133 +#define KEY_my 134 +#define KEY_ne 135 +#define KEY_next 136 +#define KEY_no 137 +#define KEY_not 138 +#define KEY_oct 139 +#define KEY_open 140 +#define KEY_opendir 141 +#define KEY_or 142 +#define KEY_ord 143 +#define KEY_our 144 +#define KEY_pack 145 +#define KEY_package 146 +#define KEY_pipe 147 +#define KEY_pop 148 +#define KEY_pos 149 +#define KEY_print 150 +#define KEY_printf 151 +#define KEY_prototype 152 +#define KEY_push 153 +#define KEY_q 154 +#define KEY_qq 155 +#define KEY_qr 156 +#define KEY_quotemeta 157 +#define KEY_qw 158 +#define KEY_qx 159 +#define KEY_rand 160 +#define KEY_read 161 +#define KEY_readdir 162 +#define KEY_readline 163 +#define KEY_readlink 164 +#define KEY_readpipe 165 +#define KEY_recv 166 +#define KEY_redo 167 +#define KEY_ref 168 +#define KEY_rename 169 +#define KEY_require 170 +#define KEY_reset 171 +#define KEY_return 172 +#define KEY_reverse 173 +#define KEY_rewinddir 174 +#define KEY_rindex 175 +#define KEY_rmdir 176 +#define KEY_s 177 +#define KEY_say 178 +#define KEY_scalar 179 +#define KEY_seek 180 +#define KEY_seekdir 181 +#define KEY_select 182 +#define KEY_semctl 183 +#define KEY_semget 184 +#define KEY_semop 185 +#define KEY_send 186 +#define KEY_setgrent 187 +#define KEY_sethostent 188 +#define KEY_setnetent 189 +#define KEY_setpgrp 190 +#define KEY_setpriority 191 +#define KEY_setprotoent 192 +#define KEY_setpwent 193 +#define KEY_setservent 194 +#define KEY_setsockopt 195 +#define KEY_shift 196 +#define KEY_shmctl 197 +#define KEY_shmget 198 +#define KEY_shmread 199 +#define KEY_shmwrite 200 +#define KEY_shutdown 201 +#define KEY_sin 202 +#define KEY_sleep 203 +#define KEY_socket 204 +#define KEY_socketpair 205 +#define KEY_sort 206 +#define KEY_splice 207 +#define KEY_split 208 +#define KEY_sprintf 209 +#define KEY_sqrt 210 +#define KEY_srand 211 +#define KEY_stat 212 +#define KEY_state 213 +#define KEY_study 214 +#define KEY_sub 215 +#define KEY_substr 216 +#define KEY_symlink 217 +#define KEY_syscall 218 +#define KEY_sysopen 219 +#define KEY_sysread 220 +#define KEY_sysseek 221 +#define KEY_system 222 +#define KEY_syswrite 223 +#define KEY_tell 224 +#define KEY_telldir 225 +#define KEY_tie 226 +#define KEY_tied 227 +#define KEY_time 228 +#define KEY_times 229 +#define KEY_tr 230 +#define KEY_truncate 231 +#define KEY_uc 232 +#define KEY_ucfirst 233 +#define KEY_umask 234 +#define KEY_undef 235 +#define KEY_unless 236 +#define KEY_unlink 237 +#define KEY_unpack 238 +#define KEY_unshift 239 +#define KEY_untie 240 +#define KEY_until 241 +#define KEY_use 242 +#define KEY_utime 243 +#define KEY_values 244 +#define KEY_vec 245 +#define KEY_wait 246 +#define KEY_waitpid 247 +#define KEY_wantarray 248 +#define KEY_warn 249 +#define KEY_when 250 +#define KEY_while 251 +#define KEY_write 252 +#define KEY_x 253 +#define KEY_xor 254 +#define KEY_y 255 /* Generated from: - * 28d95638560707fb8bee100dab74c90107c3e000f635e3bd310d4e2501d3b073 regen/keywords.pl + * e5a540774760ea54c761ef17ee4a153cc264e9a700b817d561e390730c457406 regen/keywords.pl * ex: set ro: */ diff --git a/Master/tlpkg/tlperl/lib/CORE/l1_char_class_tab.h b/Master/tlpkg/tlperl/lib/CORE/l1_char_class_tab.h index d43f87ad777..d649c89d8a7 100644 --- a/Master/tlpkg/tlperl/lib/CORE/l1_char_class_tab.h +++ b/Master/tlpkg/tlperl/lib/CORE/l1_char_class_tab.h @@ -1,58 +1,58 @@ /* -*- buffer-read-only: t -*- * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! - * This file is built by regen/mk_PL_charclass.pl from - * lib/unicore/CaseFolding.txt. + * This file is built by regen/mk_PL_charclass.pl from property definitions + * and lib/unicore/CaseFolding.txt. * Any changes made here will be lost! */ -/* U+00 NUL */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+01 SOH */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+02 STX */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+03 ETX */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+04 EOT */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+05 ENQ */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+06 ACK */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+07 BEL */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+08 BS */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+09 HT */ _CC_BLANK_A|_CC_BLANK_L1|_CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1, -/* U+0A LF */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1, -/* U+0B VT */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1, -/* U+0C FF */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1, -/* U+0D CR */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1, -/* U+0E SO */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+0F SI */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+10 DLE */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+11 DC1 */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+12 DC2 */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+13 DC3 */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+14 DC4 */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+15 NAK */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+16 SYN */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+17 ETB */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+18 CAN */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+19 EOM */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+1A SUB */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+1B ESC */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+1C FS */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+1D GS */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+1E RS */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+1F US */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+20 SPACE */ _CC_BLANK_A|_CC_BLANK_L1|_CC_CHARNAME_CONT|_CC_PRINT_A|_CC_PRINT_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1, -/* U+21 '!' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+22 '"' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+23 '#' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+24 '$' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+25 '%' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+26 '&' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+27 ''' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+28 '(' */ _CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+29 ')' */ _CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+2A '*' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+2B '+' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+2C ',' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+2D '-' */ _CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+2E '.' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+2F '/' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, +/* U+00 NUL */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+01 SOH */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+02 STX */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+03 ETX */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+04 EOT */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+05 ENQ */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+06 ACK */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+07 BEL */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+08 BS */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+09 HT */ _CC_BLANK_A|_CC_BLANK_L1|_CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1|_CC_QUOTEMETA, +/* U+0A LF */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1|_CC_QUOTEMETA, +/* U+0B VT */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_QUOTEMETA, +/* U+0C FF */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1|_CC_QUOTEMETA, +/* U+0D CR */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1|_CC_QUOTEMETA, +/* U+0E SO */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+0F SI */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+10 DLE */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+11 DC1 */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+12 DC2 */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+13 DC3 */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+14 DC4 */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+15 NAK */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+16 SYN */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+17 ETB */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+18 CAN */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+19 EOM */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+1A SUB */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+1B ESC */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+1C FS */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+1D GS */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+1E RS */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+1F US */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+20 SPACE */ _CC_BLANK_A|_CC_BLANK_L1|_CC_CHARNAME_CONT|_CC_PRINT_A|_CC_PRINT_L1|_CC_PSXSPC_A|_CC_PSXSPC_L1|_CC_SPACE_A|_CC_SPACE_L1|_CC_QUOTEMETA, +/* U+21 '!' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+22 '"' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+23 '#' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+24 '$' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+25 '%' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+26 '&' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+27 ''' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+28 '(' */ _CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+29 ')' */ _CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+2A '*' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+2B '+' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+2C ',' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+2D '-' */ _CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+2E '.' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+2F '/' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, /* U+30 '0' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_CHARNAME_CONT|_CC_DIGIT_A|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_OCTAL_A|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, /* U+31 '1' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_CHARNAME_CONT|_CC_DIGIT_A|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_OCTAL_A|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, /* U+32 '2' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_CHARNAME_CONT|_CC_DIGIT_A|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_OCTAL_A|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, @@ -63,13 +63,13 @@ /* U+37 '7' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_CHARNAME_CONT|_CC_DIGIT_A|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_OCTAL_A|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, /* U+38 '8' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_CHARNAME_CONT|_CC_DIGIT_A|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, /* U+39 '9' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_CHARNAME_CONT|_CC_DIGIT_A|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, -/* U+3A ':' */ _CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+3B ';' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+3C '<' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+3D '=' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+3E '>' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+3F '?' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+40 '@' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, +/* U+3A ':' */ _CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+3B ';' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+3C '<' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+3D '=' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+3E '>' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+3F '?' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+40 '@' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, /* U+41 'A' */ _CC_NONLATIN1_FOLD|_CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_UPPER_A|_CC_UPPER_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, /* U+42 'B' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_UPPER_A|_CC_UPPER_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, /* U+43 'C' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_UPPER_A|_CC_UPPER_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, @@ -96,12 +96,12 @@ /* U+58 'X' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_UPPER_A|_CC_UPPER_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1, /* U+59 'Y' */ _CC_NONLATIN1_FOLD|_CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_UPPER_A|_CC_UPPER_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1, /* U+5A 'Z' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_UPPER_A|_CC_UPPER_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1, -/* U+5B '[' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+5C '\' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+5D ']' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+5E '^' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, +/* U+5B '[' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+5C '\' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+5D ']' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+5E '^' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, /* U+5F '_' */ _CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1, -/* U+60 '`' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, +/* U+60 '`' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, /* U+61 'a' */ _CC_NONLATIN1_FOLD|_CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_LOWER_A|_CC_LOWER_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, /* U+62 'b' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_LOWER_A|_CC_LOWER_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, /* U+63 'c' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_LOWER_A|_CC_LOWER_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1|_CC_XDIGIT_A, @@ -128,75 +128,75 @@ /* U+78 'x' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_LOWER_A|_CC_LOWER_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1, /* U+79 'y' */ _CC_NONLATIN1_FOLD|_CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_LOWER_A|_CC_LOWER_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1, /* U+7A 'z' */ _CC_ALNUMC_A|_CC_ALNUMC_L1|_CC_ALPHA_A|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_A|_CC_GRAPH_L1|_CC_IDFIRST_A|_CC_IDFIRST_L1|_CC_LOWER_A|_CC_LOWER_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_WORDCHAR_A|_CC_WORDCHAR_L1, -/* U+7B '{' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+7C '|' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+7D '}' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+7E '~' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1, -/* U+7F DEL */ _CC_CNTRL_A|_CC_CNTRL_L1, -/* U+80 PAD */ _CC_CNTRL_L1, -/* U+81 HOP */ _CC_CNTRL_L1, -/* U+82 BPH */ _CC_CNTRL_L1, -/* U+83 NBH */ _CC_CNTRL_L1, -/* U+84 IND */ _CC_CNTRL_L1, -/* U+85 NEL */ _CC_CNTRL_L1|_CC_PSXSPC_L1|_CC_SPACE_L1, -/* U+86 SSA */ _CC_CNTRL_L1, -/* U+87 ESA */ _CC_CNTRL_L1, -/* U+88 HTS */ _CC_CNTRL_L1, -/* U+89 HTJ */ _CC_CNTRL_L1, -/* U+8A VTS */ _CC_CNTRL_L1, -/* U+8B PLD */ _CC_CNTRL_L1, -/* U+8C PLU */ _CC_CNTRL_L1, -/* U+8D RI */ _CC_CNTRL_L1, -/* U+8E SS2 */ _CC_CNTRL_L1, -/* U+8F SS3 */ _CC_CNTRL_L1, -/* U+90 DCS */ _CC_CNTRL_L1, -/* U+91 PU1 */ _CC_CNTRL_L1, -/* U+92 PU2 */ _CC_CNTRL_L1, -/* U+93 STS */ _CC_CNTRL_L1, -/* U+94 CCH */ _CC_CNTRL_L1, -/* U+95 MW */ _CC_CNTRL_L1, -/* U+96 SPA */ _CC_CNTRL_L1, -/* U+97 EPA */ _CC_CNTRL_L1, -/* U+98 SOS */ _CC_CNTRL_L1, -/* U+99 SGC */ _CC_CNTRL_L1, -/* U+9A SCI */ _CC_CNTRL_L1, -/* U+9B CSI */ _CC_CNTRL_L1, -/* U+9C ST */ _CC_CNTRL_L1, -/* U+9D OSC */ _CC_CNTRL_L1, -/* U+9E PM */ _CC_CNTRL_L1, -/* U+9F APC */ _CC_CNTRL_L1, -/* U+A0 NO-BREAK SPACE */ _CC_BLANK_L1|_CC_CHARNAME_CONT|_CC_PRINT_L1|_CC_PSXSPC_L1|_CC_SPACE_L1, -/* U+A1 INVERTED EXCLAMATION MARK */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1, -/* U+A2 CENT SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+A3 POUND SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+A4 CURRENCY SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+A5 YEN SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+A6 BROKEN BAR */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+A7 SECTION SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, +/* U+7B '{' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+7C '|' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+7D '}' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+7E '~' */ _CC_GRAPH_A|_CC_GRAPH_L1|_CC_PRINT_A|_CC_PRINT_L1|_CC_PUNCT_A|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+7F DEL */ _CC_CNTRL_A|_CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+80 PAD */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+81 HOP */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+82 BPH */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+83 NBH */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+84 IND */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+85 NEL */ _CC_CNTRL_L1|_CC_PSXSPC_L1|_CC_SPACE_L1|_CC_QUOTEMETA, +/* U+86 SSA */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+87 ESA */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+88 HTS */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+89 HTJ */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+8A VTS */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+8B PLD */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+8C PLU */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+8D RI */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+8E SS2 */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+8F SS3 */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+90 DCS */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+91 PU1 */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+92 PU2 */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+93 STS */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+94 CCH */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+95 MW */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+96 SPA */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+97 EPA */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+98 SOS */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+99 SGC */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+9A SCI */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+9B CSI */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+9C ST */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+9D OSC */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+9E PM */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+9F APC */ _CC_CNTRL_L1|_CC_QUOTEMETA, +/* U+A0 NO-BREAK SPACE */ _CC_BLANK_L1|_CC_CHARNAME_CONT|_CC_PRINT_L1|_CC_PSXSPC_L1|_CC_SPACE_L1|_CC_QUOTEMETA, +/* U+A1 INVERTED EXCLAMATION MARK */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+A2 CENT SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, +/* U+A3 POUND SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, +/* U+A4 CURRENCY SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, +/* U+A5 YEN SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, +/* U+A6 BROKEN BAR */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, +/* U+A7 SECTION SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1|_CC_QUOTEMETA, /* U+A8 DIAERESIS */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+A9 COPYRIGHT SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, +/* U+A9 COPYRIGHT SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, /* U+AA FEMININE ORDINAL INDICATOR */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_LOWER_L1|_CC_PRINT_L1|_CC_WORDCHAR_L1, -/* U+AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1, -/* U+AC NOT SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+AD SOFT HYPHEN */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+AE REGISTERED SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, +/* U+AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1|_CC_QUOTEMETA, +/* U+AC NOT SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, +/* U+AD SOFT HYPHEN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, +/* U+AE REGISTERED SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, /* U+AF MACRON */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+B0 DEGREE SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+B1 PLUS-MINUS SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, +/* U+B0 DEGREE SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, +/* U+B1 PLUS-MINUS SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, /* U+B2 SUPERSCRIPT TWO */ _CC_GRAPH_L1|_CC_PRINT_L1, /* U+B3 SUPERSCRIPT THREE */ _CC_GRAPH_L1|_CC_PRINT_L1, /* U+B4 ACUTE ACCENT */ _CC_GRAPH_L1|_CC_PRINT_L1, /* U+B5 MICRO SIGN */ _CC_NONLATIN1_FOLD|_CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_LOWER_L1|_CC_PRINT_L1|_CC_WORDCHAR_L1, -/* U+B6 PILCROW SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, +/* U+B6 PILCROW SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1|_CC_QUOTEMETA, /* U+B7 MIDDLE DOT */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1, /* U+B8 CEDILLA */ _CC_GRAPH_L1|_CC_PRINT_L1, /* U+B9 SUPERSCRIPT ONE */ _CC_GRAPH_L1|_CC_PRINT_L1, /* U+BA MASCULINE ORDINAL INDICATOR */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_LOWER_L1|_CC_PRINT_L1|_CC_WORDCHAR_L1, -/* U+BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1, +/* U+BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1|_CC_QUOTEMETA, /* U+BC VULGAR FRACTION ONE QUARTER */ _CC_GRAPH_L1|_CC_PRINT_L1, /* U+BD VULGAR FRACTION ONE HALF */ _CC_GRAPH_L1|_CC_PRINT_L1, /* U+BE VULGAR FRACTION THREE QUARTERS */ _CC_GRAPH_L1|_CC_PRINT_L1, -/* U+BF INVERTED QUESTION MARK */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1, +/* U+BF INVERTED QUESTION MARK */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_PUNCT_L1|_CC_QUOTEMETA, /* U+C0 A WITH GRAVE */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_PRINT_L1|_CC_UPPER_L1|_CC_WORDCHAR_L1, /* U+C1 A WITH ACUTE */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_PRINT_L1|_CC_UPPER_L1|_CC_WORDCHAR_L1, /* U+C2 A WITH CIRCUMFLEX */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_PRINT_L1|_CC_UPPER_L1|_CC_WORDCHAR_L1, @@ -220,7 +220,7 @@ /* U+D4 O WITH CIRCUMFLEX */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_PRINT_L1|_CC_UPPER_L1|_CC_WORDCHAR_L1, /* U+D5 O WITH TILDE */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_PRINT_L1|_CC_UPPER_L1|_CC_WORDCHAR_L1, /* U+D6 O WITH DIAERESIS */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_PRINT_L1|_CC_UPPER_L1|_CC_WORDCHAR_L1, -/* U+D7 MULTIPLICATION SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, +/* U+D7 MULTIPLICATION SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, /* U+D8 O WITH STROKE */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_PRINT_L1|_CC_UPPER_L1|_CC_WORDCHAR_L1, /* U+D9 U WITH GRAVE */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_PRINT_L1|_CC_UPPER_L1|_CC_WORDCHAR_L1, /* U+DA U WITH ACUTE */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_PRINT_L1|_CC_UPPER_L1|_CC_WORDCHAR_L1, @@ -252,7 +252,7 @@ /* U+F4 o with circumflex */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_LOWER_L1|_CC_PRINT_L1|_CC_WORDCHAR_L1, /* U+F5 o with tilde */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_LOWER_L1|_CC_PRINT_L1|_CC_WORDCHAR_L1, /* U+F6 o with diaeresis */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_LOWER_L1|_CC_PRINT_L1|_CC_WORDCHAR_L1, -/* U+F7 DIVISION SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1, +/* U+F7 DIVISION SIGN */ _CC_GRAPH_L1|_CC_PRINT_L1|_CC_QUOTEMETA, /* U+F8 o with stroke */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_LOWER_L1|_CC_PRINT_L1|_CC_WORDCHAR_L1, /* U+F9 u with grave */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_LOWER_L1|_CC_PRINT_L1|_CC_WORDCHAR_L1, /* U+FA u with acute */ _CC_ALNUMC_L1|_CC_ALPHA_L1|_CC_CHARNAME_CONT|_CC_GRAPH_L1|_CC_IDFIRST_L1|_CC_LOWER_L1|_CC_PRINT_L1|_CC_WORDCHAR_L1, diff --git a/Master/tlpkg/tlperl/lib/CORE/libperl514.a b/Master/tlpkg/tlperl/lib/CORE/libperl514.a deleted file mode 100644 index 534fd81f84f..00000000000 Binary files a/Master/tlpkg/tlperl/lib/CORE/libperl514.a and /dev/null differ diff --git a/Master/tlpkg/tlperl/lib/CORE/libperl516.a b/Master/tlpkg/tlperl/lib/CORE/libperl516.a new file mode 100644 index 00000000000..b6a9b6b4ef5 Binary files /dev/null and b/Master/tlpkg/tlperl/lib/CORE/libperl516.a differ diff --git a/Master/tlpkg/tlperl/lib/CORE/metaconfig.h b/Master/tlpkg/tlperl/lib/CORE/metaconfig.h index 95aba26b87e..7fb867edeb4 100644 --- a/Master/tlpkg/tlperl/lib/CORE/metaconfig.h +++ b/Master/tlpkg/tlperl/lib/CORE/metaconfig.h @@ -1,7 +1,7 @@ /* This is a placeholder file for symbols that should be exported * into config_h.SH and Porting/Glossary. See also metaconfig.SH * - * First version was created from the part in handy.h (which includes this) + * First version was created from the part in handy.h * H.Merijn Brand 21 Dec 2010 (Tux) * * Mentioned variables are forced to be included into config_h.SH @@ -11,34 +11,24 @@ * in Configure, this is the way to force them into availability. * * CHARBITS - * GMTIME_MAX - * GMTIME_MIN * HAS_ASCTIME64 * HAS_CTIME64 * HAS_DIFFTIME64 - * HAS_GETADDRINFO - * HAS_GETNAMEINFO * HAS_GMTIME64 - * HAS_INETNTOP - * HAS_INETPTON + * HAS_ISBLANK * HAS_LOCALTIME64 + * HAS_IPV6_MREQ * HAS_MKTIME64 * HAS_PRCTL * HAS_PSEUDOFORK - * HAS_SIN6_SCOPE_ID - * HAS_SOCKADDR_SA_LEN * HAS_TIMEGM + * HAS_SOCKADDR_IN6 * I16SIZE - * I32SIZE * I64SIZE * I8SIZE - * LOCALTIME_MAX - * LOCALTIME_MIN * LOCALTIME_R_NEEDS_TZSET - * U16SIZE - * U32SIZE - * U64SIZE * U8SIZE - * USE_DTRACE + * USE_KERN_PROC_PATHNAME + * USE_NSGETEXECUTABLEPATH * */ diff --git a/Master/tlpkg/tlperl/lib/CORE/mg.h b/Master/tlpkg/tlperl/lib/CORE/mg.h index 848f735d6cb..53ef6287513 100644 --- a/Master/tlpkg/tlperl/lib/CORE/mg.h +++ b/Master/tlpkg/tlperl/lib/CORE/mg.h @@ -61,6 +61,8 @@ struct magic { #define SvTIED_obj(sv,mg) \ ((mg)->mg_obj ? (mg)->mg_obj : sv_2mortal(newRV(sv))) +#define whichsig(pv) whichsig_pv(pv) + /* * Local variables: * c-indentation-style: bsd diff --git a/Master/tlpkg/tlperl/lib/CORE/mg_data.h b/Master/tlpkg/tlperl/lib/CORE/mg_data.h new file mode 100644 index 00000000000..10b10682488 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/CORE/mg_data.h @@ -0,0 +1,299 @@ +{ + /* sv '\0' Special scalar variable */ + want_vtbl_sv | PERL_MAGIC_READONLY_ACCEPTABLE, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* arylen '#' Array length ($#ary) */ + want_vtbl_arylen | PERL_MAGIC_VALUE_MAGIC, + 0, + /* rhash '%' extra data for restricted hashes */ + magic_vtable_max | PERL_MAGIC_VALUE_MAGIC, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* pos '.' pos() lvalue */ + want_vtbl_pos | PERL_MAGIC_VALUE_MAGIC, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* symtab ':' extra data for symbol tables */ + magic_vtable_max | PERL_MAGIC_VALUE_MAGIC, + 0, + /* backref '<' for weak ref data */ + want_vtbl_backref | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC, + 0, + 0, + 0, + /* arylen_p '@' to move arylen out of XPVAV */ + magic_vtable_max | PERL_MAGIC_VALUE_MAGIC, + /* overload 'A' %OVERLOAD hash */ + want_vtbl_amagic, + /* bm 'B' Boyer-Moore (fast string search) */ + want_vtbl_regexp | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC, + 0, + /* regdata 'D' Regex match position data (@+ and @- vars) */ + want_vtbl_regdata, + /* env 'E' %ENV hash */ + want_vtbl_env, + 0, + /* study 'G' study()ed string */ + want_vtbl_regexp | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC, + /* hints 'H' %^H hash */ + want_vtbl_hints, + /* isa 'I' @ISA array */ + want_vtbl_isa, + 0, + 0, + /* dbfile 'L' Debugger %_ instead. defined()*/ /* On OP_DBSTATE, indicates breakpoint * (runtime property) */ - /* On OP_AELEMFAST, indicates pad var */ /* On OP_REQUIRE, was seen as CORE::require */ - /* On OP_ENTERWHEN, there's no condition */ - /* On OP_BREAK, an implicit break */ + /* On OP_(ENTER|LEAVE)WHEN, there's + no condition */ /* On OP_SMARTMATCH, an implicit smartmatch */ /* On OP_ANONHASH and OP_ANONLIST, create a reference to the new anon hash or array */ - /* On OP_ENTER, store caller context */ /* On OP_HELEM and OP_HSLICE, localization will be followed by assignment, so do not wipe the target if it is special (e.g. a glob or a magic SV) */ @@ -146,7 +144,10 @@ Deprecated. Use C instead. that was optimised away, so it should not be bound via =~ */ /* On OP_CONST, from a constant CV */ - /* On OP_GLOB, use Perl glob function */ + /* On OP_GLOB, two meanings: + - Before ck_glob, called as CORE::glob + - After ck_glob, use Perl glob function + */ /* old names; don't use in new code, but don't break them, either */ #define OPf_LIST OPf_WANT_LIST @@ -159,12 +160,19 @@ Deprecated. Use C instead. : G_SCALAR) \ : dowantarray()) -/* NOTE: OP_NEXTSTATE and OP_DBSTATE (i.e. COPs) carry lower - * bits of PL_hints in op_private */ +/* Lower bits of op_private often carry the number of arguments, as + * set by newBINOP, newUNOP and ck_fun */ + +/* NOTE: OP_NEXTSTATE and OP_DBSTATE (i.e. COPs) carry NATIVE_HINTS + * in op_private */ /* Private for lvalues */ #define OPpLVAL_INTRO 128 /* Lvalue must be localized or lvalue sub */ +/* Private for OPs with TARGLEX */ + /* (lower bits may carry MAXARG) */ +#define OPpTARGET_MY 16 /* Target is PADMY. */ + /* Private for OP_LEAVE, OP_LEAVESUB, OP_LEAVESUBLV and OP_LEAVEWRITE */ #define OPpREFCOUNTED 64 /* op_targ carries a refcount */ @@ -197,24 +205,35 @@ Deprecated. Use C instead. #define OPpDEREF_AV 32 /* Want ref to AV. */ #define OPpDEREF_HV 64 /* Want ref to HV. */ #define OPpDEREF_SV (32|64) /* Want ref to SV. */ -/* Private for OP_RV2SV, OP_RV2AV, OP_RV2AV */ -#define OPpDEREFed 4 /* prev op was OPpDEREF */ + /* OP_ENTERSUB only */ #define OPpENTERSUB_DB 16 /* Debug subroutine. */ -#define OPpENTERSUB_HASTARG 32 /* Called from OP tree. */ -#define OPpENTERSUB_NOMOD 64 /* Immune to op_lvalue() for :attrlist. */ - /* OP_ENTERSUB and OP_RV2CV only */ +#define OPpENTERSUB_HASTARG 4 /* Called from OP tree. */ +#define OPpENTERSUB_INARGS 1 /* Lval used as arg to a sub. */ +/* used by OPpDEREF (32|64) */ +/* used by HINT_STRICT_SUBS 2 */ + /* Mask for OP_ENTERSUB flags, the absence of which must be propagated + in dynamic context */ +#define OPpENTERSUB_LVAL_MASK (OPpLVAL_INTRO|OPpENTERSUB_INARGS) + + /* OP_RV2CV only */ #define OPpENTERSUB_AMPER 8 /* Used & form to call. */ #define OPpENTERSUB_NOPAREN 128 /* bare sub call (without parens) */ -#define OPpENTERSUB_INARGS 4 /* Lval used as arg to a sub. */ +#define OPpMAY_RETURN_CONSTANT 1 /* If a constant sub, return the constant */ + /* OP_GV only */ #define OPpEARLY_CV 32 /* foo() called before sub foo was parsed */ /* OP_?ELEM only */ #define OPpLVAL_DEFER 16 /* Defer creation of array/hash elem */ - /* OP_RV2?V, OP_GVSV, OP_ENTERITER only */ + /* OP_RV2[SAH]V, OP_GVSV, OP_ENTERITER only */ #define OPpOUR_INTRO 16 /* Variable was in an our() */ - /* OP_RV2[AGH]V, OP_PAD[AH]V, OP_[AH]ELEM */ + /* OP_RV2[AGH]V, OP_PAD[AH]V, OP_[AH]ELEM, OP_[AH]SLICE OP_AV2ARYLEN, + OP_R?KEYS, OP_SUBSTR, OP_POS, OP_VEC */ #define OPpMAYBE_LVSUB 8 /* We might be an lvalue to return */ + + /* OP_SUBSTR only */ +#define OPpSUBSTR_REPL_FIRST 16 /* 1st arg is replacement string */ + /* OP_PADSV only */ #define OPpPAD_STATE 16 /* is a "state" pad */ /* for OP_RV2?V, lower bits carry hints (currently only HINT_STRICT_REFS) */ @@ -223,13 +242,7 @@ Deprecated. Use C instead. #define OPpDONT_INIT_GV 4 /* Call gv_fetchpv with GV_NOINIT */ /* (Therefore will return whatever is currently in the symbol table, not guaranteed to be a PVGV) */ - - /* OP_RV2CV only */ -#define OPpMAY_RETURN_CONSTANT 1 /* If a constant sub, return the constant */ - -/* Private for OPs with TARGLEX */ - /* (lower bits may carry MAXARG) */ -#define OPpTARGET_MY 16 /* Target is PADMY. */ +#define OPpALLOW_FAKE 16 /* OK to return fake glob */ /* Private for OP_ENTERITER and OP_ITER */ #define OPpITER_REVERSED 4 /* for (reverse ...) */ @@ -240,7 +253,6 @@ Deprecated. Use C instead. #define OPpCONST_SHORTCIRCUIT 4 /* eg the constant 5 in (5 || foo) */ #define OPpCONST_STRICT 8 /* bareword subject to strict 'subs' */ #define OPpCONST_ENTERED 16 /* Has been entered as symbol. */ -#define OPpCONST_ARYBASE 32 /* Was a $[ translated to constant. */ #define OPpCONST_BARE 64 /* Was a bare word (filehandle?). */ #define OPpCONST_WARNING 128 /* Was a $^W translated to constant. */ @@ -281,14 +293,33 @@ Deprecated. Use C instead. /* Private for OP_FTXXX */ #define OPpFT_ACCESS 2 /* use filetest 'access' */ -#define OPpFT_STACKED 4 /* stacked filetest, as in "-f -x $f" */ +#define OPpFT_STACKED 4 /* stacked filetest, as "-f" in "-f -x $f" */ +#define OPpFT_STACKING 8 /* stacking filetest, as "-x" in "-f -x $f" */ +#define OPpFT_AFTER_t 16 /* previous op was -t */ /* Private for OP_(MAP|GREP)(WHILE|START) */ #define OPpGREP_LEX 2 /* iterate over lexical $_ */ /* Private for OP_ENTEREVAL */ #define OPpEVAL_HAS_HH 2 /* Does it have a copy of %^H */ +#define OPpEVAL_UNICODE 4 +#define OPpEVAL_BYTES 8 +#define OPpEVAL_COPHH 16 /* Construct %^H from cop hints */ +/* Private for OP_CALLER, OP_WANTARRAY and OP_RUNCV */ +#define OPpOFFBYONE 128 /* Treat caller(1) as caller(2) */ + +/* Private for OP_COREARGS */ +/* These must not conflict with OPpDONT_INIT_GV or OPpALLOW_FAKE. + See pp.c:S_rv2gv. */ +#define OPpCOREARGS_DEREF1 1 /* Arg 1 is a handle constructor */ +#define OPpCOREARGS_DEREF2 2 /* Arg 2 is a handle constructor */ +#define OPpCOREARGS_SCALARMOD 64 /* \$ rather than \[$@%*] */ +#define OPpCOREARGS_PUSHMARK 128 /* Call pp_pushmark */ + +/* Private for OP_(LAST|REDO|NEXT|GOTO|DUMP) */ +#define OPpPV_IS_UTF8 128 /* label is in UTF8 */ + struct op { BASEOP }; @@ -337,7 +368,10 @@ struct pmop { union { OP * op_pmreplstart; /* Only used in OP_SUBST */ #ifdef USE_ITHREADS - char * op_pmstashpv; /* Only used in OP_MATCH, with PMf_ONCE set */ + struct { + char * op_pmstashpv; /* Only used in OP_MATCH, with PMf_ONCE set */ + U32 op_pmstashflags; /* currently only SVf_UTF8 or 0 */ + } op_pmstashthr; #else HV * op_pmstash; #endif @@ -407,19 +441,27 @@ struct pmop { #ifdef USE_ITHREADS # define PmopSTASHPV(o) \ - (((o)->op_pmflags & PMf_ONCE) ? (o)->op_pmstashstartu.op_pmstashpv : NULL) + (((o)->op_pmflags & PMf_ONCE) ? (o)->op_pmstashstartu.op_pmstashthr.op_pmstashpv : NULL) # if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) # define PmopSTASHPV_set(o,pv) ({ \ assert((o)->op_pmflags & PMf_ONCE); \ - ((o)->op_pmstashstartu.op_pmstashpv = savesharedpv(pv)); \ + ((o)->op_pmstashstartu.op_pmstashthr.op_pmstashpv = savesharedpv(pv)); \ }) # else # define PmopSTASHPV_set(o,pv) \ - ((o)->op_pmstashstartu.op_pmstashpv = savesharedpv(pv)) + ((o)->op_pmstashstartu.op_pmstashthr.op_pmstashpv = savesharedpv(pv)) # endif -# define PmopSTASH(o) (PmopSTASHPV(o) \ - ? gv_stashpv((o)->op_pmstashstartu.op_pmstashpv,GV_ADD) : NULL) -# define PmopSTASH_set(o,hv) PmopSTASHPV_set(o, ((hv) ? HvNAME_get(hv) : NULL)) +# define PmopSTASH_flags(o) ((o)->op_pmstashstartu.op_pmstashthr.op_pmstashflags) +# define PmopSTASH_flags_set(o,flags) ((o)->op_pmstashstartu.op_pmstashthr.op_pmstashflags = flags) +# define PmopSTASH(o) (PmopSTASHPV(o) \ + ? gv_stashpv((o)->op_pmstashstartu.op_pmstashthr.op_pmstashpv, \ + GV_ADD | PmopSTASH_flags(o)) : NULL) +# define PmopSTASH_set(o,hv) (PmopSTASHPV_set(o, (hv) ? HvNAME_get(hv) : NULL), \ + PmopSTASH_flags_set(o, \ + ((hv) && HvNAME_HEK(hv) && \ + HvNAMEUTF8(hv)) \ + ? SVf_UTF8 \ + : 0)) # define PmopSTASH_free(o) PerlMemShared_free(PmopSTASHPV(o)) #else @@ -538,7 +580,7 @@ struct loop { # define Nullop ((OP*)NULL) #endif -/* Lowest byte-and-a-bit of PL_opargs */ +/* Lowest byte of PL_opargs */ #define OA_MARK 1 #define OA_FOLDCONST 2 #define OA_RETSCALAR 4 @@ -642,7 +684,7 @@ least an C. /* no longer used anywhere in core */ #ifndef PERL_CORE #define cv_ckproto(cv, gv, p) \ - cv_ckproto_len((cv), (gv), (p), (p) ? strlen(p) : 0) + cv_ckproto_len_flags((cv), (gv), (p), (p) ? strlen(p) : 0, 0) #endif #ifdef PERL_CORE @@ -763,6 +805,12 @@ preprocessing token; the type of I depends on I. #define RV2CVOPCV_MARK_EARLY 0x00000001 #define RV2CVOPCV_RETURN_NAME_GV 0x00000002 +#define op_lvalue(op,t) Perl_op_lvalue_flags(aTHX_ op,t,0) + +/* flags for op_lvalue_flags */ + +#define OP_LVALUE_NO_CROAK 1 + /* =head1 Custom Operators @@ -954,6 +1002,22 @@ struct token { * ~ =~ operator */ +/* +=head1 Hook manipulation +*/ + +#ifdef USE_ITHREADS +# define OP_CHECK_MUTEX_INIT MUTEX_INIT(&PL_check_mutex) +# define OP_CHECK_MUTEX_LOCK MUTEX_LOCK(&PL_check_mutex) +# define OP_CHECK_MUTEX_UNLOCK MUTEX_UNLOCK(&PL_check_mutex) +# define OP_CHECK_MUTEX_TERM MUTEX_DESTROY(&PL_check_mutex) +#else +# define OP_CHECK_MUTEX_INIT NOOP +# define OP_CHECK_MUTEX_LOCK NOOP +# define OP_CHECK_MUTEX_UNLOCK NOOP +# define OP_CHECK_MUTEX_TERM NOOP +#endif + /* * Local variables: * c-indentation-style: bsd diff --git a/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h b/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h index 4c3fe2c42c2..4e173504c5d 100644 --- a/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h +++ b/Master/tlpkg/tlperl/lib/CORE/op_reg_common.h @@ -2,7 +2,7 @@ * * Definitions common to by op.h and regexp.h * - * Copyright (C) 2010 by Larry Wall and others + * Copyright (C) 2010, 2011 by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -48,9 +48,9 @@ typedef enum { #define _RXf_PMf_CHARSET_SHIFT ((RXf_PMf_STD_PMMOD_SHIFT)+5) #define RXf_PMf_CHARSET (7 << (_RXf_PMf_CHARSET_SHIFT)) /* 3 bits */ -/* embed.pl doesn't yet know how to handle static inline functions, so - manually decorate them here with gcc-style attributes. -*/ +/* Manually decorate these functions here with gcc-style attributes just to + * avoid making the regex_charset typedef global, which it would need to be for + * proto.h to understand it */ PERL_STATIC_INLINE void set_regex_charset(U32 * const flags, const regex_charset cs) __attribute__nonnull__(1); diff --git a/Master/tlpkg/tlperl/lib/CORE/opcode.h b/Master/tlpkg/tlperl/lib/CORE/opcode.h index 4f0e1c658a4..0a9628da928 100644 --- a/Master/tlpkg/tlperl/lib/CORE/opcode.h +++ b/Master/tlpkg/tlperl/lib/CORE/opcode.h @@ -18,12 +18,15 @@ #define Perl_pp_scalar Perl_pp_null #define Perl_pp_padany Perl_unimplemented_op #define Perl_pp_regcmaybe Perl_pp_null +#define Perl_pp_transr Perl_pp_trans #define Perl_pp_chomp Perl_pp_chop #define Perl_pp_schomp Perl_pp_schop #define Perl_pp_i_preinc Perl_pp_preinc -#define Perl_pp_i_predec Perl_pp_predec +#define Perl_pp_predec Perl_pp_preinc +#define Perl_pp_i_predec Perl_pp_preinc #define Perl_pp_i_postinc Perl_pp_postinc -#define Perl_pp_i_postdec Perl_pp_postdec +#define Perl_pp_postdec Perl_pp_postinc +#define Perl_pp_i_postdec Perl_pp_postinc #define Perl_pp_slt Perl_pp_sle #define Perl_pp_sgt Perl_pp_sle #define Perl_pp_sge Perl_pp_sle @@ -35,6 +38,7 @@ #define Perl_pp_hex Perl_pp_oct #define Perl_pp_rindex Perl_pp_index #define Perl_pp_lcfirst Perl_pp_ucfirst +#define Perl_pp_aelemfast_lex Perl_pp_aelemfast #define Perl_pp_avalues Perl_pp_akeys #define Perl_pp_values Perl_do_kv #define Perl_pp_keys Perl_do_kv @@ -138,7 +142,6 @@ #define Perl_pp_custom Perl_unimplemented_op #define Perl_pp_reach Perl_pp_rkeys #define Perl_pp_rvalues Perl_pp_rkeys -#define Perl_pp_transr Perl_pp_trans START_EXTERN_C #ifndef DOINIT @@ -181,6 +184,7 @@ EXTCONST char* const PL_op_name[] = { "subst", "substcont", "trans", + "transr", "sassign", "aassign", "chop", @@ -273,6 +277,7 @@ EXTCONST char* const PL_op_name[] = { "quotemeta", "rv2av", "aelemfast", + "aelemfast_lex", "aelem", "aslice", "aeach", @@ -514,7 +519,9 @@ EXTCONST char* const PL_op_name[] = { "reach", "rkeys", "rvalues", - "transr", + "coreargs", + "runcv", + "fc", }; #endif @@ -558,6 +565,7 @@ EXTCONST char* const PL_op_desc[] = { "substitution (s///)", "substitution iterator", "transliteration (tr///)", + "transliteration (tr///)", "scalar assignment", "list assignment", "chop", @@ -650,6 +658,7 @@ EXTCONST char* const PL_op_desc[] = { "quotemeta", "array dereference", "constant array element", + "constant lexical array element", "array element", "array slice", "each on array", @@ -891,7 +900,9 @@ EXTCONST char* const PL_op_desc[] = { "each on reference", "keys on reference", "values on reference", - "transliteration (tr///)", + "CORE:: subroutine", + "__SUB__", + "fc", }; #endif @@ -949,6 +960,7 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ Perl_pp_subst, Perl_pp_substcont, Perl_pp_trans, + Perl_pp_transr, /* implemented by Perl_pp_trans */ Perl_pp_sassign, Perl_pp_aassign, Perl_pp_chop, @@ -961,12 +973,12 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ Perl_pp_pos, Perl_pp_preinc, Perl_pp_i_preinc, /* implemented by Perl_pp_preinc */ - Perl_pp_predec, - Perl_pp_i_predec, /* implemented by Perl_pp_predec */ + Perl_pp_predec, /* implemented by Perl_pp_preinc */ + Perl_pp_i_predec, /* implemented by Perl_pp_preinc */ Perl_pp_postinc, Perl_pp_i_postinc, /* implemented by Perl_pp_postinc */ - Perl_pp_postdec, - Perl_pp_i_postdec, /* implemented by Perl_pp_postdec */ + Perl_pp_postdec, /* implemented by Perl_pp_postinc */ + Perl_pp_i_postdec, /* implemented by Perl_pp_postinc */ Perl_pp_pow, Perl_pp_multiply, Perl_pp_i_multiply, @@ -1041,6 +1053,7 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ Perl_pp_quotemeta, Perl_pp_rv2av, Perl_pp_aelemfast, + Perl_pp_aelemfast_lex, /* implemented by Perl_pp_aelemfast */ Perl_pp_aelem, Perl_pp_aslice, Perl_pp_aeach, @@ -1282,7 +1295,9 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ Perl_pp_reach, /* implemented by Perl_pp_rkeys */ Perl_pp_rkeys, Perl_pp_rvalues, /* implemented by Perl_pp_rkeys */ - Perl_pp_transr, /* implemented by Perl_pp_trans */ + Perl_pp_coreargs, + Perl_pp_runcv, + Perl_pp_fc, } #endif #ifdef PERL_PPADDR_INITED @@ -1337,6 +1352,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_match, /* subst */ Perl_ck_null, /* substcont */ Perl_ck_match, /* trans */ + Perl_ck_match, /* transr */ Perl_ck_sassign, /* sassign */ Perl_ck_null, /* aassign */ Perl_ck_spair, /* chop */ @@ -1371,14 +1387,14 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_fun, /* stringify */ Perl_ck_bitop, /* left_shift */ Perl_ck_bitop, /* right_shift */ - Perl_ck_null, /* lt */ - Perl_ck_null, /* i_lt */ - Perl_ck_null, /* gt */ - Perl_ck_null, /* i_gt */ - Perl_ck_null, /* le */ - Perl_ck_null, /* i_le */ - Perl_ck_null, /* ge */ - Perl_ck_null, /* i_ge */ + Perl_ck_cmp, /* lt */ + Perl_ck_cmp, /* i_lt */ + Perl_ck_cmp, /* gt */ + Perl_ck_cmp, /* i_gt */ + Perl_ck_cmp, /* le */ + Perl_ck_cmp, /* i_le */ + Perl_ck_cmp, /* ge */ + Perl_ck_cmp, /* i_ge */ Perl_ck_null, /* eq */ Perl_ck_null, /* i_eq */ Perl_ck_null, /* ne */ @@ -1412,12 +1428,12 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_fun, /* hex */ Perl_ck_fun, /* oct */ Perl_ck_fun, /* abs */ - Perl_ck_fun, /* length */ + Perl_ck_length, /* length */ Perl_ck_substr, /* substr */ Perl_ck_fun, /* vec */ Perl_ck_index, /* index */ Perl_ck_index, /* rindex */ - Perl_ck_fun, /* sprintf */ + Perl_ck_lfun, /* sprintf */ Perl_ck_fun, /* formline */ Perl_ck_fun, /* ord */ Perl_ck_fun, /* chr */ @@ -1429,6 +1445,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_fun, /* quotemeta */ Perl_ck_rvconst, /* rv2av */ Perl_ck_null, /* aelemfast */ + Perl_ck_null, /* aelemfast_lex */ Perl_ck_null, /* aelem */ Perl_ck_null, /* aslice */ Perl_ck_each, /* aeach */ @@ -1443,7 +1460,7 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_null, /* helem */ Perl_ck_null, /* hslice */ Perl_ck_fun, /* boolkeys */ - Perl_ck_unpack, /* unpack */ + Perl_ck_fun, /* unpack */ Perl_ck_fun, /* pack */ Perl_ck_split, /* split */ Perl_ck_join, /* join */ @@ -1531,8 +1548,8 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_fun, /* sysread */ Perl_ck_fun, /* syswrite */ Perl_ck_eof, /* eof */ - Perl_ck_fun, /* tell */ - Perl_ck_fun, /* seek */ + Perl_ck_tell, /* tell */ + Perl_ck_tell, /* seek */ Perl_ck_trunc, /* truncate */ Perl_ck_fun, /* fcntl */ Perl_ck_fun, /* ioctl */ @@ -1670,7 +1687,9 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_each, /* reach */ Perl_ck_each, /* rkeys */ Perl_ck_each, /* rvalues */ - Perl_ck_match, /* transr */ + Perl_ck_null, /* coreargs */ + Perl_ck_null, /* runcv */ + Perl_ck_fun, /* fc */ } #endif #ifdef PERL_CHECK_INITED @@ -1719,6 +1738,7 @@ EXTCONST U32 PL_opargs[] = { 0x00001544, /* subst */ 0x00000344, /* substcont */ 0x00001804, /* trans */ + 0x00001804, /* transr */ 0x00000004, /* sassign */ 0x00022208, /* aassign */ 0x00002b0d, /* chop */ @@ -1811,6 +1831,7 @@ EXTCONST U32 PL_opargs[] = { 0x00009b8e, /* quotemeta */ 0x00000148, /* rv2av */ 0x00013604, /* aelemfast */ + 0x00013040, /* aelemfast_lex */ 0x00013204, /* aelem */ 0x00023401, /* aslice */ 0x00003b00, /* aeach */ @@ -1825,7 +1846,7 @@ EXTCONST U32 PL_opargs[] = { 0x00014204, /* helem */ 0x00024401, /* hslice */ 0x00004b00, /* boolkeys */ - 0x00091400, /* unpack */ + 0x00091480, /* unpack */ 0x0002140d, /* pack */ 0x00111408, /* split */ 0x0002140d, /* join */ @@ -1932,8 +1953,8 @@ EXTCONST U32 PL_opargs[] = { 0x01116404, /* ssockopt */ 0x00006b04, /* getsockname */ 0x00006b04, /* getpeername */ - 0x00006c80, /* lstat */ - 0x00006c80, /* stat */ + 0x0000ec80, /* lstat */ + 0x0000ec80, /* stat */ 0x00006c84, /* ftrread */ 0x00006c84, /* ftrwrite */ 0x00006c84, /* ftrexec */ @@ -2010,7 +2031,7 @@ EXTCONST U32 PL_opargs[] = { 0x00009bc0, /* require */ 0x00001140, /* dofile */ 0x00000604, /* hintseval */ - 0x00001b40, /* entereval */ + 0x00009bc0, /* entereval */ 0x00001100, /* leaveeval */ 0x00000340, /* entertry */ 0x00000400, /* leavetry */ @@ -2052,7 +2073,9 @@ EXTCONST U32 PL_opargs[] = { 0x00001b00, /* reach */ 0x00001b08, /* rkeys */ 0x00001b08, /* rvalues */ - 0x00001804, /* transr */ + 0x00000600, /* coreargs */ + 0x00000004, /* runcv */ + 0x00009b8e, /* fc */ }; #endif diff --git a/Master/tlpkg/tlperl/lib/CORE/opnames.h b/Master/tlpkg/tlperl/lib/CORE/opnames.h index f3fab8b1f86..8b6a39a1619 100644 --- a/Master/tlpkg/tlperl/lib/CORE/opnames.h +++ b/Master/tlpkg/tlperl/lib/CORE/opnames.h @@ -50,348 +50,353 @@ typedef enum opcode { OP_SUBST = 33, OP_SUBSTCONT = 34, OP_TRANS = 35, - OP_SASSIGN = 36, - OP_AASSIGN = 37, - OP_CHOP = 38, - OP_SCHOP = 39, - OP_CHOMP = 40, - OP_SCHOMP = 41, - OP_DEFINED = 42, - OP_UNDEF = 43, - OP_STUDY = 44, - OP_POS = 45, - OP_PREINC = 46, - OP_I_PREINC = 47, - OP_PREDEC = 48, - OP_I_PREDEC = 49, - OP_POSTINC = 50, - OP_I_POSTINC = 51, - OP_POSTDEC = 52, - OP_I_POSTDEC = 53, - OP_POW = 54, - OP_MULTIPLY = 55, - OP_I_MULTIPLY = 56, - OP_DIVIDE = 57, - OP_I_DIVIDE = 58, - OP_MODULO = 59, - OP_I_MODULO = 60, - OP_REPEAT = 61, - OP_ADD = 62, - OP_I_ADD = 63, - OP_SUBTRACT = 64, - OP_I_SUBTRACT = 65, - OP_CONCAT = 66, - OP_STRINGIFY = 67, - OP_LEFT_SHIFT = 68, - OP_RIGHT_SHIFT = 69, - OP_LT = 70, - OP_I_LT = 71, - OP_GT = 72, - OP_I_GT = 73, - OP_LE = 74, - OP_I_LE = 75, - OP_GE = 76, - OP_I_GE = 77, - OP_EQ = 78, - OP_I_EQ = 79, - OP_NE = 80, - OP_I_NE = 81, - OP_NCMP = 82, - OP_I_NCMP = 83, - OP_SLT = 84, - OP_SGT = 85, - OP_SLE = 86, - OP_SGE = 87, - OP_SEQ = 88, - OP_SNE = 89, - OP_SCMP = 90, - OP_BIT_AND = 91, - OP_BIT_XOR = 92, - OP_BIT_OR = 93, - OP_NEGATE = 94, - OP_I_NEGATE = 95, - OP_NOT = 96, - OP_COMPLEMENT = 97, - OP_SMARTMATCH = 98, - OP_ATAN2 = 99, - OP_SIN = 100, - OP_COS = 101, - OP_RAND = 102, - OP_SRAND = 103, - OP_EXP = 104, - OP_LOG = 105, - OP_SQRT = 106, - OP_INT = 107, - OP_HEX = 108, - OP_OCT = 109, - OP_ABS = 110, - OP_LENGTH = 111, - OP_SUBSTR = 112, - OP_VEC = 113, - OP_INDEX = 114, - OP_RINDEX = 115, - OP_SPRINTF = 116, - OP_FORMLINE = 117, - OP_ORD = 118, - OP_CHR = 119, - OP_CRYPT = 120, - OP_UCFIRST = 121, - OP_LCFIRST = 122, - OP_UC = 123, - OP_LC = 124, - OP_QUOTEMETA = 125, - OP_RV2AV = 126, - OP_AELEMFAST = 127, - OP_AELEM = 128, - OP_ASLICE = 129, - OP_AEACH = 130, - OP_AKEYS = 131, - OP_AVALUES = 132, - OP_EACH = 133, - OP_VALUES = 134, - OP_KEYS = 135, - OP_DELETE = 136, - OP_EXISTS = 137, - OP_RV2HV = 138, - OP_HELEM = 139, - OP_HSLICE = 140, - OP_BOOLKEYS = 141, - OP_UNPACK = 142, - OP_PACK = 143, - OP_SPLIT = 144, - OP_JOIN = 145, - OP_LIST = 146, - OP_LSLICE = 147, - OP_ANONLIST = 148, - OP_ANONHASH = 149, - OP_SPLICE = 150, - OP_PUSH = 151, - OP_POP = 152, - OP_SHIFT = 153, - OP_UNSHIFT = 154, - OP_SORT = 155, - OP_REVERSE = 156, - OP_GREPSTART = 157, - OP_GREPWHILE = 158, - OP_MAPSTART = 159, - OP_MAPWHILE = 160, - OP_RANGE = 161, - OP_FLIP = 162, - OP_FLOP = 163, - OP_AND = 164, - OP_OR = 165, - OP_XOR = 166, - OP_DOR = 167, - OP_COND_EXPR = 168, - OP_ANDASSIGN = 169, - OP_ORASSIGN = 170, - OP_DORASSIGN = 171, - OP_METHOD = 172, - OP_ENTERSUB = 173, - OP_LEAVESUB = 174, - OP_LEAVESUBLV = 175, - OP_CALLER = 176, - OP_WARN = 177, - OP_DIE = 178, - OP_RESET = 179, - OP_LINESEQ = 180, - OP_NEXTSTATE = 181, - OP_DBSTATE = 182, - OP_UNSTACK = 183, - OP_ENTER = 184, - OP_LEAVE = 185, - OP_SCOPE = 186, - OP_ENTERITER = 187, - OP_ITER = 188, - OP_ENTERLOOP = 189, - OP_LEAVELOOP = 190, - OP_RETURN = 191, - OP_LAST = 192, - OP_NEXT = 193, - OP_REDO = 194, - OP_DUMP = 195, - OP_GOTO = 196, - OP_EXIT = 197, - OP_METHOD_NAMED = 198, - OP_ENTERGIVEN = 199, - OP_LEAVEGIVEN = 200, - OP_ENTERWHEN = 201, - OP_LEAVEWHEN = 202, - OP_BREAK = 203, - OP_CONTINUE = 204, - OP_OPEN = 205, - OP_CLOSE = 206, - OP_PIPE_OP = 207, - OP_FILENO = 208, - OP_UMASK = 209, - OP_BINMODE = 210, - OP_TIE = 211, - OP_UNTIE = 212, - OP_TIED = 213, - OP_DBMOPEN = 214, - OP_DBMCLOSE = 215, - OP_SSELECT = 216, - OP_SELECT = 217, - OP_GETC = 218, - OP_READ = 219, - OP_ENTERWRITE = 220, - OP_LEAVEWRITE = 221, - OP_PRTF = 222, - OP_PRINT = 223, - OP_SAY = 224, - OP_SYSOPEN = 225, - OP_SYSSEEK = 226, - OP_SYSREAD = 227, - OP_SYSWRITE = 228, - OP_EOF = 229, - OP_TELL = 230, - OP_SEEK = 231, - OP_TRUNCATE = 232, - OP_FCNTL = 233, - OP_IOCTL = 234, - OP_FLOCK = 235, - OP_SEND = 236, - OP_RECV = 237, - OP_SOCKET = 238, - OP_SOCKPAIR = 239, - OP_BIND = 240, - OP_CONNECT = 241, - OP_LISTEN = 242, - OP_ACCEPT = 243, - OP_SHUTDOWN = 244, - OP_GSOCKOPT = 245, - OP_SSOCKOPT = 246, - OP_GETSOCKNAME = 247, - OP_GETPEERNAME = 248, - OP_LSTAT = 249, - OP_STAT = 250, - OP_FTRREAD = 251, - OP_FTRWRITE = 252, - OP_FTREXEC = 253, - OP_FTEREAD = 254, - OP_FTEWRITE = 255, - OP_FTEEXEC = 256, - OP_FTIS = 257, - OP_FTSIZE = 258, - OP_FTMTIME = 259, - OP_FTATIME = 260, - OP_FTCTIME = 261, - OP_FTROWNED = 262, - OP_FTEOWNED = 263, - OP_FTZERO = 264, - OP_FTSOCK = 265, - OP_FTCHR = 266, - OP_FTBLK = 267, - OP_FTFILE = 268, - OP_FTDIR = 269, - OP_FTPIPE = 270, - OP_FTSUID = 271, - OP_FTSGID = 272, - OP_FTSVTX = 273, - OP_FTLINK = 274, - OP_FTTTY = 275, - OP_FTTEXT = 276, - OP_FTBINARY = 277, - OP_CHDIR = 278, - OP_CHOWN = 279, - OP_CHROOT = 280, - OP_UNLINK = 281, - OP_CHMOD = 282, - OP_UTIME = 283, - OP_RENAME = 284, - OP_LINK = 285, - OP_SYMLINK = 286, - OP_READLINK = 287, - OP_MKDIR = 288, - OP_RMDIR = 289, - OP_OPEN_DIR = 290, - OP_READDIR = 291, - OP_TELLDIR = 292, - OP_SEEKDIR = 293, - OP_REWINDDIR = 294, - OP_CLOSEDIR = 295, - OP_FORK = 296, - OP_WAIT = 297, - OP_WAITPID = 298, - OP_SYSTEM = 299, - OP_EXEC = 300, - OP_KILL = 301, - OP_GETPPID = 302, - OP_GETPGRP = 303, - OP_SETPGRP = 304, - OP_GETPRIORITY = 305, - OP_SETPRIORITY = 306, - OP_TIME = 307, - OP_TMS = 308, - OP_LOCALTIME = 309, - OP_GMTIME = 310, - OP_ALARM = 311, - OP_SLEEP = 312, - OP_SHMGET = 313, - OP_SHMCTL = 314, - OP_SHMREAD = 315, - OP_SHMWRITE = 316, - OP_MSGGET = 317, - OP_MSGCTL = 318, - OP_MSGSND = 319, - OP_MSGRCV = 320, - OP_SEMOP = 321, - OP_SEMGET = 322, - OP_SEMCTL = 323, - OP_REQUIRE = 324, - OP_DOFILE = 325, - OP_HINTSEVAL = 326, - OP_ENTEREVAL = 327, - OP_LEAVEEVAL = 328, - OP_ENTERTRY = 329, - OP_LEAVETRY = 330, - OP_GHBYNAME = 331, - OP_GHBYADDR = 332, - OP_GHOSTENT = 333, - OP_GNBYNAME = 334, - OP_GNBYADDR = 335, - OP_GNETENT = 336, - OP_GPBYNAME = 337, - OP_GPBYNUMBER = 338, - OP_GPROTOENT = 339, - OP_GSBYNAME = 340, - OP_GSBYPORT = 341, - OP_GSERVENT = 342, - OP_SHOSTENT = 343, - OP_SNETENT = 344, - OP_SPROTOENT = 345, - OP_SSERVENT = 346, - OP_EHOSTENT = 347, - OP_ENETENT = 348, - OP_EPROTOENT = 349, - OP_ESERVENT = 350, - OP_GPWNAM = 351, - OP_GPWUID = 352, - OP_GPWENT = 353, - OP_SPWENT = 354, - OP_EPWENT = 355, - OP_GGRNAM = 356, - OP_GGRGID = 357, - OP_GGRENT = 358, - OP_SGRENT = 359, - OP_EGRENT = 360, - OP_GETLOGIN = 361, - OP_SYSCALL = 362, - OP_LOCK = 363, - OP_ONCE = 364, - OP_CUSTOM = 365, - OP_REACH = 366, - OP_RKEYS = 367, - OP_RVALUES = 368, - OP_TRANSR = 369, + OP_TRANSR = 36, + OP_SASSIGN = 37, + OP_AASSIGN = 38, + OP_CHOP = 39, + OP_SCHOP = 40, + OP_CHOMP = 41, + OP_SCHOMP = 42, + OP_DEFINED = 43, + OP_UNDEF = 44, + OP_STUDY = 45, + OP_POS = 46, + OP_PREINC = 47, + OP_I_PREINC = 48, + OP_PREDEC = 49, + OP_I_PREDEC = 50, + OP_POSTINC = 51, + OP_I_POSTINC = 52, + OP_POSTDEC = 53, + OP_I_POSTDEC = 54, + OP_POW = 55, + OP_MULTIPLY = 56, + OP_I_MULTIPLY = 57, + OP_DIVIDE = 58, + OP_I_DIVIDE = 59, + OP_MODULO = 60, + OP_I_MODULO = 61, + OP_REPEAT = 62, + OP_ADD = 63, + OP_I_ADD = 64, + OP_SUBTRACT = 65, + OP_I_SUBTRACT = 66, + OP_CONCAT = 67, + OP_STRINGIFY = 68, + OP_LEFT_SHIFT = 69, + OP_RIGHT_SHIFT = 70, + OP_LT = 71, + OP_I_LT = 72, + OP_GT = 73, + OP_I_GT = 74, + OP_LE = 75, + OP_I_LE = 76, + OP_GE = 77, + OP_I_GE = 78, + OP_EQ = 79, + OP_I_EQ = 80, + OP_NE = 81, + OP_I_NE = 82, + OP_NCMP = 83, + OP_I_NCMP = 84, + OP_SLT = 85, + OP_SGT = 86, + OP_SLE = 87, + OP_SGE = 88, + OP_SEQ = 89, + OP_SNE = 90, + OP_SCMP = 91, + OP_BIT_AND = 92, + OP_BIT_XOR = 93, + OP_BIT_OR = 94, + OP_NEGATE = 95, + OP_I_NEGATE = 96, + OP_NOT = 97, + OP_COMPLEMENT = 98, + OP_SMARTMATCH = 99, + OP_ATAN2 = 100, + OP_SIN = 101, + OP_COS = 102, + OP_RAND = 103, + OP_SRAND = 104, + OP_EXP = 105, + OP_LOG = 106, + OP_SQRT = 107, + OP_INT = 108, + OP_HEX = 109, + OP_OCT = 110, + OP_ABS = 111, + OP_LENGTH = 112, + OP_SUBSTR = 113, + OP_VEC = 114, + OP_INDEX = 115, + OP_RINDEX = 116, + OP_SPRINTF = 117, + OP_FORMLINE = 118, + OP_ORD = 119, + OP_CHR = 120, + OP_CRYPT = 121, + OP_UCFIRST = 122, + OP_LCFIRST = 123, + OP_UC = 124, + OP_LC = 125, + OP_QUOTEMETA = 126, + OP_RV2AV = 127, + OP_AELEMFAST = 128, + OP_AELEMFAST_LEX = 129, + OP_AELEM = 130, + OP_ASLICE = 131, + OP_AEACH = 132, + OP_AKEYS = 133, + OP_AVALUES = 134, + OP_EACH = 135, + OP_VALUES = 136, + OP_KEYS = 137, + OP_DELETE = 138, + OP_EXISTS = 139, + OP_RV2HV = 140, + OP_HELEM = 141, + OP_HSLICE = 142, + OP_BOOLKEYS = 143, + OP_UNPACK = 144, + OP_PACK = 145, + OP_SPLIT = 146, + OP_JOIN = 147, + OP_LIST = 148, + OP_LSLICE = 149, + OP_ANONLIST = 150, + OP_ANONHASH = 151, + OP_SPLICE = 152, + OP_PUSH = 153, + OP_POP = 154, + OP_SHIFT = 155, + OP_UNSHIFT = 156, + OP_SORT = 157, + OP_REVERSE = 158, + OP_GREPSTART = 159, + OP_GREPWHILE = 160, + OP_MAPSTART = 161, + OP_MAPWHILE = 162, + OP_RANGE = 163, + OP_FLIP = 164, + OP_FLOP = 165, + OP_AND = 166, + OP_OR = 167, + OP_XOR = 168, + OP_DOR = 169, + OP_COND_EXPR = 170, + OP_ANDASSIGN = 171, + OP_ORASSIGN = 172, + OP_DORASSIGN = 173, + OP_METHOD = 174, + OP_ENTERSUB = 175, + OP_LEAVESUB = 176, + OP_LEAVESUBLV = 177, + OP_CALLER = 178, + OP_WARN = 179, + OP_DIE = 180, + OP_RESET = 181, + OP_LINESEQ = 182, + OP_NEXTSTATE = 183, + OP_DBSTATE = 184, + OP_UNSTACK = 185, + OP_ENTER = 186, + OP_LEAVE = 187, + OP_SCOPE = 188, + OP_ENTERITER = 189, + OP_ITER = 190, + OP_ENTERLOOP = 191, + OP_LEAVELOOP = 192, + OP_RETURN = 193, + OP_LAST = 194, + OP_NEXT = 195, + OP_REDO = 196, + OP_DUMP = 197, + OP_GOTO = 198, + OP_EXIT = 199, + OP_METHOD_NAMED = 200, + OP_ENTERGIVEN = 201, + OP_LEAVEGIVEN = 202, + OP_ENTERWHEN = 203, + OP_LEAVEWHEN = 204, + OP_BREAK = 205, + OP_CONTINUE = 206, + OP_OPEN = 207, + OP_CLOSE = 208, + OP_PIPE_OP = 209, + OP_FILENO = 210, + OP_UMASK = 211, + OP_BINMODE = 212, + OP_TIE = 213, + OP_UNTIE = 214, + OP_TIED = 215, + OP_DBMOPEN = 216, + OP_DBMCLOSE = 217, + OP_SSELECT = 218, + OP_SELECT = 219, + OP_GETC = 220, + OP_READ = 221, + OP_ENTERWRITE = 222, + OP_LEAVEWRITE = 223, + OP_PRTF = 224, + OP_PRINT = 225, + OP_SAY = 226, + OP_SYSOPEN = 227, + OP_SYSSEEK = 228, + OP_SYSREAD = 229, + OP_SYSWRITE = 230, + OP_EOF = 231, + OP_TELL = 232, + OP_SEEK = 233, + OP_TRUNCATE = 234, + OP_FCNTL = 235, + OP_IOCTL = 236, + OP_FLOCK = 237, + OP_SEND = 238, + OP_RECV = 239, + OP_SOCKET = 240, + OP_SOCKPAIR = 241, + OP_BIND = 242, + OP_CONNECT = 243, + OP_LISTEN = 244, + OP_ACCEPT = 245, + OP_SHUTDOWN = 246, + OP_GSOCKOPT = 247, + OP_SSOCKOPT = 248, + OP_GETSOCKNAME = 249, + OP_GETPEERNAME = 250, + OP_LSTAT = 251, + OP_STAT = 252, + OP_FTRREAD = 253, + OP_FTRWRITE = 254, + OP_FTREXEC = 255, + OP_FTEREAD = 256, + OP_FTEWRITE = 257, + OP_FTEEXEC = 258, + OP_FTIS = 259, + OP_FTSIZE = 260, + OP_FTMTIME = 261, + OP_FTATIME = 262, + OP_FTCTIME = 263, + OP_FTROWNED = 264, + OP_FTEOWNED = 265, + OP_FTZERO = 266, + OP_FTSOCK = 267, + OP_FTCHR = 268, + OP_FTBLK = 269, + OP_FTFILE = 270, + OP_FTDIR = 271, + OP_FTPIPE = 272, + OP_FTSUID = 273, + OP_FTSGID = 274, + OP_FTSVTX = 275, + OP_FTLINK = 276, + OP_FTTTY = 277, + OP_FTTEXT = 278, + OP_FTBINARY = 279, + OP_CHDIR = 280, + OP_CHOWN = 281, + OP_CHROOT = 282, + OP_UNLINK = 283, + OP_CHMOD = 284, + OP_UTIME = 285, + OP_RENAME = 286, + OP_LINK = 287, + OP_SYMLINK = 288, + OP_READLINK = 289, + OP_MKDIR = 290, + OP_RMDIR = 291, + OP_OPEN_DIR = 292, + OP_READDIR = 293, + OP_TELLDIR = 294, + OP_SEEKDIR = 295, + OP_REWINDDIR = 296, + OP_CLOSEDIR = 297, + OP_FORK = 298, + OP_WAIT = 299, + OP_WAITPID = 300, + OP_SYSTEM = 301, + OP_EXEC = 302, + OP_KILL = 303, + OP_GETPPID = 304, + OP_GETPGRP = 305, + OP_SETPGRP = 306, + OP_GETPRIORITY = 307, + OP_SETPRIORITY = 308, + OP_TIME = 309, + OP_TMS = 310, + OP_LOCALTIME = 311, + OP_GMTIME = 312, + OP_ALARM = 313, + OP_SLEEP = 314, + OP_SHMGET = 315, + OP_SHMCTL = 316, + OP_SHMREAD = 317, + OP_SHMWRITE = 318, + OP_MSGGET = 319, + OP_MSGCTL = 320, + OP_MSGSND = 321, + OP_MSGRCV = 322, + OP_SEMOP = 323, + OP_SEMGET = 324, + OP_SEMCTL = 325, + OP_REQUIRE = 326, + OP_DOFILE = 327, + OP_HINTSEVAL = 328, + OP_ENTEREVAL = 329, + OP_LEAVEEVAL = 330, + OP_ENTERTRY = 331, + OP_LEAVETRY = 332, + OP_GHBYNAME = 333, + OP_GHBYADDR = 334, + OP_GHOSTENT = 335, + OP_GNBYNAME = 336, + OP_GNBYADDR = 337, + OP_GNETENT = 338, + OP_GPBYNAME = 339, + OP_GPBYNUMBER = 340, + OP_GPROTOENT = 341, + OP_GSBYNAME = 342, + OP_GSBYPORT = 343, + OP_GSERVENT = 344, + OP_SHOSTENT = 345, + OP_SNETENT = 346, + OP_SPROTOENT = 347, + OP_SSERVENT = 348, + OP_EHOSTENT = 349, + OP_ENETENT = 350, + OP_EPROTOENT = 351, + OP_ESERVENT = 352, + OP_GPWNAM = 353, + OP_GPWUID = 354, + OP_GPWENT = 355, + OP_SPWENT = 356, + OP_EPWENT = 357, + OP_GGRNAM = 358, + OP_GGRGID = 359, + OP_GGRENT = 360, + OP_SGRENT = 361, + OP_EGRENT = 362, + OP_GETLOGIN = 363, + OP_SYSCALL = 364, + OP_LOCK = 365, + OP_ONCE = 366, + OP_CUSTOM = 367, + OP_REACH = 368, + OP_RKEYS = 369, + OP_RVALUES = 370, + OP_COREARGS = 371, + OP_RUNCV = 372, + OP_FC = 373, OP_max } opcode; -#define MAXO 370 +#define MAXO 374 -/* the OP_IS_(SOCKET|FILETEST) macros are optimized to a simple range - check because all the member OPs are contiguous in opcode.pl - table. opcode.pl verifies the range contiguity. */ +/* the OP_IS_* macros are optimized to a simple range check because + all the member OPs are contiguous in regen/opcodes table. + opcode.pl verifies the range contiguity, or generates an OR-equals + expression */ #define OP_IS_SOCKET(op) \ ((op) >= OP_SEND && (op) <= OP_GETPEERNAME) @@ -402,4 +407,10 @@ typedef enum opcode { #define OP_IS_FILETEST_ACCESS(op) \ ((op) >= OP_FTRREAD && (op) <= OP_FTEEXEC) +#define OP_IS_NUMCOMPARE(op) \ + ((op) >= OP_LT && (op) <= OP_I_NCMP) + +#define OP_IS_DIRHOP(op) \ + ((op) >= OP_READDIR && (op) <= OP_CLOSEDIR) + /* ex: set ro: */ diff --git a/Master/tlpkg/tlperl/lib/CORE/pad.h b/Master/tlpkg/tlperl/lib/CORE/pad.h index dec267ae27b..aa6521ff9b2 100644 --- a/Master/tlpkg/tlperl/lib/CORE/pad.h +++ b/Master/tlpkg/tlperl/lib/CORE/pad.h @@ -1,6 +1,7 @@ /* pad.h * - * Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 by Larry Wall and others + * Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, + * 2009, 2010, 2011 by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -10,7 +11,9 @@ * variables, op targets and constants. */ - +/* +=head1 Pad Data Structures +*/ /* a padlist is currently just an AV; but that might change, @@ -118,15 +121,12 @@ typedef enum { padtidy_FORMAT /* or a format */ } padtidy_type; -#ifdef PERL_CORE +/* flags for pad_add_name_pvn. */ -/* flags for pad_add_name. SVf_UTF8 will also be valid in the future. */ - -# define padadd_OUR 0x01 /* our declaration. */ -# define padadd_STATE 0x02 /* state declaration. */ -# define padadd_NO_DUP_CHECK 0x04 /* skip warning on dups. */ - -#endif +#define padadd_OUR 0x01 /* our declaration. */ +#define padadd_STATE 0x02 /* state declaration. */ +#define padadd_NO_DUP_CHECK 0x04 /* skip warning on dups. */ +#define padadd_UTF8_NAME SVf_UTF8 /* name is UTF-8 encoded. */ /* ASSERT_CURPAD_LEGAL and ASSERT_CURPAD_ACTIVE respectively determine * whether PL_comppad and PL_curpad are consistent and whether they have @@ -309,8 +309,7 @@ ling pad (lvalue) to C. Note that C is hijacked for this purpose #define PAD_COMPNAME_SV(po) (*av_fetch(PL_comppad_name, (po), FALSE)) #define PAD_COMPNAME_FLAGS(po) SvFLAGS(PAD_COMPNAME_SV(po)) -#define PAD_COMPNAME_FLAGS_isOUR(po) \ - ((PAD_COMPNAME_FLAGS(po) & (SVpad_NAME|SVpad_OUR)) == (SVpad_NAME|SVpad_OUR)) +#define PAD_COMPNAME_FLAGS_isOUR(po) SvPAD_OUR(PAD_COMPNAME_SV(po)) #define PAD_COMPNAME_PV(po) SvPV_nolen(PAD_COMPNAME_SV(po)) #define PAD_COMPNAME_TYPE(po) pad_compname_type(po) @@ -324,27 +323,12 @@ ling pad (lvalue) to C. Note that C is hijacked for this purpose /* -=for apidoc m|void|PAD_DUP|PADLIST dstpad|PADLIST srcpad|CLONE_PARAMS* param -Clone a padlist. - =for apidoc m|void|PAD_CLONE_VARS|PerlInterpreter *proto_perl|CLONE_PARAMS* param Clone the state variables associated with running and compiling pads. =cut */ - -#define PAD_DUP(dstpad, srcpad, param) \ - if ((srcpad) && !AvREAL(srcpad)) { \ - /* XXX padlists are real, but pretend to be not */ \ - AvREAL_on(srcpad); \ - (dstpad) = av_dup_inc((srcpad), param); \ - AvREAL_off(srcpad); \ - AvREAL_off(dstpad); \ - } \ - else \ - (dstpad) = av_dup_inc((srcpad), param); - /* NB - we set PL_comppad to null unless it points at a value that * has already been dup'ed, ie it points to part of an active padlist. * Otherwise PL_comppad ends up being a leaked scalar in code like @@ -354,7 +338,7 @@ Clone the state variables associated with running and compiling pads. * sub's CV or padlist. */ #define PAD_CLONE_VARS(proto_perl, param) \ - PL_comppad = MUTABLE_AV(ptr_table_fetch(PL_ptr_table, proto_perl->Icomppad)); \ + PL_comppad = av_dup(proto_perl->Icomppad, param); \ PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \ PL_comppad_name = av_dup(proto_perl->Icomppad_name, param); \ PL_comppad_name_fill = proto_perl->Icomppad_name_fill; \ @@ -366,6 +350,30 @@ Clone the state variables associated with running and compiling pads. PL_pad_reset_pending = proto_perl->Ipad_reset_pending; \ PL_cop_seqmax = proto_perl->Icop_seqmax; +/* +=for apidoc Am|PADOFFSET|pad_add_name_pvs|const char *name|U32 flags|HV *typestash|HV *ourstash + +Exactly like L, but takes a literal string instead +of a string/length pair. + +=cut +*/ + +#define pad_add_name_pvs(name,flags,typestash,ourstash) \ + Perl_pad_add_name_pvn(aTHX_ STR_WITH_LEN(name), flags, typestash, ourstash) + +/* +=for apidoc Am|PADOFFSET|pad_findmy_pvs|const char *name|U32 flags + +Exactly like L, but takes a literal string instead +of a string/length pair. + +=cut +*/ + +#define pad_findmy_pvs(name,flags) \ + Perl_pad_findmy_pvn(aTHX_ STR_WITH_LEN(name), flags) + /* * Local variables: * c-indentation-style: bsd diff --git a/Master/tlpkg/tlperl/lib/CORE/parser.h b/Master/tlpkg/tlperl/lib/CORE/parser.h index 17ced8f073a..1e9c71d3ce8 100644 --- a/Master/tlpkg/tlperl/lib/CORE/parser.h +++ b/Master/tlpkg/tlperl/lib/CORE/parser.h @@ -1,12 +1,12 @@ /* parser.h * - * Copyright (c) 2006, 2007, Larry Wall and others + * Copyright (c) 2006, 2007, 2009, 2010, 2011 Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * * This file defines the layout of the parser object used by the parser - * and lexer (perly.c, toke,c). + * and lexer (perly.c, toke.c). */ #define YYEMPTY (-2) @@ -105,15 +105,25 @@ typedef struct yy_parser { COP *saved_curcop; /* the previous PL_curcop */ char tokenbuf[256]; - bool in_pod; /* lexer is within a =pod section */ U8 lex_fakeeof; /* precedence at which to fake EOF */ + U8 lex_flags; + PERL_BITFIELD16 in_pod:1; /* lexer is within a =pod section */ + PERL_BITFIELD16 filtered:1; /* source filters in evalbytes */ } yy_parser; /* flags for lexer API */ #define LEX_STUFF_UTF8 0x00000001 #define LEX_KEEP_PREVIOUS 0x00000002 + #ifdef PERL_CORE # define LEX_START_SAME_FILTER 0x00000001 +# define LEX_IGNORE_UTF8_HINTS 0x00000002 +# define LEX_EVALBYTES 0x00000004 +# define LEX_START_COPIED 0x00000008 +# define LEX_DONT_CLOSE_RSFP 0x00000010 +# define LEX_START_FLAGS \ + (LEX_START_SAME_FILTER|LEX_START_COPIED \ + |LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES|LEX_DONT_CLOSE_RSFP) #endif /* flags for parser API */ diff --git a/Master/tlpkg/tlperl/lib/CORE/patchlevel.h b/Master/tlpkg/tlperl/lib/CORE/patchlevel.h index 5dc2a53beb1..9937f98155a 100644 --- a/Master/tlpkg/tlperl/lib/CORE/patchlevel.h +++ b/Master/tlpkg/tlperl/lib/CORE/patchlevel.h @@ -14,7 +14,7 @@ * exactly on the third column */ #define PERL_REVISION 5 /* age */ -#define PERL_VERSION 14 /* epoch */ +#define PERL_VERSION 16 /* epoch */ #define PERL_SUBVERSION 2 /* generation */ /* The following numbers describe the earliest compatible version of @@ -35,7 +35,7 @@ changing them should not be necessary. */ #define PERL_API_REVISION 5 -#define PERL_API_VERSION 14 +#define PERL_API_VERSION 16 #define PERL_API_SUBVERSION 0 /* XXX Note: The selection of non-default Configure options, such diff --git a/Master/tlpkg/tlperl/lib/CORE/perl.h b/Master/tlpkg/tlperl/lib/CORE/perl.h index facdacfbf49..e532af2637c 100644 --- a/Master/tlpkg/tlperl/lib/CORE/perl.h +++ b/Master/tlpkg/tlperl/lib/CORE/perl.h @@ -354,11 +354,12 @@ #endif #define NOOP /*EMPTY*/(void)0 -#if !defined(HASATTRIBUTE_UNUSED) && defined(__cplusplus) -#define dNOOP /*EMPTY*/(void)0 /* Older g++ has no __attribute((unused))__ */ -#else -#define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL -#endif +/* cea2e8a9dd23747f accidentally lost the comment originally from the first + check in of thread.h, explaining why we need dNOOP at all: */ +/* Rats: if dTHR is just blank then the subsequent ";" throws an error */ +/* Declaring a *function*, instead of a variable, ensures that we don't rely + on being able to suppress "unused" warnings. */ +#define dNOOP extern int Perl___notused(void) #ifndef pTHX /* Don't bother defining tTHX and sTHX; using them outside @@ -490,9 +491,6 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER)); # endif #endif -#define WITH_THX(s) STMT_START { dTHX; s; } STMT_END -#define WITH_THR(s) WITH_THX(s) - #ifndef BYTEORDER /* Should never happen -- byteorder is in config.h */ # define BYTEORDER 0x1234 #endif @@ -976,17 +974,6 @@ EXTERN_C int usleep(unsigned int); #define PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION #endif -/* Cannot include embed.h here on Win32 as win32.h has not - yet been included and defines some config variables e.g. HAVE_INTERP_INTERN - */ -#if !defined(PERL_FOR_X2P) && !(defined(WIN32)||defined(VMS)) -# include "embed.h" -# ifndef PERL_MAD -# undef op_getmad -# define op_getmad(arg,pegop,slot) NOOP -# endif -#endif - #define MEM_SIZE Size_t /* Round all values passed to malloc up, by default to a multiple of @@ -1242,7 +1229,7 @@ EXTERN_C int usleep(unsigned int); # define _SOCKADDR_LEN #endif -#if defined(HAS_SOCKET) && !defined(VMS) && !defined(WIN32) /* VMS/WIN32 handle sockets via vmsish.h/win32.h */ +#if defined(HAS_SOCKET) && !defined(WIN32) /* WIN32 handles sockets via win32.h */ # include # if defined(USE_SOCKS) && defined(I_SOCKS) # if !defined(INCLUDE_PROTOTYPES) @@ -1368,11 +1355,20 @@ EXTERN_C char *crypt(const char *, const char *); #ifdef PERL_CORE # define DEFSV (0 + GvSVn(PL_defgv)) +# define DEFSV_set(sv) \ + (SvREFCNT_dec(GvSV(PL_defgv)), GvSV(PL_defgv) = SvREFCNT_inc(sv)) +# define SAVE_DEFSV \ + ( \ + save_gp(PL_defgv, 0), \ + GvINTRO_off(PL_defgv), \ + SAVEGENERICSV(GvSV(PL_defgv)), \ + GvSV(PL_defgv) = NULL \ + ) #else # define DEFSV GvSVn(PL_defgv) +# define DEFSV_set(sv) (GvSV(PL_defgv) = (sv)) +# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) #endif -#define DEFSV_set(sv) (GvSV(PL_defgv) = (sv)) -#define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) #define ERRHV GvHV(PL_errgv) /* XXX unused, here for compatibility */ @@ -2583,11 +2579,6 @@ typedef struct clone_params CLONE_PARAMS; #if defined(VMS) # include "vmsish.h" -# include "embed.h" -# ifndef PERL_MAD -# undef op_getmad -# define op_getmad(arg,pegop,slot) NOOP -# endif # define ISHISH "vms" #endif @@ -2617,11 +2608,6 @@ typedef struct clone_params CLONE_PARAMS; #ifdef __SYMBIAN32__ # include "symbian/symbianish.h" -# include "embed.h" -# ifndef PERL_MAD -# undef op_getmad -# define op_getmad(arg,pegop,slot) NOOP -# endif # define ISHISH "symbian" #endif @@ -2778,11 +2764,7 @@ freeing any remaining Perl interpreters. # define MAXPATHLEN (PATH_MAX+1) # endif # else -# ifdef _POSIX_PATH_MAX -# define MAXPATHLEN _POSIX_PATH_MAX -# else -# define MAXPATHLEN 1024 /* Err on the large side. */ -# endif +# define MAXPATHLEN 1024 /* Err on the large side. */ # endif #endif @@ -3210,6 +3192,18 @@ typedef pthread_key_t perl_key; #define SVfARG(p) ((void*)(p)) +#ifndef HEKf +# define HEKf "2p" +#endif + +/* Not ideal, but we cannot easily include a number in an already-numeric + * format sequence. */ +#ifndef HEKf256 +# define HEKf256 "3p" +#endif + +#define HEKfARG(p) ((void*)(p)) + #ifdef PERL_CORE /* not used; but needed for backward compatibility with XS code? - RMB */ # undef VDf @@ -3856,63 +3850,6 @@ Gid_t getegid (void); where, (long)PL_scopestack_ix, (long)PL_savestack_ix, \ __FILE__, __LINE__)); - - - -/* These constants should be used in preference to raw characters - * when using magic. Note that some perl guts still assume - * certain character properties of these constants, namely that - * isUPPER() and toLOWER() may do useful mappings. - * - * Update the magic_names table in dump.c when adding/amending these - */ - -#define PERL_MAGIC_sv '\0' /* Special scalar variable */ -#define PERL_MAGIC_overload 'A' /* %OVERLOAD hash */ -#define PERL_MAGIC_overload_elem 'a' /* %OVERLOAD hash element */ -#define PERL_MAGIC_overload_table 'c' /* Holds overload table (AMT) on stash */ -#define PERL_MAGIC_bm 'B' /* Boyer-Moore (fast string search) */ -#define PERL_MAGIC_regdata 'D' /* Regex match position data - (@+ and @- vars) */ -#define PERL_MAGIC_regdatum 'd' /* Regex match position data element */ -#define PERL_MAGIC_env 'E' /* %ENV hash */ -#define PERL_MAGIC_envelem 'e' /* %ENV hash element */ -#define PERL_MAGIC_fm 'f' /* Formline ('compiled' format) */ -#define PERL_MAGIC_regex_global 'g' /* m//g target / study()ed string */ -#define PERL_MAGIC_hints 'H' /* %^H hash */ -#define PERL_MAGIC_hintselem 'h' /* %^H hash element */ -#define PERL_MAGIC_isa 'I' /* @ISA array */ -#define PERL_MAGIC_isaelem 'i' /* @ISA array element */ -#define PERL_MAGIC_nkeys 'k' /* scalar(keys()) lvalue */ -#define PERL_MAGIC_dbfile 'L' /* Debugger %_ #endif @@ -4257,11 +4194,25 @@ extern char ** environ; /* environment variables supplied via exec */ # endif #endif +#define PERL_PATCHLEVEL_H_IMPLICIT +#include "patchlevel.h" +#undef PERL_PATCHLEVEL_H_IMPLICIT + +#define PERL_VERSION_STRING STRINGIFY(PERL_REVISION) "." \ + STRINGIFY(PERL_VERSION) "." \ + STRINGIFY(PERL_SUBVERSION) + +#define PERL_API_VERSION_STRING STRINGIFY(PERL_API_REVISION) "." \ + STRINGIFY(PERL_API_VERSION) "." \ + STRINGIFY(PERL_API_SUBVERSION) + START_EXTERN_C /* handy constants */ EXTCONST char PL_warn_uninit[] INIT("Use of uninitialized value%s%s%s"); +EXTCONST char PL_warn_uninit_sv[] + INIT("Use of uninitialized value%"SVf"%s%s"); EXTCONST char PL_warn_nosemi[] INIT("Semicolon seems to be missing"); EXTCONST char PL_warn_reserved[] @@ -4301,21 +4252,53 @@ EXTCONST char PL_no_localize_ref[] EXTCONST char PL_memory_wrap[] INIT("panic: memory wrap"); +EXTCONST char PL_Yes[] + INIT("1"); +EXTCONST char PL_No[] + INIT(""); +EXTCONST char PL_hexdigit[] + INIT("0123456789abcdef0123456789ABCDEF"); + +/* This is constant on most architectures, a global on OS/2 */ +#ifndef OS2 +EXTCONST char PL_sh_path[] + INIT(SH_PATH); /* full path of shell */ +#endif + #ifdef CSH EXTCONST char PL_cshname[] INIT(CSH); # define PL_cshlen (sizeof(CSH "") - 1) #endif +/* These are baked at compile time into any shared perl library. + In future releases this will allow us in main() to sanity test the + library we're linking against. */ + +EXTCONST U8 PL_revision + INIT(PERL_REVISION); +EXTCONST U8 PL_version + INIT(PERL_VERSION); +EXTCONST U8 PL_subversion + INIT(PERL_SUBVERSION); + EXTCONST char PL_uuemap[65] INIT("`!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"); #ifdef DOINIT EXTCONST char PL_uudmap[256] = -#include "uudmap.h" +# ifdef PERL_MICRO +# include "uuudmap.h" +# else +# include "uudmap.h" +# endif ; EXTCONST char PL_bitcount[256] = -# include "bitcount.h" +# ifdef PERL_MICRO +# include "ubitcount.h" +#else +# include "bitcount.h" +# endif ; EXTCONST char* const PL_sig_name[] = { SIG_NAME }; EXTCONST int PL_sig_num[] = { SIG_NUM }; @@ -4649,12 +4632,24 @@ EXTCONST char PL_bincompat_options[] = # ifdef FAKE_THREADS " FAKE_THREADS" # endif +# ifdef FCRYPT + " FCRYPT" +# endif +# ifdef HAS_TIMES + " HAS_TIMES" +# endif +# ifdef HAVE_INTERP_INTERN + " HAVE_INTERP_INTERN" +# endif # ifdef MULTIPLICITY " MULTIPLICITY" # endif # ifdef MYMALLOC " MYMALLOC" # endif +# ifdef PERLIO_LAYERS + " PERLIO_LAYERS" +# endif # ifdef PERL_DEBUG_READONLY_OPS " PERL_DEBUG_READONLY_OPS" # endif @@ -4670,6 +4665,9 @@ EXTCONST char PL_bincompat_options[] = # ifdef PERL_MAD " PERL_MAD" # endif +# ifdef PERL_MICRO + " PERL_MICRO" +# endif # ifdef PERL_NEED_APPCTX " PERL_NEED_APPCTX" # endif @@ -4691,9 +4689,6 @@ EXTCONST char PL_bincompat_options[] = # ifdef PL_OP_SLAB_ALLOC " PL_OP_SLAB_ALLOC" # endif -# ifdef THREADS_HAVE_PIDS - " THREADS_HAVE_PIDS" -# endif # ifdef USE_64_BIT_ALL " USE_64_BIT_ALL" # endif @@ -4709,6 +4704,12 @@ EXTCONST char PL_bincompat_options[] = # ifdef USE_LARGE_FILES " USE_LARGE_FILES" # endif +# ifdef USE_LOCALE_COLLATE + " USE_LOCALE_COLLATE" +# endif +# ifdef USE_LOCALE_NUMERIC + " USE_LOCALE_NUMERIC" +# endif # ifdef USE_LONG_DOUBLE " USE_LONG_DOUBLE" # endif @@ -4727,17 +4728,23 @@ EXTCONST char PL_bincompat_options[] = # ifdef VMS_DO_SOCKETS " VMS_DO_SOCKETS" # endif -# ifdef VMS_WE_ARE_CASE_SENSITIVE - " VMS_SYMBOL_CASE_AS_IS" -# endif # ifdef VMS_SHORTEN_LONG_SYMBOLS " VMS_SHORTEN_LONG_SYMBOLS" +# endif +# ifdef VMS_WE_ARE_CASE_SENSITIVE + " VMS_SYMBOL_CASE_AS_IS" # endif ""; #else EXTCONST char PL_bincompat_options[]; #endif +#ifndef PERL_SET_PHASE +# define PERL_SET_PHASE(new_phase) \ + PHASE_CHANGE_PROBE(PL_phase_names[new_phase], PL_phase_names[PL_phase]); \ + PL_phase = new_phase; +#endif + /* The interpreter phases. If these ever change, PL_phase_names right below will * need to be updated accordingly. */ enum perl_phase { @@ -4803,44 +4810,6 @@ typedef enum { /* update exp_name[] in toke.c if adding to this enum */ } expectation; -enum { /* pass one of these to get_vtbl */ - want_vtbl_sv, - want_vtbl_env, - want_vtbl_envelem, - want_vtbl_sig, - want_vtbl_sigelem, - want_vtbl_pack, - want_vtbl_packelem, - want_vtbl_dbline, - want_vtbl_isa, - want_vtbl_isaelem, - want_vtbl_arylen, - want_vtbl_glob, - want_vtbl_mglob, - want_vtbl_nkeys, - want_vtbl_taint, - want_vtbl_substr, - want_vtbl_vec, - want_vtbl_pos, - want_vtbl_bm, - want_vtbl_fm, - want_vtbl_uvar, - want_vtbl_defelem, - want_vtbl_regexp, - want_vtbl_collxfrm, - want_vtbl_amagic, - want_vtbl_amagicelem, - want_vtbl_regdata, - want_vtbl_regdatum, - want_vtbl_backref, - want_vtbl_utf8, - want_vtbl_symtab, - want_vtbl_arylen_p, - want_vtbl_hintselem, - want_vtbl_hints -}; - - /* Hints are now stored in a dedicated U32, so the bottom 8 bits are no longer special and there is no need for HINT_PRIVATE_MASK for COPs However, bitops store HINT_INTEGER in their op_private. */ @@ -4848,9 +4817,11 @@ enum { /* pass one of these to get_vtbl */ #define HINT_STRICT_REFS 0x00000002 /* strict pragma */ #define HINT_LOCALE 0x00000004 /* locale pragma */ #define HINT_BYTES 0x00000008 /* bytes pragma */ -#define HINT_ARYBASE 0x00000010 /* $[ is non-zero */ - /* Note: 20,40,80 used for NATIVE_HINTS */ - /* currently defined by vms/vmsish.h */ +#define HINT_LOCALE_NOT_CHARS 0x00000010 /* locale ':not_characters' pragma */ + +#define HINT_EXPLICIT_STRICT_REFS 0x00000020 /* strict.pm */ +#define HINT_EXPLICIT_STRICT_SUBS 0x00000040 /* strict.pm */ +#define HINT_EXPLICIT_STRICT_VARS 0x00000080 /* strict.pm */ #define HINT_BLOCK_SCOPE 0x00000100 #define HINT_STRICT_SUBS 0x00000200 /* strict pragma */ @@ -4877,6 +4848,14 @@ enum { /* pass one of these to get_vtbl */ #define HINT_RE_FLAGS 0x02000000 /* re '/xism' pragma */ +#define HINT_FEATURE_MASK 0x1c000000 /* 3 bits for feature bundles */ + + /* Note: Used for NATIVE_HINTS, currently + defined by vms/vmsish.h: + 0x40000000 + 0x80000000 + */ + /* The following are stored in $^H{sort}, not in PL_hints */ #define HINT_SORT_SORT_BITS 0x000000FF /* allow 256 different ones */ #define HINT_SORT_QUICKSORT 0x00000001 @@ -4925,19 +4904,14 @@ typedef void (*XSINIT_t) (pTHX); typedef void (*ATEXIT_t) (pTHX_ void*); typedef void (*XSUBADDR_t) (pTHX_ CV *); -/* Set up PERLVAR macros for populating structs */ -#define PERLVAR(var,type) type var; -#define PERLVARA(var,n,type) type var[n]; -#define PERLVARI(var,type,init) type var; -#define PERLVARIC(var,type,init) type var; -#define PERLVARISC(var,init) const char var[sizeof(init)]; - typedef OP* (*Perl_ppaddr_t)(pTHX); typedef OP* (*Perl_check_t) (pTHX_ OP*); typedef void(*Perl_ophook_t)(pTHX_ OP*); typedef int (*Perl_keyword_plugin_t)(pTHX_ char*, STRLEN, OP**); typedef void(*Perl_cpeep_t)(pTHX_ OP *, OP *); +typedef void(*globhook_t)(pTHX); + #define KEYWORD_PLUGIN_DECLINE 0 #define KEYWORD_PLUGIN_STMT 1 #define KEYWORD_PLUGIN_EXPR 2 @@ -4958,63 +4932,79 @@ typedef struct exitlistentry { # define FAKE_DEFAULT_SIGNAL_HANDLERS #endif -#define PERL_PATCHLEVEL_H_IMPLICIT -#include "patchlevel.h" -#undef PERL_PATCHLEVEL_H_IMPLICIT - -#define PERL_VERSION_STRING STRINGIFY(PERL_REVISION) "." \ - STRINGIFY(PERL_VERSION) "." \ - STRINGIFY(PERL_SUBVERSION) - -#define PERL_API_VERSION_STRING STRINGIFY(PERL_API_REVISION) "." \ - STRINGIFY(PERL_API_VERSION) "." \ - STRINGIFY(PERL_API_SUBVERSION) +#if !defined(MULTIPLICITY) -#ifdef PERL_GLOBAL_STRUCT -struct perl_vars { -# include "perlvars.h" +struct interpreter { + char broiled; }; -# ifdef PERL_CORE -# ifndef PERL_GLOBAL_STRUCT_PRIVATE -EXT struct perl_vars PL_Vars; -EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars); -# undef PERL_GET_VARS -# define PERL_GET_VARS() PL_VarsPtr -# endif /* !PERL_GLOBAL_STRUCT_PRIVATE */ -# else /* PERL_CORE */ -# if !defined(__GNUC__) || !defined(WIN32) -EXT -# endif /* WIN32 */ -struct perl_vars *PL_VarsPtr; -# define PL_Vars (*((PL_VarsPtr) \ - ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX)))) -# endif /* PERL_CORE */ -#endif /* PERL_GLOBAL_STRUCT */ +#else -#if defined(MULTIPLICITY) /* If we have multiple interpreters define a struct holding variables which must be per-interpreter If we don't have threads anything that would have be per-thread is per-interpreter. */ +/* Set up PERLVAR macros for populating structs */ +# define PERLVAR(prefix,var,type) type prefix##var; +# define PERLVARA(prefix,var,n,type) type prefix##var[n]; +# define PERLVARI(prefix,var,type,init) type prefix##var; +# define PERLVARIC(prefix,var,type,init) type prefix##var; + struct interpreter { # include "intrpvar.h" }; -#else -struct interpreter { - char broiled; +EXTCONST U16 PL_interp_size + INIT(sizeof(struct interpreter)); + +# define PERL_INTERPRETER_SIZE_UPTO_MEMBER(member) \ + STRUCT_OFFSET(struct interpreter, member) + \ + sizeof(((struct interpreter*)0)->member) + +/* This will be useful for subsequent releases, because this has to be the + same in your libperl as in main(), else you have a mismatch and must abort. +*/ +EXTCONST U16 PL_interp_size_5_16_0 + INIT(PERL_INTERPRETER_SIZE_UPTO_MEMBER(PERL_LAST_5_16_0_INTERP_MEMBER)); + + +# ifdef PERL_GLOBAL_STRUCT +/* MULTIPLICITY is automatically defined when PERL_GLOBAL_STRUCT is defined, + hence it's safe and sane to nest this within #ifdef MULTIPLICITY */ + +struct perl_vars { +# include "perlvars.h" }; -#endif /* MULTIPLICITY */ + +EXTCONST U16 PL_global_struct_size + INIT(sizeof(struct perl_vars)); + +# ifdef PERL_CORE +# ifndef PERL_GLOBAL_STRUCT_PRIVATE +EXT struct perl_vars PL_Vars; +EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars); +# undef PERL_GET_VARS +# define PERL_GET_VARS() PL_VarsPtr +# endif /* !PERL_GLOBAL_STRUCT_PRIVATE */ +# else /* PERL_CORE */ +# if !defined(__GNUC__) || !defined(WIN32) +EXT +# endif /* WIN32 */ +struct perl_vars *PL_VarsPtr; +# define PL_Vars (*((PL_VarsPtr) \ + ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX)))) +# endif /* PERL_CORE */ +# endif /* PERL_GLOBAL_STRUCT */ /* Done with PERLVAR macros for now ... */ -#undef PERLVAR -#undef PERLVARA -#undef PERLVARI -#undef PERLVARIC -#undef PERLVARISC +# undef PERLVAR +# undef PERLVARA +# undef PERLVARI +# undef PERLVARIC + +#endif /* MULTIPLICITY */ struct tempsym; /* defined in pp_pack.c */ @@ -5059,11 +5049,10 @@ struct tempsym; /* defined in pp_pack.c */ * these include variables that would have been their struct-s */ -#define PERLVAR(var,type) EXT type PL_##var; -#define PERLVARA(var,n,type) EXT type PL_##var[n]; -#define PERLVARI(var,type,init) EXT type PL_##var INIT(init); -#define PERLVARIC(var,type,init) EXTCONST type PL_##var INIT(init); -#define PERLVARISC(var,init) EXTCONST char PL_##var[sizeof(init)] INIT(init); +#define PERLVAR(prefix,var,type) EXT type PL_##var; +#define PERLVARA(prefix,var,n,type) EXT type PL_##var[n]; +#define PERLVARI(prefix,var,type,init) EXT type PL_##var INIT(init); +#define PERLVARIC(prefix,var,type,init) EXTCONST type PL_##var INIT(init); #if !defined(MULTIPLICITY) START_EXTERN_C @@ -5076,13 +5065,13 @@ END_EXTERN_C # undef PL_na #endif -#if defined(WIN32) -/* Now all the config stuff is setup we can include embed.h */ -# include "embed.h" -# ifndef PERL_MAD -# undef op_getmad -# define op_getmad(arg,pegop,slot) NOOP -# endif +/* Now all the config stuff is setup we can include embed.h + In particular, need the relevant *ish file included already, as it may + define HAVE_INTERP_INTERN */ +#include "embed.h" +#ifndef PERL_MAD +# undef op_getmad +# define op_getmad(arg,pegop,slot) NOOP #endif #ifndef PERL_GLOBAL_STRUCT @@ -5100,6 +5089,14 @@ END_EXTERN_C START_EXTERN_C +/* dummy variables that hold pointers to both runops functions, thus forcing + * them *both* to get linked in (useful for Peek.xs, debugging etc) */ + +EXTCONST runops_proc_t PL_runops_std + INIT(Perl_runops_standard); +EXTCONST runops_proc_t PL_runops_dbg + INIT(Perl_runops_debug); + /* PERL_GLOBAL_STRUCT_PRIVATE wants to keep global data like the * magic vtables const, but this is incompatible with SWIG which * does want to modify the vtables. */ @@ -5109,459 +5106,71 @@ START_EXTERN_C # define EXT_MGVTBL EXT MGVTBL #endif +#define PERL_MAGIC_READONLY_ACCEPTABLE 0x40 +#define PERL_MAGIC_VALUE_MAGIC 0x80 +#define PERL_MAGIC_VTABLE_MASK 0x3F +#define PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(t) \ + (PL_magic_data[(U8)(t)] & PERL_MAGIC_READONLY_ACCEPTABLE) +#define PERL_MAGIC_TYPE_IS_VALUE_MAGIC(t) \ + (PL_magic_data[(U8)(t)] & PERL_MAGIC_VALUE_MAGIC) + +#include "mg_vtable.h" + #ifdef DOINIT -# define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var = {a,b,c,d,e,f,g,h} -/* Like MGVTBL_SET but with the get magic having a const MG* */ -# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var \ - = {(int (*)(pTHX_ SV *, MAGIC *))a,b,c,d,e,f,g,h} +EXTCONST U8 PL_magic_data[256] = +# ifdef PERL_MICRO +# include "umg_data.h" +# else +# include "mg_data.h" +# endif +; #else -# define MGVTBL_SET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var -# define MGVTBL_SET_CONST_MAGIC_GET(var,a,b,c,d,e,f,g,h) EXT_MGVTBL var +EXTCONST U8 PL_magic_data[256]; #endif -/* These all need to be 0, not NULL, as NULL can be (void*)0, which is a - * pointer to data, whereas we're assigning pointers to functions, which are - * not the same beast. ANSI doesn't allow the assignment from one to the other. - * (although most, but not all, compilers are prepared to do it) - */ +#ifdef DOINIT + /* NL BD IV NV PV PI PN MG RX GV LV AV HV CV FM IO */ +EXTCONST bool +PL_valid_types_IVX[] = { 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0 }; +EXTCONST bool +PL_valid_types_NVX[] = { 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0 }; +EXTCONST bool +PL_valid_types_PVX[] = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1 }; +EXTCONST bool +PL_valid_types_RV[] = { 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1 }; +EXTCONST bool +PL_valid_types_IV_set[] = { 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1 }; +EXTCONST bool +PL_valid_types_NV_set[] = { 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; -/* args are: - vtable - get - set - len - clear - free - copy - dup - local -*/ +#else -MGVTBL_SET( - PL_vtbl_sv, - Perl_magic_get, - Perl_magic_set, - Perl_magic_len, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_env, - 0, - Perl_magic_set_all_env, - 0, - Perl_magic_clear_all_env, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_envelem, - 0, - Perl_magic_setenv, - 0, - Perl_magic_clearenv, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_sig, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 -); +EXTCONST bool PL_valid_types_IVX[]; +EXTCONST bool PL_valid_types_NVX[]; +EXTCONST bool PL_valid_types_PVX[]; +EXTCONST bool PL_valid_types_RV[]; +EXTCONST bool PL_valid_types_IV_set[]; +EXTCONST bool PL_valid_types_NV_set[]; -#ifdef PERL_MICRO -MGVTBL_SET( - PL_vtbl_sigelem, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 -); +#endif -#else -MGVTBL_SET( - PL_vtbl_sigelem, - Perl_magic_getsig, - Perl_magic_setsig, - 0, - Perl_magic_clearsig, - 0, - 0, - 0, - 0 -); -#endif - -MGVTBL_SET( - PL_vtbl_pack, - 0, - 0, - Perl_magic_sizepack, - Perl_magic_wipepack, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_packelem, - Perl_magic_getpack, - Perl_magic_setpack, - 0, - Perl_magic_clearpack, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_dbline, - 0, - Perl_magic_setdbline, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_isa, - 0, - Perl_magic_setisa, - 0, - Perl_magic_clearisa, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_isaelem, - 0, - Perl_magic_setisa, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET_CONST_MAGIC_GET( - PL_vtbl_arylen, - Perl_magic_getarylen, - Perl_magic_setarylen, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_arylen_p, - 0, - 0, - 0, - 0, - Perl_magic_freearylen_p, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_mglob, - 0, - Perl_magic_setmglob, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_nkeys, - Perl_magic_getnkeys, - Perl_magic_setnkeys, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_taint, - Perl_magic_gettaint, - Perl_magic_settaint, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_substr, - Perl_magic_getsubstr, - Perl_magic_setsubstr, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_vec, - Perl_magic_getvec, - Perl_magic_setvec, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_pos, - Perl_magic_getpos, - Perl_magic_setpos, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_bm, - 0, - Perl_magic_setregexp, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_fm, - 0, - Perl_magic_setregexp, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_uvar, - Perl_magic_getuvar, - Perl_magic_setuvar, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_defelem, - Perl_magic_getdefelem, - Perl_magic_setdefelem, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_regexp, - 0, - Perl_magic_setregexp, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_regdata, - 0, - 0, - Perl_magic_regdata_cnt, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_regdatum, - Perl_magic_regdatum_get, - Perl_magic_regdatum_set, - 0, - 0, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_amagic, - 0, - Perl_magic_setamagic, - 0, - 0, - Perl_magic_setamagic, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_amagicelem, - 0, - Perl_magic_setamagic, - 0, - 0, - Perl_magic_setamagic, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_backref, - 0, - 0, - 0, - 0, - Perl_magic_killbackrefs, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_ovrld, - 0, - 0, - 0, - 0, - Perl_magic_freeovrld, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_utf8, - 0, - Perl_magic_setutf8, - 0, - 0, - 0, - 0, - 0, - 0 -); -#ifdef USE_LOCALE_COLLATE -MGVTBL_SET( - PL_vtbl_collxfrm, - 0, - Perl_magic_setcollxfrm, - 0, - 0, - 0, - 0, - 0, - 0 -); -#endif - -MGVTBL_SET( - PL_vtbl_hintselem, - 0, - Perl_magic_sethint, - 0, - Perl_magic_clearhint, - 0, - 0, - 0, - 0 -); - -MGVTBL_SET( - PL_vtbl_hints, - 0, - 0, - 0, - Perl_magic_clearhints, - 0, - 0, - 0, - 0 -); #include "overload.h" END_EXTERN_C struct am_table { - U32 flags; + U8 flags; + U8 fallback; + U16 spare; U32 was_ok_sub; long was_ok_am; - long fallback; CV* table[NofAMmeth]; }; struct am_table_short { - U32 flags; + U8 flags; + U8 fallback; + U16 spare; U32 was_ok_sub; long was_ok_am; }; @@ -5657,11 +5266,23 @@ typedef struct am_table_short AMTS; #define SET_NUMERIC_LOCAL() \ set_numeric_local(); +/* Returns non-zero If the plain locale pragma without a parameter is in effect + */ #define IN_LOCALE_RUNTIME (CopHINTS_get(PL_curcop) & HINT_LOCALE) + +/* Returns non-zero If either form of the locale pragma is in effect */ +#define IN_SOME_LOCALE_FORM_RUNTIME \ + (CopHINTS_get(PL_curcop) & (HINT_LOCALE|HINT_LOCALE_NOT_CHARS)) + #define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) +#define IN_SOME_LOCALE_FORM_COMPILETIME \ + (PL_hints & (HINT_LOCALE|HINT_LOCALE_NOT_CHARS)) #define IN_LOCALE \ (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) +#define IN_SOME_LOCALE_FORM \ + (IN_PERL_COMPILETIME ? IN_SOME_LOCALE_FORM_COMPILETIME \ + : IN_SOME_LOCALE_FORM_RUNTIME) #define STORE_NUMERIC_LOCAL_SET_STANDARD() \ bool was_local = PL_numeric_local && IN_LOCALE; \ @@ -5881,10 +5502,12 @@ typedef struct am_table_short AMTS; * the interpreter goes away.) */ # define MY_CXT_INIT \ my_cxt_t *my_cxtp = \ - (my_cxt_t*)Perl_my_cxt_init(aTHX_ MY_CXT_INIT_ARG, sizeof(my_cxt_t)) + (my_cxt_t*)Perl_my_cxt_init(aTHX_ MY_CXT_INIT_ARG, sizeof(my_cxt_t)); \ + PERL_UNUSED_VAR(my_cxtp) # define MY_CXT_INIT_INTERP(my_perl) \ my_cxt_t *my_cxtp = \ - (my_cxt_t*)Perl_my_cxt_init(my_perl, MY_CXT_INIT_ARG, sizeof(my_cxt_t)) + (my_cxt_t*)Perl_my_cxt_init(my_perl, MY_CXT_INIT_ARG, sizeof(my_cxt_t)); \ + PERL_UNUSED_VAR(my_cxtp) /* This declaration should be used within all functions that use the * interpreter-local data. */ @@ -5901,7 +5524,7 @@ typedef struct am_table_short AMTS; /* This macro must be used to access members of the my_cxt_t structure. - * e.g. MYCXT.some_data */ + * e.g. MY_CXT.some_data */ # define MY_CXT (*my_cxtp) /* Judicious use of these macros can reduce the number of times dMY_CXT @@ -6005,6 +5628,8 @@ int flock(int fd, int op); #define PERL_SCAN_ALLOW_UNDERSCORES 0x01 /* grok_??? accept _ in numbers */ #define PERL_SCAN_DISALLOW_PREFIX 0x02 /* grok_??? reject 0x in hex etc */ #define PERL_SCAN_SILENT_ILLDIGIT 0x04 /* grok_??? not warn about illegal digits */ +#define PERL_SCAN_SILENT_NON_PORTABLE 0x08 /* grok_??? not warn about very large + numbers which are <= UV_MAX */ /* Output flags: */ #define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 /* should this merge with above? */ @@ -6147,14 +5772,6 @@ extern void moncontrol(int); #define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE #define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE|PERL_PV_ESCAPE_NONASCII -#ifdef PERL_CORE -# define FEATURE_IS_ENABLED(name) \ - ((0 != (PL_hints & HINT_LOCALIZE_HH)) \ - && Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name))) -/* The longest string we pass in. */ -# define MAX_FEATURE_LEN (sizeof("unicode_strings")-1) -#endif - /* (KEEP THIS LAST IN perl.h!) diff --git a/Master/tlpkg/tlperl/lib/CORE/perlapi.h b/Master/tlpkg/tlperl/lib/CORE/perlapi.h index d7d55d6d97e..80425c368cf 100644 --- a/Master/tlpkg/tlperl/lib/CORE/perlapi.h +++ b/Master/tlpkg/tlperl/lib/CORE/perlapi.h @@ -28,14 +28,11 @@ START_EXTERN_C #undef PERLVARA #undef PERLVARI #undef PERLVARIC -#undef PERLVARISC -#define PERLVAR(v,t) EXTERN_C t* Perl_##v##_ptr(pTHX); -#define PERLVARA(v,n,t) typedef t PL_##v##_t[n]; \ - EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX); -#define PERLVARI(v,t,i) PERLVAR(v,t) -#define PERLVARIC(v,t,i) PERLVAR(v, const t) -#define PERLVARISC(v,i) typedef const char PL_##v##_t[sizeof(i)]; \ - EXTERN_C PL_##v##_t* Perl_##v##_ptr(pTHX); +#define PERLVAR(p,v,t) EXTERN_C t* Perl_##p##v##_ptr(pTHX); +#define PERLVARA(p,v,n,t) typedef t PL_##v##_t[n]; \ + EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX); +#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) +#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t) #include "perlvars.h" @@ -43,7 +40,6 @@ START_EXTERN_C #undef PERLVARA #undef PERLVARI #undef PERLVARIC -#undef PERLVARISC END_EXTERN_C @@ -66,11 +62,10 @@ EXTCONST void * const PL_force_link_funcs[] = { #undef PERLVARA #undef PERLVARI #undef PERLVARIC -#define PERLVAR(v,t) (void*)Perl_##v##_ptr, -#define PERLVARA(v,n,t) PERLVAR(v,t) -#define PERLVARI(v,t,i) PERLVAR(v,t) -#define PERLVARIC(v,t,i) PERLVAR(v,t) -#define PERLVARISC(v,i) PERLVAR(v,char) +#define PERLVAR(p,v,t) (void*)Perl_##p##v##_ptr, +#define PERLVARA(p,v,n,t) PERLVAR(p,v,t) +#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) +#define PERLVARIC(p,v,t,i) PERLVAR(p,v,t) /* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one * cannot cast between void pointers and function pointers without @@ -95,7 +90,6 @@ EXTCONST void * const PL_force_link_funcs[] = { #undef PERLVARA #undef PERLVARI #undef PERLVARIC -#undef PERLVARISC }; #endif /* DOINIT */ @@ -105,16 +99,12 @@ END_EXTERN_C #else /* !PERL_CORE */ -#undef PL_No -#define PL_No (*Perl_GNo_ptr(NULL)) -#undef PL_Yes -#define PL_Yes (*Perl_GYes_ptr(NULL)) #undef PL_appctx #define PL_appctx (*Perl_Gappctx_ptr(NULL)) -#undef PL_charclass -#define PL_charclass (*Perl_Gcharclass_ptr(NULL)) #undef PL_check #define PL_check (*Perl_Gcheck_ptr(NULL)) +#undef PL_check_mutex +#define PL_check_mutex (*Perl_Gcheck_mutex_ptr(NULL)) #undef PL_csighandlerp #define PL_csighandlerp (*Perl_Gcsighandlerp_ptr(NULL)) #undef PL_curinterp @@ -125,16 +115,8 @@ END_EXTERN_C #define PL_dollarzero_mutex (*Perl_Gdollarzero_mutex_ptr(NULL)) #undef PL_fold_locale #define PL_fold_locale (*Perl_Gfold_locale_ptr(NULL)) -#undef PL_global_struct_size -#define PL_global_struct_size (*Perl_Gglobal_struct_size_ptr(NULL)) -#undef PL_hexdigit -#define PL_hexdigit (*Perl_Ghexdigit_ptr(NULL)) #undef PL_hints_mutex #define PL_hints_mutex (*Perl_Ghints_mutex_ptr(NULL)) -#undef PL_interp_size -#define PL_interp_size (*Perl_Ginterp_size_ptr(NULL)) -#undef PL_interp_size_5_10_0 -#define PL_interp_size_5_10_0 (*Perl_Ginterp_size_5_10_0_ptr(NULL)) #undef PL_keyword_plugin #define PL_keyword_plugin (*Perl_Gkeyword_plugin_ptr(NULL)) #undef PL_malloc_mutex @@ -151,8 +133,6 @@ END_EXTERN_C #define PL_op_seq (*Perl_Gop_seq_ptr(NULL)) #undef PL_op_sequence #define PL_op_sequence (*Perl_Gop_sequence_ptr(NULL)) -#undef PL_patleave -#define PL_patleave (*Perl_Gpatleave_ptr(NULL)) #undef PL_perlio_debug_fd #define PL_perlio_debug_fd (*Perl_Gperlio_debug_fd_ptr(NULL)) #undef PL_perlio_fd_refcnt @@ -163,12 +143,6 @@ END_EXTERN_C #define PL_perlio_mutex (*Perl_Gperlio_mutex_ptr(NULL)) #undef PL_ppaddr #define PL_ppaddr (*Perl_Gppaddr_ptr(NULL)) -#undef PL_revision -#define PL_revision (*Perl_Grevision_ptr(NULL)) -#undef PL_runops_dbg -#define PL_runops_dbg (*Perl_Grunops_dbg_ptr(NULL)) -#undef PL_runops_std -#define PL_runops_std (*Perl_Grunops_std_ptr(NULL)) #undef PL_sh_path #define PL_sh_path (*Perl_Gsh_path_ptr(NULL)) #undef PL_sig_defaulting @@ -181,8 +155,6 @@ END_EXTERN_C #define PL_sig_trapped (*Perl_Gsig_trapped_ptr(NULL)) #undef PL_sigfpe_saved #define PL_sigfpe_saved (*Perl_Gsigfpe_saved_ptr(NULL)) -#undef PL_subversion -#define PL_subversion (*Perl_Gsubversion_ptr(NULL)) #undef PL_sv_placeholder #define PL_sv_placeholder (*Perl_Gsv_placeholder_ptr(NULL)) #undef PL_thr_key @@ -191,8 +163,6 @@ END_EXTERN_C #define PL_timesbase (*Perl_Gtimesbase_ptr(NULL)) #undef PL_use_safe_putenv #define PL_use_safe_putenv (*Perl_Guse_safe_putenv_ptr(NULL)) -#undef PL_version -#define PL_version (*Perl_Gversion_ptr(NULL)) #undef PL_veto_cleanup #define PL_veto_cleanup (*Perl_Gveto_cleanup_ptr(NULL)) #undef PL_watch_pvx diff --git a/Master/tlpkg/tlperl/lib/CORE/perlhost.h b/Master/tlpkg/tlperl/lib/CORE/perlhost.h index 0240044c114..e8f5fb4928e 100644 --- a/Master/tlpkg/tlperl/lib/CORE/perlhost.h +++ b/Master/tlpkg/tlperl/lib/CORE/perlhost.h @@ -840,21 +840,6 @@ PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf) int fileno = win32_dup(win32_fileno(pf)); /* open the file in the same mode */ -#ifdef __BORLANDC__ - if((pf)->flags & _F_READ) { - mode[0] = 'r'; - mode[1] = 0; - } - else if((pf)->flags & _F_WRIT) { - mode[0] = 'a'; - mode[1] = 0; - } - else if((pf)->flags & _F_RDWR) { - mode[0] = 'r'; - mode[1] = '+'; - mode[2] = 0; - } -#else if((pf)->_flag & _IOREAD) { mode[0] = 'r'; mode[1] = 0; @@ -868,7 +853,6 @@ PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf) mode[1] = '+'; mode[2] = 0; } -#endif /* it appears that the binmode is attached to the * file descriptor so binmode files will be handled @@ -1710,7 +1694,6 @@ static THREAD_RET_TYPE win32_start_child(LPVOID arg) { PerlInterpreter *my_perl = (PerlInterpreter*)arg; - GV *tmpgv; int status; HWND parent_message_hwnd; #ifdef PERL_SYNC_FORK @@ -1722,18 +1705,11 @@ win32_start_child(LPVOID arg) PERL_SET_THX(my_perl); win32_checkTLS(my_perl); - /* set $$ to pseudo id */ #ifdef PERL_SYNC_FORK w32_pseudo_id = id; #else w32_pseudo_id = GetCurrentThreadId(); #endif - if (tmpgv = gv_fetchpv("$", TRUE, SVt_PV)) { - SV *sv = GvSV(tmpgv); - SvREADONLY_off(sv); - sv_setiv(sv, -(IV)w32_pseudo_id); - SvREADONLY_on(sv); - } #ifdef PERL_USES_PL_PIDSTATUS hv_clear(PL_pidstatus); #endif @@ -1781,6 +1757,10 @@ restart: LEAVE; FREETMPS; PL_curstash = PL_defstash; + if (PL_curstash != PL_defstash) { + SvREFCNT_dec(PL_curstash); + PL_curstash = (HV *)SvREFCNT_inc(PL_defstash); + } if (PL_endav && !PL_minus_c) call_list(oldscope, PL_endav); status = STATUS_EXIT; diff --git a/Master/tlpkg/tlperl/lib/CORE/perliol.h b/Master/tlpkg/tlperl/lib/CORE/perliol.h index a51f99b9039..3bce866f490 100644 --- a/Master/tlpkg/tlperl/lib/CORE/perliol.h +++ b/Master/tlpkg/tlperl/lib/CORE/perliol.h @@ -113,9 +113,6 @@ EXTPERLIO PerlIO_funcs PerlIO_utf8; EXTPERLIO PerlIO_funcs PerlIO_byte; EXTPERLIO PerlIO_funcs PerlIO_raw; EXTPERLIO PerlIO_funcs PerlIO_pending; -#ifdef HAS_MMAP -EXTPERLIO PerlIO_funcs PerlIO_mmap; -#endif #ifdef WIN32 EXTPERLIO PerlIO_funcs PerlIO_win32; #endif @@ -223,17 +220,6 @@ PERL_EXPORT_C SSize_t PerlIOCrlf_unread(pTHX_ PerlIO *f, const void *vbuf, Siz PERL_EXPORT_C SSize_t PerlIOCrlf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count); PERL_EXPORT_C SSize_t PerlIOCrlf_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count); -/* Mmap */ -PERL_EXPORT_C IV PerlIOMmap_close(pTHX_ PerlIO *f); -PERL_EXPORT_C PerlIO * PerlIOMmap_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags); -PERL_EXPORT_C IV PerlIOMmap_fill(pTHX_ PerlIO *f); -PERL_EXPORT_C IV PerlIOMmap_flush(pTHX_ PerlIO *f); -PERL_EXPORT_C STDCHAR * PerlIOMmap_get_base(pTHX_ PerlIO *f); -PERL_EXPORT_C IV PerlIOMmap_map(pTHX_ PerlIO *f); -PERL_EXPORT_C IV PerlIOMmap_unmap(pTHX_ PerlIO *f); -PERL_EXPORT_C SSize_t PerlIOMmap_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count); -PERL_EXPORT_C SSize_t PerlIOMmap_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count); - /* Pending */ PERL_EXPORT_C IV PerlIOPending_close(pTHX_ PerlIO *f); PERL_EXPORT_C IV PerlIOPending_fill(pTHX_ PerlIO *f); diff --git a/Master/tlpkg/tlperl/lib/CORE/perlvars.h b/Master/tlpkg/tlperl/lib/CORE/perlvars.h index 1a44e22e4e9..20c3882fc8d 100644 --- a/Master/tlpkg/tlperl/lib/CORE/perlvars.h +++ b/Master/tlpkg/tlperl/lib/CORE/perlvars.h @@ -10,6 +10,11 @@ /* =head1 Global Variables + +These variables are global to an entire process. They are shared between +all interpreters and all threads in a process. + +=cut */ /* Don't forget to re-run regen/embed.pl to propagate changes! */ @@ -24,165 +29,138 @@ * the appropriate export list for win32. */ /* global state */ -PERLVAR(Gcurinterp, PerlInterpreter *) +#if defined(USE_ITHREADS) +PERLVAR(G, op_mutex, perl_mutex) /* Mutex for op refcounting */ +#endif +PERLVAR(G, curinterp, PerlInterpreter *) /* currently running interpreter * (initial parent interpreter under * useithreads) */ #if defined(USE_ITHREADS) -PERLVAR(Gthr_key, perl_key) /* key to retrieve per-thread struct */ +PERLVAR(G, thr_key, perl_key) /* key to retrieve per-thread struct */ #endif -/* constants (these are not literals to facilitate pointer comparisons) - * (PERLVARISC really does create variables, despite its looks) */ -PERLVARISC(GYes, "1") -PERLVARISC(GNo, "") -PERLVARISC(Ghexdigit, "0123456789abcdef0123456789ABCDEF") -PERLVARISC(Gpatleave, "\\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}") - /* XXX does anyone even use this? */ -PERLVARI(Gdo_undump, bool, FALSE) /* -u or dump seen? */ +PERLVARI(G, do_undump, bool, FALSE) /* -u or dump seen? */ -#if defined(MYMALLOC) && defined(USE_ITHREADS) -PERLVAR(Gmalloc_mutex, perl_mutex) /* Mutex for malloc */ +#ifndef PERL_USE_SAFE_PUTENV +PERLVARI(G, use_safe_putenv, bool, TRUE) #endif -#if defined(USE_ITHREADS) -PERLVAR(Gop_mutex, perl_mutex) /* Mutex for op refcounting */ +#if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS)||defined(FAKE_DEFAULT_SIGNAL_HANDLERS) +PERLVARI(G, sig_handlers_initted, int, 0) #endif - -#ifdef USE_ITHREADS -PERLVAR(Gdollarzero_mutex, perl_mutex) /* Modifying $0 */ +#ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS +PERLVARA(G, sig_ignoring, SIG_SIZE, int) + /* which signals we are ignoring */ +#endif +#ifdef FAKE_DEFAULT_SIGNAL_HANDLERS +PERLVARA(G, sig_defaulting, SIG_SIZE, int) #endif - -/* This is constant on most architectures, a global on OS/2 */ -#ifdef OS2 -# define PERL___C -#else -# define PERL___C const +/* XXX signals are process-wide anyway, so we + * ignore the implications of this for threading */ +#ifndef HAS_SIGACTION +PERLVARI(G, sig_trapped, int, 0) #endif -PERLVARI(Gsh_path, PERL___C char *, SH_PATH) /* full path of shell */ -#undef PERL___C #ifndef PERL_MICRO /* If Perl has to ignore SIGPFE, this is its saved state. * See perl.h macros PERL_FPU_INIT and PERL_FPU_{PRE,POST}_EXEC. */ -PERLVAR(Gsigfpe_saved, Sighandler_t) -#endif - -/* Restricted hashes placeholder value. - * The contents are never used, only the address. */ -PERLVAR(Gsv_placeholder, SV) - -#ifndef PERL_MICRO -PERLVARI(Gcsighandlerp, Sighandler_t, Perl_csighandler) /* Pointer to C-level sighandler */ +PERLVAR(G, sigfpe_saved, Sighandler_t) +PERLVARI(G, csighandlerp, Sighandler_t, Perl_csighandler) + /* Pointer to C-level sighandler */ #endif -#ifndef PERL_USE_SAFE_PUTENV -PERLVARI(Guse_safe_putenv, int, 1) +/* This is constant on most architectures, a global on OS/2 */ +#ifdef OS2 +PERLVARI(G, sh_path, char *, SH_PATH) /* full path of shell */ #endif #ifdef USE_PERLIO -PERLVARI(Gperlio_fd_refcnt, int*, 0) /* Pointer to array of fd refcounts. */ -PERLVARI(Gperlio_fd_refcnt_size, int, 0) /* Size of the array */ -PERLVARI(Gperlio_debug_fd, int, 0) /* the fd to write perlio debug into, 0 means not set yet */ -#endif -#ifdef HAS_MMAP -PERLVARI(Gmmap_page_size, IV, 0) -#endif +# if defined(USE_ITHREADS) +PERLVAR(G, perlio_mutex, perl_mutex) /* Mutex for perlio fd refcounts */ +# endif -#if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS)||defined(FAKE_DEFAULT_SIGNAL_HANDLERS) -PERLVARI(Gsig_handlers_initted, int, 0) +PERLVARI(G, perlio_fd_refcnt, int *, 0) /* Pointer to array of fd refcounts. */ +PERLVARI(G, perlio_fd_refcnt_size, int, 0) /* Size of the array */ +PERLVARI(G, perlio_debug_fd, int, 0) /* the fd to write perlio debug into, 0 means not set yet */ #endif -#ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS -PERLVARA(Gsig_ignoring, SIG_SIZE, int) /* which signals we are ignoring */ -#endif -#ifdef FAKE_DEFAULT_SIGNAL_HANDLERS -PERLVARA(Gsig_defaulting, SIG_SIZE, int) + +#ifdef HAS_MMAP +PERLVARI(G, mmap_page_size, IV, 0) #endif -/* XXX signals are process-wide anyway, so we - * ignore the implications of this for threading */ -#ifndef HAS_SIGACTION -PERLVARI(Gsig_trapped, int, 0) +#if defined(USE_ITHREADS) +PERLVAR(G, hints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */ #endif #ifdef DEBUGGING -PERLVAR(Gwatch_pvx, char*) +PERLVAR(G, watch_pvx, char *) #endif +/* +=for apidoc AmU|Perl_check_t *|PL_check + +Array, indexed by opcode, of functions that will be called for the "check" +phase of optree building during compilation of Perl code. For most (but +not all) types of op, once the op has been initially built and populated +with child ops it will be filtered through the check function referenced +by the appropriate element of this array. The new op is passed in as the +sole argument to the check function, and the check function returns the +completed op. The check function may (as the name suggests) check the op +for validity and signal errors. It may also initialise or modify parts of +the ops, or perform more radical surgery such as adding or removing child +ops, or even throw the op away and return a different op in its place. + +This array of function pointers is a convenient place to hook into the +compilation process. An XS module can put its own custom check function +in place of any of the standard ones, to influence the compilation of a +particular type of op. However, a custom check function must never fully +replace a standard check function (or even a custom check function from +another module). A module modifying checking must instead B the +preexisting check function. A custom check function must be selective +about when to apply its custom behaviour. In the usual case where +it decides not to do anything special with an op, it must chain the +preexisting op function. Check functions are thus linked in a chain, +with the core's base checker at the end. + +For thread safety, modules should not write directly to this array. +Instead, use the function L. + +=cut +*/ + +#if defined(USE_ITHREADS) +PERLVAR(G, check_mutex, perl_mutex) /* Mutex for PL_check */ +#endif #ifdef PERL_GLOBAL_STRUCT -PERLVAR(Gppaddr, Perl_ppaddr_t*) /* or opcode.h */ -PERLVAR(Gcheck, Perl_check_t *) /* or opcode.h */ -PERLVARA(Gfold_locale, 256, unsigned char) /* or perl.h */ -PERLVARA(Gcharclass, 256, U32) +PERLVAR(G, ppaddr, Perl_ppaddr_t *) /* or opcode.h */ +PERLVAR(G, check, Perl_check_t *) /* or opcode.h */ +PERLVARA(G, fold_locale, 256, unsigned char) /* or perl.h */ #endif #ifdef PERL_NEED_APPCTX -PERLVAR(Gappctx, void*) /* the application context */ +PERLVAR(G, appctx, void*) /* the application context */ #endif -PERLVAR(Gop_sequence, HV*) /* dump.c */ -PERLVARI(Gop_seq, UV, 0) /* dump.c */ - #if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE) -PERLVAR(Gtimesbase, struct tms) +PERLVAR(G, timesbase, struct tms) #endif /* allocate a unique index to every module that calls MY_CXT_INIT */ #ifdef PERL_IMPLICIT_CONTEXT # ifdef USE_ITHREADS -PERLVAR(Gmy_ctx_mutex, perl_mutex) +PERLVAR(G, my_ctx_mutex, perl_mutex) # endif -PERLVARI(Gmy_cxt_index, int, 0) -#endif - -#if defined(USE_ITHREADS) -PERLVAR(Ghints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */ -#endif - -#if defined(USE_ITHREADS) -PERLVAR(Gperlio_mutex, perl_mutex) /* Mutex for perlio fd refcounts */ +PERLVARI(G, my_cxt_index, int, 0) #endif /* this is currently set without MUTEX protection, so keep it a type which * can be set atomically (ie not a bit field) */ -PERLVARI(Gveto_cleanup, int, FALSE) /* exit without cleanup */ - -/* dummy variables that hold pointers to both runops functions, thus forcing - * them *both* to get linked in (useful for Peek.xs, debugging etc) */ - -PERLVARI(Grunops_std, runops_proc_t, Perl_runops_standard) -PERLVARI(Grunops_dbg, runops_proc_t, Perl_runops_debug) - - -/* These are baked at compile time into any shared perl library. - In future 5.10.x releases this will allow us in main() to sanity test the - library we're linking against. */ - -PERLVARI(Grevision, U8, PERL_REVISION) -PERLVARI(Gversion, U8, PERL_VERSION) -PERLVARI(Gsubversion, U8, PERL_SUBVERSION) - -#if defined(MULTIPLICITY) -# define PERL_INTERPRETER_SIZE_UPTO_MEMBER(member) \ - STRUCT_OFFSET(struct interpreter, member) + \ - sizeof(((struct interpreter*)0)->member) - -/* These might be useful. */ -PERLVARI(Ginterp_size, U16, sizeof(struct interpreter)) -#if defined(PERL_GLOBAL_STRUCT) -PERLVARI(Gglobal_struct_size, U16, sizeof(struct perl_vars)) -#endif - -/* This will be useful for subsequent releases, because this has to be the - same in your libperl as in main(), else you have a mismatch and must abort. -*/ -PERLVARI(Ginterp_size_5_10_0, U16, - PERL_INTERPRETER_SIZE_UPTO_MEMBER(PERL_LAST_5_10_0_INTERP_MEMBER)) -#endif +PERLVARI(G, veto_cleanup, int, FALSE) /* exit without cleanup */ /* =for apidoc AmUx|Perl_keyword_plugin_t|PL_keyword_plugin @@ -237,4 +215,19 @@ the Perl core) will normally return C. =cut */ -PERLVARI(Gkeyword_plugin, Perl_keyword_plugin_t, Perl_keyword_plugin_standard) +PERLVARI(G, keyword_plugin, Perl_keyword_plugin_t, Perl_keyword_plugin_standard) + +PERLVAR(G, op_sequence, HV *) /* dump.c */ +PERLVARI(G, op_seq, UV, 0) /* dump.c */ + +#ifdef USE_ITHREADS +PERLVAR(G, dollarzero_mutex, perl_mutex) /* Modifying $0 */ +#endif + +/* Restricted hashes placeholder value. + * The contents are never used, only the address. */ +PERLVAR(G, sv_placeholder, SV) + +#if defined(MYMALLOC) && defined(USE_ITHREADS) +PERLVAR(G, malloc_mutex, perl_mutex) /* Mutex for malloc */ +#endif diff --git a/Master/tlpkg/tlperl/lib/CORE/perly.h b/Master/tlpkg/tlperl/lib/CORE/perly.h index 6c282bfae14..7cbdd2f0670 100644 --- a/Master/tlpkg/tlperl/lib/CORE/perly.h +++ b/Master/tlpkg/tlperl/lib/CORE/perly.h @@ -59,71 +59,72 @@ PMFUNC = 268, PRIVATEREF = 269, QWLIST = 270, - FUNC0SUB = 271, - UNIOPSUB = 272, - LSTOPSUB = 273, - PLUGEXPR = 274, - PLUGSTMT = 275, - LABEL = 276, - FORMAT = 277, - SUB = 278, - ANONSUB = 279, - PACKAGE = 280, - USE = 281, - WHILE = 282, - UNTIL = 283, - IF = 284, - UNLESS = 285, - ELSE = 286, - ELSIF = 287, - CONTINUE = 288, - FOR = 289, - GIVEN = 290, - WHEN = 291, - DEFAULT = 292, - LOOPEX = 293, - DOTDOT = 294, - YADAYADA = 295, - FUNC0 = 296, - FUNC1 = 297, - FUNC = 298, - UNIOP = 299, - LSTOP = 300, - RELOP = 301, - EQOP = 302, - MULOP = 303, - ADDOP = 304, - DOLSHARP = 305, - DO = 306, - HASHBRACK = 307, - NOAMP = 308, - LOCAL = 309, - MY = 310, - MYSUB = 311, - REQUIRE = 312, - COLONATTR = 313, - PREC_LOW = 314, - DOROP = 315, - OROP = 316, - ANDOP = 317, - NOTOP = 318, - ASSIGNOP = 319, - DORDOR = 320, - OROR = 321, - ANDAND = 322, - BITOROP = 323, - BITANDOP = 324, - SHIFTOP = 325, - MATCHOP = 326, - REFGEN = 327, - UMINUS = 328, - POWOP = 329, - POSTDEC = 330, - POSTINC = 331, - PREDEC = 332, - PREINC = 333, - ARROW = 334, - PEG = 335 + FUNC0OP = 271, + FUNC0SUB = 272, + UNIOPSUB = 273, + LSTOPSUB = 274, + PLUGEXPR = 275, + PLUGSTMT = 276, + LABEL = 277, + FORMAT = 278, + SUB = 279, + ANONSUB = 280, + PACKAGE = 281, + USE = 282, + WHILE = 283, + UNTIL = 284, + IF = 285, + UNLESS = 286, + ELSE = 287, + ELSIF = 288, + CONTINUE = 289, + FOR = 290, + GIVEN = 291, + WHEN = 292, + DEFAULT = 293, + LOOPEX = 294, + DOTDOT = 295, + YADAYADA = 296, + FUNC0 = 297, + FUNC1 = 298, + FUNC = 299, + UNIOP = 300, + LSTOP = 301, + RELOP = 302, + EQOP = 303, + MULOP = 304, + ADDOP = 305, + DOLSHARP = 306, + DO = 307, + HASHBRACK = 308, + NOAMP = 309, + LOCAL = 310, + MY = 311, + MYSUB = 312, + REQUIRE = 313, + COLONATTR = 314, + PREC_LOW = 315, + DOROP = 316, + OROP = 317, + ANDOP = 318, + NOTOP = 319, + ASSIGNOP = 320, + DORDOR = 321, + OROR = 322, + ANDAND = 323, + BITOROP = 324, + BITANDOP = 325, + SHIFTOP = 326, + MATCHOP = 327, + REFGEN = 328, + UMINUS = 329, + POWOP = 330, + POSTDEC = 331, + POSTINC = 332, + PREDEC = 333, + PREINC = 334, + ARROW = 335, + PEG = 336 }; #endif /* Tokens. */ @@ -140,71 +141,72 @@ #define PMFUNC 268 #define PRIVATEREF 269 #define QWLIST 270 -#define FUNC0SUB 271 -#define UNIOPSUB 272 -#define LSTOPSUB 273 -#define PLUGEXPR 274 -#define PLUGSTMT 275 -#define LABEL 276 -#define FORMAT 277 -#define SUB 278 -#define ANONSUB 279 -#define PACKAGE 280 -#define USE 281 -#define WHILE 282 -#define UNTIL 283 -#define IF 284 -#define UNLESS 285 -#define ELSE 286 -#define ELSIF 287 -#define CONTINUE 288 -#define FOR 289 -#define GIVEN 290 -#define WHEN 291 -#define DEFAULT 292 -#define LOOPEX 293 -#define DOTDOT 294 -#define YADAYADA 295 -#define FUNC0 296 -#define FUNC1 297 -#define FUNC 298 -#define UNIOP 299 -#define LSTOP 300 -#define RELOP 301 -#define EQOP 302 -#define MULOP 303 -#define ADDOP 304 -#define DOLSHARP 305 -#define DO 306 -#define HASHBRACK 307 -#define NOAMP 308 -#define LOCAL 309 -#define MY 310 -#define MYSUB 311 -#define REQUIRE 312 -#define COLONATTR 313 -#define PREC_LOW 314 -#define DOROP 315 -#define OROP 316 -#define ANDOP 317 -#define NOTOP 318 -#define ASSIGNOP 319 -#define DORDOR 320 -#define OROR 321 -#define ANDAND 322 -#define BITOROP 323 -#define BITANDOP 324 -#define SHIFTOP 325 -#define MATCHOP 326 -#define REFGEN 327 -#define UMINUS 328 -#define POWOP 329 -#define POSTDEC 330 -#define POSTINC 331 -#define PREDEC 332 -#define PREINC 333 -#define ARROW 334 -#define PEG 335 +#define FUNC0OP 271 +#define FUNC0SUB 272 +#define UNIOPSUB 273 +#define LSTOPSUB 274 +#define PLUGEXPR 275 +#define PLUGSTMT 276 +#define LABEL 277 +#define FORMAT 278 +#define SUB 279 +#define ANONSUB 280 +#define PACKAGE 281 +#define USE 282 +#define WHILE 283 +#define UNTIL 284 +#define IF 285 +#define UNLESS 286 +#define ELSE 287 +#define ELSIF 288 +#define CONTINUE 289 +#define FOR 290 +#define GIVEN 291 +#define WHEN 292 +#define DEFAULT 293 +#define LOOPEX 294 +#define DOTDOT 295 +#define YADAYADA 296 +#define FUNC0 297 +#define FUNC1 298 +#define FUNC 299 +#define UNIOP 300 +#define LSTOP 301 +#define RELOP 302 +#define EQOP 303 +#define MULOP 304 +#define ADDOP 305 +#define DOLSHARP 306 +#define DO 307 +#define HASHBRACK 308 +#define NOAMP 309 +#define LOCAL 310 +#define MY 311 +#define MYSUB 312 +#define REQUIRE 313 +#define COLONATTR 314 +#define PREC_LOW 315 +#define DOROP 316 +#define OROP 317 +#define ANDOP 318 +#define NOTOP 319 +#define ASSIGNOP 320 +#define DORDOR 321 +#define OROR 322 +#define ANDAND 323 +#define BITOROP 324 +#define BITANDOP 325 +#define SHIFTOP 326 +#define MATCHOP 327 +#define REFGEN 328 +#define UMINUS 329 +#define POWOP 330 +#define POSTDEC 331 +#define POSTINC 332 +#define PREDEC 333 +#define PREINC 334 +#define ARROW 335 +#define PEG 336 @@ -229,7 +231,7 @@ typedef union YYSTYPE TOKEN* tkval; #endif } -/* Line 1489 of yacc.c. */ +/* Line 1529 of yacc.c. */ YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -240,6 +242,6 @@ typedef union YYSTYPE /* Generated from: - * bd41fc813e5d2d23ff7edef2ab1ef88bbb054176476b7d989db7522dce1c9328 perly.y - * dc72db91baa0a3c17a6c95718e5ad70e9ac7b75919df1317df7fe6c3f1649239 regen_perly.pl + * 047d7d5048e78a17bc586b7bb9a0f0e9dedd5cd43b30e486482b1ff8f955ddcb perly.y + * 53f57d7143a42b3c008841a14d158bcf9cab64b2904b07ef5e95051fe9a8a875 regen_perly.pl * ex: set ro: */ diff --git a/Master/tlpkg/tlperl/lib/CORE/pp.h b/Master/tlpkg/tlperl/lib/CORE/pp.h index 5cde92b047e..63b22340f9e 100644 --- a/Master/tlpkg/tlperl/lib/CORE/pp.h +++ b/Master/tlpkg/tlperl/lib/CORE/pp.h @@ -345,15 +345,7 @@ Does not use C. See also C, C and C. #define dPOPXiirl(X) IV right = POPi; IV left = CAT2(X,i) #define USE_LEFT(sv) \ - (SvOK(sv) || SvGMAGICAL(sv) || !(PL_op->op_flags & OPf_STACKED)) -#define dPOPXnnrl_ul(X) \ - NV right = POPn; \ - SV *leftsv = CAT2(X,s); \ - NV left = USE_LEFT(leftsv) ? SvNV(leftsv) : 0.0 -#define dPOPXiirl_ul(X) \ - IV right = POPi; \ - SV *leftsv = CAT2(X,s); \ - IV left = USE_LEFT(leftsv) ? SvIV(leftsv) : 0 + (SvOK(sv) || !(PL_op->op_flags & OPf_STACKED)) #define dPOPXiirl_ul_nomg(X) \ IV right = (sp--, SvIV_nomg(TOPp1s)); \ SV *leftsv = CAT2(X,s); \ @@ -361,17 +353,13 @@ Does not use C. See also C, C and C. #define dPOPPOPssrl dPOPXssrl(POP) #define dPOPPOPnnrl dPOPXnnrl(POP) -#define dPOPPOPnnrl_ul dPOPXnnrl_ul(POP) #define dPOPPOPiirl dPOPXiirl(POP) -#define dPOPPOPiirl_ul dPOPXiirl_ul(POP) #define dPOPTOPssrl dPOPXssrl(TOP) #define dPOPTOPnnrl dPOPXnnrl(TOP) -#define dPOPTOPnnrl_ul dPOPXnnrl_ul(TOP) #define dPOPTOPnnrl_nomg \ NV right = SvNV_nomg(TOPs); NV left = (sp--, SvNV_nomg(TOPs)) #define dPOPTOPiirl dPOPXiirl(TOP) -#define dPOPTOPiirl_ul dPOPXiirl_ul(TOP) #define dPOPTOPiirl_ul_nomg dPOPXiirl_ul_nomg(TOP) #define dPOPTOPiirl_nomg \ IV right = SvIV_nomg(TOPs); IV left = (sp--, SvIV_nomg(TOPs)) @@ -448,8 +436,12 @@ Does not use C. See also C, C and C. SETTARG; \ PUTBACK; \ if (jump) { \ + OP *jump_o = NORMAL->op_next; \ + while (jump_o->op_type == OP_NULL) \ + jump_o = jump_o->op_next; \ + assert(jump_o->op_type == OP_ENTERSUB); \ PL_markstack_ptr--; \ - return NORMAL->op_next->op_next; \ + return jump_o->op_next; \ } \ return NORMAL; \ } \ @@ -492,12 +484,28 @@ True if this op will be the return value of an lvalue subroutine ) #ifdef PERL_CORE + /* These are just for Perl_tied_method(), which is not part of the public API. Use 0x04 rather than the next available bit, to help the compiler if the architecture can generate more efficient instructions. */ # define TIED_METHOD_MORTALIZE_NOT_NEEDED 0x04 # define TIED_METHOD_ARGUMENTS_ON_STACK 0x08 # define TIED_METHOD_SAY 0x10 + +/* Used in various places that need to dereference a glob or globref */ +# define MAYBE_DEREF_GV_flags(sv,phlags) \ + ( \ + (void)(phlags & SV_GMAGIC && (SvGETMAGIC(sv),0)), \ + isGV_with_GP(sv) \ + ? (GV *)sv \ + : SvROK(sv) && SvTYPE(SvRV(sv)) <= SVt_PVLV && \ + (SvGETMAGIC(SvRV(sv)), isGV_with_GP(SvRV(sv))) \ + ? (GV *)SvRV(sv) \ + : NULL \ + ) +# define MAYBE_DEREF_GV(sv) MAYBE_DEREF_GV_flags(sv,SV_GMAGIC) +# define MAYBE_DEREF_GV_nomg(sv) MAYBE_DEREF_GV_flags(sv,0) + #endif /* diff --git a/Master/tlpkg/tlperl/lib/CORE/pp_proto.h b/Master/tlpkg/tlperl/lib/CORE/pp_proto.h index 2b01d6b0b66..52011dadd3d 100644 --- a/Master/tlpkg/tlperl/lib/CORE/pp_proto.h +++ b/Master/tlpkg/tlperl/lib/CORE/pp_proto.h @@ -42,6 +42,7 @@ PERL_CALLCONV OP *Perl_pp_concat(pTHX); PERL_CALLCONV OP *Perl_pp_cond_expr(pTHX); PERL_CALLCONV OP *Perl_pp_const(pTHX); PERL_CALLCONV OP *Perl_pp_continue(pTHX); +PERL_CALLCONV OP *Perl_pp_coreargs(pTHX); PERL_CALLCONV OP *Perl_pp_crypt(pTHX); PERL_CALLCONV OP *Perl_pp_dbmopen(pTHX); PERL_CALLCONV OP *Perl_pp_dbstate(pTHX); @@ -65,6 +66,7 @@ PERL_CALLCONV OP *Perl_pp_eq(pTHX); PERL_CALLCONV OP *Perl_pp_exec(pTHX); PERL_CALLCONV OP *Perl_pp_exists(pTHX); PERL_CALLCONV OP *Perl_pp_exit(pTHX); +PERL_CALLCONV OP *Perl_pp_fc(pTHX); PERL_CALLCONV OP *Perl_pp_fileno(pTHX); PERL_CALLCONV OP *Perl_pp_flip(pTHX); PERL_CALLCONV OP *Perl_pp_flock(pTHX); @@ -166,10 +168,8 @@ PERL_CALLCONV OP *Perl_pp_padhv(pTHX); PERL_CALLCONV OP *Perl_pp_padsv(pTHX); PERL_CALLCONV OP *Perl_pp_pipe_op(pTHX); PERL_CALLCONV OP *Perl_pp_pos(pTHX); -PERL_CALLCONV OP *Perl_pp_postdec(pTHX); PERL_CALLCONV OP *Perl_pp_postinc(pTHX); PERL_CALLCONV OP *Perl_pp_pow(pTHX); -PERL_CALLCONV OP *Perl_pp_predec(pTHX); PERL_CALLCONV OP *Perl_pp_preinc(pTHX); PERL_CALLCONV OP *Perl_pp_print(pTHX); PERL_CALLCONV OP *Perl_pp_prototype(pTHX); @@ -200,6 +200,7 @@ PERL_CALLCONV OP *Perl_pp_rewinddir(pTHX); PERL_CALLCONV OP *Perl_pp_right_shift(pTHX); PERL_CALLCONV OP *Perl_pp_rkeys(pTHX); PERL_CALLCONV OP *Perl_pp_rmdir(pTHX); +PERL_CALLCONV OP *Perl_pp_runcv(pTHX); PERL_CALLCONV OP *Perl_pp_rv2av(pTHX); PERL_CALLCONV OP *Perl_pp_rv2cv(pTHX); PERL_CALLCONV OP *Perl_pp_rv2gv(pTHX); diff --git a/Master/tlpkg/tlperl/lib/CORE/proto.h b/Master/tlpkg/tlperl/lib/CORE/proto.h index 0b46a791149..143eee0e3e3 100644 --- a/Master/tlpkg/tlperl/lib/CORE/proto.h +++ b/Master/tlpkg/tlperl/lib/CORE/proto.h @@ -23,38 +23,42 @@ PERL_CALLCONV int Perl_Gv_AMupdate(pTHX_ HV* stash, bool destructing) assert(stash) PERL_CALLCONV const char * Perl_PerlIO_context_layers(pTHX_ const char *mode); -PERL_CALLCONV void Perl__append_range_to_invlist(pTHX_ HV* const invlist, const UV start, const UV end) - __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST \ - assert(invlist) - -PERL_CALLCONV HV* Perl__new_invlist(pTHX_ IV initial_size) - __attribute__warn_unused_result__; - -PERL_CALLCONV HV* Perl__swash_inversion_hash(pTHX_ SV* const swash) +PERL_CALLCONV bool Perl__is_utf8__perl_idstart(pTHX_ const U8 *p) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT__SWASH_INVERSION_HASH \ - assert(swash) - -PERL_CALLCONV HV* Perl__swash_to_invlist(pTHX_ SV* const swash) - __attribute__warn_unused_result__ - __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT__SWASH_TO_INVLIST \ - assert(swash) +#define PERL_ARGS_ASSERT__IS_UTF8__PERL_IDSTART \ + assert(p) -PERL_CALLCONV UV Perl__to_uni_fold_flags(pTHX_ UV c, U8 *p, STRLEN *lenp, U8 flags) +PERL_CALLCONV UV Perl__to_uni_fold_flags(pTHX_ UV c, U8 *p, STRLEN *lenp, const bool flags) __attribute__nonnull__(pTHX_2) __attribute__nonnull__(pTHX_3); #define PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS \ assert(p); assert(lenp) -PERL_CALLCONV UV Perl__to_utf8_fold_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, U8 flags) +PERL_CALLCONV UV Perl__to_utf8_fold_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, U8 flags, bool* tainted_ptr) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); #define PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS \ assert(p); assert(ustrp) +PERL_CALLCONV UV Perl__to_utf8_lower_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, const bool flags, bool* tainted_ptr) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS \ + assert(p); assert(ustrp) + +PERL_CALLCONV UV Perl__to_utf8_title_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, const bool flags, bool* tainted_ptr) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS \ + assert(p); assert(ustrp) + +PERL_CALLCONV UV Perl__to_utf8_upper_flags(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, const bool flags, bool* tainted_ptr) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS \ + assert(p); assert(ustrp) + PERL_CALLCONV PADOFFSET Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_ALLOCMY \ @@ -71,6 +75,7 @@ PERL_CALLCONV SV * Perl_amagic_deref_call(pTHX_ SV *ref, int method) #define PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL \ assert(ref) +PERL_CALLCONV bool Perl_amagic_is_enabled(pTHX_ int method); PERL_CALLCONV I32 Perl_apply(pTHX_ I32 type, SV** mark, SV** sp) __attribute__nonnull__(pTHX_2) __attribute__nonnull__(pTHX_3); @@ -304,6 +309,12 @@ PERL_CALLCONV OP * Perl_ck_chdir(pTHX_ OP *o) #define PERL_ARGS_ASSERT_CK_CHDIR \ assert(o) +PERL_CALLCONV OP * Perl_ck_cmp(pTHX_ OP *o) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_CK_CMP \ + assert(o) + PERL_CALLCONV OP * Perl_ck_concat(pTHX_ OP *o) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); @@ -334,6 +345,13 @@ PERL_CALLCONV OP * Perl_ck_each(pTHX_ OP *o) #define PERL_ARGS_ASSERT_CK_EACH \ assert(o) +PERL_CALLCONV OP* Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); +#define PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE \ + assert(entersubop); assert(namegv); assert(protosv) + PERL_CALLCONV OP* Perl_ck_entersub_args_list(pTHX_ OP *entersubop) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST \ @@ -419,6 +437,12 @@ PERL_CALLCONV OP * Perl_ck_join(pTHX_ OP *o) #define PERL_ARGS_ASSERT_CK_JOIN \ assert(o) +PERL_CALLCONV OP * Perl_ck_length(pTHX_ OP *o) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_CK_LENGTH \ + assert(o) + PERL_CALLCONV OP * Perl_ck_lfun(pTHX_ OP *o) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); @@ -551,16 +575,16 @@ PERL_CALLCONV OP * Perl_ck_svconst(pTHX_ OP *o) #define PERL_ARGS_ASSERT_CK_SVCONST \ assert(o) -PERL_CALLCONV OP * Perl_ck_trunc(pTHX_ OP *o) +PERL_CALLCONV OP * Perl_ck_tell(pTHX_ OP *o) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_CK_TRUNC \ +#define PERL_ARGS_ASSERT_CK_TELL \ assert(o) -PERL_CALLCONV OP * Perl_ck_unpack(pTHX_ OP *o) +PERL_CALLCONV OP * Perl_ck_trunc(pTHX_ OP *o) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_CK_UNPACK \ +#define PERL_ARGS_ASSERT_CK_TRUNC \ assert(o) PERL_CALLCONV void Perl_ck_warner(pTHX_ U32 err, const char* pat, ...) @@ -580,6 +604,27 @@ PERL_CALLCONV bool Perl_ckwarn_d(pTHX_ U32 w); PERL_CALLCONV OP* Perl_convert(pTHX_ I32 optype, I32 flags, OP* o) __attribute__warn_unused_result__; +PERL_CALLCONV const char * Perl_cop_fetch_label(pTHX_ COP *const cop, STRLEN *len, U32 *flags) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_COP_FETCH_LABEL \ + assert(cop) + +PERL_CALLCONV void Perl_cop_store_label(pTHX_ COP *const cop, const char *label, STRLEN len, U32 flags) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_COP_STORE_LABEL \ + assert(cop); assert(label) + +PERL_CALLCONV SV * Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code, int * const opnum) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_CORE_PROTOTYPE \ + assert(name) + +PERL_CALLCONV OP * Perl_coresub_op(pTHX_ SV *coreargssv, const int code, const int opnum) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_CORESUB_OP \ + assert(coreargssv) + PERL_CALLCONV PERL_CONTEXT* Perl_create_eval_scope(pTHX_ U32 flags); PERL_CALLCONV void Perl_croak(pTHX_ const char* pat, ...) __attribute__noreturn__ @@ -625,9 +670,9 @@ PERL_CALLCONV const XOP * Perl_custom_op_xop(pTHX_ const OP *o) #define PERL_ARGS_ASSERT_CUSTOM_OP_XOP \ assert(o) -PERL_CALLCONV void Perl_cv_ckproto_len(pTHX_ const CV* cv, const GV* gv, const char* p, const STRLEN len) +PERL_CALLCONV void Perl_cv_ckproto_len_flags(pTHX_ const CV* cv, const GV* gv, const char* p, const STRLEN len, const U32 flags) __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_CV_CKPROTO_LEN \ +#define PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS \ assert(cv) PERL_CALLCONV CV* Perl_cv_clone(pTHX_ CV* proto) @@ -776,6 +821,13 @@ PERL_CALLCONV void Perl_do_magic_dump(pTHX_ I32 level, PerlIO *file, const MAGIC #define PERL_ARGS_ASSERT_DO_MAGIC_DUMP \ assert(file); assert(mg) +PERL_CALLCONV I32 Perl_do_ncmp(pTHX_ SV *const left, SV *const right) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_DO_NCMP \ + assert(left); assert(right) + PERL_CALLCONV void Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o) __attribute__nonnull__(pTHX_2); #define PERL_ARGS_ASSERT_DO_OP_DUMP \ @@ -950,11 +1002,6 @@ PERL_CALLCONV bool Perl_feature_is_enabled(pTHX_ const char *const name, STRLEN #define PERL_ARGS_ASSERT_FEATURE_IS_ENABLED \ assert(name) -PERL_CALLCONV const char * Perl_fetch_cop_label(pTHX_ COP *const cop, STRLEN *len, U32 *flags) - __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_FETCH_COP_LABEL \ - assert(cop) - PERL_CALLCONV SV* Perl_filter_add(pTHX_ filter_t funcp, SV* datasv); PERL_CALLCONV void Perl_filter_del(pTHX_ filter_t funcp) __attribute__nonnull__(pTHX_1); @@ -967,10 +1014,20 @@ PERL_CALLCONV I32 Perl_filter_read(pTHX_ int idx, SV *buf_sv, int maxlen) #define PERL_ARGS_ASSERT_FILTER_READ \ assert(buf_sv) +PERL_CALLCONV void Perl_finalize_optree(pTHX_ OP* o) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_FINALIZE_OPTREE \ + assert(o) + PERL_CALLCONV CV* Perl_find_runcv(pTHX_ U32 *db_seqp) __attribute__warn_unused_result__; PERL_CALLCONV SV* Perl_find_rundefsv(pTHX); +PERL_CALLCONV SV* Perl_find_rundefsv2(pTHX_ CV *cv, U32 seq) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_FIND_RUNDEFSV2 \ + assert(cv) + PERL_CALLCONV PADOFFSET Perl_find_rundefsvoffset(pTHX) __attribute__deprecated__; @@ -1122,12 +1179,28 @@ PERL_CALLCONV UV Perl_grok_oct(pTHX_ const char* start, STRLEN* len_p, I32* flag /* PERL_CALLCONV GV* Perl_gv_HVadd(pTHX_ GV *gv); */ /* PERL_CALLCONV GV* Perl_gv_IOadd(pTHX_ GV* gv); */ PERL_CALLCONV GV* Perl_gv_add_by_type(pTHX_ GV *gv, svtype type); -PERL_CALLCONV GV* Perl_gv_autoload4(pTHX_ HV* stash, const char* name, STRLEN len, I32 method) +/* PERL_CALLCONV GV* gv_autoload4(pTHX_ HV* stash, const char* name, STRLEN len, I32 method) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_2); */ + +PERL_CALLCONV GV* Perl_gv_autoload_pv(pTHX_ HV* stash, const char* namepv, U32 flags) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_GV_AUTOLOAD4 \ +#define PERL_ARGS_ASSERT_GV_AUTOLOAD_PV \ + assert(namepv) + +PERL_CALLCONV GV* Perl_gv_autoload_pvn(pTHX_ HV* stash, const char* name, STRLEN len, U32 flags) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN \ assert(name) +PERL_CALLCONV GV* Perl_gv_autoload_sv(pTHX_ HV* stash, SV* namesv, U32 flags) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_GV_AUTOLOAD_SV \ + assert(namesv) + PERL_CALLCONV void Perl_gv_check(pTHX_ const HV* stash) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_GV_CHECK \ @@ -1172,16 +1245,42 @@ PERL_CALLCONV GV* Perl_gv_fetchfile_flags(pTHX_ const char *const name, const ST #define PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS \ assert(name) -PERL_CALLCONV GV* Perl_gv_fetchmeth(pTHX_ HV* stash, const char* name, STRLEN len, I32 level) +/* PERL_CALLCONV GV* gv_fetchmeth(pTHX_ HV* stash, const char* name, STRLEN len, I32 level) + __attribute__nonnull__(pTHX_2); */ + +/* PERL_CALLCONV GV* gv_fetchmeth_autoload(pTHX_ HV* stash, const char* name, STRLEN len, I32 level) + __attribute__nonnull__(pTHX_2); */ + +PERL_CALLCONV GV* Perl_gv_fetchmeth_pv(pTHX_ HV* stash, const char* name, I32 level, U32 flags) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_GV_FETCHMETH_PV \ + assert(name) + +PERL_CALLCONV GV* Perl_gv_fetchmeth_pv_autoload(pTHX_ HV* stash, const char* name, I32 level, U32 flags) __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_GV_FETCHMETH \ +#define PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD \ assert(name) -PERL_CALLCONV GV* Perl_gv_fetchmeth_autoload(pTHX_ HV* stash, const char* name, STRLEN len, I32 level) +PERL_CALLCONV GV* Perl_gv_fetchmeth_pvn(pTHX_ HV* stash, const char* name, STRLEN len, I32 level, U32 flags) __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_GV_FETCHMETH_AUTOLOAD \ +#define PERL_ARGS_ASSERT_GV_FETCHMETH_PVN \ assert(name) +PERL_CALLCONV GV* Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV* stash, const char* name, STRLEN len, I32 level, U32 flags) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD \ + assert(name) + +PERL_CALLCONV GV* Perl_gv_fetchmeth_sv(pTHX_ HV* stash, SV* namesv, I32 level, U32 flags) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_GV_FETCHMETH_SV \ + assert(namesv) + +PERL_CALLCONV GV* Perl_gv_fetchmeth_sv_autoload(pTHX_ HV* stash, SV* namesv, I32 level, U32 flags) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD \ + assert(namesv) + /* PERL_CALLCONV GV* Perl_gv_fetchmethod(pTHX_ HV* stash, const char* name) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); */ @@ -1194,12 +1293,24 @@ PERL_CALLCONV GV* Perl_gv_fetchmethod_autoload(pTHX_ HV* stash, const char* name #define PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD \ assert(stash); assert(name) -PERL_CALLCONV GV* Perl_gv_fetchmethod_flags(pTHX_ HV* stash, const char* name, U32 flags) +PERL_CALLCONV GV* Perl_gv_fetchmethod_pv_flags(pTHX_ HV* stash, const char* name, U32 flags) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS \ + assert(stash); assert(name) + +PERL_CALLCONV GV* Perl_gv_fetchmethod_pvn_flags(pTHX_ HV* stash, const char* name, const STRLEN len, U32 flags) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_GV_FETCHMETHOD_FLAGS \ +#define PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS \ assert(stash); assert(name) +PERL_CALLCONV GV* Perl_gv_fetchmethod_sv_flags(pTHX_ HV* stash, SV* namesv, U32 flags) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS \ + assert(stash); assert(namesv) + PERL_CALLCONV GV* Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_GV_FETCHPV \ @@ -1236,12 +1347,28 @@ PERL_CALLCONV void Perl_gv_fullname4(pTHX_ SV* sv, const GV* gv, const char* pre PERL_CALLCONV CV* Perl_gv_handler(pTHX_ HV* stash, I32 id) __attribute__warn_unused_result__; -PERL_CALLCONV void Perl_gv_init(pTHX_ GV* gv, HV* stash, const char* name, STRLEN len, int multi) +/* PERL_CALLCONV void gv_init(pTHX_ GV* gv, HV* stash, const char* name, STRLEN len, int multi) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_3); */ + +PERL_CALLCONV void Perl_gv_init_pv(pTHX_ GV* gv, HV* stash, const char* name, U32 flags) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_3); -#define PERL_ARGS_ASSERT_GV_INIT \ +#define PERL_ARGS_ASSERT_GV_INIT_PV \ assert(gv); assert(name) +PERL_CALLCONV void Perl_gv_init_pvn(pTHX_ GV* gv, HV* stash, const char* name, STRLEN len, U32 flags) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_3); +#define PERL_ARGS_ASSERT_GV_INIT_PVN \ + assert(gv); assert(name) + +PERL_CALLCONV void Perl_gv_init_sv(pTHX_ GV* gv, HV* stash, SV* namesv, U32 flags) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_3); +#define PERL_ARGS_ASSERT_GV_INIT_SV \ + assert(gv); assert(namesv) + PERL_CALLCONV void Perl_gv_name_set(pTHX_ GV* gv, const char *name, U32 len, U32 flags) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); @@ -1506,12 +1633,6 @@ PERL_CALLCONV bool Perl_is_ascii_string(const U8 *s, STRLEN len) #define PERL_ARGS_ASSERT_IS_ASCII_STRING \ assert(s) -PERL_CALLCONV bool Perl_is_gv_magical_sv(pTHX_ SV *const name_sv, U32 flags) - __attribute__warn_unused_result__ - __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_IS_GV_MAGICAL_SV \ - assert(name_sv) - PERL_CALLCONV I32 Perl_is_lvalue_sub(pTHX) __attribute__warn_unused_result__; @@ -1698,10 +1819,17 @@ PERL_CALLCONV bool Perl_is_utf8_ascii(pTHX_ const U8 *p) assert(p) PERL_CALLCONV STRLEN Perl_is_utf8_char(const U8 *s) + __attribute__deprecated__ __attribute__nonnull__(1); #define PERL_ARGS_ASSERT_IS_UTF8_CHAR \ assert(s) +PERL_CALLCONV STRLEN Perl_is_utf8_char_buf(const U8 *buf, const U8 *buf_end) + __attribute__nonnull__(1) + __attribute__nonnull__(2); +#define PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF \ + assert(buf); assert(buf_end) + PERL_CALLCONV bool Perl_is_utf8_cntrl(pTHX_ const U8 *p) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); @@ -2187,6 +2315,12 @@ PERL_CALLCONV int Perl_magic_setvec(pTHX_ SV* sv, MAGIC* mg) #define PERL_ARGS_ASSERT_MAGIC_SETVEC \ assert(sv); assert(mg) +PERL_CALLCONV int Perl_magic_setvstring(pTHX_ SV* sv, MAGIC* mg) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_MAGIC_SETVSTRING \ + assert(sv); assert(mg) + PERL_CALLCONV U32 Perl_magic_sizepack(pTHX_ SV* sv, MAGIC* mg) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); @@ -2279,7 +2413,6 @@ PERL_CALLCONV void Perl_mini_mktime(pTHX_ struct tm *ptm) #define PERL_ARGS_ASSERT_MINI_MKTIME \ assert(ptm) -PERL_CALLCONV OP* Perl_mod(pTHX_ OP* o, I32 type); PERL_CALLCONV int Perl_mode_from_discipline(pTHX_ const char* s, STRLEN len); PERL_CALLCONV void * Perl_more_bodies(pTHX_ const svtype sv_type, const size_t body_size, const size_t arena_size); PERL_CALLCONV const char* Perl_moreswitches(pTHX_ const char* s) @@ -2374,13 +2507,6 @@ PERL_CALLCONV I32 Perl_my_fflush_all(pTHX); PERL_CALLCONV Pid_t Perl_my_fork(void); /* PERL_CALLCONV I32 Perl_my_lstat(pTHX); */ PERL_CALLCONV I32 Perl_my_lstat_flags(pTHX_ const U32 flags); -PERL_CALLCONV I32 Perl_my_pclose(pTHX_ PerlIO* ptr); -PERL_CALLCONV PerlIO* Perl_my_popen(pTHX_ const char* cmd, const char* mode) - __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_MY_POPEN \ - assert(cmd); assert(mode) - PERL_CALLCONV PerlIO* Perl_my_popen_list(pTHX_ const char* mode, int n, SV ** args) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_3); @@ -2430,6 +2556,7 @@ PERL_CALLCONV OP* Perl_newASSIGNOP(pTHX_ I32 flags, OP* left, I32 optype, OP* ri __attribute__warn_unused_result__; PERL_CALLCONV CV* Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block); +PERL_CALLCONV CV* Perl_newATTRSUB_flags(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block, U32 flags); /* PERL_CALLCONV AV* Perl_newAV(pTHX) __attribute__warn_unused_result__; */ @@ -2452,6 +2579,7 @@ PERL_CALLCONV OP* Perl_newCONDOP(pTHX_ I32 flags, OP* first, OP* trueop, OP* fal assert(first) PERL_CALLCONV CV* Perl_newCONSTSUB(pTHX_ HV* stash, const char* name, SV* sv); +PERL_CALLCONV CV* Perl_newCONSTSUB_flags(pTHX_ HV* stash, const char* name, STRLEN len, U32 flags, SV* sv); PERL_CALLCONV OP* Perl_newCVREF(pTHX_ I32 flags, OP* o) __attribute__malloc__ __attribute__warn_unused_result__; @@ -2487,11 +2615,14 @@ PERL_CALLCONV OP* Perl_newGVREF(pTHX_ I32 type, OP* o) __attribute__malloc__ __attribute__warn_unused_result__; -PERL_CALLCONV GV* Perl_newGVgen(pTHX_ const char* pack) +/* PERL_CALLCONV GV* newGVgen(pTHX_ const char* pack) + __attribute__nonnull__(pTHX_1); */ + +PERL_CALLCONV GV* Perl_newGVgen_flags(pTHX_ const char* pack, U32 flags) __attribute__malloc__ __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_NEWGVGEN \ +#define PERL_ARGS_ASSERT_NEWGVGEN_FLAGS \ assert(pack) /* PERL_CALLCONV HV* Perl_newHV(pTHX) @@ -2689,6 +2820,12 @@ PERL_CALLCONV CV * Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr, #define PERL_ARGS_ASSERT_NEWXS_FLAGS \ assert(subaddr); assert(filename) +PERL_CALLCONV CV * Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, XSUBADDR_t subaddr, const char *const filename, const char *const proto, SV **const_svp, U32 flags) + __attribute__nonnull__(pTHX_3) + __attribute__nonnull__(pTHX_4); +#define PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS \ + assert(subaddr); assert(filename) + PERL_CALLCONV void Perl_new_collate(pTHX_ const char* newcoll); PERL_CALLCONV void Perl_new_ctype(pTHX_ const char* newctype) __attribute__nonnull__(pTHX_1); @@ -2765,7 +2902,8 @@ PERL_CALLCONV OP* Perl_op_linklist(pTHX_ OP *o) #define PERL_ARGS_ASSERT_OP_LINKLIST \ assert(o) -PERL_CALLCONV OP* Perl_op_lvalue(pTHX_ OP* o, I32 type); +/* PERL_CALLCONV OP* op_lvalue(pTHX_ OP* o, I32 type); */ +PERL_CALLCONV OP* Perl_op_lvalue_flags(pTHX_ OP* o, I32 type, U32 flags); PERL_CALLCONV void Perl_op_null(pTHX_ OP* o) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_OP_NULL \ @@ -2799,14 +2937,24 @@ PERL_CALLCONV void Perl_packlist(pTHX_ SV *cat, const char *pat, const char *pat #define PERL_ARGS_ASSERT_PACKLIST \ assert(cat); assert(pat); assert(patend); assert(beglist); assert(endlist) -PERL_CALLCONV PADOFFSET Perl_pad_add_anon(pTHX_ SV* sv, OPCODE op_type) +PERL_CALLCONV PADOFFSET Perl_pad_add_anon(pTHX_ CV* func, I32 optype) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_PAD_ADD_ANON \ - assert(sv) + assert(func) + +PERL_CALLCONV PADOFFSET Perl_pad_add_name_pv(pTHX_ const char *name, const U32 flags, HV *typestash, HV *ourstash) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_PAD_ADD_NAME_PV \ + assert(name) + +PERL_CALLCONV PADOFFSET Perl_pad_add_name_pvn(pTHX_ const char *namepv, STRLEN namelen, U32 flags, HV *typestash, HV *ourstash) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_PAD_ADD_NAME_PVN \ + assert(namepv) -PERL_CALLCONV PADOFFSET Perl_pad_add_name(pTHX_ const char *name, const STRLEN len, const U32 flags, HV *typestash, HV *ourstash) +PERL_CALLCONV PADOFFSET Perl_pad_add_name_sv(pTHX_ SV *name, U32 flags, HV *typestash, HV *ourstash) __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_PAD_ADD_NAME \ +#define PERL_ARGS_ASSERT_PAD_ADD_NAME_SV \ assert(name) PERL_CALLCONV PADOFFSET Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype); @@ -2814,10 +2962,19 @@ PERL_CALLCONV void Perl_pad_block_start(pTHX_ int full); PERL_CALLCONV HV* Perl_pad_compname_type(pTHX_ const PADOFFSET po) __attribute__warn_unused_result__; -PERL_CALLCONV PADOFFSET Perl_pad_findmy(pTHX_ const char* name, STRLEN len, U32 flags) - __attribute__warn_unused_result__ +PERL_CALLCONV PADOFFSET Perl_pad_findmy_pv(pTHX_ const char* name, U32 flags) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_PAD_FINDMY_PV \ + assert(name) + +PERL_CALLCONV PADOFFSET Perl_pad_findmy_pvn(pTHX_ const char* namepv, STRLEN namelen, U32 flags) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_PAD_FINDMY_PVN \ + assert(namepv) + +PERL_CALLCONV PADOFFSET Perl_pad_findmy_sv(pTHX_ SV* name, U32 flags) __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_PAD_FINDMY \ +#define PERL_ARGS_ASSERT_PAD_FINDMY_SV \ assert(name) PERL_CALLCONV void Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv, CV *new_cv) @@ -3141,7 +3298,7 @@ PERL_CALLCONV void Perl_regprop(pTHX_ const regexp *prog, SV* sv, const regnode* #define PERL_ARGS_ASSERT_REGPROP \ assert(sv); assert(o) -PERL_CALLCONV void Perl_repeatcpy(char* to, const char* from, I32 len, I32 count) +PERL_CALLCONV void Perl_repeatcpy(char* to, const char* from, I32 len, IV count) __attribute__nonnull__(1) __attribute__nonnull__(2); #define PERL_ARGS_ASSERT_REPEATCPY \ @@ -3399,10 +3556,7 @@ PERL_CALLCONV char* Perl_savesharedpv(pTHX_ const char* pv) PERL_CALLCONV char* Perl_savesharedpvn(pTHX_ const char *const pv, const STRLEN len) __attribute__malloc__ - __attribute__warn_unused_result__ - __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_SAVESHAREDPVN \ - assert(pv) + __attribute__warn_unused_result__; PERL_CALLCONV char* Perl_savesharedsvpv(pTHX_ SV *sv) __attribute__malloc__ @@ -3516,12 +3670,6 @@ PERL_CALLCONV bool Perl_stashpv_hvname_match(pTHX_ const COP *c, const HV *hv) #define PERL_ARGS_ASSERT_STASHPV_HVNAME_MATCH \ assert(c); assert(hv) -PERL_CALLCONV void Perl_store_cop_label(pTHX_ COP *const cop, const char *label, STRLEN len, U32 flags) - __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_STORE_COP_LABEL \ - assert(cop); assert(label) - PERL_CALLCONV NV Perl_str_to_version(pTHX_ SV *sv) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); @@ -3569,7 +3717,7 @@ PERL_CALLCONV char* Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, cons #define PERL_ARGS_ASSERT_SV_2PV_NOLEN \ assert(sv) -PERL_CALLCONV char* Perl_sv_2pvbyte(pTHX_ SV *const sv, STRLEN *const lp) +PERL_CALLCONV char* Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_SV_2PVBYTE \ assert(sv) @@ -3580,7 +3728,7 @@ PERL_CALLCONV char* Perl_sv_2pvbyte(pTHX_ SV *const sv, STRLEN *const lp) #define PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN \ assert(sv) -PERL_CALLCONV char* Perl_sv_2pvutf8(pTHX_ SV *const sv, STRLEN *const lp) +PERL_CALLCONV char* Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_SV_2PVUTF8 \ assert(sv) @@ -3730,6 +3878,27 @@ PERL_CALLCONV bool Perl_sv_derived_from(pTHX_ SV* sv, const char *const name) #define PERL_ARGS_ASSERT_SV_DERIVED_FROM \ assert(sv); assert(name) +PERL_CALLCONV bool Perl_sv_derived_from_pv(pTHX_ SV* sv, const char *const name, U32 flags) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_SV_DERIVED_FROM_PV \ + assert(sv); assert(name) + +PERL_CALLCONV bool Perl_sv_derived_from_pvn(pTHX_ SV* sv, const char *const name, const STRLEN len, U32 flags) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_SV_DERIVED_FROM_PVN \ + assert(sv); assert(name) + +PERL_CALLCONV bool Perl_sv_derived_from_sv(pTHX_ SV* sv, SV *namesv, U32 flags) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_SV_DERIVED_FROM_SV \ + assert(sv); assert(namesv) + PERL_CALLCONV bool Perl_sv_destroyable(pTHX_ SV *sv); PERL_CALLCONV bool Perl_sv_does(pTHX_ SV* sv, const char *const name) __attribute__warn_unused_result__ @@ -3738,6 +3907,27 @@ PERL_CALLCONV bool Perl_sv_does(pTHX_ SV* sv, const char *const name) #define PERL_ARGS_ASSERT_SV_DOES \ assert(sv); assert(name) +PERL_CALLCONV bool Perl_sv_does_pv(pTHX_ SV* sv, const char *const name, U32 flags) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_SV_DOES_PV \ + assert(sv); assert(name) + +PERL_CALLCONV bool Perl_sv_does_pvn(pTHX_ SV* sv, const char *const name, const STRLEN len, U32 flags) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_SV_DOES_PVN \ + assert(sv); assert(name) + +PERL_CALLCONV bool Perl_sv_does_sv(pTHX_ SV* sv, SV* namesv, U32 flags) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_SV_DOES_SV \ + assert(sv); assert(namesv) + PERL_CALLCONV void Perl_sv_dump(pTHX_ SV* sv) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_SV_DUMP \ @@ -3908,6 +4098,11 @@ PERL_CALLCONV char* Perl_sv_recode_to_utf8(pTHX_ SV* sv, SV *encoding) #define PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8 \ assert(sv); assert(encoding) +PERL_CALLCONV SV* Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_SV_REF \ + assert(sv) + PERL_CALLCONV const char* Perl_sv_reftype(pTHX_ const SV *const sv, const int ob) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); @@ -3931,6 +4126,11 @@ PERL_CALLCONV SV* Perl_sv_rvweaken(pTHX_ SV *const sv) #define PERL_ARGS_ASSERT_SV_RVWEAKEN \ assert(sv) +PERL_CALLCONV void Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_SV_SETHEK \ + assert(sv) + PERL_CALLCONV void Perl_sv_setiv(pTHX_ SV *const sv, const IV num) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_SV_SETIV \ @@ -4190,6 +4390,7 @@ PERL_CALLCONV UV Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8) assert(swash); assert(ptr) PERL_CALLCONV SV* Perl_swash_init(pTHX_ const char* pkg, const char* name, SV* listsv, I32 minbits, I32 none) + __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2) __attribute__nonnull__(pTHX_3); @@ -4270,22 +4471,24 @@ PERL_CALLCONV UV Perl_to_utf8_case(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp, S /* PERL_CALLCONV UV Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); */ +#define PERL_ARGS_ASSERT_TO_UTF8_FOLD \ + assert(p); assert(ustrp) -PERL_CALLCONV UV Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) +/* PERL_CALLCONV UV Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_2); + __attribute__nonnull__(pTHX_2); */ #define PERL_ARGS_ASSERT_TO_UTF8_LOWER \ assert(p); assert(ustrp) -PERL_CALLCONV UV Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) +/* PERL_CALLCONV UV Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_2); + __attribute__nonnull__(pTHX_2); */ #define PERL_ARGS_ASSERT_TO_UTF8_TITLE \ assert(p); assert(ustrp) -PERL_CALLCONV UV Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) +/* PERL_CALLCONV UV Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp) __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_2); + __attribute__nonnull__(pTHX_2); */ #define PERL_ARGS_ASSERT_TO_UTF8_UPPER \ assert(p); assert(ustrp) @@ -4358,15 +4561,29 @@ PERL_CALLCONV U8* Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *len) assert(s); assert(len) PERL_CALLCONV UV Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen) + __attribute__deprecated__ __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_UTF8_TO_UVCHR \ assert(s) +PERL_CALLCONV UV Perl_utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF \ + assert(s); assert(send) + PERL_CALLCONV UV Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen) + __attribute__deprecated__ __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_UTF8_TO_UVUNI \ assert(s) +PERL_CALLCONV UV Perl_utf8_to_uvuni_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_UTF8_TO_UVUNI_BUF \ + assert(s); assert(send) + PERL_CALLCONV UV Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_UTF8N_TO_UVUNI \ @@ -4387,6 +4604,16 @@ PERL_CALLCONV U8* Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags) #define PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS \ assert(d) +PERL_CALLCONV UV Perl_valid_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_VALID_UTF8_TO_UVCHR \ + assert(s) + +PERL_CALLCONV UV Perl_valid_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_VALID_UTF8_TO_UVUNI \ + assert(s) + PERL_CALLCONV int Perl_vcmp(pTHX_ SV *lhv, SV *rhv) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); @@ -4411,7 +4638,8 @@ PERL_CALLCONV void Perl_vivify_defelem(pTHX_ SV* sv) #define PERL_ARGS_ASSERT_VIVIFY_DEFELEM \ assert(sv) -PERL_CALLCONV void Perl_vivify_ref(pTHX_ SV* sv, U32 to_what) +PERL_CALLCONV SV* Perl_vivify_ref(pTHX_ SV* sv, U32 to_what) + __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_VIVIFY_REF \ assert(sv) @@ -4485,16 +4713,38 @@ PERL_CALLCONV void Perl_warner(pTHX_ U32 err, const char* pat, ...) #define PERL_ARGS_ASSERT_WARNER \ assert(pat) +PERL_CALLCONV I32 Perl_was_lvalue_sub(pTHX) + __attribute__warn_unused_result__; + PERL_CALLCONV void Perl_watch(pTHX_ char** addr) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_WATCH \ assert(addr) -PERL_CALLCONV I32 Perl_whichsig(pTHX_ const char* sig) +/* PERL_CALLCONV I32 whichsig(pTHX_ const char* sig) + __attribute__nonnull__(pTHX_1); */ + +PERL_CALLCONV I32 Perl_whichsig_pv(pTHX_ const char* sig) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_WHICHSIG_PV \ + assert(sig) + +PERL_CALLCONV I32 Perl_whichsig_pvn(pTHX_ const char* sig, STRLEN len) __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_WHICHSIG \ +#define PERL_ARGS_ASSERT_WHICHSIG_PVN \ assert(sig) +PERL_CALLCONV I32 Perl_whichsig_sv(pTHX_ SV* sigsv) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_WHICHSIG_SV \ + assert(sigsv) + +PERL_CALLCONV void Perl_wrap_op_checker(pTHX_ Optype opcode, Perl_check_t new_checker, Perl_check_t *old_checker_p) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); +#define PERL_ARGS_ASSERT_WRAP_OP_CHECKER \ + assert(new_checker); assert(old_checker_p) + PERL_CALLCONV void Perl_write_to_stderr(pTHX_ SV* msv) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_WRITE_TO_STDERR \ @@ -4516,6 +4766,16 @@ PERL_CALLCONV int Perl_yyerror(pTHX_ const char *const s) #define PERL_ARGS_ASSERT_YYERROR \ assert(s) +PERL_CALLCONV int Perl_yyerror_pv(pTHX_ const char *const s, U32 flags) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_YYERROR_PV \ + assert(s) + +PERL_CALLCONV int Perl_yyerror_pvn(pTHX_ const char *const s, STRLEN len, U32 flags) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_YYERROR_PVN \ + assert(s) + PERL_CALLCONV int Perl_yylex(pTHX); PERL_CALLCONV int Perl_yyparse(pTHX_ int gramtype); PERL_CALLCONV void Perl_yyunlex(pTHX); @@ -4676,6 +4936,15 @@ STATIC PerlIO * S_doopen_pm(pTHX_ SV *name) assert(name) # endif +#endif +#if !defined(PERL_IMPLICIT_SYS) +PERL_CALLCONV I32 Perl_my_pclose(pTHX_ PerlIO* ptr); +PERL_CALLCONV PerlIO* Perl_my_popen(pTHX_ const char* cmd, const char* mode) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_MY_POPEN \ + assert(cmd); assert(mode) + #endif #if !defined(PERL_IS_MINIPERL) # if defined(PERL_IN_PERL_C) @@ -4995,8 +5264,6 @@ PERL_CALLCONV void Perl_pending_Slabs_to_ro(pTHX); #if defined(PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION) /* PERL_CALLCONV bool Perl_do_exec(pTHX_ const char* cmd) __attribute__nonnull__(pTHX_1); */ -#define PERL_ARGS_ASSERT_DO_EXEC \ - assert(cmd) #endif #if defined(PERL_DONT_CREATE_GVSV) @@ -5242,9 +5509,7 @@ STATIC SV* S_pm_description(pTHX_ const PMOP *pm) #define PERL_ARGS_ASSERT_PM_DESCRIPTION \ assert(pm) -STATIC void S_sequence(pTHX_ const OP *o); STATIC UV S_sequence_num(pTHX_ const OP *o); -STATIC void S_sequence_tail(pTHX_ const OP *o); # if defined(PERL_MAD) STATIC void S_xmldump_attr(pTHX_ I32 level, PerlIO *file, const char* pat, ...) __attribute__format__(__printf__,pTHX_3,pTHX_4) @@ -5255,7 +5520,7 @@ STATIC void S_xmldump_attr(pTHX_ I32 level, PerlIO *file, const char* pat, ...) # endif #endif -#if defined(PERL_IN_DUMP_C) || defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C) +#if defined(PERL_IN_DUMP_C) || defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_SCOPE_C) PERL_CALLCONV void Perl_hv_kill_backrefs(pTHX_ HV *hv) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_HV_KILL_BACKREFS \ @@ -5263,14 +5528,14 @@ PERL_CALLCONV void Perl_hv_kill_backrefs(pTHX_ HV *hv) #endif #if defined(PERL_IN_GV_C) -STATIC HV* S_gv_get_super_pkg(pTHX_ const char* name, I32 namelen) +STATIC HV* S_gv_get_super_pkg(pTHX_ const char* name, I32 namelen, U32 flags) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_GV_GET_SUPER_PKG \ assert(name) -STATIC void S_gv_init_sv(pTHX_ GV *gv, const svtype sv_type) +STATIC void S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type) __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_GV_INIT_SV \ +#define PERL_ARGS_ASSERT_GV_INIT_SVTYPE \ assert(gv) STATIC void S_gv_magicalize_isa(pTHX_ GV *gv) @@ -5322,6 +5587,11 @@ STATIC struct xpvhv_aux* S_hv_auxinit(HV *hv) assert(hv) STATIC SV* S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, int k_flags, I32 d_flags, U32 hash); +STATIC SV* S_hv_free_ent_ret(pTHX_ HV *hv, HE *entryK) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_HV_FREE_ENT_RET \ + assert(hv) + STATIC void S_hv_magic_check(HV *hv, bool *needs_copy, bool *needs_store) __attribute__nonnull__(1) __attribute__nonnull__(2) @@ -5366,6 +5636,14 @@ PERL_CALLCONV void Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av) #define PERL_ARGS_ASSERT_SV_KILL_BACKREFS \ assert(sv) +#endif +#if defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C) +PERL_CALLCONV SV* Perl_hfree_next_entry(pTHX_ HV *hv, STRLEN *indexp) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_HFREE_NEXT_ENTRY \ + assert(hv); assert(indexp) + #endif #if defined(PERL_IN_LOCALE_C) # if defined(USE_LOCALE_NUMERIC) || defined(USE_LOCALE_COLLATE) @@ -5398,9 +5676,17 @@ STATIC void S_save_magic(pTHX_ I32 mgs_ix, SV *sv) assert(sv) STATIC void S_unwind_handler_stack(pTHX_ const void *p); +#endif +#if defined(PERL_IN_MG_C) || defined(PERL_IN_PP_C) +PERL_CALLCONV bool Perl_translate_substr_offsets(pTHX_ STRLEN curlen, IV pos1_iv, bool pos1_is_uv, IV len_iv, bool len_is_uv, STRLEN *posp, STRLEN *lenp) + __attribute__nonnull__(pTHX_6) + __attribute__nonnull__(pTHX_7); +#define PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS \ + assert(posp); assert(lenp) + #endif #if defined(PERL_IN_MRO_C) -STATIC void S_mro_clean_isarev(pTHX_ HV * const isa, const char * const name, const STRLEN len, HV * const exceptions) +STATIC void S_mro_clean_isarev(pTHX_ HV * const isa, const char * const name, const STRLEN len, HV * const exceptions, U32 flags) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); #define PERL_ARGS_ASSERT_MRO_CLEAN_ISAREV \ @@ -5423,6 +5709,7 @@ STATIC AV* S_mro_get_linear_isa_dfs(pTHX_ HV* stash, U32 level) STATIC NV S_mulexp10(NV value, I32 exponent); #endif #if defined(PERL_IN_OP_C) +PERL_STATIC_INLINE bool S_aassign_common_vars(pTHX_ OP* o); STATIC void S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs, bool for_my) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); @@ -5436,13 +5723,20 @@ STATIC void S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp #define PERL_ARGS_ASSERT_APPLY_ATTRS_MY \ assert(stash); assert(target); assert(imopsp) -STATIC void S_bad_type(pTHX_ I32 n, const char *t, const char *name, const OP *kid) +STATIC void S_bad_type_pv(pTHX_ I32 n, const char *t, const char *name, U32 flags, const OP *kid) __attribute__nonnull__(pTHX_2) __attribute__nonnull__(pTHX_3) - __attribute__nonnull__(pTHX_4); -#define PERL_ARGS_ASSERT_BAD_TYPE \ + __attribute__nonnull__(pTHX_5); +#define PERL_ARGS_ASSERT_BAD_TYPE_PV \ assert(t); assert(name); assert(kid) +STATIC void S_bad_type_sv(pTHX_ I32 n, const char *t, SV *namesv, U32 flags, const OP *kid) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3) + __attribute__nonnull__(pTHX_5); +#define PERL_ARGS_ASSERT_BAD_TYPE_SV \ + assert(t); assert(namesv); assert(kid) + STATIC void S_cop_free(pTHX_ COP *cop) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_COP_FREE \ @@ -5453,6 +5747,11 @@ STATIC OP * S_dup_attrlist(pTHX_ OP *o) #define PERL_ARGS_ASSERT_DUP_ATTRLIST \ assert(o) +STATIC void S_finalize_op(pTHX_ OP* o) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_FINALIZE_OP \ + assert(o) + STATIC void S_find_and_forget_pmops(pTHX_ OP *o) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS \ @@ -5465,22 +5764,22 @@ STATIC OP* S_fold_constants(pTHX_ OP *o) STATIC OP* S_force_list(pTHX_ OP* arg); STATIC OP* S_gen_constant_list(pTHX_ OP* o); -STATIC const char* S_gv_ename(pTHX_ GV *gv) +STATIC SV* S_gv_ename(pTHX_ GV *gv) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_GV_ENAME \ assert(gv) +STATIC void S_inplace_aassign(pTHX_ OP* o) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_INPLACE_AASSIGN \ + assert(o) + STATIC bool S_is_handle_constructor(const OP *o, I32 numargs) __attribute__warn_unused_result__ __attribute__nonnull__(1); #define PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR \ assert(o) -STATIC OP* S_is_inplace_av(pTHX_ OP* o, OP* oright) - __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_IS_INPLACE_AV \ - assert(o) - STATIC I32 S_is_list_assignment(pTHX_ const OP *o) __attribute__warn_unused_result__; @@ -5511,7 +5810,7 @@ STATIC OP* S_new_logop(pTHX_ I32 type, I32 flags, OP **firstp, OP **otherp) #define PERL_ARGS_ASSERT_NEW_LOGOP \ assert(firstp); assert(otherp) -STATIC void S_no_bareword_allowed(pTHX_ const OP *o) +STATIC void S_no_bareword_allowed(pTHX_ OP *o) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED \ assert(o) @@ -5522,6 +5821,16 @@ STATIC OP* S_no_fh_allowed(pTHX_ OP *o) #define PERL_ARGS_ASSERT_NO_FH_ALLOWED \ assert(o) +PERL_STATIC_INLINE OP* S_op_integerize(pTHX_ OP *o) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_OP_INTEGERIZE \ + assert(o) + +PERL_STATIC_INLINE OP* S_op_std_init(pTHX_ OP *o) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_OP_STD_INIT \ + assert(o) + STATIC OP* S_opt_scalarhv(pTHX_ OP* rep_op) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_OPT_SCALARHV \ @@ -5544,10 +5853,7 @@ STATIC void S_process_special_blocks(pTHX_ const char *const fullname, GV *const STATIC OP* S_ref_array_or_hash(pTHX_ OP* cond); STATIC OP* S_refkids(pTHX_ OP* o, I32 type); STATIC bool S_scalar_mod_type(const OP *o, I32 type) - __attribute__warn_unused_result__ - __attribute__nonnull__(1); -#define PERL_ARGS_ASSERT_SCALAR_MOD_TYPE \ - assert(o) + __attribute__warn_unused_result__; STATIC OP* S_scalarboolean(pTHX_ OP *o) __attribute__nonnull__(pTHX_1); @@ -5567,20 +5873,33 @@ STATIC void S_simplify_sort(pTHX_ OP *o) #define PERL_ARGS_ASSERT_SIMPLIFY_SORT \ assert(o) -STATIC OP* S_too_few_arguments(pTHX_ OP *o, const char* name) +STATIC OP* S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS \ +#define PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV \ assert(o); assert(name) -STATIC OP* S_too_many_arguments(pTHX_ OP *o, const char* name) +STATIC OP* S_too_few_arguments_sv(pTHX_ OP *o, SV* namesv, U32 flags) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS \ +#define PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_SV \ + assert(o); assert(namesv) + +STATIC OP* S_too_many_arguments_pv(pTHX_ OP *o, const char* name, U32 flags) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV \ assert(o); assert(name) +STATIC OP* S_too_many_arguments_sv(pTHX_ OP *o, SV* namesv, U32 flags) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_SV \ + assert(o); assert(namesv) + # if defined(USE_ITHREADS) STATIC void S_forget_pmop(pTHX_ PMOP *const o, U32 flags) __attribute__nonnull__(pTHX_1); @@ -5588,25 +5907,33 @@ STATIC void S_forget_pmop(pTHX_ PMOP *const o, U32 flags) assert(o) # endif +#endif +#if defined(PERL_IN_OP_C) || defined(PERL_IN_SV_C) +PERL_CALLCONV void Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv, SV * const *new_const_svp) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_REPORT_REDEFINED_CV \ + assert(name); assert(old_cv) + #endif #if defined(PERL_IN_PAD_C) -STATIC PADOFFSET S_pad_add_name_sv(pTHX_ SV *namesv, const U32 flags, HV *typestash, HV *ourstash) +STATIC PADOFFSET S_pad_alloc_name(pTHX_ SV *namesv, U32 flags, HV *typestash, HV *ourstash) __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_PAD_ADD_NAME_SV \ +#define PERL_ARGS_ASSERT_PAD_ALLOC_NAME \ assert(namesv) -STATIC void S_pad_check_dup(pTHX_ SV *name, const U32 flags, const HV *ourstash) +STATIC void S_pad_check_dup(pTHX_ SV *name, U32 flags, const HV *ourstash) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_PAD_CHECK_DUP \ assert(name) -STATIC PADOFFSET S_pad_findlex(pTHX_ const char *name, const CV* cv, U32 seq, int warn, SV** out_capture, SV** out_name_sv, int *out_flags) +STATIC PADOFFSET S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv, U32 seq, int warn, SV** out_capture, SV** out_name_sv, int *out_flags) __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_2) - __attribute__nonnull__(pTHX_6) - __attribute__nonnull__(pTHX_7); + __attribute__nonnull__(pTHX_4) + __attribute__nonnull__(pTHX_8) + __attribute__nonnull__(pTHX_9); #define PERL_ARGS_ASSERT_PAD_FINDLEX \ - assert(name); assert(cv); assert(out_name_sv); assert(out_flags) + assert(namepv); assert(cv); assert(out_name_sv); assert(out_flags) STATIC void S_pad_reset(pTHX); #endif @@ -5638,25 +5965,30 @@ STATIC void S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env) assert(argv) STATIC void S_init_predump_symbols(pTHX); +STATIC SV* S_mayberelocate(pTHX_ const char *const dir, STRLEN len, U32 flags) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_MAYBERELOCATE \ + assert(dir) + +STATIC void S_minus_v(pTHX) + __attribute__noreturn__; + STATIC void S_my_exit_jump(pTHX) __attribute__noreturn__; STATIC void S_nuke_stacks(pTHX); -STATIC int S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript, PerlIO **rsfpp) +STATIC PerlIO * S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript) __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_3) - __attribute__nonnull__(pTHX_4); + __attribute__nonnull__(pTHX_3); #define PERL_ARGS_ASSERT_OPEN_SCRIPT \ - assert(scriptname); assert(suidscript); assert(rsfpp) + assert(scriptname); assert(suidscript) STATIC void* S_parse_body(pTHX_ char **env, XSINIT_t xsinit); STATIC void S_run_body(pTHX_ I32 oldscope) __attribute__noreturn__; -STATIC void S_usage(pTHX_ const char *name) - __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_USAGE \ - assert(name) +STATIC void S_usage(pTHX) + __attribute__noreturn__; #endif #if defined(PERL_IN_PP_C) @@ -5685,6 +6017,13 @@ PERL_CALLCONV GV* Perl_softref2xv(pTHX_ SV *const sv, const char *const what, co #endif #if defined(PERL_IN_PP_CTL_C) +STATIC SV ** S_adjust_stack_on_leave(pTHX_ SV **newsp, SV **sp, SV **mark, I32 gimme, U32 flags) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); +#define PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE \ + assert(newsp); assert(sp); assert(mark) + STATIC PerlIO * S_check_type_and_open(pTHX_ SV *name) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); @@ -5696,17 +6035,17 @@ STATIC void S_destroy_matcher(pTHX_ PMOP* matcher) #define PERL_ARGS_ASSERT_DESTROY_MATCHER \ assert(matcher) -STATIC OP* S_do_smartmatch(pTHX_ HV* seen_this, HV* seen_other); +STATIC OP* S_do_smartmatch(pTHX_ HV* seen_this, HV* seen_other, const bool copied); STATIC OP* S_docatch(pTHX_ OP *o) __attribute__warn_unused_result__; -STATIC bool S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq); -STATIC OP* S_dofindlabel(pTHX_ OP *o, const char *label, OP **opstack, OP **oplimit) +STATIC bool S_doeval(pTHX_ int gimme, OP** startop, CV* outside, U32 seq, HV* hh); +STATIC OP* S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2) - __attribute__nonnull__(pTHX_3) - __attribute__nonnull__(pTHX_4); + __attribute__nonnull__(pTHX_5) + __attribute__nonnull__(pTHX_6); #define PERL_ARGS_ASSERT_DOFINDLABEL \ assert(o); assert(label); assert(opstack); assert(oplimit) @@ -5721,7 +6060,7 @@ STATIC I32 S_dopoptoeval(pTHX_ I32 startingblock) STATIC I32 S_dopoptogiven(pTHX_ I32 startingblock) __attribute__warn_unused_result__; -STATIC I32 S_dopoptolabel(pTHX_ const char *label) +STATIC I32 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_DOPOPTOLABEL \ @@ -5958,13 +6297,30 @@ STATIC SV * S_space_join_names_mortal(pTHX_ char *const *array) #endif #if defined(PERL_IN_REGCOMP_C) +STATIC void S__append_range_to_invlist(pTHX_ SV* const invlist, const UV start, const UV end) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST \ + assert(invlist) + +PERL_STATIC_INLINE UV* S__invlist_array_init(pTHX_ SV* const invlist, const bool will_have_0) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT__INVLIST_ARRAY_INIT \ + assert(invlist) + +STATIC SV* S__new_invlist_C_array(pTHX_ UV* list) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT__NEW_INVLIST_C_ARRAY \ + assert(list) + STATIC void S_add_alternate(pTHX_ AV** alternate_ptr, U8* string, STRLEN len) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); #define PERL_ARGS_ASSERT_ADD_ALTERNATE \ assert(alternate_ptr); assert(string) -PERL_STATIC_INLINE HV* S_add_cp_to_invlist(pTHX_ HV* invlist, const UV cp) +PERL_STATIC_INLINE SV* S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp) __attribute__warn_unused_result__; STATIC U32 S_add_data(struct RExC_state_t *pRExC_state, U32 n, const char *s) @@ -5974,9 +6330,6 @@ STATIC U32 S_add_data(struct RExC_state_t *pRExC_state, U32 n, const char *s) #define PERL_ARGS_ASSERT_ADD_DATA \ assert(pRExC_state); assert(s) -STATIC HV* S_add_range_to_invlist(pTHX_ HV* invlist, const UV start, const UV end) - __attribute__warn_unused_result__; - STATIC void S_checkposixcc(pTHX_ struct RExC_state_t *pRExC_state) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_CHECKPOSIXCC \ @@ -6013,69 +6366,95 @@ STATIC void S_cl_or(const struct RExC_state_t *pRExC_state, struct regnode_charc #define PERL_ARGS_ASSERT_CL_OR \ assert(pRExC_state); assert(cl); assert(or_with) -PERL_STATIC_INLINE UV* S_invlist_array(pTHX_ HV* const invlist) +PERL_STATIC_INLINE UV* S_get_invlist_iter_addr(pTHX_ SV* invlist) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR \ + assert(invlist) + +PERL_STATIC_INLINE UV* S_get_invlist_len_addr(pTHX_ SV* invlist) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_GET_INVLIST_LEN_ADDR \ + assert(invlist) + +PERL_STATIC_INLINE UV* S_get_invlist_version_id_addr(pTHX_ SV* invlist) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_GET_INVLIST_VERSION_ID_ADDR \ + assert(invlist) + +PERL_STATIC_INLINE UV* S_get_invlist_zero_addr(pTHX_ SV* invlist) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_GET_INVLIST_ZERO_ADDR \ + assert(invlist) + +PERL_STATIC_INLINE UV* S_invlist_array(pTHX_ SV* const invlist) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_INVLIST_ARRAY \ assert(invlist) -PERL_STATIC_INLINE void S_invlist_destroy(pTHX_ HV* const invlist) +PERL_STATIC_INLINE SV* S_invlist_clone(pTHX_ SV* const invlist) + __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_INVLIST_DESTROY \ +#define PERL_ARGS_ASSERT_INVLIST_CLONE \ assert(invlist) -STATIC void S_invlist_extend(pTHX_ HV* const invlist, const UV len) +STATIC void S_invlist_extend(pTHX_ SV* const invlist, const UV len) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_INVLIST_EXTEND \ assert(invlist) -STATIC HV* S_invlist_intersection(pTHX_ HV* const a, HV* const b) +PERL_STATIC_INLINE void S_invlist_iterinit(pTHX_ SV* invlist) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT_INVLIST_ITERINIT \ + assert(invlist) + +STATIC bool S_invlist_iternext(pTHX_ SV* invlist, UV* start, UV* end) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_INVLIST_INTERSECTION \ - assert(a); assert(b) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); +#define PERL_ARGS_ASSERT_INVLIST_ITERNEXT \ + assert(invlist); assert(start); assert(end) -PERL_STATIC_INLINE UV S_invlist_len(pTHX_ HV* const invlist) +PERL_STATIC_INLINE UV S_invlist_len(pTHX_ SV* const invlist) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_INVLIST_LEN \ assert(invlist) -PERL_STATIC_INLINE UV S_invlist_max(pTHX_ HV* const invlist) +PERL_STATIC_INLINE UV S_invlist_max(pTHX_ SV* const invlist) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_INVLIST_MAX \ assert(invlist) -PERL_STATIC_INLINE void S_invlist_set_len(pTHX_ HV* const invlist, const UV len) +STATIC IV S_invlist_search(pTHX_ SV* const invlist, const UV cp) + __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_INVLIST_SET_LEN \ +#define PERL_ARGS_ASSERT_INVLIST_SEARCH \ assert(invlist) -PERL_STATIC_INLINE void S_invlist_set_max(pTHX_ HV* const invlist, const UV max) +PERL_STATIC_INLINE void S_invlist_set_len(pTHX_ SV* const invlist, const UV len) __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_INVLIST_SET_MAX \ +#define PERL_ARGS_ASSERT_INVLIST_SET_LEN \ assert(invlist) -PERL_STATIC_INLINE void S_invlist_trim(pTHX_ HV* const invlist) +PERL_STATIC_INLINE void S_invlist_trim(pTHX_ SV* const invlist) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_INVLIST_TRIM \ assert(invlist) -STATIC HV* S_invlist_union(pTHX_ HV* const a, HV* const b) - __attribute__warn_unused_result__ - __attribute__nonnull__(pTHX_1) - __attribute__nonnull__(pTHX_2); -#define PERL_ARGS_ASSERT_INVLIST_UNION \ - assert(a); assert(b) - -STATIC U32 S_join_exact(pTHX_ struct RExC_state_t *pRExC_state, regnode *scan, I32 *min, U32 flags, regnode *val, U32 depth) +STATIC U32 S_join_exact(pTHX_ struct RExC_state_t *pRExC_state, regnode *scan, UV *min_subtract, bool *has_exactf_sharp_s, U32 flags, regnode *val, U32 depth) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2) - __attribute__nonnull__(pTHX_3); + __attribute__nonnull__(pTHX_3) + __attribute__nonnull__(pTHX_4); #define PERL_ARGS_ASSERT_JOIN_EXACT \ - assert(pRExC_state); assert(scan); assert(min) + assert(pRExC_state); assert(scan); assert(min_subtract); assert(has_exactf_sharp_s) STATIC I32 S_make_trie(pTHX_ struct RExC_state_t *pRExC_state, regnode *startbranch, regnode *first, regnode *last, regnode *tail, U32 word_count, U32 flags, U32 depth) __attribute__nonnull__(pTHX_1) @@ -6202,7 +6581,7 @@ STATIC void S_scan_commit(pTHX_ const struct RExC_state_t *pRExC_state, struct s #define PERL_ARGS_ASSERT_SCAN_COMMIT \ assert(pRExC_state); assert(data); assert(minlenp) -PERL_STATIC_INLINE U8 S_set_regclass_bit(pTHX_ struct RExC_state_t* pRExC_state, regnode* node, const U8 value, HV** invlist_ptr, AV** alternate_ptr) +PERL_STATIC_INLINE U8 S_set_regclass_bit(pTHX_ struct RExC_state_t* pRExC_state, regnode* node, const U8 value, SV** invlist_ptr, AV** alternate_ptr) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2) __attribute__nonnull__(pTHX_4) @@ -6210,7 +6589,7 @@ PERL_STATIC_INLINE U8 S_set_regclass_bit(pTHX_ struct RExC_state_t* pRExC_state, #define PERL_ARGS_ASSERT_SET_REGCLASS_BIT \ assert(pRExC_state); assert(node); assert(invlist_ptr); assert(alternate_ptr) -STATIC U8 S_set_regclass_bit_fold(pTHX_ struct RExC_state_t *pRExC_state, regnode* node, const U8 value, HV** invlist_ptr, AV** alternate_ptr) +STATIC U8 S_set_regclass_bit_fold(pTHX_ struct RExC_state_t *pRExC_state, regnode* node, const U8 value, SV** invlist_ptr, AV** alternate_ptr) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2) __attribute__nonnull__(pTHX_4) @@ -6227,8 +6606,91 @@ STATIC I32 S_study_chunk(pTHX_ struct RExC_state_t *pRExC_state, regnode **scanp #define PERL_ARGS_ASSERT_STUDY_CHUNK \ assert(pRExC_state); assert(scanp); assert(minlenp); assert(deltap); assert(last) +#endif +#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C) +PERL_CALLCONV SV* Perl__core_swash_init(pTHX_ const char* pkg, const char* name, SV* listsv, I32 minbits, I32 none, bool return_if_undef, SV* invlist, bool passed_in_invlist_has_user_defined_property) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); +#define PERL_ARGS_ASSERT__CORE_SWASH_INIT \ + assert(pkg); assert(name); assert(listsv) + +PERL_CALLCONV SV* Perl__invlist_contents(pTHX_ SV* const invlist) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT__INVLIST_CONTENTS \ + assert(invlist) + +#endif +#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C) +PERL_CALLCONV SV* Perl__add_range_to_invlist(pTHX_ SV* invlist, const UV start, const UV end) + __attribute__warn_unused_result__; + +/* PERL_CALLCONV void _invlist_intersection(pTHX_ SV* const a, SV* const b, SV** i) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); */ + +PERL_CALLCONV void Perl__invlist_intersection_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, bool complement_b, SV** i) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_4); +#define PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND \ + assert(b); assert(i) + +PERL_CALLCONV void Perl__invlist_invert(pTHX_ SV* const invlist) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT__INVLIST_INVERT \ + assert(invlist) + +PERL_CALLCONV void Perl__invlist_invert_prop(pTHX_ SV* const invlist) + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT__INVLIST_INVERT_PROP \ + assert(invlist) + +PERL_CALLCONV void Perl__invlist_populate_swatch(pTHX_ SV* const invlist, const UV start, const UV end, U8* swatch) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_4); +#define PERL_ARGS_ASSERT__INVLIST_POPULATE_SWATCH \ + assert(invlist); assert(swatch) + +/* PERL_CALLCONV void _invlist_subtract(pTHX_ SV* const a, SV* const b, SV** result) + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); */ + +/* PERL_CALLCONV void _invlist_union(pTHX_ SV* const a, SV* const b, SV** output) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); */ + +PERL_CALLCONV void Perl__invlist_union_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, bool complement_b, SV** output) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_4); +#define PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND \ + assert(b); assert(output) + +PERL_CALLCONV SV* Perl__new_invlist(pTHX_ IV initial_size) + __attribute__warn_unused_result__; + +PERL_CALLCONV HV* Perl__swash_inversion_hash(pTHX_ SV* const swash) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT__SWASH_INVERSION_HASH \ + assert(swash) + +PERL_CALLCONV SV* Perl__swash_to_invlist(pTHX_ SV* const swash) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT__SWASH_TO_INVLIST \ + assert(swash) + #endif #if defined(PERL_IN_REGEXEC_C) +STATIC SV* S_core_regclass_swash(pTHX_ const regexp *prog, const struct regnode *node, bool doinit, SV **listsvp, SV **altsvp) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_2); +#define PERL_ARGS_ASSERT_CORE_REGCLASS_SWASH \ + assert(node) + STATIC char* S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s, const char *strend, regmatch_info *reginfo) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1) @@ -6431,7 +6893,7 @@ STATIC STRLEN S_sv_pos_u2b_midway(const U8 *const start, const U8 *send, STRLEN #define PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY \ assert(start); assert(send) -STATIC void S_sv_unglob(pTHX_ SV *const sv) +PERL_STATIC_INLINE void S_sv_unglob(pTHX_ SV *const sv, U32 flags) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_SV_UNGLOB \ assert(sv) @@ -6455,9 +6917,6 @@ STATIC void S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, co #define PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE \ assert(sv); assert(mgp) -STATIC SV * S_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ, const SV *const keyname, I32 aindex, int subscript_type) - __attribute__warn_unused_result__; - STATIC I32 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_VISIT \ @@ -6493,6 +6952,11 @@ STATIC void S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced) assert(unreferenced) # endif +#endif +#if defined(PERL_IN_SV_C) || defined (PERL_IN_OP_C) +PERL_CALLCONV SV * Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ, const SV *const keyname, I32 aindex, int subscript_type) + __attribute__warn_unused_result__; + #endif #if defined(PERL_IN_TOKE_C) STATIC int S_ao(pTHX_ int toketype); @@ -6668,7 +7132,7 @@ STATIC SV* S_tokeq(pTHX_ SV *sv) assert(sv) STATIC void S_update_debugger_info(pTHX_ SV *orig_sv, const char *const buf, STRLEN len); -STATIC int S_yywarn(pTHX_ const char *const s) +STATIC int S_yywarn(pTHX_ const char *const s, U32 flags) __attribute__nonnull__(pTHX_1); #define PERL_ARGS_ASSERT_YYWARN \ assert(s) @@ -6694,7 +7158,7 @@ STATIC void S_start_force(pTHX_ int where); # endif #endif #if defined(PERL_IN_UNIVERSAL_C) -STATIC bool S_isa_lookup(pTHX_ HV *stash, const char * const name) +STATIC bool S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags) __attribute__nonnull__(pTHX_1) __attribute__nonnull__(pTHX_2); #define PERL_ARGS_ASSERT_ISA_LOOKUP \ @@ -6702,6 +7166,14 @@ STATIC bool S_isa_lookup(pTHX_ HV *stash, const char * const name) #endif #if defined(PERL_IN_UTF8_C) +STATIC UV S_check_locale_boundary_crossing(pTHX_ const U8* const p, const UV result, U8* const ustrp, STRLEN *lenp) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1) + __attribute__nonnull__(pTHX_3) + __attribute__nonnull__(pTHX_4); +#define PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING \ + assert(p); assert(ustrp); assert(lenp) + STATIC STRLEN S_is_utf8_char_slow(const U8 *s, const STRLEN len) __attribute__warn_unused_result__ __attribute__nonnull__(1); @@ -6716,12 +7188,37 @@ STATIC bool S_is_utf8_common(pTHX_ const U8 *const p, SV **swash, const char * c #define PERL_ARGS_ASSERT_IS_UTF8_COMMON \ assert(p); assert(swash); assert(swashname) -STATIC SV* S_swash_get(pTHX_ SV* swash, UV start, UV span) +STATIC SV* S_swatch_get(pTHX_ SV* swash, UV start, UV span) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_1); -#define PERL_ARGS_ASSERT_SWASH_GET \ +#define PERL_ARGS_ASSERT_SWATCH_GET \ assert(swash) +STATIC U8 S_to_lower_latin1(pTHX_ const U8 c, U8 *p, STRLEN *lenp) + __attribute__warn_unused_result__; + +#endif +#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C) +PERL_CALLCONV bool Perl__is_utf8_quotemeta(pTHX_ const U8 *p) + __attribute__warn_unused_result__ + __attribute__nonnull__(pTHX_1); +#define PERL_ARGS_ASSERT__IS_UTF8_QUOTEMETA \ + assert(p) + +PERL_CALLCONV UV Perl__to_upper_title_latin1(pTHX_ const U8 c, U8 *p, STRLEN *lenp, const char S_or_s) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); +#define PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1 \ + assert(p); assert(lenp) + +#endif +#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) +PERL_CALLCONV UV Perl__to_fold_latin1(pTHX_ const U8 c, U8 *p, STRLEN *lenp, const bool flags) + __attribute__nonnull__(pTHX_2) + __attribute__nonnull__(pTHX_3); +#define PERL_ARGS_ASSERT__TO_FOLD_LATIN1 \ + assert(p); assert(lenp) + #endif #if defined(PERL_IN_UTIL_C) STATIC bool S_ckwarn_common(pTHX_ U32 w); @@ -7050,7 +7547,7 @@ PERL_CALLCONV OP* Perl_newPADOP(pTHX_ I32 type, I32 flags, SV* sv) #define PERL_ARGS_ASSERT_NEWPADOP \ assert(sv) -PERL_CALLCONV AV* Perl_padlist_dup(pTHX_ AV *const srcpad, CLONE_PARAMS *const param) +PERL_CALLCONV AV* Perl_padlist_dup(pTHX_ AV *srcpad, CLONE_PARAMS *param) __attribute__warn_unused_result__ __attribute__nonnull__(pTHX_2); #define PERL_ARGS_ASSERT_PADLIST_DUP \ diff --git a/Master/tlpkg/tlperl/lib/CORE/regcharclass.h b/Master/tlpkg/tlperl/lib/CORE/regcharclass.h index 47d4b41925b..5e233ea730e 100644 --- a/Master/tlpkg/tlperl/lib/CORE/regcharclass.h +++ b/Master/tlpkg/tlperl/lib/CORE/regcharclass.h @@ -2,7 +2,7 @@ * * regcharclass.h * - * Copyright (C) 2007 by Larry Wall and others + * Copyright (C) 2007, 2011 by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -359,7 +359,7 @@ 0x2029 == cp ) ) ) ) ) ) /* - TRICKYFOLD: Problematic fold case letters. + TRICKYFOLD: Problematic fold case letters. When adding to this list, also should add them to regcomp.c and fold_grind.t 0x00DF # LATIN SMALL LETTER SHARP S 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS diff --git a/Master/tlpkg/tlperl/lib/CORE/regcomp.h b/Master/tlpkg/tlperl/lib/CORE/regcomp.h index c8f593b78d8..e1e9fdb22bf 100644 --- a/Master/tlpkg/tlperl/lib/CORE/regcomp.h +++ b/Master/tlpkg/tlperl/lib/CORE/regcomp.h @@ -311,6 +311,8 @@ struct regnode_charclass_class { * are done to share them, as described below. If necessary, the ANYOF_LOCALE * and ANYOF_CLASS bits could be shared with a space penalty for locale nodes, * but this isn't quite so easy, as the optimizer also uses ANYOF_CLASS. + * Another option would be to push them into new nodes. E.g. there could be an + * ANYOF_LOCALE node that would be in place of the flag of the same name. * Once the planned change to compile all the above-latin1 code points is done, * then the UNICODE_ALL bit can be freed up, with a small performance penalty. * If flags need to be added that are applicable to the synthetic start class @@ -492,6 +494,7 @@ struct regnode_charclass_class { #define REG_SEEN_VERBARG 0x00000080 #define REG_SEEN_CUTGROUP 0x00000100 #define REG_SEEN_RUN_ON_COMMENT 0x00000200 +#define REG_SEEN_EXACTF_SHARP_S 0x00000400 START_EXTERN_C @@ -836,7 +839,8 @@ re.pm, especially to the documentation. #ifdef DEBUGGING -#define GET_RE_DEBUG_FLAGS_DECL VOL IV re_debug_flags = 0; GET_RE_DEBUG_FLAGS; +#define GET_RE_DEBUG_FLAGS_DECL VOL IV re_debug_flags \ + PERL_UNUSED_DECL = 0; GET_RE_DEBUG_FLAGS; #define RE_PV_COLOR_DECL(rpv,rlen,isuni,dsv,pv,l,m,c1,c2) \ const char * const rpv = \ diff --git a/Master/tlpkg/tlperl/lib/CORE/regexp.h b/Master/tlpkg/tlperl/lib/CORE/regexp.h index 5776a9023a7..78fec5781a0 100644 --- a/Master/tlpkg/tlperl/lib/CORE/regexp.h +++ b/Master/tlpkg/tlperl/lib/CORE/regexp.h @@ -55,6 +55,15 @@ typedef struct regexp_paren_pair { I32 end; } regexp_paren_pair; +#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C) +#define _invlist_union(a, b, output) _invlist_union_maybe_complement_2nd(a, b, FALSE, output) +#define _invlist_intersection(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, FALSE, output) + +/* Subtracting b from a leaves in a everything that was there that isn't in b, + * that is the intersection of a with b's complement */ +#define _invlist_subtract(a, b, output) _invlist_intersection_maybe_complement_2nd(a, b, TRUE, output) +#endif + /* The regexp/REGEXP struct, see L for further documentation on the individual fields. The struct is ordered so that the most @@ -298,9 +307,10 @@ and check for NULL. * unshared area without affecting binary compatibility */ #define RXf_BASE_SHIFT (_RXf_PMf_SHIFT_NEXT+1) -/* embed.pl doesn't yet know how to handle static inline functions, so - manually decorate them here with gcc-style attributes. -*/ +/* Manually decorate this function with gcc-style attributes just to + * avoid having to restructure the header files and their called order, + * as proto.h would have to be included before this file, and isn't */ + PERL_STATIC_INLINE const char * get_regex_charset_name(const U32 flags, STRLEN* const lenp) __attribute__warn_unused_result__; @@ -326,7 +336,6 @@ get_regex_charset_name(const U32 flags, STRLEN* const lenp) default: return "?"; /* Unknown */ } - return "?"; /* Unknown */ } /* Anchor and GPOS related stuff */ @@ -380,7 +389,7 @@ get_regex_charset_name(const U32 flags, STRLEN* const lenp) #define RXf_START_ONLY (1<<(RXf_BASE_SHIFT+19)) /* Pattern is /^/ */ #define RXf_SKIPWHITE (1<<(RXf_BASE_SHIFT+20)) /* Pattern is for a split / / */ #define RXf_WHITE (1<<(RXf_BASE_SHIFT+21)) /* Pattern is /\s+/ */ -#define RXf_NULL (1<<(RXf_BASE_SHIFT+22)) /* Pattern is // */ +#define RXf_NULL (1U<<(RXf_BASE_SHIFT+22)) /* Pattern is // */ #if RXf_BASE_SHIFT+22 > 31 # error Too many RXf_PMf bits used. See regnodes.h for any spare in middle #endif diff --git a/Master/tlpkg/tlperl/lib/CORE/regnodes.h b/Master/tlpkg/tlperl/lib/CORE/regnodes.h index 931761beb8c..14bac24cb24 100644 --- a/Master/tlpkg/tlperl/lib/CORE/regnodes.h +++ b/Master/tlpkg/tlperl/lib/CORE/regnodes.h @@ -6,8 +6,8 @@ /* Regops and State definitions */ -#define REGNODE_MAX 111 -#define REGMATCH_STATE_MAX 151 +#define REGNODE_MAX 112 +#define REGMATCH_STATE_MAX 152 #define END 0 /* 0000 End of program. */ #define SUCCEED 1 /* 0x01 Return from a subroutine, basically. */ @@ -58,69 +58,70 @@ #define BRANCH 46 /* 0x2e Match this alternative, or the next... */ #define BACK 47 /* 0x2f Match "", "next" ptr points backward. */ #define EXACT 48 /* 0x30 Match this string (preceded by length). */ -#define EXACTF 49 /* 0x31 Match this string, folded, native charset semantics for non-utf8 (prec. by length). */ -#define EXACTFL 50 /* 0x32 Match this string, folded in locale (w/len). */ -#define EXACTFU 51 /* 0x33 Match this string, folded, Unicode semantics for non-utf8 (prec. by length). */ -#define EXACTFA 52 /* 0x34 Match this string, folded, Unicode semantics for non-utf8, but no ASCII-range character matches outside ASCII (prec. by length),. */ -#define NOTHING 53 /* 0x35 Match empty string. */ -#define TAIL 54 /* 0x36 Match empty string. Can jump here from outside. */ -#define STAR 55 /* 0x37 Match this (simple) thing 0 or more times. */ -#define PLUS 56 /* 0x38 Match this (simple) thing 1 or more times. */ -#define CURLY 57 /* 0x39 Match this simple thing {n,m} times. */ -#define CURLYN 58 /* 0x3a Capture next-after-this simple thing */ -#define CURLYM 59 /* 0x3b Capture this medium-complex thing {n,m} times. */ -#define CURLYX 60 /* 0x3c Match this complex thing {n,m} times. */ -#define WHILEM 61 /* 0x3d Do curly processing and see if rest matches. */ -#define OPEN 62 /* 0x3e Mark this point in input as start of */ -#define CLOSE 63 /* 0x3f Analogous to OPEN. */ -#define REF 64 /* 0x40 Match some already matched string */ -#define REFF 65 /* 0x41 Match already matched string, folded using native charset semantics for non-utf8 */ -#define REFFL 66 /* 0x42 Match already matched string, folded in loc. */ -#define REFFU 67 /* 0x43 Match already matched string, folded using unicode semantics for non-utf8 */ -#define REFFA 68 /* 0x44 Match already matched string, folded using unicode semantics for non-utf8, no mixing ASCII, non-ASCII */ -#define NREF 69 /* 0x45 Match some already matched string */ -#define NREFF 70 /* 0x46 Match already matched string, folded using native charset semantics for non-utf8 */ -#define NREFFL 71 /* 0x47 Match already matched string, folded in loc. */ -#define NREFFU 72 /* 0x48 Match already matched string, folded using unicode semantics for non-utf8 */ -#define NREFFA 73 /* 0x49 Match already matched string, folded using unicode semantics for non-utf8, no mixing ASCII, non-ASCII */ -#define IFMATCH 74 /* 0x4a Succeeds if the following matches. */ -#define UNLESSM 75 /* 0x4b Fails if the following matches. */ -#define SUSPEND 76 /* 0x4c "Independent" sub-RE. */ -#define IFTHEN 77 /* 0x4d Switch, should be preceded by switcher . */ -#define GROUPP 78 /* 0x4e Whether the group matched. */ -#define LONGJMP 79 /* 0x4f Jump far away. */ -#define BRANCHJ 80 /* 0x50 BRANCH with long offset. */ -#define EVAL 81 /* 0x51 Execute some Perl code. */ -#define MINMOD 82 /* 0x52 Next operator is not greedy. */ -#define LOGICAL 83 /* 0x53 Next opcode should set the flag only. */ -#define RENUM 84 /* 0x54 Group with independently numbered parens. */ -#define TRIE 85 /* 0x55 Match many EXACT(F[ALU]?)? at once. flags==type */ -#define TRIEC 86 /* 0x56 Same as TRIE, but with embedded charclass data */ -#define AHOCORASICK 87 /* 0x57 Aho Corasick stclass. flags==type */ -#define AHOCORASICKC 88 /* 0x58 Same as AHOCORASICK, but with embedded charclass data */ -#define GOSUB 89 /* 0x59 recurse to paren arg1 at (signed) ofs arg2 */ -#define GOSTART 90 /* 0x5a recurse to start of pattern */ -#define NGROUPP 91 /* 0x5b Whether the group matched. */ -#define INSUBP 92 /* 0x5c Whether we are in a specific recurse. */ -#define DEFINEP 93 /* 0x5d Never execute directly. */ -#define ENDLIKE 94 /* 0x5e Used only for the type field of verbs */ -#define OPFAIL 95 /* 0x5f Same as (?!) */ -#define ACCEPT 96 /* 0x60 Accepts the current matched string. */ -#define VERB 97 /* 0x61 Used only for the type field of verbs */ -#define PRUNE 98 /* 0x62 Pattern fails at this startpoint if no-backtracking through this */ -#define MARKPOINT 99 /* 0x63 Push the current location for rollback by cut. */ -#define SKIP 100 /* 0x64 On failure skip forward (to the mark) before retrying */ -#define COMMIT 101 /* 0x65 Pattern fails outright if backtracking through this */ -#define CUTGROUP 102 /* 0x66 On failure go to the next alternation in the group */ -#define KEEPS 103 /* 0x67 $& begins here. */ -#define LNBREAK 104 /* 0x68 generic newline pattern */ -#define VERTWS 105 /* 0x69 vertical whitespace (Perl 6) */ -#define NVERTWS 106 /* 0x6a not vertical whitespace (Perl 6) */ -#define HORIZWS 107 /* 0x6b horizontal whitespace (Perl 6) */ -#define NHORIZWS 108 /* 0x6c not horizontal whitespace (Perl 6) */ -#define FOLDCHAR 109 /* 0x6d codepoint with tricky case folding properties. */ -#define OPTIMIZED 110 /* 0x6e Placeholder for dump. */ -#define PSEUDO 111 /* 0x6f Pseudo opcode for internal use. */ +#define EXACTF 49 /* 0x31 Match this non-UTF-8 string (not guaranteed to be folded) using /id rules (w/len). */ +#define EXACTFL 50 /* 0x32 Match this string (not guaranteed to be folded) using /il rules (w/len). */ +#define EXACTFU 51 /* 0x33 Match this string (folded iff in UTF-8, length in folding doesn't change if not in UTF-8) using /iu rules (w/len). */ +#define EXACTFU_SS 52 /* 0x34 Match this string (folded iff in UTF-8, length in folding may change even if not in UTF-8) using /iu rules (w/len). */ +#define EXACTFU_TRICKYFOLD 53 /* 0x35 Match this folded UTF-8 string using /iu rules */ +#define EXACTFA 54 /* 0x36 Match this string (not guaranteed to be folded) using /iaa rules (w/len). */ +#define NOTHING 55 /* 0x37 Match empty string. */ +#define TAIL 56 /* 0x38 Match empty string. Can jump here from outside. */ +#define STAR 57 /* 0x39 Match this (simple) thing 0 or more times. */ +#define PLUS 58 /* 0x3a Match this (simple) thing 1 or more times. */ +#define CURLY 59 /* 0x3b Match this simple thing {n,m} times. */ +#define CURLYN 60 /* 0x3c Capture next-after-this simple thing */ +#define CURLYM 61 /* 0x3d Capture this medium-complex thing {n,m} times. */ +#define CURLYX 62 /* 0x3e Match this complex thing {n,m} times. */ +#define WHILEM 63 /* 0x3f Do curly processing and see if rest matches. */ +#define OPEN 64 /* 0x40 Mark this point in input as start of */ +#define CLOSE 65 /* 0x41 Analogous to OPEN. */ +#define REF 66 /* 0x42 Match some already matched string */ +#define REFF 67 /* 0x43 Match already matched string, folded using native charset semantics for non-utf8 */ +#define REFFL 68 /* 0x44 Match already matched string, folded in loc. */ +#define REFFU 69 /* 0x45 Match already matched string, folded using unicode semantics for non-utf8 */ +#define REFFA 70 /* 0x46 Match already matched string, folded using unicode semantics for non-utf8, no mixing ASCII, non-ASCII */ +#define NREF 71 /* 0x47 Match some already matched string */ +#define NREFF 72 /* 0x48 Match already matched string, folded using native charset semantics for non-utf8 */ +#define NREFFL 73 /* 0x49 Match already matched string, folded in loc. */ +#define NREFFU 74 /* 0x4a Match already matched string, folded using unicode semantics for non-utf8 */ +#define NREFFA 75 /* 0x4b Match already matched string, folded using unicode semantics for non-utf8, no mixing ASCII, non-ASCII */ +#define IFMATCH 76 /* 0x4c Succeeds if the following matches. */ +#define UNLESSM 77 /* 0x4d Fails if the following matches. */ +#define SUSPEND 78 /* 0x4e "Independent" sub-RE. */ +#define IFTHEN 79 /* 0x4f Switch, should be preceded by switcher . */ +#define GROUPP 80 /* 0x50 Whether the group matched. */ +#define LONGJMP 81 /* 0x51 Jump far away. */ +#define BRANCHJ 82 /* 0x52 BRANCH with long offset. */ +#define EVAL 83 /* 0x53 Execute some Perl code. */ +#define MINMOD 84 /* 0x54 Next operator is not greedy. */ +#define LOGICAL 85 /* 0x55 Next opcode should set the flag only. */ +#define RENUM 86 /* 0x56 Group with independently numbered parens. */ +#define TRIE 87 /* 0x57 Match many EXACT(F[ALU]?)? at once. flags==type */ +#define TRIEC 88 /* 0x58 Same as TRIE, but with embedded charclass data */ +#define AHOCORASICK 89 /* 0x59 Aho Corasick stclass. flags==type */ +#define AHOCORASICKC 90 /* 0x5a Same as AHOCORASICK, but with embedded charclass data */ +#define GOSUB 91 /* 0x5b recurse to paren arg1 at (signed) ofs arg2 */ +#define GOSTART 92 /* 0x5c recurse to start of pattern */ +#define NGROUPP 93 /* 0x5d Whether the group matched. */ +#define INSUBP 94 /* 0x5e Whether we are in a specific recurse. */ +#define DEFINEP 95 /* 0x5f Never execute directly. */ +#define ENDLIKE 96 /* 0x60 Used only for the type field of verbs */ +#define OPFAIL 97 /* 0x61 Same as (?!) */ +#define ACCEPT 98 /* 0x62 Accepts the current matched string. */ +#define VERB 99 /* 0x63 Used only for the type field of verbs */ +#define PRUNE 100 /* 0x64 Pattern fails at this startpoint if no-backtracking through this */ +#define MARKPOINT 101 /* 0x65 Push the current location for rollback by cut. */ +#define SKIP 102 /* 0x66 On failure skip forward (to the mark) before retrying */ +#define COMMIT 103 /* 0x67 Pattern fails outright if backtracking through this */ +#define CUTGROUP 104 /* 0x68 On failure go to the next alternation in the group */ +#define KEEPS 105 /* 0x69 $& begins here. */ +#define LNBREAK 106 /* 0x6a generic newline pattern */ +#define VERTWS 107 /* 0x6b vertical whitespace (Perl 6) */ +#define NVERTWS 108 /* 0x6c not vertical whitespace (Perl 6) */ +#define HORIZWS 109 /* 0x6d horizontal whitespace (Perl 6) */ +#define NHORIZWS 110 /* 0x6e not horizontal whitespace (Perl 6) */ +#define OPTIMIZED 111 /* 0x6f Placeholder for dump. */ +#define PSEUDO 112 /* 0x70 Pseudo opcode for internal use. */ /* ------------ States ------------- */ #define TRIE_next (REGNODE_MAX + 1) /* state for TRIE */ #define TRIE_next_fail (REGNODE_MAX + 2) /* state for TRIE */ @@ -221,6 +222,8 @@ EXTCONST U8 PL_regkind[] = { EXACT, /* EXACTF */ EXACT, /* EXACTFL */ EXACT, /* EXACTFU */ + EXACT, /* EXACTFU_SS */ + EXACT, /* EXACTFU_TRICKYFOLD */ EXACT, /* EXACTFA */ NOTHING, /* NOTHING */ NOTHING, /* TAIL */ @@ -278,7 +281,6 @@ EXTCONST U8 PL_regkind[] = { NVERTWS, /* NVERTWS */ HORIZWS, /* HORIZWS */ NHORIZWS, /* NHORIZWS */ - FOLDCHAR, /* FOLDCHAR */ NOTHING, /* OPTIMIZED */ PSEUDO, /* PSEUDO */ /* ------------ States ------------- */ @@ -381,6 +383,8 @@ static const U8 regarglen[] = { 0, /* EXACTF */ 0, /* EXACTFL */ 0, /* EXACTFU */ + 0, /* EXACTFU_SS */ + 0, /* EXACTFU_TRICKYFOLD */ 0, /* EXACTFA */ 0, /* NOTHING */ 0, /* TAIL */ @@ -438,7 +442,6 @@ static const U8 regarglen[] = { 0, /* NVERTWS */ 0, /* HORIZWS */ 0, /* NHORIZWS */ - EXTRA_SIZE(struct regnode_1), /* FOLDCHAR */ 0, /* OPTIMIZED */ 0, /* PSEUDO */ }; @@ -498,6 +501,8 @@ static const char reg_off_by_arg[] = { 0, /* EXACTF */ 0, /* EXACTFL */ 0, /* EXACTFU */ + 0, /* EXACTFU_SS */ + 0, /* EXACTFU_TRICKYFOLD */ 0, /* EXACTFA */ 0, /* NOTHING */ 0, /* TAIL */ @@ -555,7 +560,6 @@ static const char reg_off_by_arg[] = { 0, /* NVERTWS */ 0, /* HORIZWS */ 0, /* NHORIZWS */ - 0, /* FOLDCHAR */ 0, /* OPTIMIZED */ 0, /* PSEUDO */ }; @@ -620,66 +624,67 @@ EXTCONST char * const PL_reg_name[] = { "EXACTF", /* 0x31 */ "EXACTFL", /* 0x32 */ "EXACTFU", /* 0x33 */ - "EXACTFA", /* 0x34 */ - "NOTHING", /* 0x35 */ - "TAIL", /* 0x36 */ - "STAR", /* 0x37 */ - "PLUS", /* 0x38 */ - "CURLY", /* 0x39 */ - "CURLYN", /* 0x3a */ - "CURLYM", /* 0x3b */ - "CURLYX", /* 0x3c */ - "WHILEM", /* 0x3d */ - "OPEN", /* 0x3e */ - "CLOSE", /* 0x3f */ - "REF", /* 0x40 */ - "REFF", /* 0x41 */ - "REFFL", /* 0x42 */ - "REFFU", /* 0x43 */ - "REFFA", /* 0x44 */ - "NREF", /* 0x45 */ - "NREFF", /* 0x46 */ - "NREFFL", /* 0x47 */ - "NREFFU", /* 0x48 */ - "NREFFA", /* 0x49 */ - "IFMATCH", /* 0x4a */ - "UNLESSM", /* 0x4b */ - "SUSPEND", /* 0x4c */ - "IFTHEN", /* 0x4d */ - "GROUPP", /* 0x4e */ - "LONGJMP", /* 0x4f */ - "BRANCHJ", /* 0x50 */ - "EVAL", /* 0x51 */ - "MINMOD", /* 0x52 */ - "LOGICAL", /* 0x53 */ - "RENUM", /* 0x54 */ - "TRIE", /* 0x55 */ - "TRIEC", /* 0x56 */ - "AHOCORASICK", /* 0x57 */ - "AHOCORASICKC", /* 0x58 */ - "GOSUB", /* 0x59 */ - "GOSTART", /* 0x5a */ - "NGROUPP", /* 0x5b */ - "INSUBP", /* 0x5c */ - "DEFINEP", /* 0x5d */ - "ENDLIKE", /* 0x5e */ - "OPFAIL", /* 0x5f */ - "ACCEPT", /* 0x60 */ - "VERB", /* 0x61 */ - "PRUNE", /* 0x62 */ - "MARKPOINT", /* 0x63 */ - "SKIP", /* 0x64 */ - "COMMIT", /* 0x65 */ - "CUTGROUP", /* 0x66 */ - "KEEPS", /* 0x67 */ - "LNBREAK", /* 0x68 */ - "VERTWS", /* 0x69 */ - "NVERTWS", /* 0x6a */ - "HORIZWS", /* 0x6b */ - "NHORIZWS", /* 0x6c */ - "FOLDCHAR", /* 0x6d */ - "OPTIMIZED", /* 0x6e */ - "PSEUDO", /* 0x6f */ + "EXACTFU_SS", /* 0x34 */ + "EXACTFU_TRICKYFOLD", /* 0x35 */ + "EXACTFA", /* 0x36 */ + "NOTHING", /* 0x37 */ + "TAIL", /* 0x38 */ + "STAR", /* 0x39 */ + "PLUS", /* 0x3a */ + "CURLY", /* 0x3b */ + "CURLYN", /* 0x3c */ + "CURLYM", /* 0x3d */ + "CURLYX", /* 0x3e */ + "WHILEM", /* 0x3f */ + "OPEN", /* 0x40 */ + "CLOSE", /* 0x41 */ + "REF", /* 0x42 */ + "REFF", /* 0x43 */ + "REFFL", /* 0x44 */ + "REFFU", /* 0x45 */ + "REFFA", /* 0x46 */ + "NREF", /* 0x47 */ + "NREFF", /* 0x48 */ + "NREFFL", /* 0x49 */ + "NREFFU", /* 0x4a */ + "NREFFA", /* 0x4b */ + "IFMATCH", /* 0x4c */ + "UNLESSM", /* 0x4d */ + "SUSPEND", /* 0x4e */ + "IFTHEN", /* 0x4f */ + "GROUPP", /* 0x50 */ + "LONGJMP", /* 0x51 */ + "BRANCHJ", /* 0x52 */ + "EVAL", /* 0x53 */ + "MINMOD", /* 0x54 */ + "LOGICAL", /* 0x55 */ + "RENUM", /* 0x56 */ + "TRIE", /* 0x57 */ + "TRIEC", /* 0x58 */ + "AHOCORASICK", /* 0x59 */ + "AHOCORASICKC", /* 0x5a */ + "GOSUB", /* 0x5b */ + "GOSTART", /* 0x5c */ + "NGROUPP", /* 0x5d */ + "INSUBP", /* 0x5e */ + "DEFINEP", /* 0x5f */ + "ENDLIKE", /* 0x60 */ + "OPFAIL", /* 0x61 */ + "ACCEPT", /* 0x62 */ + "VERB", /* 0x63 */ + "PRUNE", /* 0x64 */ + "MARKPOINT", /* 0x65 */ + "SKIP", /* 0x66 */ + "COMMIT", /* 0x67 */ + "CUTGROUP", /* 0x68 */ + "KEEPS", /* 0x69 */ + "LNBREAK", /* 0x6a */ + "VERTWS", /* 0x6b */ + "NVERTWS", /* 0x6c */ + "HORIZWS", /* 0x6d */ + "NHORIZWS", /* 0x6e */ + "OPTIMIZED", /* 0x6f */ + "PSEUDO", /* 0x70 */ /* ------------ States ------------- */ "TRIE_next", /* REGNODE_MAX +0x01 */ "TRIE_next_fail", /* REGNODE_MAX +0x02 */ @@ -784,7 +789,7 @@ EXTCONST U8 PL_varies[] __attribute__deprecated__ = { EXTCONST U8 PL_varies_bitmask[]; #else EXTCONST U8 PL_varies_bitmask[] = { - 0x00, 0x00, 0x40, 0x00, 0x00, 0xE0, 0x80, 0x3F, 0xFF, 0x33, 0x01, 0x00, 0x00, 0x00 + 0x00, 0x00, 0x40, 0x00, 0x00, 0xE0, 0x00, 0xFE, 0xFC, 0xCF, 0x04, 0x00, 0x00, 0x00, 0x00 }; #endif /* DOINIT */ @@ -808,7 +813,7 @@ EXTCONST U8 PL_simple[] __attribute__deprecated__ = { EXTCONST U8 PL_simple_bitmask[]; #else EXTCONST U8 PL_simple_bitmask[] = { - 0x00, 0x00, 0xBC, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E + 0x00, 0x00, 0xBC, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00 }; #endif /* DOINIT */ diff --git a/Master/tlpkg/tlperl/lib/CORE/scope.h b/Master/tlpkg/tlperl/lib/CORE/scope.h index 113f4e8d717..38da244169f 100644 --- a/Master/tlpkg/tlperl/lib/CORE/scope.h +++ b/Master/tlpkg/tlperl/lib/CORE/scope.h @@ -49,7 +49,6 @@ #define SAVEt_BOOL 38 #define SAVEt_SET_SVFLAGS 39 #define SAVEt_SAVESWITCHSTACK 40 -#define SAVEt_COP_ARYBASE 41 #define SAVEt_RE_STATE 42 #define SAVEt_COMPILE_WARNINGS 43 #define SAVEt_STACK_CXPOS 44 @@ -218,8 +217,6 @@ scope has the given name. Name must be a literal string. PL_curstackinfo->si_stack = (t); \ } STMT_END -#define SAVECOPARYBASE(c) save_pushi32ptr(CopARYBASE_get(c), c, SAVEt_COP_ARYBASE); - /* Need to do the cop warnings like this, rather than a "SAVEFREESHAREDPV", because realloc() means that the value can actually change. Possibly could have done savefreesharedpvREF, but this way actually seems cleaner, @@ -238,8 +235,10 @@ scope has the given name. Name must be a literal string. #define SAVEPARSER(p) save_pushptr((p), SAVEt_PARSER) #ifdef USE_ITHREADS -# define SAVECOPSTASH(c) SAVEPPTR(CopSTASHPV(c)) -# define SAVECOPSTASH_FREE(c) SAVESHAREDPV(CopSTASHPV(c)) +# define SAVECOPSTASH(c) (SAVEPPTR(CopSTASHPV(c)), \ + SAVEI32(CopSTASH_len(c))) +# define SAVECOPSTASH_FREE(c) (SAVESHAREDPV(CopSTASHPV(c)), \ + SAVEI32(CopSTASH_len(c))) # define SAVECOPFILE(c) SAVEPPTR(CopFILE(c)) # define SAVECOPFILE_FREE(c) SAVESHAREDPV(CopFILE(c)) #else diff --git a/Master/tlpkg/tlperl/lib/CORE/sv.h b/Master/tlpkg/tlperl/lib/CORE/sv.h index 7f466754142..7f79c016479 100644 --- a/Master/tlpkg/tlperl/lib/CORE/sv.h +++ b/Master/tlpkg/tlperl/lib/CORE/sv.h @@ -65,6 +65,11 @@ typedef enum { SVt_LAST /* keep last in enum. used to size arrays */ } svtype; +/* *** any alterations to the SV types above need to be reflected in + * SVt_MASK and the various PL_valid_types_* tables */ + +#define SVt_MASK 0xf /* smallest bitmask that covers all types */ + #ifndef PERL_CORE /* Although Fast Boyer Moore tables are now being stored in PVGVs, for most purposes eternal code wanting to consider PVBM probably needs to think of @@ -304,10 +309,10 @@ perform the upgrade if necessary. See C. subroutine in another package. Set the CvIMPORTED_CV_ON() if it needs to be expanded to a real GV */ - -#define SVs_PADSTALE 0x00010000 /* lexical has gone out of scope */ -#define SVpad_STATE 0x00010000 /* pad name is a "state" var */ -#define SVs_PADTMP 0x00020000 /* in use as tmp */ +/* 0x00010000 *** FREE SLOT */ +#define SVs_PADTMP 0x00020000 /* in use as tmp; only if ! SVs_PADMY */ +#define SVs_PADSTALE 0x00020000 /* lexical has gone out of scope; + only valid for SVs_PADMY */ #define SVpad_TYPED 0x00020000 /* pad name is a Typed Lexical */ #define SVs_PADMY 0x00040000 /* in use a "my" variable */ #define SVpad_OUR 0x00040000 /* pad name is "our" instead of "my" */ @@ -317,7 +322,7 @@ perform the upgrade if necessary. See C. #define SVs_SMG 0x00400000 /* has magical set method */ #define SVs_RMG 0x00800000 /* has random magical methods */ -#define SVf_FAKE 0x01000000 /* 0: glob or lexical is just a copy +#define SVf_FAKE 0x01000000 /* 0: glob is just a copy 1: SV head arena wasn't malloc()ed 2: in conjunction with SVf_READONLY marks a shared hash key scalar @@ -367,8 +372,21 @@ perform the upgrade if necessary. See C. /* PVHV */ #define SVphv_SHAREKEYS 0x20000000 /* PVHV keys live on shared string table */ -/* PVNV, PVMG, presumably only inside pads */ -#define SVpad_NAME 0x40000000 /* This SV is a name in the PAD, so + +/* PVNV, PVMG only, and only used in pads. Should be safe to test on any scalar + SV, as the core is careful to avoid setting both. + + SVf_POK, SVp_POK also set: + 0x00004400 Normal + 0x0000C400 Studied (SvSCREAM) + 0x40004400 FBM compiled (SvVALID) + 0x4000C400 pad name. + + 0x00008000 GV with GP + 0x00008800 RV with PCS imported +*/ +#define SVpad_NAME (SVp_SCREAM|SVpbm_VALID) + /* This SV is a name in the PAD, so SVpad_TYPED, SVpad_OUR and SVpad_STATE apply */ /* PVAV */ @@ -378,11 +396,10 @@ perform the upgrade if necessary. See C. /* This is only set true on a PVGV when it's playing "PVBM", but is tested for on any regular scalar (anything <= PVLV) */ #define SVpbm_VALID 0x40000000 -/* ??? */ +/* Only used in toke.c on an SV stored in PL_lex_repl */ #define SVrepl_EVAL 0x40000000 /* Replacement part of s///e */ /* IV, PVIV, PVNV, PVMG, PVGV and (I assume) PVLV */ -/* Presumably IVs aren't stored in pads */ #define SVf_IVisUV 0x80000000 /* use XPVUV instead of XPVIV */ /* PVAV */ #define SVpav_REIFY 0x80000000 /* can become real */ @@ -392,6 +409,8 @@ perform the upgrade if necessary. See C. #define SVpbm_TAIL 0x80000000 /* RV upwards. However, SVf_ROK and SVp_IOK are exclusive */ #define SVprv_WEAKREF 0x80000000 /* Weak reference */ +/* pad name vars only */ +#define SVpad_STATE 0x80000000 /* pad name is a "state" var */ #define _XPV_HEAD \ HV* xmg_stash; /* class package */ \ @@ -407,8 +426,7 @@ union _xnvu { U32 xhigh; } xpad_cop_seq; /* used by pad.c for cop_sequence */ struct { - U32 xbm_previous; /* how many characters in string before rare? */ - U8 xbm_flags; + I32 xbm_useful; U8 xbm_rare; /* rarest character in string */ } xbm_s; /* fields from PVBM */ }; @@ -416,13 +434,13 @@ union _xnvu { union _xivu { IV xivu_iv; /* integer value */ UV xivu_uv; - I32 xivu_i32; /* BmUSEFUL */ HEK * xivu_namehek; /* xpvlv, xpvgv: GvNAME */ }; union _xmgu { MAGIC* xmg_magic; /* linked list of magicalness */ HV* xmg_ourstash; /* Stash for our (when SvPAD_OUR is true) */ + STRLEN xmg_hash_index; /* used while freeing hash entries */ }; struct xpv { @@ -465,6 +483,7 @@ struct xpvlv { SV* xlv_targ; char xlv_type; /* k=keys .=pos x=substr v=vec /=join/re * y=alem/helem/iter t=tie T=tied HE */ + char xlv_flags; /* 1 = negative offset 2 = negative len */ }; /* This structure works in 3 ways - regular scalar, GV with GP, or fast @@ -654,20 +673,23 @@ Dereferences an RV to return the SV. =for apidoc Am|IV|SvIVX|SV* sv Returns the raw value in the SV's IV slot, without checks or conversions. -Only use when you are sure SvIOK is true. See also C. +Only use when you are sure SvIOK is true. See also C. =for apidoc Am|UV|SvUVX|SV* sv Returns the raw value in the SV's UV slot, without checks or conversions. -Only use when you are sure SvIOK is true. See also C. +Only use when you are sure SvIOK is true. See also C. =for apidoc Am|NV|SvNVX|SV* sv Returns the raw value in the SV's NV slot, without checks or conversions. -Only use when you are sure SvNOK is true. See also C. +Only use when you are sure SvNOK is true. See also C. =for apidoc Am|char*|SvPVX|SV* sv Returns a pointer to the physical string in the SV. The SV must contain a string. +This is also used to store the name of an autoloaded subroutine in an XS +AUTOLOAD routine. See L. + =for apidoc Am|STRLEN|SvCUR|SV* sv Returns the length of the string which is in the SV. See C. @@ -676,9 +698,14 @@ Returns the size of the string buffer in the SV, not including any part attributable to C. See C. =for apidoc Am|char*|SvEND|SV* sv -Returns a pointer to the last character in the string which is in the SV. +Returns a pointer to the spot just after the last character in +the string which is in the SV, where there is usually a trailing +null (even though Perl scalars do not strictly require it). See C. Access the character as *(SvEND(sv)). +Warning: If C is equal to C, then C points to +unallocated memory. + =for apidoc Am|HV*|SvSTASH|SV* sv Returns the stash of the SV. @@ -779,7 +806,8 @@ Set the actual length of the string which is in the SV. See C. /* =for apidoc Am|U32|SvUTF8|SV* sv -Returns a U32 value indicating whether the SV contains UTF-8 encoded data. +Returns a U32 value indicating the UTF-8 status of an SV. If things are set-up +properly, this indicates whether or not the SV contains UTF-8 encoded data. Call this after SvPV() in case any call to string overloading updates the internal flag. @@ -788,7 +816,8 @@ Turn on the UTF-8 status of an SV (the data is not changed, just the flag). Do not use frivolously. =for apidoc Am|void|SvUTF8_off|SV *sv -Unsets the UTF-8 status of an SV. +Unsets the UTF-8 status of an SV (the data is not changed, just the flag). +Do not use frivolously. =for apidoc Am|void|SvPOK_only_UTF8|SV* sv Tells an SV that it is a string and disables all other OK bits, @@ -823,7 +852,7 @@ in gv.h: */ ? mg_find(sv,PERL_MAGIC_vstring) : NULL) #define SvOOK(sv) (SvFLAGS(sv) & SVf_OOK) -#define SvOOK_on(sv) ((void)SvIOK_off(sv), SvFLAGS(sv) |= SVf_OOK) +#define SvOOK_on(sv) (SvFLAGS(sv) |= SVf_OOK) #define SvOOK_off(sv) ((void)(SvOOK(sv) && sv_backoff(sv))) #define SvFAKE(sv) (SvFLAGS(sv) & SVf_FAKE) @@ -869,10 +898,12 @@ in gv.h: */ /* =for apidoc Am|U32|SvGAMAGIC|SV* sv -Returns true if the SV has get magic or overloading. If either is true then +Returns true if the SV has get magic or +overloading. If either is true then the scalar is active data, and has the potential to return a new value every -time it is accessed. Hence you must be careful to only read it once per user -logical operation and work with that returned value. If neither is true then +time it is accessed. Hence you must be careful to +only read it once per user logical operation and work +with that returned value. If neither is true then the scalar's value cannot change unless written to. =cut @@ -894,17 +925,43 @@ the scalar's value cannot change unless written to. #define SvTHINKFIRST(sv) (SvFLAGS(sv) & SVf_THINKFIRST) -#define SvPADSTALE(sv) (SvFLAGS(sv) & SVs_PADSTALE) -#define SvPADSTALE_on(sv) (SvFLAGS(sv) |= SVs_PADSTALE) -#define SvPADSTALE_off(sv) (SvFLAGS(sv) &= ~SVs_PADSTALE) - -#define SvPADTMP(sv) (SvFLAGS(sv) & SVs_PADTMP) -#define SvPADTMP_on(sv) (SvFLAGS(sv) |= SVs_PADTMP) -#define SvPADTMP_off(sv) (SvFLAGS(sv) &= ~SVs_PADTMP) - #define SvPADMY(sv) (SvFLAGS(sv) & SVs_PADMY) #define SvPADMY_on(sv) (SvFLAGS(sv) |= SVs_PADMY) +/* SVs_PADTMP and SVs_PADSTALE share the same bit, mediated by SVs_PADMY */ + +#define SvPADTMP(sv) ((SvFLAGS(sv) & (SVs_PADMY|SVs_PADTMP)) == SVs_PADTMP) +#define SvPADSTALE(sv) ((SvFLAGS(sv) & (SVs_PADMY|SVs_PADSTALE)) \ + == (SVs_PADMY|SVs_PADSTALE)) + +#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) +# define SvPADTMP_on(sv) ({ \ + SV *const _svpad = MUTABLE_SV(sv); \ + assert(!(SvFLAGS(_svpad) & SVs_PADMY)); \ + SvFLAGS(_svpad) |= SVs_PADTMP; \ + }) +# define SvPADTMP_off(sv) ({ \ + SV *const _svpad = MUTABLE_SV(sv); \ + assert(!(SvFLAGS(_svpad) & SVs_PADMY)); \ + SvFLAGS(_svpad) &= ~SVs_PADTMP; \ + }) +# define SvPADSTALE_on(sv) ({ \ + SV *const _svpad = MUTABLE_SV(sv); \ + assert(SvFLAGS(_svpad) & SVs_PADMY); \ + SvFLAGS(_svpad) |= SVs_PADSTALE; \ + }) +# define SvPADSTALE_off(sv) ({ \ + SV *const _svpad = MUTABLE_SV(sv); \ + assert(SvFLAGS(_svpad) & SVs_PADMY); \ + SvFLAGS(_svpad) &= ~SVs_PADSTALE; \ + }) +#else +# define SvPADTMP_on(sv) (SvFLAGS(sv) |= SVs_PADTMP) +# define SvPADTMP_off(sv) (SvFLAGS(sv) &= ~SVs_PADTMP) +# define SvPADSTALE_on(sv) (SvFLAGS(sv) |= SVs_PADSTALE) +# define SvPADSTALE_off(sv) (SvFLAGS(sv) &= ~SVs_PADSTALE) +#endif + #define SvTEMP(sv) (SvFLAGS(sv) & SVs_TEMP) #define SvTEMP_on(sv) (SvFLAGS(sv) |= SVs_TEMP) #define SvTEMP_off(sv) (SvFLAGS(sv) &= ~SVs_TEMP) @@ -1003,9 +1060,6 @@ the scalar's value cannot change unless written to. ((XPVMG*) SvANY(sv))->xmg_u.xmg_ourstash = st; \ } STMT_END -#ifdef PERL_DEBUG_COW -#else -#endif #define SvRVx(sv) SvRV(sv) #ifdef PERL_DEBUG_COW @@ -1041,9 +1095,7 @@ the scalar's value cannot change unless written to. /* These get expanded inside other macros that already use a variable _sv */ # define SvPVX(sv) \ (*({ SV *const _svpvx = MUTABLE_SV(sv); \ - assert(SvTYPE(_svpvx) >= SVt_PV); \ - assert(SvTYPE(_svpvx) != SVt_PVAV); \ - assert(SvTYPE(_svpvx) != SVt_PVHV); \ + assert(PL_valid_types_PVX[SvTYPE(_svpvx) & SVt_MASK]); \ assert(!isGV_with_GP(_svpvx)); \ assert(!(SvTYPE(_svpvx) == SVt_PVIO \ && !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))); \ @@ -1051,9 +1103,7 @@ the scalar's value cannot change unless written to. })) # define SvCUR(sv) \ (*({ const SV *const _svcur = (const SV *)(sv); \ - assert(SvTYPE(_svcur) >= SVt_PV); \ - assert(SvTYPE(_svcur) != SVt_PVAV); \ - assert(SvTYPE(_svcur) != SVt_PVHV); \ + assert(PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]); \ assert(!isGV_with_GP(_svcur)); \ assert(!(SvTYPE(_svcur) == SVt_PVIO \ && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))); \ @@ -1061,47 +1111,25 @@ the scalar's value cannot change unless written to. })) # define SvIVX(sv) \ (*({ const SV *const _svivx = (const SV *)(sv); \ - assert(SvTYPE(_svivx) == SVt_IV || SvTYPE(_svivx) >= SVt_PVIV); \ - assert(SvTYPE(_svivx) != SVt_PVAV); \ - assert(SvTYPE(_svivx) != SVt_PVHV); \ - assert(SvTYPE(_svivx) != SVt_PVCV); \ - assert(SvTYPE(_svivx) != SVt_PVFM); \ - assert(SvTYPE(_svivx) != SVt_PVIO); \ - assert(SvTYPE(_svivx) != SVt_REGEXP); \ + assert(PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]); \ assert(!isGV_with_GP(_svivx)); \ &(((XPVIV*) MUTABLE_PTR(SvANY(_svivx)))->xiv_iv); \ })) # define SvUVX(sv) \ (*({ const SV *const _svuvx = (const SV *)(sv); \ - assert(SvTYPE(_svuvx) == SVt_IV || SvTYPE(_svuvx) >= SVt_PVIV); \ - assert(SvTYPE(_svuvx) != SVt_PVAV); \ - assert(SvTYPE(_svuvx) != SVt_PVHV); \ - assert(SvTYPE(_svuvx) != SVt_PVCV); \ - assert(SvTYPE(_svuvx) != SVt_PVFM); \ - assert(SvTYPE(_svuvx) != SVt_PVIO); \ - assert(SvTYPE(_svuvx) != SVt_REGEXP); \ + assert(PL_valid_types_IVX[SvTYPE(_svuvx) & SVt_MASK]); \ assert(!isGV_with_GP(_svuvx)); \ &(((XPVUV*) MUTABLE_PTR(SvANY(_svuvx)))->xuv_uv); \ })) # define SvNVX(sv) \ (*({ const SV *const _svnvx = (const SV *)(sv); \ - assert(SvTYPE(_svnvx) == SVt_NV || SvTYPE(_svnvx) >= SVt_PVNV); \ - assert(SvTYPE(_svnvx) != SVt_PVAV); \ - assert(SvTYPE(_svnvx) != SVt_PVHV); \ - assert(SvTYPE(_svnvx) != SVt_PVCV); \ - assert(SvTYPE(_svnvx) != SVt_PVFM); \ - assert(SvTYPE(_svnvx) != SVt_PVIO); \ - assert(SvTYPE(_svnvx) != SVt_REGEXP); \ + assert(PL_valid_types_NVX[SvTYPE(_svnvx) & SVt_MASK]); \ assert(!isGV_with_GP(_svnvx)); \ &(((XPVNV*) MUTABLE_PTR(SvANY(_svnvx)))->xnv_u.xnv_nv); \ })) # define SvRV(sv) \ (*({ SV *const _svrv = MUTABLE_SV(sv); \ - assert(SvTYPE(_svrv) >= SVt_PV || SvTYPE(_svrv) == SVt_IV); \ - assert(SvTYPE(_svrv) != SVt_PVAV); \ - assert(SvTYPE(_svrv) != SVt_PVHV); \ - assert(SvTYPE(_svrv) != SVt_PVCV); \ - assert(SvTYPE(_svrv) != SVt_PVFM); \ + assert(PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]); \ assert(!isGV_with_GP(_svrv)); \ assert(!(SvTYPE(_svrv) == SVt_PVIO \ && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))); \ @@ -1109,11 +1137,7 @@ the scalar's value cannot change unless written to. })) # define SvRV_const(sv) \ ({ const SV *const _svrv = (const SV *)(sv); \ - assert(SvTYPE(_svrv) >= SVt_PV || SvTYPE(_svrv) == SVt_IV); \ - assert(SvTYPE(_svrv) != SVt_PVAV); \ - assert(SvTYPE(_svrv) != SVt_PVHV); \ - assert(SvTYPE(_svrv) != SVt_PVCV); \ - assert(SvTYPE(_svrv) != SVt_PVFM); \ + assert(PL_valid_types_RV[SvTYPE(_svrv) & SVt_MASK]); \ assert(!isGV_with_GP(_svrv)); \ assert(!(SvTYPE(_svrv) == SVt_PVIO \ && !(IoFLAGS(_svrv) & IOf_FAKE_DIRP))); \ @@ -1174,40 +1198,30 @@ the scalar's value cannot change unless written to. STMT_START {if (!SvIOKp(sv) && (SvNOK(sv) || SvPOK(sv))) \ (void) SvIV_nomg(sv); } STMT_END #define SvIV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ - assert(SvTYPE(sv) != SVt_PVAV); \ - assert(SvTYPE(sv) != SVt_PVHV); \ - assert(SvTYPE(sv) != SVt_PVCV); \ + STMT_START { \ + assert(PL_valid_types_IV_set[SvTYPE(sv) & SVt_MASK]); \ assert(!isGV_with_GP(sv)); \ (((XPVIV*) SvANY(sv))->xiv_iv = (val)); } STMT_END #define SvNV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) == SVt_NV || SvTYPE(sv) >= SVt_PVNV); \ - assert(SvTYPE(sv) != SVt_PVAV); assert(SvTYPE(sv) != SVt_PVHV); \ - assert(SvTYPE(sv) != SVt_PVCV); assert(SvTYPE(sv) != SVt_PVFM); \ - assert(SvTYPE(sv) != SVt_PVIO); \ + STMT_START { \ + assert(PL_valid_types_NV_set[SvTYPE(sv) & SVt_MASK]); \ assert(!isGV_with_GP(sv)); \ (((XPVNV*)SvANY(sv))->xnv_u.xnv_nv = (val)); } STMT_END #define SvPV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_PV); \ - assert(SvTYPE(sv) != SVt_PVAV); \ - assert(SvTYPE(sv) != SVt_PVHV); \ + STMT_START { \ + assert(PL_valid_types_PVX[SvTYPE(sv) & SVt_MASK]); \ assert(!isGV_with_GP(sv)); \ assert(!(SvTYPE(sv) == SVt_PVIO \ && !(IoFLAGS(sv) & IOf_FAKE_DIRP))); \ ((sv)->sv_u.svu_pv = (val)); } STMT_END #define SvUV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ - assert(SvTYPE(sv) != SVt_PVAV); \ - assert(SvTYPE(sv) != SVt_PVHV); \ - assert(SvTYPE(sv) != SVt_PVCV); \ + STMT_START { \ + assert(PL_valid_types_IV_set[SvTYPE(sv) & SVt_MASK]); \ assert(!isGV_with_GP(sv)); \ (((XPVUV*)SvANY(sv))->xuv_uv = (val)); } STMT_END #define SvRV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_PV || SvTYPE(sv) == SVt_IV); \ - assert(SvTYPE(sv) != SVt_PVAV); \ - assert(SvTYPE(sv) != SVt_PVHV); \ - assert(SvTYPE(sv) != SVt_PVCV); \ - assert(SvTYPE(sv) != SVt_PVFM); \ + STMT_START { \ + assert(PL_valid_types_RV[SvTYPE(sv) & SVt_MASK]); \ assert(!isGV_with_GP(sv)); \ assert(!(SvTYPE(sv) == SVt_PVIO \ && !(IoFLAGS(sv) & IOf_FAKE_DIRP))); \ @@ -1219,17 +1233,15 @@ the scalar's value cannot change unless written to. STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END #define SvCUR_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_PV); \ - assert(SvTYPE(sv) != SVt_PVAV); \ - assert(SvTYPE(sv) != SVt_PVHV); \ + STMT_START { \ + assert(PL_valid_types_PVX[SvTYPE(sv) & SVt_MASK]); \ assert(!isGV_with_GP(sv)); \ assert(!(SvTYPE(sv) == SVt_PVIO \ && !(IoFLAGS(sv) & IOf_FAKE_DIRP))); \ (((XPV*) SvANY(sv))->xpv_cur = (val)); } STMT_END #define SvLEN_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_PV); \ - assert(SvTYPE(sv) != SVt_PVAV); \ - assert(SvTYPE(sv) != SVt_PVHV); \ + STMT_START { \ + assert(PL_valid_types_PVX[SvTYPE(sv) & SVt_MASK]); \ assert(!isGV_with_GP(sv)); \ assert(!(SvTYPE(sv) == SVt_PVIO \ && !(IoFLAGS(sv) & IOf_FAKE_DIRP))); \ @@ -1280,42 +1292,34 @@ the scalar's value cannot change unless written to. } STMT_END #endif -#define PERL_FBM_TABLE_OFFSET 1 /* Number of bytes between EOS and table */ +#ifndef PERL_CORE +# define BmFLAGS(sv) (SvTAIL(sv) ? FBMcf_TAIL : 0) +#endif -/* SvPOKp not SvPOK in the assertion because the string can be tainted! eg - perl -T -e '/$^X/' -*/ #if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) -# define BmFLAGS(sv) \ - (*({ SV *const _bmflags = MUTABLE_SV(sv); \ - assert(SvTYPE(_bmflags) == SVt_PVGV); \ - assert(SvVALID(_bmflags)); \ - &(((XPVGV*) SvANY(_bmflags))->xnv_u.xbm_s.xbm_flags); \ - })) # define BmRARE(sv) \ (*({ SV *const _bmrare = MUTABLE_SV(sv); \ - assert(SvTYPE(_bmrare) == SVt_PVGV); \ + assert(SvTYPE(_bmrare) == SVt_PVMG); \ assert(SvVALID(_bmrare)); \ - &(((XPVGV*) SvANY(_bmrare))->xnv_u.xbm_s.xbm_rare); \ + &(((XPVMG*) SvANY(_bmrare))->xnv_u.xbm_s.xbm_rare); \ })) # define BmUSEFUL(sv) \ (*({ SV *const _bmuseful = MUTABLE_SV(sv); \ - assert(SvTYPE(_bmuseful) == SVt_PVGV); \ + assert(SvTYPE(_bmuseful) == SVt_PVMG); \ assert(SvVALID(_bmuseful)); \ assert(!SvIOK(_bmuseful)); \ - &(((XPVGV*) SvANY(_bmuseful))->xiv_u.xivu_i32); \ + &(((XPVMG*) SvANY(_bmuseful))->xnv_u.xbm_s.xbm_useful); \ })) # define BmPREVIOUS(sv) \ (*({ SV *const _bmprevious = MUTABLE_SV(sv); \ - assert(SvTYPE(_bmprevious) == SVt_PVGV); \ + assert(SvTYPE(_bmprevious) == SVt_PVMG); \ assert(SvVALID(_bmprevious)); \ - &(((XPVGV*) SvANY(_bmprevious))->xnv_u.xbm_s.xbm_previous); \ + &(((XPVMG*) SvANY(_bmprevious))->xiv_u.xivu_uv); \ })) #else -# define BmFLAGS(sv) ((XPVGV*) SvANY(sv))->xnv_u.xbm_s.xbm_flags -# define BmRARE(sv) ((XPVGV*) SvANY(sv))->xnv_u.xbm_s.xbm_rare -# define BmUSEFUL(sv) ((XPVGV*) SvANY(sv))->xiv_u.xivu_i32 -# define BmPREVIOUS(sv) ((XPVGV*) SvANY(sv))->xnv_u.xbm_s.xbm_previous +# define BmRARE(sv) ((XPVMG*) SvANY(sv))->xnv_u.xbm_s.xbm_rare +# define BmUSEFUL(sv) ((XPVMG*) SvANY(sv))->xnv_u.xbm_s.xbm_useful +# define BmPREVIOUS(sv) ((XPVMG*) SvANY(sv))->xiv_u.xivu_uv #endif @@ -1325,6 +1329,7 @@ the scalar's value cannot change unless written to. #define LvTARG(sv) ((XPVLV*) SvANY(sv))->xlv_targ #define LvTARGOFF(sv) ((XPVLV*) SvANY(sv))->xlv_targoff #define LvTARGLEN(sv) ((XPVLV*) SvANY(sv))->xlv_targlen +#define LvFLAGS(sv) ((XPVLV*) SvANY(sv))->xlv_flags #define IoIFP(sv) (sv)->sv_u.svu_fp #define IoOFP(sv) ((XPVIO*) SvANY(sv))->xio_ofp @@ -1357,22 +1362,26 @@ the scalar's value cannot change unless written to. /* =for apidoc Am|bool|SvTAINTED|SV* sv -Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if +Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if not. =for apidoc Am|void|SvTAINTED_on|SV* sv Marks an SV as tainted if tainting is enabled. =for apidoc Am|void|SvTAINTED_off|SV* sv -Untaints an SV. Be I careful with this routine, as it short-circuits -some of Perl's fundamental security features. XS module authors should not +Untaints an SV. Be I careful with this routine, as it short-circuits +some of Perl's fundamental security features. XS module authors should not use this function unless they fully understand all the implications of unconditionally untainting the value. Untainting should be done in the standard perl fashion, via a carefully crafted regexp, rather than directly untainting variables. =for apidoc Am|void|SvTAINT|SV* sv -Taints an SV if tainting is enabled. +Taints an SV if tainting is enabled, and if some input to the current +expression is tainted--usually a variable, but possibly also implicit +inputs such as locale settings. C propagates that taintedness to +the outputs of an expression in a pessimistic fashion; i.e., without paying +attention to precisely which outputs are influenced by which inputs. =cut */ @@ -1400,18 +1409,18 @@ directly. =for apidoc Am|char*|SvPV_force_nomg|SV* sv|STRLEN len Like C but will force the SV into containing just a string (C). You want force if you are going to update the C -directly. Doesn't process magic. +directly. Doesn't process magic. =for apidoc Am|char*|SvPV|SV* sv|STRLEN len Returns a pointer to the string in the SV, or a stringified form of the SV if the SV does not contain a string. The SV may cache the -stringified version becoming C. Handles 'get' magic. See also +stringified version becoming C. Handles 'get' magic. See also C for a version which guarantees to evaluate sv only once. =for apidoc Am|char*|SvPVx|SV* sv|STRLEN len A version of C which guarantees to evaluate C only once. Only use this if C is an expression with side effects, otherwise use the -more efficient C. +more efficient C. =for apidoc Am|char*|SvPV_nomg|SV* sv|STRLEN len Like C but doesn't process magic. @@ -1425,27 +1434,29 @@ stringified form becoming C. Handles 'get' magic. Like C but doesn't process magic. =for apidoc Am|IV|SvIV|SV* sv -Coerces the given SV to an integer and returns it. See C for a +Coerces the given SV to an integer and returns it. See C for a version which guarantees to evaluate sv only once. =for apidoc Am|IV|SvIV_nomg|SV* sv Like C but doesn't process magic. =for apidoc Am|IV|SvIVx|SV* sv -Coerces the given SV to an integer and returns it. Guarantees to evaluate -C only once. Only use this if C is an expression with side effects, +Coerces the given SV to an integer and returns it. +Guarantees to evaluate C only once. Only use +this if C is an expression with side effects, otherwise use the more efficient C. =for apidoc Am|NV|SvNV|SV* sv -Coerce the given SV to a double and return it. See C for a version +Coerce the given SV to a double and return it. See C for a version which guarantees to evaluate sv only once. =for apidoc Am|NV|SvNV_nomg|SV* sv Like C but doesn't process magic. =for apidoc Am|NV|SvNVx|SV* sv -Coerces the given SV to a double and returns it. Guarantees to evaluate -C only once. Only use this if C is an expression with side effects, +Coerces the given SV to a double and returns it. +Guarantees to evaluate C only once. Only use +this if C is an expression with side effects, otherwise use the more efficient C. =for apidoc Am|UV|SvUV|SV* sv @@ -1456,8 +1467,9 @@ for a version which guarantees to evaluate sv only once. Like C but doesn't process magic. =for apidoc Am|UV|SvUVx|SV* sv -Coerces the given SV to an unsigned integer and returns it. Guarantees to -C only once. Only use this if C is an expression with side effects, +Coerces the given SV to an unsigned integer and +returns it. Guarantees to C only once. Only +use this if C is an expression with side effects, otherwise use the more efficient C. =for apidoc Am|bool|SvTRUE|SV* sv @@ -1509,9 +1521,9 @@ Guarantees to evaluate sv only once; use the more efficient C otherwise. =for apidoc Am|bool|SvIsCOW|SV* sv -Returns a boolean indicating whether the SV is Copy-On-Write. (either shared +Returns a boolean indicating whether the SV is Copy-On-Write (either shared hash key scalars, or full Copy On Write scalars if 5.9.0 is configured for -COW) +COW). =for apidoc Am|bool|SvIsCOW_shared_hash|SV* sv Returns a boolean indicating whether the SV is Copy-On-Write shared hash key @@ -1531,7 +1543,7 @@ Like C but doesn't process magic. =for apidoc Amdb|STRLEN|sv_utf8_upgrade_nomg|NN SV *sv -Like sv_utf8_upgrade, but doesn't do magic on C +Like sv_utf8_upgrade, but doesn't do magic on C. =cut */ @@ -1735,8 +1747,9 @@ Like sv_utf8_upgrade, but doesn't do magic on C # define SvTRUEx(sv) ((PL_Sv = (sv)), SvTRUE(PL_Sv)) #endif /* __GNU__ */ -#define SvIsCOW(sv) ((SvFLAGS(sv) & (SVf_FAKE | SVf_READONLY)) == \ - (SVf_FAKE | SVf_READONLY)) +#define SvIsCOW(sv) ((SvFLAGS(sv) & (SVf_FAKE | SVf_READONLY)) == \ + (SVf_FAKE | SVf_READONLY) && !isGV_with_GP(sv) \ + && SvTYPE(sv) != SVt_REGEXP) #define SvIsCOW_shared_hash(sv) (SvIsCOW(sv) && SvLEN(sv) == 0) #define SvSHARED_HEK_FROM_PV(pvx) \ @@ -1765,6 +1778,12 @@ Like sv_utf8_upgrade, but doesn't do magic on C /* if (after resolving magic etc), the SV is found to be overloaded, * don't call the overload magic, just return as-is */ #define SV_SKIP_OVERLOAD 8192 +/* It is not yet clear whether we want this as an API, or what the + * constants should be named. */ +#ifdef PERL_CORE +# define SV_CATBYTES 16384 +# define SV_CATUTF8 32768 +#endif /* The core is safe for this COW optimisation. XS code on CPAN may not be. So only default to doing the COW setup if we're in the core. @@ -1802,7 +1821,7 @@ Like sv_utf8_upgrade, but doesn't do magic on C #else # define SvRELEASE_IVX(sv) 0 /* This little game brought to you by the need to shut this warning up: -mg.c: In function `Perl_magic_get': +mg.c: In function 'Perl_magic_get': mg.c:1024: warning: left-hand operand of comma expression has no effect */ # define SvRELEASE_IVX_(sv) /**/ @@ -1898,7 +1917,7 @@ more than once. =for apidoc Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv Calls a non-destructive version of C if dsv is not the same as -ssv. May evaluate arguments more than once. +ssv. May evaluate arguments more than once. =for apidoc Am|void|SvSetMagicSV|SV* dsb|SV* ssv Like C, but does any set magic required afterwards. @@ -1934,7 +1953,7 @@ Returns a pointer to the character buffer. #define SvUNLOCK(sv) PL_unlockhook(aTHX_ sv) #define SvDESTROYABLE(sv) PL_destroyhook(aTHX_ sv) -#define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END +#define SvGETMAGIC(x) ((void)(SvGMAGICAL(x) && mg_get(x))) #define SvSETMAGIC(x) STMT_START { if (SvSMAGICAL(x)) mg_set(x); } STMT_END #define SvSetSV_and(dst,src,finally) \ @@ -1971,6 +1990,16 @@ Returns a pointer to the character buffer. #define SvIMMORTAL(sv) ((sv)==&PL_sv_undef || (sv)==&PL_sv_yes || (sv)==&PL_sv_no || (sv)==&PL_sv_placeholder) +/* +=for apidoc Am|SV *|boolSV|bool b + +Returns a true SV if C is a true value, or a false SV if C is 0. + +See also C and C. + +=cut +*/ + #define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) #define isGV(sv) (SvTYPE(sv) == SVt_PVGV) @@ -2027,9 +2056,9 @@ C on the new SV. Implemented as a wrapper around C. Reads into I the offset from SvPVX back to the true start of the allocated buffer, which will be non-zero if C has been used to -efficiently remove characters from start of the buffer. Implemented as a +efficiently remove characters from start of the buffer. Implemented as a macro, which takes the address of I, which must be of type C. -Evaluates I more than once. Sets I to 0 if C is false. +Evaluates I more than once. Sets I to 0 if C is false. =cut */ diff --git a/Master/tlpkg/tlperl/lib/CORE/sys/socket.h b/Master/tlpkg/tlperl/lib/CORE/sys/socket.h index 3b92b13d546..26a92c78dd4 100644 --- a/Master/tlpkg/tlperl/lib/CORE/sys/socket.h +++ b/Master/tlpkg/tlperl/lib/CORE/sys/socket.h @@ -30,11 +30,17 @@ # include # ifndef SIO_GET_INTERFACE_LIST_EX + +# ifndef MSG_WAITALL +# define MSG_WAITALL 0x8 +# endif + /* The ws2tcpip.h header included in VC6 doesn't define the * sin6_scope_id member of sockaddr_in6. We define our own * version and redefine sockaddr_in6 to point to this one * instead for compiling e.g. Socket.xs. */ + struct my_sockaddr_in6 { short sin6_family; /* AF_INET6 */ u_short sin6_port; /* Transport level port number */ @@ -71,11 +77,106 @@ (x)->sin6_scope_id = 0; \ } +# ifndef IPV6_HDRINCL +# define IPV6_HDRINCL 2 +# endif +# ifndef IPV6_UNICAST_HOPS +# define IPV6_UNICAST_HOPS 4 +# endif +# ifndef IPV6_MULTICAST_IF +# define IPV6_MULTICAST_IF 9 +# endif +# ifndef IPV6_MULTICAST_HOPS +# define IPV6_MULTICAST_HOPS 10 +# endif +# ifndef IPV6_MULTICAST_LOOP +# define IPV6_MULTICAST_LOOP 11 +# endif +# ifndef IPV6_ADD_MEMBERSHIP +# define IPV6_ADD_MEMBERSHIP 12 +# endif +# ifndef IPV6_DROP_MEMBERSHIP +# define IPV6_DROP_MEMBERSHIP 13 +# endif +# ifndef IPV6_JOIN_GROUP +# define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP +# endif +# ifndef IPV6_LEAVE_GROUP +# define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP +# endif +# ifndef IPV6_PKTINFO +# define IPV6_PKTINFO 19 +# endif +# ifndef IPV6_HOPLIMIT +# define IPV6_HOPLIMIT 21 +# endif +# ifndef IPV6_PROTECTION_LEVEL +# define IPV6_PROTECTION_LEVEL 23 +# endif + + /* The ws2tcpip.h header included in MinGW includes ipv6_mreq already */ +# ifndef __GNUC__ + typedef struct ipv6_mreq { + struct in_addr6 ipv6mr_multiaddr; + unsigned int ipv6mr_interface; + } IPV6_MREQ; +# endif + +# ifndef EAI_AGAIN +# define EAI_AGAIN WSATRY_AGAIN +# endif +# ifndef EAI_BADFLAGS +# define EAI_BADFLAGS WSAEINVAL +# endif +# ifndef EAI_FAIL +# define EAI_FAIL WSANO_RECOVERY +# endif +# ifndef EAI_FAMILY +# define EAI_FAMILY WSAEAFNOSUPPORT +# endif +# ifndef EAI_MEMORY +# define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY +# endif +# ifndef EAI_NODATA +# define EAI_NODATA WSANO_DATA +# endif +# ifndef EAI_NONAME +# define EAI_NONAME WSAHOST_NOT_FOUND +# endif +# ifndef EAI_SERVICE +# define EAI_SERVICE WSATYPE_NOT_FOUND +# endif +# ifndef EAI_SOCKTYPE +# define EAI_SOCKTYPE WSAESOCKTNOSUPPORT +# endif + +# ifndef NI_NOFQDN +# define NI_NOFQDN 0x01 +# endif +# ifndef NI_NUMERICHOST +# define NI_NUMERICHOST 0x02 +# endif +# ifndef NI_NAMEREQD +# define NI_NAMEREQD 0x04 +# endif +# ifndef NI_NUMERICSERV +# define NI_NUMERICSERV 0x08 +# endif +# ifndef NI_DGRAM +# define NI_DGRAM 0x10 +# endif + # endif # endif #endif +/* Early Platform SDKs have an incorrect definition of EAI_NODATA */ +#if (EAI_NODATA == EAI_NONAME) +# undef EAI_NODATA +# define EAI_NODATA WSANO_DATA +#endif + #include "win32.h" #ifdef __cplusplus diff --git a/Master/tlpkg/tlperl/lib/CORE/uconfig.h b/Master/tlpkg/tlperl/lib/CORE/uconfig.h index 506cebea816..20b1f23f022 100644 --- a/Master/tlpkg/tlperl/lib/CORE/uconfig.h +++ b/Master/tlpkg/tlperl/lib/CORE/uconfig.h @@ -88,7 +88,7 @@ * of significant digits in a double precision number. If this * symbol is not defined, a guess of 15 is usually pretty good. */ -/*#define HAS_DBL_DIG / * */ +/*#define HAS_DBL_DIG / **/ /* HAS_DIFFTIME: * This symbol, if defined, indicates that the difftime routine is @@ -879,46 +879,18 @@ #define _V(args) () #endif -/* INTSIZE: - * This symbol contains the value of sizeof(int) so that the C - * preprocessor can make decisions based on it. - */ -/* LONGSIZE: - * This symbol contains the value of sizeof(long) so that the C - * preprocessor can make decisions based on it. - */ -/* SHORTSIZE: - * This symbol contains the value of sizeof(short) so that the C - * preprocessor can make decisions based on it. - */ -#define INTSIZE 4 /**/ -#define LONGSIZE 4 /**/ -#define SHORTSIZE 2 /**/ - -/* MULTIARCH: - * This symbol, if defined, signifies that the build - * process will produce some binary files that are going to be - * used in a cross-platform environment. This is the case for - * example with the NeXT "fat" binaries that contain executables - * for several CPUs. +/* OSNAME: + * This symbol contains the name of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. */ -/*#define MULTIARCH / **/ - -/* HAS_QUAD: - * This symbol, if defined, tells that there's a 64-bit integer type, - * Quad_t, and its unsigned counterpart, Uquad_t. QUADKIND will be one - * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T. +/* OSVERS: + * This symbol contains the version of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. */ -/*#define HAS_QUAD / **/ -#ifdef HAS_QUAD -# define Quad_t int64_t /**/ -# define Uquad_t uint64_t /**/ -# define QUADKIND 4 /**/ -# define QUAD_IS_INT 1 -# define QUAD_IS_LONG 2 -# define QUAD_IS_LONG_LONG 3 -# define QUAD_IS_INT64_T 4 -#endif +#define OSNAME "unknown" /**/ +#define OSVERS "unknown" /**/ /* USE_CROSS_COMPILE: * This symbol, if defined, indicates that Perl is being cross-compiled. @@ -932,6 +904,15 @@ #define PERL_TARGETARCH "" /**/ #endif +/* MULTIARCH: + * This symbol, if defined, signifies that the build + * process will produce some binary files that are going to be + * used in a cross-platform environment. This is the case for + * example with the NeXT "fat" binaries that contain executables + * for several CPUs. + */ +/*#define MULTIARCH / **/ + /* MEM_ALIGNBYTES: * This symbol contains the number of bytes required to align a * double, or a long double when applicable. Usual values are 2, @@ -956,8 +937,8 @@ * This symbol contains the ~name expanded version of ARCHLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -/*#define ARCHLIB "/usr/local/lib/perl5/5.14/unknown" / **/ -/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.14/unknown" / **/ +/*#define ARCHLIB "/usr/local/lib/perl5/5.16/unknown" / **/ +/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.16/unknown" / **/ /* ARCHNAME: * This symbol holds a string representing the architecture name. @@ -981,7 +962,23 @@ */ #define BIN "/usr/local/bin" /**/ #define BIN_EXP "/usr/local/bin" /**/ -#define PERL_RELOCATABLE_INC "undef" /**/ +/*#define PERL_RELOCATABLE_INC / **/ + +/* INTSIZE: + * This symbol contains the value of sizeof(int) so that the C + * preprocessor can make decisions based on it. + */ +/* LONGSIZE: + * This symbol contains the value of sizeof(long) so that the C + * preprocessor can make decisions based on it. + */ +/* SHORTSIZE: + * This symbol contains the value of sizeof(short) so that the C + * preprocessor can make decisions based on it. + */ +#define INTSIZE 4 /**/ +#define LONGSIZE 4 /**/ +#define SHORTSIZE 2 /**/ /* BYTEORDER: * This symbol holds the hexadecimal constant defined in byteorder, @@ -1032,6 +1029,64 @@ */ #define CHARBITS 8 /**/ +/* CAT2: + * This macro concatenates 2 tokens together. + */ +/* STRINGIFY: + * This macro surrounds its token with double quotes. + */ +#if 42 == 1 +#define CAT2(a,b) a/**/b +#define STRINGIFY(a) "a" +#endif +#if 42 == 42 +#define PeRl_CaTiFy(a, b) a ## b +#define PeRl_StGiFy(a) #a +#define CAT2(a,b) PeRl_CaTiFy(a,b) +#define StGiFy(a) PeRl_StGiFy(a) +#define STRINGIFY(a) PeRl_StGiFy(a) +#endif +#if 42 != 1 && 42 != 42 +#include "Bletch: How does this C preprocessor concatenate tokens?" +#endif + +/* CPPSTDIN: + * This symbol contains the first part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. Typical value of "cc -E" or "/lib/cpp", but it can also + * call a wrapper. See CPPRUN. + */ +/* CPPMINUS: + * This symbol contains the second part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. This symbol will have the value "-" if CPPSTDIN needs a minus + * to specify standard input, otherwise the value is "". + */ +/* CPPRUN: + * This symbol contains the string which will invoke a C preprocessor on + * the standard input and produce to standard output. It needs to end + * with CPPLAST, after all other preprocessor flags have been specified. + * The main difference with CPPSTDIN is that this program will never be a + * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is + * available directly to the user. Note that it may well be different from + * the preprocessor used to compile the C program. + */ +/* CPPLAST: + * This symbol is intended to be used along with CPPRUN in the same manner + * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". + */ +#define CPPSTDIN "cc -E" +#define CPPMINUS "-" +#define CPPRUN "cc -E" +#define CPPLAST "-" + +/* HAS_ACCESS: + * This manifest constant lets the C program know that the access() + * system call is available to check for accessibility using real UID/GID. + * (always present on UNIX.) + */ +/*#define HAS_ACCESS / **/ + /* HAS_ACCESSX: * This symbol, if defined, indicates that the accessx routine is * available to do extended access checks. @@ -1051,6 +1106,43 @@ /*#define HAS_ASCTIME_R / **/ #define ASCTIME_R_PROTO 0 /**/ +/* HASATTRIBUTE_FORMAT: + * Can we handle GCC attribute for checking printf-style formats + */ +/* PRINTF_FORMAT_NULL_OK: + * Allows __printf__ format to be null when checking printf-style + */ +/* HASATTRIBUTE_MALLOC: + * Can we handle GCC attribute for malloc-style functions. + */ +/* HASATTRIBUTE_NONNULL: + * Can we handle GCC attribute for nonnull function parms. + */ +/* HASATTRIBUTE_NORETURN: + * Can we handle GCC attribute for functions that do not return + */ +/* HASATTRIBUTE_PURE: + * Can we handle GCC attribute for pure functions + */ +/* HASATTRIBUTE_UNUSED: + * Can we handle GCC attribute for unused variables and arguments + */ +/* HASATTRIBUTE_DEPRECATED: + * Can we handle GCC attribute for marking deprecated APIs + */ +/* HASATTRIBUTE_WARN_UNUSED_RESULT: + * Can we handle GCC attribute for warning on unused results + */ +/*#define HASATTRIBUTE_DEPRECATED / **/ +/*#define HASATTRIBUTE_FORMAT / **/ +/*#define PRINTF_FORMAT_NULL_OK / **/ +/*#define HASATTRIBUTE_NORETURN / **/ +/*#define HASATTRIBUTE_MALLOC / **/ +/*#define HASATTRIBUTE_NONNULL / **/ +/*#define HASATTRIBUTE_PURE / **/ +/*#define HASATTRIBUTE_UNUSED / **/ +/*#define HASATTRIBUTE_WARN_UNUSED_RESULT / **/ + /* CASTI32: * This symbol is defined if the C compiler can cast negative * or large floating point numbers to 32-bit ints. @@ -1078,6 +1170,17 @@ */ /*#define VOID_CLOSEDIR / **/ +/* HASCONST: + * This symbol, if defined, indicates that this C compiler knows about + * the const type. There is no need to actually test for that symbol + * within your programs. The mere use of the "const" keyword will + * trigger the necessary tests. + */ +/*#define HASCONST / **/ +#ifndef HASCONST +#define const +#endif + /* HAS_CRYPT_R: * This symbol, if defined, indicates that the crypt_r routine * is available to crypt re-entrantly. @@ -1091,6 +1194,17 @@ /*#define HAS_CRYPT_R / **/ #define CRYPT_R_PROTO 0 /**/ +/* HAS_CSH: + * This symbol, if defined, indicates that the C-shell exists. + */ +/* CSH: + * This symbol, if defined, contains the full pathname of csh. + */ +/*#define HAS_CSH / **/ +#ifdef HAS_CSH +#define CSH "" /**/ +#endif + /* HAS_CTERMID_R: * This symbol, if defined, indicates that the ctermid_r routine * is available to ctermid re-entrantly. @@ -1117,6 +1231,26 @@ /*#define HAS_CTIME_R / **/ #define CTIME_R_PROTO 0 /**/ +/* SETUID_SCRIPTS_ARE_SECURE_NOW: + * This symbol, if defined, indicates that the bug that prevents + * setuid scripts from being secure is not present in this kernel. + */ +/* DOSUID: + * This symbol, if defined, indicates that the C program should + * check the script that it is executing for setuid/setgid bits, and + * attempt to emulate setuid/setgid on systems that have disabled + * setuid #! scripts because the kernel can't do it securely. + * It is up to the package designer to make sure that this emulation + * is done securely. Among other things, it should do an fstat on + * the script it just opened to make sure it really is a setuid/setgid + * script, it should make sure the arguments passed correspond exactly + * to the argument on the #! line, and it should not trust any + * subprocesses to which it must pass the filename rather than the + * file descriptor of the script to be executed. + */ +/*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/ +/*#define DOSUID / **/ + /* HAS_DRAND48_R: * This symbol, if defined, indicates that the drand48_r routine * is available to drand48 re-entrantly. @@ -1130,12 +1264,26 @@ /*#define HAS_DRAND48_R / **/ #define DRAND48_R_PROTO 0 /**/ +/* HAS_DRAND48_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the drand48() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern double drand48(void); + */ +/*#define HAS_DRAND48_PROTO / **/ + /* HAS_EACCESS: * This symbol, if defined, indicates that the eaccess routine is * available to do extended access checks. */ /*#define HAS_EACCESS / **/ +/* HAS_ENDGRENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for finalizing sequential access of the group database. + */ +/*#define HAS_ENDGRENT / **/ + /* HAS_ENDGRENT_R: * This symbol, if defined, indicates that the endgrent_r routine * is available to endgrent re-entrantly. @@ -1149,6 +1297,12 @@ /*#define HAS_ENDGRENT_R / **/ #define ENDGRENT_R_PROTO 0 /**/ +/* HAS_ENDHOSTENT: + * This symbol, if defined, indicates that the endhostent() routine is + * available to close whatever was being used for host queries. + */ +/*#define HAS_ENDHOSTENT / **/ + /* HAS_ENDHOSTENT_R: * This symbol, if defined, indicates that the endhostent_r routine * is available to endhostent re-entrantly. @@ -1162,6 +1316,12 @@ /*#define HAS_ENDHOSTENT_R / **/ #define ENDHOSTENT_R_PROTO 0 /**/ +/* HAS_ENDNETENT: + * This symbol, if defined, indicates that the endnetent() routine is + * available to close whatever was being used for network queries. + */ +/*#define HAS_ENDNETENT / **/ + /* HAS_ENDNETENT_R: * This symbol, if defined, indicates that the endnetent_r routine * is available to endnetent re-entrantly. @@ -1175,6 +1335,12 @@ /*#define HAS_ENDNETENT_R / **/ #define ENDNETENT_R_PROTO 0 /**/ +/* HAS_ENDPROTOENT: + * This symbol, if defined, indicates that the endprotoent() routine is + * available to close whatever was being used for protocol queries. + */ +/*#define HAS_ENDPROTOENT / **/ + /* HAS_ENDPROTOENT_R: * This symbol, if defined, indicates that the endprotoent_r routine * is available to endprotoent re-entrantly. @@ -1188,6 +1354,12 @@ /*#define HAS_ENDPROTOENT_R / **/ #define ENDPROTOENT_R_PROTO 0 /**/ +/* HAS_ENDPWENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for finalizing sequential access of the passwd database. + */ +/*#define HAS_ENDPWENT / **/ + /* HAS_ENDPWENT_R: * This symbol, if defined, indicates that the endpwent_r routine * is available to endpwent re-entrantly. @@ -1201,6 +1373,12 @@ /*#define HAS_ENDPWENT_R / **/ #define ENDPWENT_R_PROTO 0 /**/ +/* HAS_ENDSERVENT: + * This symbol, if defined, indicates that the endservent() routine is + * available to close whatever was being used for service queries. + */ +/*#define HAS_ENDSERVENT / **/ + /* HAS_ENDSERVENT_R: * This symbol, if defined, indicates that the endservent_r routine * is available to endservent re-entrantly. @@ -1220,9 +1398,15 @@ */ /*#define HAS_FD_SET / **/ -/* Gconvert: - * This preprocessor macro is defined to convert a floating point - * number to a string without a trailing decimal point. This +/* FLEXFILENAMES: + * This symbol, if defined, indicates that the system supports filenames + * longer than 14 characters. + */ +/*#define FLEXFILENAMES / **/ + +/* Gconvert: + * This preprocessor macro is defined to convert a floating point + * number to a string without a trailing decimal point. This * emulates the behavior of sprintf("%g"), but is sometimes much more * efficient. If gconvert() is not available, but gcvt() drops the * trailing decimal point, then gcvt() is used. If all else fails, @@ -1237,6 +1421,12 @@ */ #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) +/* HAS_GETGRENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for sequential access of the group database. + */ +/*#define HAS_GETGRENT / **/ + /* HAS_GETGRENT_R: * This symbol, if defined, indicates that the getgrent_r routine * is available to getgrent re-entrantly. @@ -1276,6 +1466,53 @@ /*#define HAS_GETGRNAM_R / **/ #define GETGRNAM_R_PROTO 0 /**/ +/* HAS_GETHOSTBYADDR: + * This symbol, if defined, indicates that the gethostbyaddr() routine is + * available to look up hosts by their IP addresses. + */ +/*#define HAS_GETHOSTBYADDR / **/ + +/* HAS_GETHOSTBYNAME: + * This symbol, if defined, indicates that the gethostbyname() routine is + * available to look up host names in some data base or other. + */ +/*#define HAS_GETHOSTBYNAME / **/ + +/* HAS_GETHOSTENT: + * This symbol, if defined, indicates that the gethostent() routine is + * available to look up host names in some data base or another. + */ +/*#define HAS_GETHOSTENT / **/ + +/* HAS_GETHOSTNAME: + * This symbol, if defined, indicates that the C program may use the + * gethostname() routine to derive the host name. See also HAS_UNAME + * and PHOSTNAME. + */ +/* HAS_UNAME: + * This symbol, if defined, indicates that the C program may use the + * uname() routine to derive the host name. See also HAS_GETHOSTNAME + * and PHOSTNAME. + */ +/* PHOSTNAME: + * This symbol, if defined, indicates the command to feed to the + * popen() routine to derive the host name. See also HAS_GETHOSTNAME + * and HAS_UNAME. Note that the command uses a fully qualified path, + * so that it is safe even if used by a process with super-user + * privileges. + */ +/* HAS_PHOSTNAME: + * This symbol, if defined, indicates that the C program may use the + * contents of PHOSTNAME as a command to feed to the popen() routine + * to derive the host name. + */ +/*#define HAS_GETHOSTNAME / **/ +/*#define HAS_UNAME / **/ +/*#define HAS_PHOSTNAME / **/ +#ifdef HAS_PHOSTNAME +#define PHOSTNAME "/bin/hostname" /* How to get the host name */ +#endif + /* HAS_GETHOSTBYADDR_R: * This symbol, if defined, indicates that the gethostbyaddr_r routine * is available to gethostbyaddr re-entrantly. @@ -1315,6 +1552,14 @@ /*#define HAS_GETHOSTENT_R / **/ #define GETHOSTENT_R_PROTO 0 /**/ +/* HAS_GETHOST_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for gethostent(), gethostbyname(), and + * gethostbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ +/*#define HAS_GETHOST_PROTOS / **/ + /* HAS_GETLOGIN_R: * This symbol, if defined, indicates that the getlogin_r routine * is available to getlogin re-entrantly. @@ -1328,6 +1573,24 @@ /*#define HAS_GETLOGIN_R / **/ #define GETLOGIN_R_PROTO 0 /**/ +/* HAS_GETNETBYADDR: + * This symbol, if defined, indicates that the getnetbyaddr() routine is + * available to look up networks by their IP addresses. + */ +/*#define HAS_GETNETBYADDR / **/ + +/* HAS_GETNETBYNAME: + * This symbol, if defined, indicates that the getnetbyname() routine is + * available to look up networks by their names. + */ +/*#define HAS_GETNETBYNAME / **/ + +/* HAS_GETNETENT: + * This symbol, if defined, indicates that the getnetent() routine is + * available to look up network names in some data base or another. + */ +/*#define HAS_GETNETENT / **/ + /* HAS_GETNETBYADDR_R: * This symbol, if defined, indicates that the getnetbyaddr_r routine * is available to getnetbyaddr re-entrantly. @@ -1367,6 +1630,14 @@ /*#define HAS_GETNETENT_R / **/ #define GETNETENT_R_PROTO 0 /**/ +/* HAS_GETNET_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getnetent(), getnetbyname(), and + * getnetbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ +/*#define HAS_GETNET_PROTOS / **/ + /* HAS_GETPAGESIZE: * This symbol, if defined, indicates that the getpagesize system call * is available to get system page size, which is the granularity of @@ -1374,6 +1645,34 @@ */ /*#define HAS_GETPAGESIZE / **/ +/* HAS_GETPROTOENT: + * This symbol, if defined, indicates that the getprotoent() routine is + * available to look up protocols in some data base or another. + */ +/*#define HAS_GETPROTOENT / **/ + +/* HAS_GETPGRP: + * This symbol, if defined, indicates that the getpgrp routine is + * available to get the current process group. + */ +/* USE_BSD_GETPGRP: + * This symbol, if defined, indicates that getpgrp needs one + * arguments whereas USG one needs none. + */ +/*#define HAS_GETPGRP / **/ +/*#define USE_BSD_GETPGRP / **/ + +/* HAS_GETPROTOBYNAME: + * This symbol, if defined, indicates that the getprotobyname() + * routine is available to look up protocols by their name. + */ +/* HAS_GETPROTOBYNUMBER: + * This symbol, if defined, indicates that the getprotobynumber() + * routine is available to look up protocols by their number. + */ +/*#define HAS_GETPROTOBYNAME / **/ +/*#define HAS_GETPROTOBYNUMBER / **/ + /* HAS_GETPROTOBYNAME_R: * This symbol, if defined, indicates that the getprotobyname_r routine * is available to getprotobyname re-entrantly. @@ -1413,6 +1712,21 @@ /*#define HAS_GETPROTOENT_R / **/ #define GETPROTOENT_R_PROTO 0 /**/ +/* HAS_GETPROTO_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getprotoent(), getprotobyname(), and + * getprotobyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ +/*#define HAS_GETPROTO_PROTOS / **/ + +/* HAS_GETPWENT: + * This symbol, if defined, indicates that the getpwent routine is + * available for sequential access of the passwd database. + * If this is not available, the older getpw() function may be available. + */ +/*#define HAS_GETPWENT / **/ + /* HAS_GETPWENT_R: * This symbol, if defined, indicates that the getpwent_r routine * is available to getpwent re-entrantly. @@ -1452,6 +1766,12 @@ /*#define HAS_GETPWUID_R / **/ #define GETPWUID_R_PROTO 0 /**/ +/* HAS_GETSERVENT: + * This symbol, if defined, indicates that the getservent() routine is + * available to look up network services in some data base or another. + */ +/*#define HAS_GETSERVENT / **/ + /* HAS_GETSERVBYNAME_R: * This symbol, if defined, indicates that the getservbyname_r routine * is available to getservbyname re-entrantly. @@ -1491,6 +1811,14 @@ /*#define HAS_GETSERVENT_R / **/ #define GETSERVENT_R_PROTO 0 /**/ +/* HAS_GETSERV_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getservent(), getservbyname(), and + * getservbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ +/*#define HAS_GETSERV_PROTOS / **/ + /* HAS_GETSPNAM_R: * This symbol, if defined, indicates that the getspnam_r routine * is available to getspnam re-entrantly. @@ -1504,6 +1832,17 @@ /*#define HAS_GETSPNAM_R / **/ #define GETSPNAM_R_PROTO 0 /**/ +/* HAS_GETSERVBYNAME: + * This symbol, if defined, indicates that the getservbyname() + * routine is available to look up services by their name. + */ +/* HAS_GETSERVBYPORT: + * This symbol, if defined, indicates that the getservbyport() + * routine is available to look up services by their port. + */ +/*#define HAS_GETSERVBYNAME / **/ +/*#define HAS_GETSERVBYPORT / **/ + /* HAS_GMTIME_R: * This symbol, if defined, indicates that the gmtime_r routine * is available to gmtime re-entrantly. @@ -1527,6 +1866,31 @@ # define _GNU_SOURCE #endif +/* HAS_HTONL: + * This symbol, if defined, indicates that the htonl() routine (and + * friends htons() ntohl() ntohs()) are available to do network + * order byte swapping. + */ +/* HAS_HTONS: + * This symbol, if defined, indicates that the htons() routine (and + * friends htonl() ntohl() ntohs()) are available to do network + * order byte swapping. + */ +/* HAS_NTOHL: + * This symbol, if defined, indicates that the ntohl() routine (and + * friends htonl() htons() ntohs()) are available to do network + * order byte swapping. + */ +/* HAS_NTOHS: + * This symbol, if defined, indicates that the ntohs() routine (and + * friends htonl() htons() ntohl()) are available to do network + * order byte swapping. + */ +/*#define HAS_HTONL / **/ +/*#define HAS_HTONS / **/ +/*#define HAS_NTOHL / **/ +/*#define HAS_NTOHS / **/ + /* HAS_ISASCII: * This manifest constant lets the C program know that isascii * is available. @@ -1566,6 +1930,72 @@ /*#define HAS_LOCALTIME_R / **/ #define LOCALTIME_R_PROTO 0 /**/ +/* HAS_LONG_DOUBLE: + * This symbol will be defined if the C compiler supports long + * doubles. + */ +/* LONG_DOUBLESIZE: + * This symbol contains the size of a long double, so that the + * C preprocessor can make decisions based on it. It is only + * defined if the system supports long doubles. + */ +/*#define HAS_LONG_DOUBLE / **/ +#ifdef HAS_LONG_DOUBLE +#define LONG_DOUBLESIZE 8 /**/ +#endif + +/* HAS_LONG_LONG: + * This symbol will be defined if the C compiler supports long long. + */ +/* LONGLONGSIZE: + * This symbol contains the size of a long long, so that the + * C preprocessor can make decisions based on it. It is only + * defined if the system supports long long. + */ +/*#define HAS_LONG_LONG / **/ +#ifdef HAS_LONG_LONG +#define LONGLONGSIZE 8 /**/ +#endif + +/* HAS_LSEEK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the lseek() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern off_t lseek(int, off_t, int); + */ +/*#define HAS_LSEEK_PROTO / **/ + +/* HAS_MEMCHR: + * This symbol, if defined, indicates that the memchr routine is available + * to locate characters within a C string. + */ +#define HAS_MEMCHR /**/ + +/* HAS_MKSTEMP: + * This symbol, if defined, indicates that the mkstemp routine is + * available to exclusively create and open a uniquely named + * temporary file. + */ +/*#define HAS_MKSTEMP / **/ + +/* HAS_MMAP: + * This symbol, if defined, indicates that the mmap system call is + * available to map a file into memory. + */ +/* Mmap_t: + * This symbol holds the return type of the mmap() system call + * (and simultaneously the type of the first argument). + * Usually set to 'void *' or 'caddr_t'. + */ +/*#define HAS_MMAP / **/ +#define Mmap_t void * /**/ + +/* HAS_MSG: + * This symbol, if defined, indicates that the entire msg*(2) library is + * supported (IPC mechanism based on message queues). + */ +/*#define HAS_MSG / **/ + /* HAS_OPEN3: * This manifest constant lets the C program know that the three * argument form of open(2) is available. @@ -1669,7 +2099,19 @@ */ /*#define HAS_SANE_MEMCMP / **/ -/* HAS_SETGRENT_R: +/* HAS_SEM: + * This symbol, if defined, indicates that the entire sem*(2) library is + * supported. + */ +/*#define HAS_SEM / **/ + +/* HAS_SETGRENT: + * This symbol, if defined, indicates that the setgrent routine is + * available for initializing sequential access of the group database. + */ +/*#define HAS_SETGRENT / **/ + +/* HAS_SETGRENT_R: * This symbol, if defined, indicates that the setgrent_r routine * is available to setgrent re-entrantly. */ @@ -1682,6 +2124,12 @@ /*#define HAS_SETGRENT_R / **/ #define SETGRENT_R_PROTO 0 /**/ +/* HAS_SETHOSTENT: + * This symbol, if defined, indicates that the sethostent() routine is + * available. + */ +/*#define HAS_SETHOSTENT / **/ + /* HAS_SETHOSTENT_R: * This symbol, if defined, indicates that the sethostent_r routine * is available to sethostent re-entrantly. @@ -1708,6 +2156,12 @@ /*#define HAS_SETLOCALE_R / **/ #define SETLOCALE_R_PROTO 0 /**/ +/* HAS_SETNETENT: + * This symbol, if defined, indicates that the setnetent() routine is + * available. + */ +/*#define HAS_SETNETENT / **/ + /* HAS_SETNETENT_R: * This symbol, if defined, indicates that the setnetent_r routine * is available to setnetent re-entrantly. @@ -1721,6 +2175,24 @@ /*#define HAS_SETNETENT_R / **/ #define SETNETENT_R_PROTO 0 /**/ +/* HAS_SETPROTOENT: + * This symbol, if defined, indicates that the setprotoent() routine is + * available. + */ +/*#define HAS_SETPROTOENT / **/ + +/* HAS_SETPGRP: + * This symbol, if defined, indicates that the setpgrp routine is + * available to set the current process group. + */ +/* USE_BSD_SETPGRP: + * This symbol, if defined, indicates that setpgrp needs two + * arguments whereas USG one needs none. See also HAS_SETPGID + * for a POSIX interface. + */ +/*#define HAS_SETPGRP / **/ +/*#define USE_BSD_SETPGRP / **/ + /* HAS_SETPROTOENT_R: * This symbol, if defined, indicates that the setprotoent_r routine * is available to setprotoent re-entrantly. @@ -1734,6 +2206,12 @@ /*#define HAS_SETPROTOENT_R / **/ #define SETPROTOENT_R_PROTO 0 /**/ +/* HAS_SETPWENT: + * This symbol, if defined, indicates that the setpwent routine is + * available for initializing sequential access of the passwd database. + */ +/*#define HAS_SETPWENT / **/ + /* HAS_SETPWENT_R: * This symbol, if defined, indicates that the setpwent_r routine * is available to setpwent re-entrantly. @@ -1747,6 +2225,12 @@ /*#define HAS_SETPWENT_R / **/ #define SETPWENT_R_PROTO 0 /**/ +/* HAS_SETSERVENT: + * This symbol, if defined, indicates that the setservent() routine is + * available. + */ +/*#define HAS_SETSERVENT / **/ + /* HAS_SETSERVENT_R: * This symbol, if defined, indicates that the setservent_r routine * is available to setservent re-entrantly. @@ -1760,6 +2244,33 @@ /*#define HAS_SETSERVENT_R / **/ #define SETSERVENT_R_PROTO 0 /**/ +/* HAS_SETVBUF: + * This symbol, if defined, indicates that the setvbuf routine is + * available to change buffering on an open stdio stream. + * to a line-buffered mode. + */ +/*#define HAS_SETVBUF / **/ + +/* HAS_SHM: + * This symbol, if defined, indicates that the entire shm*(2) library is + * supported. + */ +/*#define HAS_SHM / **/ + +/* Shmat_t: + * This symbol holds the return type of the shmat() system call. + * Usually set to 'void *' or 'char *'. + */ +/* HAS_SHMAT_PROTOTYPE: + * This symbol, if defined, indicates that the sys/shm.h includes + * a prototype for shmat(). Otherwise, it is up to the program to + * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess, + * but not always right so it should be emitted by the program only + * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. + */ +#define Shmat_t void * /**/ +/*#define HAS_SHMAT_PROTOTYPE / **/ + /* HAS_SIGACTION: * This symbol, if defined, indicates that Vr4's sigaction() routine * is available. @@ -1797,6 +2308,74 @@ #define Siglongjmp(buf,retval) longjmp((buf),(retval)) #endif +/* HAS_SOCKET: + * This symbol, if defined, indicates that the BSD socket interface is + * supported. + */ +/* HAS_SOCKETPAIR: + * This symbol, if defined, indicates that the BSD socketpair() call is + * supported. + */ +/* HAS_MSG_CTRUNC: + * This symbol, if defined, indicates that the MSG_CTRUNC is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_DONTROUTE: + * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_OOB: + * This symbol, if defined, indicates that the MSG_OOB is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_PEEK: + * This symbol, if defined, indicates that the MSG_PEEK is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_MSG_PROXY: + * This symbol, if defined, indicates that the MSG_PROXY is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_SCM_RIGHTS: + * This symbol, if defined, indicates that the SCM_RIGHTS is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ +/* HAS_SOCKADDR_SA_LEN: + * This symbol, if defined, indicates that the struct sockaddr + * structure has a member called sa_len, indicating the length of + * the structure. + */ +/* HAS_SOCKADDR_IN6: + * This symbol, if defined, indicates the availability of + * struct sockaddr_in6; + */ +/* HAS_SIN6_SCOPE_ID: + * This symbol, if defined, indicates that the struct sockaddr_in6 + * structure has a member called sin6_scope_id. + */ +/* HAS_IPV6_MREQ: + * This symbol, if defined, indicates the availability of + * struct ipv6_mreq; + */ +/*#define HAS_SOCKET / **/ +/*#define HAS_SOCKETPAIR / **/ +/*#define HAS_SOCKADDR_SA_LEN / **/ +/*#define HAS_MSG_CTRUNC / **/ +/*#define HAS_MSG_DONTROUTE / **/ +/*#define HAS_MSG_OOB / **/ +/*#define HAS_MSG_PEEK / **/ +/*#define HAS_MSG_PROXY / **/ +/*#define HAS_SCM_RIGHTS / **/ +/*#define HAS_SOCKADDR_IN6 / **/ +/*#define HAS_SIN6_SCOPE_ID / **/ +/*#define HAS_IPV6_MREQ / **/ + /* HAS_SRAND48_R: * This symbol, if defined, indicates that the srand48_r routine * is available to srand48 re-entrantly. @@ -1823,6 +2402,35 @@ /*#define HAS_SRANDOM_R / **/ #define SRANDOM_R_PROTO 0 /**/ +/* USE_STAT_BLOCKS: + * This symbol is defined if this system has a stat structure declaring + * st_blksize and st_blocks. + */ +#ifndef USE_STAT_BLOCKS +/*#define USE_STAT_BLOCKS / **/ +#endif + +/* HAS_STATIC_INLINE: + * This symbol, if defined, indicates that the C compiler supports + * C99-style static inline. That is, the function can't be called + * from another translation unit. + */ +/* PERL_STATIC_INLINE: + * This symbol gives the best-guess incantation to use for static + * inline functions. If HAS_STATIC_INLINE is defined, this will + * give C99-style inline. If HAS_STATIC_INLINE is not defined, + * this will give a plain 'static'. It will always be defined + * to something that gives static linkage. + * Possibilities include + * static inline (c99) + * static __inline__ (gcc -ansi) + * static __inline (MSVC) + * static _inline (older MSVC) + * static (c89 compilers) + */ +/*#define HAS_STATIC_INLINE / **/ +#define PERL_STATIC_INLINE static /**/ + /* USE_STDIO_PTR: * This symbol is defined if the _ptr and _cnt fields (or similar) * of the stdio FILE structure can be used to access the stdio buffer @@ -1893,6 +2501,32 @@ #define FILE_bufsiz(fp) ((fp)->_IO_read_end - (fp)->_IO_read_base) #endif +/* USE_STRUCT_COPY: + * This symbol, if defined, indicates that this C compiler knows how + * to copy structures. If undefined, you'll need to use a block copy + * routine of some sort instead. + */ +/*#define USE_STRUCT_COPY / **/ + +/* HAS_STRERROR: + * This symbol, if defined, indicates that the strerror routine is + * available to translate error numbers to strings. See the writeup + * of Strerror() in this file before you try to define your own. + */ +/* HAS_SYS_ERRLIST: + * This symbol, if defined, indicates that the sys_errlist array is + * available to translate error numbers to strings. The extern int + * sys_nerr gives the size of that table. + */ +/* Strerror: + * This preprocessor symbol is defined as a macro if strerror() is + * not available to translate error numbers to strings but sys_errlist[] + * array is there. + */ +/*#define HAS_STRERROR / **/ +/*#define HAS_SYS_ERRLIST / **/ +#define Strerror(e) strerror(e) + /* HAS_STRERROR_R: * This symbol, if defined, indicates that the strerror_r routine * is available to strerror re-entrantly. @@ -1906,6 +2540,30 @@ /*#define HAS_STRERROR_R / **/ #define STRERROR_R_PROTO 0 /**/ +/* HAS_STRTOUL: + * This symbol, if defined, indicates that the strtoul routine is + * available to provide conversion of strings to unsigned long. + */ +#define HAS_STRTOUL /**/ + +/* HAS_TIME: + * This symbol, if defined, indicates that the time() routine exists. + */ +/* Time_t: + * This symbol holds the type returned by time(). It can be long, + * or time_t on BSD sites (in which case should be + * included). + */ +#define HAS_TIME /**/ +#define Time_t time_t /* Time type */ + +/* HAS_TIMES: + * This symbol, if defined, indicates that the times() routine exists. + * Note that this became obsolete on some systems (SUNOS), which now + * use getrusage(). It may be necessary to include . + */ +/*#define HAS_TIMES / **/ + /* HAS_TMPNAM_R: * This symbol, if defined, indicates that the tmpnam_r routine * is available to tmpnam re-entrantly. @@ -1932,907 +2590,27 @@ /*#define HAS_TTYNAME_R / **/ #define TTYNAME_R_PROTO 0 /**/ -/* HAS_VPRINTF: - * This symbol, if defined, indicates that the vprintf routine is available - * to printf with a pointer to an argument list. If unavailable, you - * may need to write your own, probably in terms of _doprnt(). +/* HAS_UNION_SEMUN: + * This symbol, if defined, indicates that the union semun is + * defined by including . If not, the user code + * probably needs to define it as: + * union semun { + * int val; + * struct semid_ds *buf; + * unsigned short *array; + * } */ -/* USE_CHAR_VSPRINTF: - * This symbol is defined if this system has vsprintf() returning type - * (char*). The trend seems to be to declare it as "int vsprintf()". It - * is up to the package author to declare vsprintf correctly based on the - * symbol. +/* USE_SEMCTL_SEMUN: + * This symbol, if defined, indicates that union semun is + * used for semctl IPC_STAT. */ -#define HAS_VPRINTF /**/ -/*#define USE_CHAR_VSPRINTF / **/ - -/* DOUBLESIZE: - * This symbol contains the size of a double, so that the C preprocessor - * can make decisions based on it. +/* USE_SEMCTL_SEMID_DS: + * This symbol, if defined, indicates that struct semid_ds * is + * used for semctl IPC_STAT. */ -#define DOUBLESIZE 8 /**/ - -/* I_MACH_CTHREADS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_MACH_CTHREADS / **/ - -/* I_PTHREAD: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_PTHREAD / **/ - -/* I_SYS_ACCESS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_ACCESS / **/ - -/* I_SYS_SECURITY: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_SECURITY / **/ - -/* I_TIME: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* I_SYS_TIME: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* I_SYS_TIME_KERNEL: - * This symbol, if defined, indicates to the C program that it should - * include with KERNEL defined. - */ -/* HAS_TM_TM_ZONE: - * This symbol, if defined, indicates to the C program that - * the struct tm has a tm_zone field. - */ -/* HAS_TM_TM_GMTOFF: - * This symbol, if defined, indicates to the C program that - * the struct tm has a tm_gmtoff field. - */ -#define I_TIME /**/ -/*#define I_SYS_TIME / **/ -/*#define I_SYS_TIME_KERNEL / **/ -/*#define HAS_TM_TM_ZONE / **/ -/*#define HAS_TM_TM_GMTOFF / **/ - -/* PERL_INC_VERSION_LIST: - * This variable specifies the list of subdirectories in over - * which perl.c:incpush() and lib/lib.pm will automatically - * search when adding directories to @INC, in a format suitable - * for a C initialization string. See the inc_version_list entry - * in Porting/Glossary for more details. - */ -/*#define PERL_INC_VERSION_LIST NULL / **/ - -/* INSTALL_USR_BIN_PERL: - * This symbol, if defined, indicates that Perl is to be installed - * also as /usr/bin/perl. - */ -/*#define INSTALL_USR_BIN_PERL / **/ - -/* VAL_O_NONBLOCK: - * This symbol is to be used during open() or fcntl(F_SETFL) to turn on - * non-blocking I/O for the file descriptor. Note that there is no way - * back, i.e. you cannot turn it blocking again this way. If you wish to - * alternatively switch between blocking and non-blocking, use the - * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. - */ -/* VAL_EAGAIN: - * This symbol holds the errno error code set by read() when no data was - * present on the non-blocking file descriptor. - */ -/* RD_NODATA: - * This symbol holds the return code from read() when no data is present - * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is - * not defined, then you can't distinguish between no data and EOF by - * issuing a read(). You'll have to find another way to tell for sure! - */ -/* EOF_NONBLOCK: - * This symbol, if defined, indicates to the C program that a read() on - * a non-blocking file descriptor will return 0 on EOF, and not the value - * held in RD_NODATA (-1 usually, in that case!). - */ -#define VAL_O_NONBLOCK O_NONBLOCK -#define VAL_EAGAIN EAGAIN -#define RD_NODATA -1 -#undef EOF_NONBLOCK - -/* PERL_OTHERLIBDIRS: - * This variable contains a colon-separated set of paths for the perl - * binary to search for additional library files or modules. - * These directories will be tacked to the end of @INC. - * Perl will automatically search below each path for version- - * and architecture-specific directories. See PERL_INC_VERSION_LIST - * for more details. - */ -/*#define PERL_OTHERLIBDIRS " " / **/ - -/* PRIVLIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - */ -/* PRIVLIB_EXP: - * This symbol contains the ~name expanded version of PRIVLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define PRIVLIB "/usr/local/lib/perl5/5.14" /**/ -#define PRIVLIB_EXP "/usr/local/lib/perl5/5.14" /**/ - -/* PTRSIZE: - * This symbol contains the size of a pointer, so that the C preprocessor - * can make decisions based on it. It will be sizeof(void *) if - * the compiler supports (void *); otherwise it will be - * sizeof(char *). - */ -#define PTRSIZE 4 /**/ - -/* Drand01: - * This macro is to be used to generate uniformly distributed - * random numbers over the range [0., 1.[. You may have to supply - * an 'extern double drand48();' in your program since SunOS 4.1.3 - * doesn't provide you with anything relevant in its headers. - * See HAS_DRAND48_PROTO. - */ -/* Rand_seed_t: - * This symbol defines the type of the argument of the - * random seed function. - */ -/* seedDrand01: - * This symbol defines the macro to be used in seeding the - * random number generator (see Drand01). - */ -/* RANDBITS: - * This symbol indicates how many bits are produced by the - * function used to generate normalized random numbers. - * Values include 15, 16, 31, and 48. - */ -#define Drand01() ((rand() & 0x7FFF) / (double) ((unsigned long)1 << 15)) /**/ -#define Rand_seed_t int /**/ -#define seedDrand01(x) srand((Rand_seed_t)x) /**/ -#define RANDBITS 48 /**/ - -/* SITEARCH: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - * The standard distribution will put nothing in this directory. - * After perl has been installed, users may install their own local - * architecture-dependent modules in this directory with - * MakeMaker Makefile.PL - * or equivalent. See INSTALL for details. - */ -/* SITEARCH_EXP: - * This symbol contains the ~name expanded version of SITEARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/*#define SITEARCH "/usr/local/lib/perl5/5.14/unknown" / **/ -/*#define SITEARCH_EXP "/usr/local/lib/perl5/5.14/unknown" / **/ - -/* SITELIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - * The standard distribution will put nothing in this directory. - * After perl has been installed, users may install their own local - * architecture-independent modules in this directory with - * MakeMaker Makefile.PL - * or equivalent. See INSTALL for details. - */ -/* SITELIB_EXP: - * This symbol contains the ~name expanded version of SITELIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* SITELIB_STEM: - * This define is SITELIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -#define SITELIB "/usr/local/lib/perl5/5.14" /**/ -#define SITELIB_EXP "/usr/local/lib/perl5/5.14" /**/ -#define SITELIB_STEM "/usr/local/lib/perl5" /**/ - -/* SSize_t: - * This symbol holds the type used by functions that return - * a count of bytes or an error condition. It must be a signed type. - * It is usually ssize_t, but may be long or int, etc. - * It may be necessary to include or - * to get any typedef'ed information. - * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). - */ -#define SSize_t int /* signed count of bytes */ - -/* USE_ITHREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the interpreter-based threading implementation. - */ -/* USE_5005THREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the 5.005-based threading implementation. - * Only valid up to 5.8.x. - */ -/* OLD_PTHREADS_API: - * This symbol, if defined, indicates that Perl should - * be built to use the old draft POSIX threads API. - */ -/* USE_REENTRANT_API: - * This symbol, if defined, indicates that Perl should - * try to use the various _r versions of library functions. - * This is extremely experimental. - */ -/*#define USE_5005THREADS / **/ -/*#define USE_ITHREADS / **/ -#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) -#define USE_THREADS /* until src is revised*/ -#endif -/*#define OLD_PTHREADS_API / **/ -/*#define USE_REENTRANT_API / **/ - -/* PERL_VENDORARCH: - * If defined, this symbol contains the name of a private library. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. - * It may have a ~ on the front. - * The standard distribution will put nothing in this directory. - * Vendors who distribute perl may wish to place their own - * architecture-dependent modules and extensions in this directory with - * MakeMaker Makefile.PL INSTALLDIRS=vendor - * or equivalent. See INSTALL for details. - */ -/* PERL_VENDORARCH_EXP: - * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/*#define PERL_VENDORARCH "" / **/ -/*#define PERL_VENDORARCH_EXP "" / **/ - -/* PERL_VENDORLIB_EXP: - * This symbol contains the ~name expanded version of VENDORLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* PERL_VENDORLIB_STEM: - * This define is PERL_VENDORLIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -/*#define PERL_VENDORLIB_EXP "" / **/ -/*#define PERL_VENDORLIB_STEM "" / **/ - -/* HAS_STATIC_INLINE: - * This symbol, if defined, indicates that the C compiler supports - * C99-style static inline. That is, the function can't be called - * from another translation unit. - */ -/* PERL_STATIC_INLINE: - * This symbol gives the best-guess incantation to use for static - * inline functions. If HAS_STATIC_INLINE is defined, this will - * give C99-style inline. If HAS_STATIC_INLINE is not defined, - * this will give a plain 'static'. It will always be defined - * to something that gives static linkage. - * Possibilities include - * static inline (c99) - * static __inline__ (gcc -ansi) - * static __inline (MSVC) - * static _inline (older MSVC) - * static (c89 compilers) - */ -/*#define HAS_STATIC_INLINE / **/ -#define PERL_STATIC_INLINE static /**/ - -/* EBCDIC: - * This symbol, if defined, indicates that this system uses - * EBCDIC encoding. - */ -/*#define EBCDIC / **/ - -/* OSNAME: - * This symbol contains the name of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -/* OSVERS: - * This symbol contains the version of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -#define OSNAME "unknown" /**/ -#define OSVERS "unknown" /**/ - -/* CAT2: - * This macro concatenates 2 tokens together. - */ -/* STRINGIFY: - * This macro surrounds its token with double quotes. - */ -#if 42 == 1 -#define CAT2(a,b) a/**/b -#define STRINGIFY(a) "a" -#endif -#if 42 == 42 -#define PeRl_CaTiFy(a, b) a ## b -#define PeRl_StGiFy(a) #a -#define CAT2(a,b) PeRl_CaTiFy(a,b) -#define StGiFy(a) PeRl_StGiFy(a) -#define STRINGIFY(a) PeRl_StGiFy(a) -#endif -#if 42 != 1 && 42 != 42 -#include "Bletch: How does this C preprocessor concatenate tokens?" -#endif - -/* CPPSTDIN: - * This symbol contains the first part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. Typical value of "cc -E" or "/lib/cpp", but it can also - * call a wrapper. See CPPRUN. - */ -/* CPPMINUS: - * This symbol contains the second part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. This symbol will have the value "-" if CPPSTDIN needs a minus - * to specify standard input, otherwise the value is "". - */ -/* CPPRUN: - * This symbol contains the string which will invoke a C preprocessor on - * the standard input and produce to standard output. It needs to end - * with CPPLAST, after all other preprocessor flags have been specified. - * The main difference with CPPSTDIN is that this program will never be a - * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is - * available directly to the user. Note that it may well be different from - * the preprocessor used to compile the C program. - */ -/* CPPLAST: - * This symbol is intended to be used along with CPPRUN in the same manner - * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". - */ -#define CPPSTDIN "cc -E" -#define CPPMINUS "-" -#define CPPRUN "cc -E" -#define CPPLAST "-" - -/* HAS_ACCESS: - * This manifest constant lets the C program know that the access() - * system call is available to check for accessibility using real UID/GID. - * (always present on UNIX.) - */ -/*#define HAS_ACCESS / **/ - -/* HASATTRIBUTE_FORMAT: - * Can we handle GCC attribute for checking printf-style formats - */ -/* PRINTF_FORMAT_NULL_OK: - * Allows __printf__ format to be null when checking printf-style - */ -/* HASATTRIBUTE_MALLOC: - * Can we handle GCC attribute for malloc-style functions. - */ -/* HASATTRIBUTE_NONNULL: - * Can we handle GCC attribute for nonnull function parms. - */ -/* HASATTRIBUTE_NORETURN: - * Can we handle GCC attribute for functions that do not return - */ -/* HASATTRIBUTE_PURE: - * Can we handle GCC attribute for pure functions - */ -/* HASATTRIBUTE_UNUSED: - * Can we handle GCC attribute for unused variables and arguments - */ -/* HASATTRIBUTE_DEPRECATED: - * Can we handle GCC attribute for marking deprecated APIs - */ -/* HASATTRIBUTE_WARN_UNUSED_RESULT: - * Can we handle GCC attribute for warning on unused results - */ -/*#define HASATTRIBUTE_DEPRECATED / **/ -/*#define HASATTRIBUTE_FORMAT / **/ -/*#define PRINTF_FORMAT_NULL_OK / **/ -/*#define HASATTRIBUTE_NORETURN / **/ -/*#define HASATTRIBUTE_MALLOC / **/ -/*#define HASATTRIBUTE_NONNULL / **/ -/*#define HASATTRIBUTE_PURE / **/ -/*#define HASATTRIBUTE_UNUSED / **/ -/*#define HASATTRIBUTE_WARN_UNUSED_RESULT / **/ - -/* HASCONST: - * This symbol, if defined, indicates that this C compiler knows about - * the const type. There is no need to actually test for that symbol - * within your programs. The mere use of the "const" keyword will - * trigger the necessary tests. - */ -/*#define HASCONST / **/ -#ifndef HASCONST -#define const -#endif - -/* HAS_CSH: - * This symbol, if defined, indicates that the C-shell exists. - */ -/* CSH: - * This symbol, if defined, contains the full pathname of csh. - */ -/*#define HAS_CSH / **/ -#ifdef HAS_CSH -#define CSH "" /**/ -#endif - -/* SETUID_SCRIPTS_ARE_SECURE_NOW: - * This symbol, if defined, indicates that the bug that prevents - * setuid scripts from being secure is not present in this kernel. - */ -/* DOSUID: - * This symbol, if defined, indicates that the C program should - * check the script that it is executing for setuid/setgid bits, and - * attempt to emulate setuid/setgid on systems that have disabled - * setuid #! scripts because the kernel can't do it securely. - * It is up to the package designer to make sure that this emulation - * is done securely. Among other things, it should do an fstat on - * the script it just opened to make sure it really is a setuid/setgid - * script, it should make sure the arguments passed correspond exactly - * to the argument on the #! line, and it should not trust any - * subprocesses to which it must pass the filename rather than the - * file descriptor of the script to be executed. - */ -/*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/ -/*#define DOSUID / **/ - -/* HAS_ENDGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the group database. - */ -/*#define HAS_ENDGRENT / **/ - -/* HAS_ENDHOSTENT: - * This symbol, if defined, indicates that the endhostent() routine is - * available to close whatever was being used for host queries. - */ -/*#define HAS_ENDHOSTENT / **/ - -/* HAS_ENDNETENT: - * This symbol, if defined, indicates that the endnetent() routine is - * available to close whatever was being used for network queries. - */ -/*#define HAS_ENDNETENT / **/ - -/* HAS_ENDPROTOENT: - * This symbol, if defined, indicates that the endprotoent() routine is - * available to close whatever was being used for protocol queries. - */ -/*#define HAS_ENDPROTOENT / **/ - -/* HAS_ENDPWENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the passwd database. - */ -/*#define HAS_ENDPWENT / **/ - -/* HAS_ENDSERVENT: - * This symbol, if defined, indicates that the endservent() routine is - * available to close whatever was being used for service queries. - */ -/*#define HAS_ENDSERVENT / **/ - -/* FLEXFILENAMES: - * This symbol, if defined, indicates that the system supports filenames - * longer than 14 characters. - */ -/*#define FLEXFILENAMES / **/ - -/* HAS_GETGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for sequential access of the group database. - */ -/*#define HAS_GETGRENT / **/ - -/* HAS_GETHOSTBYADDR: - * This symbol, if defined, indicates that the gethostbyaddr() routine is - * available to look up hosts by their IP addresses. - */ -/*#define HAS_GETHOSTBYADDR / **/ - -/* HAS_GETHOSTBYNAME: - * This symbol, if defined, indicates that the gethostbyname() routine is - * available to look up host names in some data base or other. - */ -/*#define HAS_GETHOSTBYNAME / **/ - -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent() routine is - * available to look up host names in some data base or another. - */ -/*#define HAS_GETHOSTENT / **/ - -/* HAS_GETHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * gethostname() routine to derive the host name. See also HAS_UNAME - * and PHOSTNAME. - */ -/* HAS_UNAME: - * This symbol, if defined, indicates that the C program may use the - * uname() routine to derive the host name. See also HAS_GETHOSTNAME - * and PHOSTNAME. - */ -/* PHOSTNAME: - * This symbol, if defined, indicates the command to feed to the - * popen() routine to derive the host name. See also HAS_GETHOSTNAME - * and HAS_UNAME. Note that the command uses a fully qualified path, - * so that it is safe even if used by a process with super-user - * privileges. - */ -/* HAS_PHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * contents of PHOSTNAME as a command to feed to the popen() routine - * to derive the host name. - */ -/*#define HAS_GETHOSTNAME / **/ -/*#define HAS_UNAME / **/ -/*#define HAS_PHOSTNAME / **/ -#ifdef HAS_PHOSTNAME -#define PHOSTNAME "/bin/hostname" /* How to get the host name */ -#endif - -/* HAS_GETNETBYADDR: - * This symbol, if defined, indicates that the getnetbyaddr() routine is - * available to look up networks by their IP addresses. - */ -/*#define HAS_GETNETBYADDR / **/ - -/* HAS_GETNETBYNAME: - * This symbol, if defined, indicates that the getnetbyname() routine is - * available to look up networks by their names. - */ -/*#define HAS_GETNETBYNAME / **/ - -/* HAS_GETNETENT: - * This symbol, if defined, indicates that the getnetent() routine is - * available to look up network names in some data base or another. - */ -/*#define HAS_GETNETENT / **/ - -/* HAS_GETPROTOENT: - * This symbol, if defined, indicates that the getprotoent() routine is - * available to look up protocols in some data base or another. - */ -/*#define HAS_GETPROTOENT / **/ - -/* HAS_GETPGRP: - * This symbol, if defined, indicates that the getpgrp routine is - * available to get the current process group. - */ -/* USE_BSD_GETPGRP: - * This symbol, if defined, indicates that getpgrp needs one - * arguments whereas USG one needs none. - */ -/*#define HAS_GETPGRP / **/ -/*#define USE_BSD_GETPGRP / **/ - -/* HAS_GETPROTOBYNAME: - * This symbol, if defined, indicates that the getprotobyname() - * routine is available to look up protocols by their name. - */ -/* HAS_GETPROTOBYNUMBER: - * This symbol, if defined, indicates that the getprotobynumber() - * routine is available to look up protocols by their number. - */ -/*#define HAS_GETPROTOBYNAME / **/ -/*#define HAS_GETPROTOBYNUMBER / **/ - -/* HAS_GETPWENT: - * This symbol, if defined, indicates that the getpwent routine is - * available for sequential access of the passwd database. - * If this is not available, the older getpw() function may be available. - */ -/*#define HAS_GETPWENT / **/ - -/* HAS_GETSERVENT: - * This symbol, if defined, indicates that the getservent() routine is - * available to look up network services in some data base or another. - */ -/*#define HAS_GETSERVENT / **/ - -/* HAS_GETSERVBYNAME: - * This symbol, if defined, indicates that the getservbyname() - * routine is available to look up services by their name. - */ -/* HAS_GETSERVBYPORT: - * This symbol, if defined, indicates that the getservbyport() - * routine is available to look up services by their port. - */ -/*#define HAS_GETSERVBYNAME / **/ -/*#define HAS_GETSERVBYPORT / **/ - -/* HAS_HTONL: - * This symbol, if defined, indicates that the htonl() routine (and - * friends htons() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_HTONS: - * This symbol, if defined, indicates that the htons() routine (and - * friends htonl() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHL: - * This symbol, if defined, indicates that the ntohl() routine (and - * friends htonl() htons() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHS: - * This symbol, if defined, indicates that the ntohs() routine (and - * friends htonl() htons() ntohl()) are available to do network - * order byte swapping. - */ -/*#define HAS_HTONL / **/ -/*#define HAS_HTONS / **/ -/*#define HAS_NTOHL / **/ -/*#define HAS_NTOHS / **/ - -/* HAS_LONG_DOUBLE: - * This symbol will be defined if the C compiler supports long - * doubles. - */ -/* LONG_DOUBLESIZE: - * This symbol contains the size of a long double, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long doubles. - */ -/*#define HAS_LONG_DOUBLE / **/ -#ifdef HAS_LONG_DOUBLE -#define LONG_DOUBLESIZE 8 /**/ -#endif - -/* HAS_LONG_LONG: - * This symbol will be defined if the C compiler supports long long. - */ -/* LONGLONGSIZE: - * This symbol contains the size of a long long, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long long. - */ -/*#define HAS_LONG_LONG / **/ -#ifdef HAS_LONG_LONG -#define LONGLONGSIZE 8 /**/ -#endif - -/* HAS_MEMCHR: - * This symbol, if defined, indicates that the memchr routine is available - * to locate characters within a C string. - */ -#define HAS_MEMCHR /**/ - -/* HAS_MKSTEMP: - * This symbol, if defined, indicates that the mkstemp routine is - * available to exclusively create and open a uniquely named - * temporary file. - */ -/*#define HAS_MKSTEMP / **/ - -/* HAS_MMAP: - * This symbol, if defined, indicates that the mmap system call is - * available to map a file into memory. - */ -/* Mmap_t: - * This symbol holds the return type of the mmap() system call - * (and simultaneously the type of the first argument). - * Usually set to 'void *' or 'caddr_t'. - */ -/*#define HAS_MMAP / **/ -#define Mmap_t void * /**/ - -/* HAS_MSG: - * This symbol, if defined, indicates that the entire msg*(2) library is - * supported (IPC mechanism based on message queues). - */ -/*#define HAS_MSG / **/ - -/* HAS_SEM: - * This symbol, if defined, indicates that the entire sem*(2) library is - * supported. - */ -/*#define HAS_SEM / **/ - -/* HAS_SETGRENT: - * This symbol, if defined, indicates that the setgrent routine is - * available for initializing sequential access of the group database. - */ -/*#define HAS_SETGRENT / **/ - -/* HAS_SETHOSTENT: - * This symbol, if defined, indicates that the sethostent() routine is - * available. - */ -/*#define HAS_SETHOSTENT / **/ - -/* HAS_SETNETENT: - * This symbol, if defined, indicates that the setnetent() routine is - * available. - */ -/*#define HAS_SETNETENT / **/ - -/* HAS_SETPROTOENT: - * This symbol, if defined, indicates that the setprotoent() routine is - * available. - */ -/*#define HAS_SETPROTOENT / **/ - -/* HAS_SETPGRP: - * This symbol, if defined, indicates that the setpgrp routine is - * available to set the current process group. - */ -/* USE_BSD_SETPGRP: - * This symbol, if defined, indicates that setpgrp needs two - * arguments whereas USG one needs none. See also HAS_SETPGID - * for a POSIX interface. - */ -/*#define HAS_SETPGRP / **/ -/*#define USE_BSD_SETPGRP / **/ - -/* HAS_SETPWENT: - * This symbol, if defined, indicates that the setpwent routine is - * available for initializing sequential access of the passwd database. - */ -/*#define HAS_SETPWENT / **/ - -/* HAS_SETSERVENT: - * This symbol, if defined, indicates that the setservent() routine is - * available. - */ -/*#define HAS_SETSERVENT / **/ - -/* HAS_SETVBUF: - * This symbol, if defined, indicates that the setvbuf routine is - * available to change buffering on an open stdio stream. - * to a line-buffered mode. - */ -/*#define HAS_SETVBUF / **/ - -/* HAS_SHM: - * This symbol, if defined, indicates that the entire shm*(2) library is - * supported. - */ -/*#define HAS_SHM / **/ - -/* Shmat_t: - * This symbol holds the return type of the shmat() system call. - * Usually set to 'void *' or 'char *'. - */ -/* HAS_SHMAT_PROTOTYPE: - * This symbol, if defined, indicates that the sys/shm.h includes - * a prototype for shmat(). Otherwise, it is up to the program to - * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess, - * but not always right so it should be emitted by the program only - * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. - */ -#define Shmat_t void * /**/ -/*#define HAS_SHMAT_PROTOTYPE / **/ - -/* HAS_SOCKET: - * This symbol, if defined, indicates that the BSD socket interface is - * supported. - */ -/* HAS_SOCKETPAIR: - * This symbol, if defined, indicates that the BSD socketpair() call is - * supported. - */ -/* HAS_MSG_CTRUNC: - * This symbol, if defined, indicates that the MSG_CTRUNC is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_DONTROUTE: - * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_OOB: - * This symbol, if defined, indicates that the MSG_OOB is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PEEK: - * This symbol, if defined, indicates that the MSG_PEEK is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_MSG_PROXY: - * This symbol, if defined, indicates that the MSG_PROXY is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_SCM_RIGHTS: - * This symbol, if defined, indicates that the SCM_RIGHTS is supported. - * Checking just with #ifdef might not be enough because this symbol - * has been known to be an enum. - */ -/* HAS_SOCKADDR_SA_LEN: - * This symbol, if defined, indicates that the struct sockaddr - * structure has a member called sa_len, indicating the length of - * the structure. - */ -/* HAS_SIN6_SCOPE_ID: - * This symbol, if defined, indicates that the struct sockaddr_in6 - * structure has a member called sin6_scope_id. - */ -/*#define HAS_SOCKET / **/ -/*#define HAS_SOCKETPAIR / **/ -/*#define HAS_SOCKADDR_SA_LEN / **/ -/*#define HAS_MSG_CTRUNC / **/ -/*#define HAS_MSG_DONTROUTE / **/ -/*#define HAS_MSG_OOB / **/ -/*#define HAS_MSG_PEEK / **/ -/*#define HAS_MSG_PROXY / **/ -/*#define HAS_SCM_RIGHTS / **/ -/*#define HAS_SIN6_SCOPE_ID / **/ - -/* USE_STAT_BLOCKS: - * This symbol is defined if this system has a stat structure declaring - * st_blksize and st_blocks. - */ -#ifndef USE_STAT_BLOCKS -/*#define USE_STAT_BLOCKS / **/ -#endif - -/* USE_STRUCT_COPY: - * This symbol, if defined, indicates that this C compiler knows how - * to copy structures. If undefined, you'll need to use a block copy - * routine of some sort instead. - */ -/*#define USE_STRUCT_COPY / **/ - -/* HAS_STRERROR: - * This symbol, if defined, indicates that the strerror routine is - * available to translate error numbers to strings. See the writeup - * of Strerror() in this file before you try to define your own. - */ -/* HAS_SYS_ERRLIST: - * This symbol, if defined, indicates that the sys_errlist array is - * available to translate error numbers to strings. The extern int - * sys_nerr gives the size of that table. - */ -/* Strerror: - * This preprocessor symbol is defined as a macro if strerror() is - * not available to translate error numbers to strings but sys_errlist[] - * array is there. - */ -/*#define HAS_STRERROR / **/ -/*#define HAS_SYS_ERRLIST / **/ -#define Strerror(e) strerror(e) - -/* HAS_STRTOUL: - * This symbol, if defined, indicates that the strtoul routine is - * available to provide conversion of strings to unsigned long. - */ -#define HAS_STRTOUL /**/ - -/* HAS_UNION_SEMUN: - * This symbol, if defined, indicates that the union semun is - * defined by including . If not, the user code - * probably needs to define it as: - * union semun { - * int val; - * struct semid_ds *buf; - * unsigned short *array; - * } - */ -/* USE_SEMCTL_SEMUN: - * This symbol, if defined, indicates that union semun is - * used for semctl IPC_STAT. - */ -/* USE_SEMCTL_SEMID_DS: - * This symbol, if defined, indicates that struct semid_ds * is - * used for semctl IPC_STAT. - */ -/*#define HAS_UNION_SEMUN / **/ -/*#define USE_SEMCTL_SEMUN / **/ -/*#define USE_SEMCTL_SEMID_DS / **/ +/*#define HAS_UNION_SEMUN / **/ +/*#define USE_SEMCTL_SEMUN / **/ +/*#define USE_SEMCTL_SEMID_DS / **/ /* HAS_VFORK: * This symbol, if defined, indicates that vfork() exists. @@ -2862,6 +2640,64 @@ #define volatile #endif +/* HAS_VPRINTF: + * This symbol, if defined, indicates that the vprintf routine is available + * to printf with a pointer to an argument list. If unavailable, you + * may need to write your own, probably in terms of _doprnt(). + */ +/* USE_CHAR_VSPRINTF: + * This symbol is defined if this system has vsprintf() returning type + * (char*). The trend seems to be to declare it as "int vsprintf()". It + * is up to the package author to declare vsprintf correctly based on the + * symbol. + */ +#define HAS_VPRINTF /**/ +/*#define USE_CHAR_VSPRINTF / **/ + +/* DOUBLESIZE: + * This symbol contains the size of a double, so that the C preprocessor + * can make decisions based on it. + */ +#define DOUBLESIZE 8 /**/ + +/* EBCDIC: + * This symbol, if defined, indicates that this system uses + * EBCDIC encoding. + */ +/*#define EBCDIC / **/ + +/* Fpos_t: + * This symbol holds the type used to declare file positions in libc. + * It can be fpos_t, long, uint, etc... It may be necessary to include + * to get any typedef'ed information. + */ +#define Fpos_t int /* File position type */ + +/* Gid_t_f: + * This symbol defines the format string used for printing a Gid_t. + */ +#define Gid_t_f "lu" /**/ + +/* Gid_t_sign: + * This symbol holds the signedess of a Gid_t. + * 1 for unsigned, -1 for signed. + */ +#define Gid_t_sign 1 /* GID sign */ + +/* Gid_t_size: + * This symbol holds the size of a Gid_t in bytes. + */ +#define Gid_t_size 4 /* GID size */ + +/* Gid_t: + * This symbol holds the return type of getgid() and the type of + * argument to setrgid() and related functions. Typically, + * it is the type of group ids in the kernel. It can be int, ushort, + * gid_t, etc... It may be necessary to include to get + * any typedef'ed information. + */ +#define Gid_t int /* Type for getgid(), etc... */ + /* I_DIRENT: * This symbol, if defined, indicates to the C program that it should * include . Using this symbol also triggers the definition @@ -2893,6 +2729,12 @@ /*#define I_GRP / **/ /*#define GRPASSWD / **/ +/* I_MACH_CTHREADS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/*#define I_MACH_CTHREADS / **/ + /* I_NDBM: * This symbol, if defined, indicates that exists and should * be included. @@ -2944,6 +2786,12 @@ */ /*#define I_NET_ERRNO / **/ +/* I_PTHREAD: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/*#define I_PTHREAD / **/ + /* I_PWD: * This symbol, if defined, indicates to the C program that it should * include . @@ -2980,52 +2828,206 @@ * This symbol, if defined, indicates to the C program that struct passwd * contains pw_passwd. */ -/*#define I_PWD / **/ -/*#define PWQUOTA / **/ -/*#define PWAGE / **/ -/*#define PWCHANGE / **/ -/*#define PWCLASS / **/ -/*#define PWEXPIRE / **/ -/*#define PWCOMMENT / **/ -/*#define PWGECOS / **/ -/*#define PWPASSWD / **/ +/*#define I_PWD / **/ +/*#define PWQUOTA / **/ +/*#define PWAGE / **/ +/*#define PWCHANGE / **/ +/*#define PWCLASS / **/ +/*#define PWEXPIRE / **/ +/*#define PWCOMMENT / **/ +/*#define PWGECOS / **/ +/*#define PWPASSWD / **/ + +/* I_SYS_ACCESS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/*#define I_SYS_ACCESS / **/ + +/* I_SYS_SECURITY: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/*#define I_SYS_SECURITY / **/ + +/* I_SYSUIO: + * This symbol, if defined, indicates that exists and + * should be included. + */ +/*#define I_SYSUIO / **/ + +/* I_TIME: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/* I_SYS_TIME: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +/* I_SYS_TIME_KERNEL: + * This symbol, if defined, indicates to the C program that it should + * include with KERNEL defined. + */ +/* HAS_TM_TM_ZONE: + * This symbol, if defined, indicates to the C program that + * the struct tm has a tm_zone field. + */ +/* HAS_TM_TM_GMTOFF: + * This symbol, if defined, indicates to the C program that + * the struct tm has a tm_gmtoff field. + */ +#define I_TIME /**/ +/*#define I_SYS_TIME / **/ +/*#define I_SYS_TIME_KERNEL / **/ +/*#define HAS_TM_TM_ZONE / **/ +/*#define HAS_TM_TM_GMTOFF / **/ + +/* I_STDARG: + * This symbol, if defined, indicates that exists and should + * be included. + */ +/* I_VARARGS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ +#define I_STDARG /**/ +/*#define I_VARARGS / **/ + +/* PERL_INC_VERSION_LIST: + * This variable specifies the list of subdirectories in over + * which perl.c:incpush() and lib/lib.pm will automatically + * search when adding directories to @INC, in a format suitable + * for a C initialization string. See the inc_version_list entry + * in Porting/Glossary for more details. + */ +/*#define PERL_INC_VERSION_LIST NULL / **/ + +/* INSTALL_USR_BIN_PERL: + * This symbol, if defined, indicates that Perl is to be installed + * also as /usr/bin/perl. + */ +/*#define INSTALL_USR_BIN_PERL / **/ + +/* Off_t: + * This symbol holds the type used to declare offsets in the kernel. + * It can be int, long, off_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ +/* LSEEKSIZE: + * This symbol holds the number of bytes used by the Off_t. + */ +/* Off_t_size: + * This symbol holds the number of bytes used by the Off_t. + */ +#define Off_t int /* type */ +#define LSEEKSIZE 4 /* size */ +#define Off_t_size 4 /* size */ + +/* Free_t: + * This variable contains the return type of free(). It is usually + * void, but occasionally int. + */ +/* Malloc_t: + * This symbol is the type of pointer returned by malloc and realloc. + */ +#define Malloc_t void * /**/ +#define Free_t void /**/ + +/* PERL_MALLOC_WRAP: + * This symbol, if defined, indicates that we'd like malloc wrap checks. + */ +/*#define PERL_MALLOC_WRAP / **/ + +/* MYMALLOC: + * This symbol, if defined, indicates that we're using our own malloc. + */ +/*#define MYMALLOC / **/ + +/* Mode_t: + * This symbol holds the type used to declare file modes + * for systems calls. It is usually mode_t, but may be + * int or unsigned short. It may be necessary to include + * to get any typedef'ed information. + */ +#define Mode_t int /* file mode parameter for system calls */ + +/* VAL_O_NONBLOCK: + * This symbol is to be used during open() or fcntl(F_SETFL) to turn on + * non-blocking I/O for the file descriptor. Note that there is no way + * back, i.e. you cannot turn it blocking again this way. If you wish to + * alternatively switch between blocking and non-blocking, use the + * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. + */ +/* VAL_EAGAIN: + * This symbol holds the errno error code set by read() when no data was + * present on the non-blocking file descriptor. + */ +/* RD_NODATA: + * This symbol holds the return code from read() when no data is present + * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is + * not defined, then you can't distinguish between no data and EOF by + * issuing a read(). You'll have to find another way to tell for sure! + */ +/* EOF_NONBLOCK: + * This symbol, if defined, indicates to the C program that a read() on + * a non-blocking file descriptor will return 0 on EOF, and not the value + * held in RD_NODATA (-1 usually, in that case!). + */ +#define VAL_O_NONBLOCK O_NONBLOCK +#define VAL_EAGAIN EAGAIN +#define RD_NODATA -1 +#undef EOF_NONBLOCK -/* I_SYSUIO: - * This symbol, if defined, indicates that exists and - * should be included. +/* Netdb_host_t: + * This symbol holds the type used for the 1st argument + * to gethostbyaddr(). */ -/*#define I_SYSUIO / **/ - -/* I_STDARG: - * This symbol, if defined, indicates that exists and should - * be included. +/* Netdb_hlen_t: + * This symbol holds the type used for the 2nd argument + * to gethostbyaddr(). */ -/* I_VARARGS: - * This symbol, if defined, indicates to the C program that it should - * include . +/* Netdb_name_t: + * This symbol holds the type used for the argument to + * gethostbyname(). */ -#define I_STDARG /**/ -/*#define I_VARARGS / **/ - -/* Free_t: - * This variable contains the return type of free(). It is usually - * void, but occasionally int. +/* Netdb_net_t: + * This symbol holds the type used for the 1st argument to + * getnetbyaddr(). */ -/* Malloc_t: - * This symbol is the type of pointer returned by malloc and realloc. +#define Netdb_host_t const char * /**/ +#define Netdb_hlen_t int /**/ +#define Netdb_name_t const char * /**/ +#define Netdb_net_t unsigned long /**/ + +/* PERL_OTHERLIBDIRS: + * This variable contains a colon-separated set of paths for the perl + * binary to search for additional library files or modules. + * These directories will be tacked to the end of @INC. + * Perl will automatically search below each path for version- + * and architecture-specific directories. See PERL_INC_VERSION_LIST + * for more details. */ -#define Malloc_t void * /**/ -#define Free_t void /**/ +/*#define PERL_OTHERLIBDIRS " " / **/ -/* PERL_MALLOC_WRAP: - * This symbol, if defined, indicates that we'd like malloc wrap checks. +/* Pid_t: + * This symbol holds the type used to declare process ids in the kernel. + * It can be int, uint, pid_t, etc... It may be necessary to include + * to get any typedef'ed information. */ -/*#define PERL_MALLOC_WRAP / **/ +#define Pid_t int /* PID type */ -/* MYMALLOC: - * This symbol, if defined, indicates that we're using our own malloc. +/* PRIVLIB: + * This symbol contains the name of the private library for this package. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. The program + * should be prepared to do ~ expansion. */ -/*#define MYMALLOC / **/ +/* PRIVLIB_EXP: + * This symbol contains the ~name expanded version of PRIVLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +#define PRIVLIB "/usr/local/lib/perl5/5.16" /**/ +#define PRIVLIB_EXP "/usr/local/lib/perl5/5.16" /**/ /* CAN_PROTOTYPE: * If defined, this macro indicates that the C compiler can handle @@ -3045,6 +3047,65 @@ #define _(args) () #endif +/* PTRSIZE: + * This symbol contains the size of a pointer, so that the C preprocessor + * can make decisions based on it. It will be sizeof(void *) if + * the compiler supports (void *); otherwise it will be + * sizeof(char *). + */ +#define PTRSIZE 4 /**/ + +/* HAS_QUAD: + * This symbol, if defined, tells that there's a 64-bit integer type, + * Quad_t, and its unsigned counterpart, Uquad_t. QUADKIND will be one + * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, QUAD_IS_INT64_T, + * or QUAD_IS___INT64. + */ +/*#define HAS_QUAD / **/ +#ifdef HAS_QUAD +# define Quad_t int64_t /**/ +# define Uquad_t uint64_t /**/ +# define QUADKIND 4 /**/ +# define QUAD_IS_INT 1 +# define QUAD_IS_LONG 2 +# define QUAD_IS_LONG_LONG 3 +# define QUAD_IS_INT64_T 4 +# define QUAD_IS___INT64 5 +#endif + +/* Drand01: + * This macro is to be used to generate uniformly distributed + * random numbers over the range [0., 1.[. You may have to supply + * an 'extern double drand48();' in your program since SunOS 4.1.3 + * doesn't provide you with anything relevant in its headers. + * See HAS_DRAND48_PROTO. + */ +/* Rand_seed_t: + * This symbol defines the type of the argument of the + * random seed function. + */ +/* seedDrand01: + * This symbol defines the macro to be used in seeding the + * random number generator (see Drand01). + */ +/* RANDBITS: + * This symbol indicates how many bits are produced by the + * function used to generate normalized random numbers. + * Values include 15, 16, 31, and 48. + */ +#define Drand01() ((rand() & 0x7FFF) / (double) ((unsigned long)1 << 15)) /**/ +#define Rand_seed_t int /**/ +#define seedDrand01(x) srand((Rand_seed_t)x) /**/ +#define RANDBITS 48 /**/ + +/* Select_fd_set_t: + * This symbol holds the type used for the 2nd, 3rd, and 4th + * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET + * is defined, and 'int *' otherwise. This is only useful if you + * have select(), of course. + */ +#define Select_fd_set_t int /**/ + /* SH_PATH: * This symbol contains the full pathname to the shell used on this * on this system to execute Bourne shell scripts. Usually, this will be @@ -3086,19 +3147,169 @@ * Note that this variable is initialized from the sig_num_init, * not from sig_num (which is unused). */ -/* SIG_SIZE: - * This variable contains the number of elements of the SIG_NAME - * and SIG_NUM arrays, excluding the final NULL entry. +/* SIG_SIZE: + * This variable contains the number of elements of the SIG_NAME + * and SIG_NUM arrays, excluding the final NULL entry. + */ +#define SIG_NAME 0 /**/ +#define SIG_NUM 0 /**/ +#define SIG_SIZE 1 /**/ + +/* SITEARCH: + * This symbol contains the name of the private library for this package. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. The program + * should be prepared to do ~ expansion. + * The standard distribution will put nothing in this directory. + * After perl has been installed, users may install their own local + * architecture-dependent modules in this directory with + * MakeMaker Makefile.PL + * or equivalent. See INSTALL for details. + */ +/* SITEARCH_EXP: + * This symbol contains the ~name expanded version of SITEARCH, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +/*#define SITEARCH "/usr/local/lib/perl5/5.16/unknown" / **/ +/*#define SITEARCH_EXP "/usr/local/lib/perl5/5.16/unknown" / **/ + +/* SITELIB: + * This symbol contains the name of the private library for this package. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. The program + * should be prepared to do ~ expansion. + * The standard distribution will put nothing in this directory. + * After perl has been installed, users may install their own local + * architecture-independent modules in this directory with + * MakeMaker Makefile.PL + * or equivalent. See INSTALL for details. + */ +/* SITELIB_EXP: + * This symbol contains the ~name expanded version of SITELIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +/* SITELIB_STEM: + * This define is SITELIB_EXP with any trailing version-specific component + * removed. The elements in inc_version_list (inc_version_list.U) can + * be tacked onto this variable to generate a list of directories to search. + */ +#define SITELIB "/usr/local/lib/perl5/5.16" /**/ +#define SITELIB_EXP "/usr/local/lib/perl5/5.16" /**/ +#define SITELIB_STEM "/usr/local/lib/perl5" /**/ + +/* Size_t_size: + * This symbol holds the size of a Size_t in bytes. + */ +#define Size_t_size 4 /**/ + +/* Size_t: + * This symbol holds the type used to declare length parameters + * for string functions. It is usually size_t, but may be + * unsigned long, int, etc. It may be necessary to include + * to get any typedef'ed information. + */ +#define Size_t size_t /* length parameter for string functions */ + +/* Sock_size_t: + * This symbol holds the type used for the size argument of + * various socket calls (just the base type, not the pointer-to). + */ +#define Sock_size_t int /**/ + +/* SSize_t: + * This symbol holds the type used by functions that return + * a count of bytes or an error condition. It must be a signed type. + * It is usually ssize_t, but may be long or int, etc. + * It may be necessary to include or + * to get any typedef'ed information. + * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). + */ +#define SSize_t int /* signed count of bytes */ + +/* STDCHAR: + * This symbol is defined to be the type of char used in stdio.h. + * It has the values "unsigned char" or "char". + */ +#define STDCHAR char /**/ + +/* Uid_t_f: + * This symbol defines the format string used for printing a Uid_t. + */ +#define Uid_t_f "lu" /**/ + +/* Uid_t_sign: + * This symbol holds the signedess of a Uid_t. + * 1 for unsigned, -1 for signed. + */ +#define Uid_t_sign 1 /* UID sign */ + +/* Uid_t_size: + * This symbol holds the size of a Uid_t in bytes. + */ +#define Uid_t_size 4 /* UID size */ + +/* Uid_t: + * This symbol holds the type used to declare user ids in the kernel. + * It can be int, ushort, uid_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ +#define Uid_t int /* UID type */ + +/* USE_ITHREADS: + * This symbol, if defined, indicates that Perl should be built to + * use the interpreter-based threading implementation. + */ +/* USE_5005THREADS: + * This symbol, if defined, indicates that Perl should be built to + * use the 5.005-based threading implementation. + * Only valid up to 5.8.x. + */ +/* OLD_PTHREADS_API: + * This symbol, if defined, indicates that Perl should + * be built to use the old draft POSIX threads API. + */ +/* USE_REENTRANT_API: + * This symbol, if defined, indicates that Perl should + * try to use the various _r versions of library functions. + * This is extremely experimental. + */ +/*#define USE_5005THREADS / **/ +/*#define USE_ITHREADS / **/ +#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) +#define USE_THREADS /* until src is revised*/ +#endif +/*#define OLD_PTHREADS_API / **/ +/*#define USE_REENTRANT_API / **/ + +/* PERL_VENDORARCH: + * If defined, this symbol contains the name of a private library. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. + * It may have a ~ on the front. + * The standard distribution will put nothing in this directory. + * Vendors who distribute perl may wish to place their own + * architecture-dependent modules and extensions in this directory with + * MakeMaker Makefile.PL INSTALLDIRS=vendor + * or equivalent. See INSTALL for details. */ -#define SIG_NAME 0 /**/ -#define SIG_NUM 0 /**/ -#define SIG_SIZE 1 /**/ +/* PERL_VENDORARCH_EXP: + * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ +/*#define PERL_VENDORARCH "" / **/ +/*#define PERL_VENDORARCH_EXP "" / **/ -/* STDCHAR: - * This symbol is defined to be the type of char used in stdio.h. - * It has the values "unsigned char" or "char". +/* PERL_VENDORLIB_EXP: + * This symbol contains the ~name expanded version of VENDORLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define STDCHAR char /**/ +/* PERL_VENDORLIB_STEM: + * This define is PERL_VENDORLIB_EXP with any trailing version-specific component + * removed. The elements in inc_version_list (inc_version_list.U) can + * be tacked onto this variable to generate a list of directories to search. + */ +/*#define PERL_VENDORLIB_EXP "" / **/ +/*#define PERL_VENDORLIB_STEM "" / **/ /* VOIDFLAGS: * This symbol indicates how much support of the void type is given by this @@ -3489,6 +3700,12 @@ */ /*#define HAS_INT64_T / **/ +/* HAS_ISBLANK: + * This manifest constant lets the C program know that isblank + * is available. + */ +/*#define HAS_ISBLANK / **/ + /* HAS_ISFINITE: * This symbol, if defined, indicates that the isfinite routine is * available to check whether a double is finite (non-infinity non-NaN). @@ -4085,6 +4302,12 @@ */ /*#define I_SOCKS / **/ +/* I_STDBOOL: + * This symbol, if defined, indicates that exists and + * can be included. + */ +/*#define I_STDBOOL / **/ + /* I_SUNMATH: * This symbol, if defined, indicates that exists and * should be included. @@ -4354,6 +4577,16 @@ */ #define SELECT_MIN_BITS 32 /**/ +/* ST_INO_SIZE: + * This variable contains the size of struct stat's st_ino in bytes. + */ +/* ST_INO_SIGN: + * This symbol holds the signedess of struct stat's st_ino. + * 1 for unsigned, -1 for signed. + */ +#define ST_INO_SIGN 1 /* st_ino sign */ +#define ST_INO_SIZE 4 /* st_ino size */ + /* STARTPERL: * This variable contains the string to put in front of a perl * script to make sure (one hopes) that it runs with perl and not @@ -4435,6 +4668,13 @@ /*#define USE_FAST_STDIO / **/ #endif +/* USE_KERN_PROC_PATHNAME: + * This symbol, if defined, indicates that we can use sysctl with + * KERN_PROC_PATHNAME to get a full path for the executable, and hence + * convert $^X to an absolute path. + */ +/*#define USE_KERN_PROC_PATHNAME / **/ + /* USE_LARGE_FILES: * This symbol, if defined, indicates that large file support * should be used when available. @@ -4467,6 +4707,13 @@ /*#define MULTIPLICITY / **/ #endif +/* USE_NSGETEXECUTABLEPATH: + * This symbol, if defined, indicates that we can use _NSGetExecutablePath + * and realpath to get a full path for the executable, and hence convert + * $^X to an absolute path. + */ +/*#define USE_NSGETEXECUTABLEPATH / **/ + /* USE_PERLIO: * This symbol, if defined, indicates that the PerlIO abstraction should * be used throughout. If not defined, stdio should be @@ -4484,208 +4731,9 @@ /*#define USE_SOCKS / **/ #endif -/* HAS_DRAND48_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the drand48() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern double drand48(void); - */ -/*#define HAS_DRAND48_PROTO / **/ - -/* HAS_GETHOST_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for gethostent(), gethostbyname(), and - * gethostbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -/*#define HAS_GETHOST_PROTOS / **/ - -/* HAS_GETNET_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getnetent(), getnetbyname(), and - * getnetbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -/*#define HAS_GETNET_PROTOS / **/ - -/* HAS_GETPROTO_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getprotoent(), getprotobyname(), and - * getprotobyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -/*#define HAS_GETPROTO_PROTOS / **/ - -/* HAS_GETSERV_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getservent(), getservbyname(), and - * getservbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -/*#define HAS_GETSERV_PROTOS / **/ - -/* HAS_LSEEK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the lseek() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern off_t lseek(int, off_t, int); - */ -/*#define HAS_LSEEK_PROTO / **/ - -/* Netdb_host_t: - * This symbol holds the type used for the 1st argument - * to gethostbyaddr(). - */ -/* Netdb_hlen_t: - * This symbol holds the type used for the 2nd argument - * to gethostbyaddr(). - */ -/* Netdb_name_t: - * This symbol holds the type used for the argument to - * gethostbyname(). - */ -/* Netdb_net_t: - * This symbol holds the type used for the 1st argument to - * getnetbyaddr(). - */ -#define Netdb_host_t const char * /**/ -#define Netdb_hlen_t int /**/ -#define Netdb_name_t const char * /**/ -#define Netdb_net_t unsigned long /**/ - -/* Select_fd_set_t: - * This symbol holds the type used for the 2nd, 3rd, and 4th - * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET - * is defined, and 'int *' otherwise. This is only useful if you - * have select(), of course. - */ -#define Select_fd_set_t int /**/ - -/* Sock_size_t: - * This symbol holds the type used for the size argument of - * various socket calls (just the base type, not the pointer-to). - */ -#define Sock_size_t int /**/ - -/* HAS_TIME: - * This symbol, if defined, indicates that the time() routine exists. - */ -/* Time_t: - * This symbol holds the type returned by time(). It can be long, - * or time_t on BSD sites (in which case should be - * included). - */ -#define HAS_TIME /**/ -#define Time_t time_t /* Time type */ - -/* HAS_TIMES: - * This symbol, if defined, indicates that the times() routine exists. - * Note that this became obsolete on some systems (SUNOS), which now - * use getrusage(). It may be necessary to include . - */ -/*#define HAS_TIMES / **/ - -/* Fpos_t: - * This symbol holds the type used to declare file positions in libc. - * It can be fpos_t, long, uint, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Fpos_t int /* File position type */ - -/* Gid_t_f: - * This symbol defines the format string used for printing a Gid_t. - */ -#define Gid_t_f "lu" /**/ - -/* Gid_t_sign: - * This symbol holds the signedess of a Gid_t. - * 1 for unsigned, -1 for signed. - */ -#define Gid_t_sign 1 /* GID sign */ - -/* Gid_t_size: - * This symbol holds the size of a Gid_t in bytes. - */ -#define Gid_t_size 4 /* GID size */ - -/* Gid_t: - * This symbol holds the return type of getgid() and the type of - * argument to setrgid() and related functions. Typically, - * it is the type of group ids in the kernel. It can be int, ushort, - * gid_t, etc... It may be necessary to include to get - * any typedef'ed information. - */ -#define Gid_t int /* Type for getgid(), etc... */ - -/* Off_t: - * This symbol holds the type used to declare offsets in the kernel. - * It can be int, long, off_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -/* LSEEKSIZE: - * This symbol holds the number of bytes used by the Off_t. - */ -/* Off_t_size: - * This symbol holds the number of bytes used by the Off_t. - */ -#define Off_t int /* type */ -#define LSEEKSIZE 4 /* size */ -#define Off_t_size 4 /* size */ - -/* Mode_t: - * This symbol holds the type used to declare file modes - * for systems calls. It is usually mode_t, but may be - * int or unsigned short. It may be necessary to include - * to get any typedef'ed information. - */ -#define Mode_t int /* file mode parameter for system calls */ - -/* Pid_t: - * This symbol holds the type used to declare process ids in the kernel. - * It can be int, uint, pid_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Pid_t int /* PID type */ - -/* Size_t_size: - * This symbol holds the size of a Size_t in bytes. - */ -#define Size_t_size 4 /* */ - -/* Size_t: - * This symbol holds the type used to declare length parameters - * for string functions. It is usually size_t, but may be - * unsigned long, int, etc. It may be necessary to include - * to get any typedef'ed information. - */ -#define Size_t size_t /* length parameter for string functions */ - -/* Uid_t_f: - * This symbol defines the format string used for printing a Uid_t. - */ -#define Uid_t_f "lu" /**/ - -/* Uid_t_sign: - * This symbol holds the signedess of a Uid_t. - * 1 for unsigned, -1 for signed. - */ -#define Uid_t_sign 1 /* UID sign */ - -/* Uid_t_size: - * This symbol holds the size of a Uid_t in bytes. - */ -#define Uid_t_size 4 /* UID size */ - -/* Uid_t: - * This symbol holds the type used to declare user ids in the kernel. - * It can be int, ushort, uid_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Uid_t int /* UID type */ - #endif /* Generated from: - * 323778627146f2762cd41f4dd1db6659f59006ec9bcaaf6bcc645d0380dda938 config_h.SH - * 2cf3a76ed7acc1c0fee31fb6f5117eef18b28c542aa7225a22c84ed74b710c83 uconfig.sh + * d9b6a68b192c72c0695b560fae6e4916b381f55df5fdf7911b0ef434840f092e config_h.SH + * 2678333a6d6676f8aa39b7011bf5133dce5be453df10a8d04cb3187103a10caf uconfig.sh * ex: set ro: */ diff --git a/Master/tlpkg/tlperl/lib/CORE/unixish.h b/Master/tlpkg/tlperl/lib/CORE/unixish.h index 6ad95c2dc8c..781b0494a51 100644 --- a/Master/tlpkg/tlperl/lib/CORE/unixish.h +++ b/Master/tlpkg/tlperl/lib/CORE/unixish.h @@ -133,7 +133,8 @@ #ifndef PERL_SYS_TERM_BODY # define PERL_SYS_TERM_BODY() \ - HINTS_REFCNT_TERM; OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM; + HINTS_REFCNT_TERM; OP_CHECK_MUTEX_TERM; \ + OP_REFCNT_TERM; PERLIO_TERM; MALLOC_TERM; #endif diff --git a/Master/tlpkg/tlperl/lib/CORE/utf8.h b/Master/tlpkg/tlperl/lib/CORE/utf8.h index c40fb5883e1..8b5700dd619 100644 --- a/Master/tlpkg/tlperl/lib/CORE/utf8.h +++ b/Master/tlpkg/tlperl/lib/CORE/utf8.h @@ -1,6 +1,7 @@ /* utf8.h * - * Copyright (C) 2000, 2001, 2002, 2005, 2006, 2007, 2009 by Larry Wall and others + * Copyright (C) 2000, 2001, 2002, 2005, 2006, 2007, 2009, + * 2010, 2011 by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -16,8 +17,16 @@ # define USE_UTF8_IN_NAMES (PL_hints & HINT_UTF8) #endif +/* For to_utf8_fold_flags, q.v. */ +#define FOLD_FLAGS_LOCALE 0x1 +#define FOLD_FLAGS_FULL 0x2 + #define to_uni_fold(c, p, lenp) _to_uni_fold_flags(c, p, lenp, 1) -#define to_utf8_fold(c, p, lenp) _to_utf8_fold_flags(c, p, lenp, 1) +#define to_utf8_fold(c, p, lenp) _to_utf8_fold_flags(c, p, lenp, \ + FOLD_FLAGS_FULL, NULL) +#define to_utf8_lower(a,b,c) _to_utf8_lower_flags(a,b,c,0, NULL) +#define to_utf8_upper(a,b,c) _to_utf8_upper_flags(a,b,c,0, NULL) +#define to_utf8_title(a,b,c) _to_utf8_title_flags(a,b,c,0, NULL) /* Source backward compatibility. */ #define uvuni_to_utf8(d, uv) uvuni_to_utf8_flags(d, uv, 0) @@ -27,6 +36,8 @@ foldEQ_utf8_flags(s1, pe1, l1, u1, s2, pe2, l2, u2, 0) #define FOLDEQ_UTF8_NOMIX_ASCII (1 << 0) #define FOLDEQ_UTF8_LOCALE (1 << 1) +#define FOLDEQ_S1_ALREADY_FOLDED (1 << 2) +#define FOLDEQ_S2_ALREADY_FOLDED (1 << 3) /* =for apidoc ibcmp_utf8 @@ -58,7 +69,8 @@ EXTCONST unsigned char PL_utf8skip[] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bogus */ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, /* scripts */ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6, /* cjk etc. */ -7,13, /* Perl extended (not UTF-8). Up to 72bit allowed (64-bit + reserved). */ +7,13, /* Perl extended (not official UTF-8). Up to 72bit allowed (64-bit + + reserved). */ }; #else EXTCONST unsigned char PL_utf8skip[]; @@ -127,12 +139,12 @@ Perl's extended UTF-8 means we can have start bytes up to FF. */ #define UNI_IS_INVARIANT(c) (((UV)c) < 0x80) -/* Note that C0 and C1 are invalid in legal UTF8, so the lower bound of the - * below might ought to be C2 */ -#define UTF8_IS_START(c) (((U8)c) >= 0xc0) +#define UTF8_IS_START(c) (((U8)c) >= 0xc2) #define UTF8_IS_CONTINUATION(c) (((U8)c) >= 0x80 && (((U8)c) <= 0xbf)) #define UTF8_IS_CONTINUED(c) (((U8)c) & 0x80) -#define UTF8_IS_DOWNGRADEABLE_START(c) (((U8)c & 0xfc) == 0xc0) + +/* Masking with 0xfe allows low bit to be 0 or 1; thus this matches 0xc[23] */ +#define UTF8_IS_DOWNGRADEABLE_START(c) (((U8)c & 0xfe) == 0xc2) #define UTF_START_MARK(len) (((len) > 7) ? 0xFF : (0xFE << (7-(len)))) #define UTF_START_MASK(len) (((len) >= 7) ? 0x00 : (0x1F >> ((len)-2))) @@ -141,6 +153,12 @@ Perl's extended UTF-8 means we can have start bytes up to FF. #define UTF_ACCUMULATION_SHIFT 6 #define UTF_CONTINUATION_MASK ((U8)0x3f) +/* This sets the UTF_CONTINUATION_MASK in the upper bits of a word. If a value + * is anded with it, and the result is non-zero, then using the original value + * in UTF8_ACCUMULATE will overflow, shifting bits off the left */ +#define UTF_ACCUMULATION_OVERFLOW_MASK \ + (((UV) UTF_CONTINUATION_MASK) << ((sizeof(UV) * CHARBITS) - UTF_ACCUMULATION_SHIFT)) + #ifdef HAS_QUAD #define UNISKIP(uv) ( (uv) < 0x80 ? 1 : \ (uv) < 0x800 ? 2 : \ @@ -201,17 +219,18 @@ Perl's extended UTF-8 means we can have start bytes up to FF. #define UTF8_EIGHT_BIT_LO(c) UTF8_TWO_BYTE_LO((U8)(c)) /* - * Note: we try to be careful never to call the isXXX_utf8() functions - * unless we're pretty sure we've seen the beginning of a UTF-8 or UTFEBCDIC - * character. Otherwise we risk loading in the heavy-duty swash_init and - * swash_fetch routines unnecessarily. + * 'UTF' is whether or not p is encoded in UTF8. The names 'foo_lazy_if' stem + * from an earlier version of these macros in which they didn't call the + * foo_utf8() macros (i.e. were 'lazy') unless they decided that *p is the + * beginning of a utf8 character. Now that foo_utf8() determines that itself, + * no need to do it again here */ -#define isIDFIRST_lazy_if(p,c) ((IN_BYTES || (!c || ! UTF8_IS_START(*((const U8*)p)))) \ - ? isIDFIRST(*(p)) \ - : isIDFIRST_utf8((const U8*)p)) -#define isALNUM_lazy_if(p,c) ((IN_BYTES || (!c || ! UTF8_IS_START(*((const U8*)p)))) \ - ? isALNUM(*(p)) \ - : isALNUM_utf8((const U8*)p)) +#define isIDFIRST_lazy_if(p,UTF) ((IN_BYTES || !UTF ) \ + ? isIDFIRST(*(p)) \ + : isIDFIRST_utf8((const U8*)p)) +#define isALNUM_lazy_if(p,UTF) ((IN_BYTES || (!UTF )) \ + ? isALNUM(*(p)) \ + : isALNUM_utf8((const U8*)p)) #define isIDFIRST_lazy(p) isIDFIRST_lazy_if(p,1) #define isALNUM_lazy(p) isALNUM_lazy_if(p,1) @@ -238,8 +257,10 @@ Perl's extended UTF-8 means we can have start bytes up to FF. #define IN_BYTES (CopHINTS_get(PL_curcop) & HINT_BYTES) #define DO_UTF8(sv) (SvUTF8(sv) && !IN_BYTES) -#define IN_UNI_8_BIT ( (CopHINTS_get(PL_curcop) & HINT_UNI_8_BIT) \ - && ! IN_LOCALE_RUNTIME && ! IN_BYTES) +#define IN_UNI_8_BIT \ + (CopHINTS_get(PL_curcop) & (HINT_UNI_8_BIT|HINT_LOCALE_NOT_CHARS) \ + && ! IN_LOCALE_RUNTIME && ! IN_BYTES) + #define UTF8_ALLOW_EMPTY 0x0001 /* Allow a zero length string */ @@ -306,7 +327,7 @@ Perl's extended UTF-8 means we can have start bytes up to FF. */ #ifdef EBCDIC /* Both versions assume well-formed UTF8 */ # define UTF8_IS_SURROGATE(s) (*(s) == UTF_TO_NATIVE(0xF1) \ - && (*((s) +1) == UTF_TO_NATIVE(0xB6)) || *((s) + 1) == UTF_TO_NATIVE(0xB7)) + && ((*((s) +1) == UTF_TO_NATIVE(0xB6)) || *((s) + 1) == UTF_TO_NATIVE(0xB7))) #else # define UTF8_IS_SURROGATE(s) (*(s) == 0xED && *((s) + 1) >= 0xA0) #endif @@ -454,39 +475,37 @@ Perl's extended UTF-8 means we can have start bytes up to FF. toLOWER((input)[1]) == 's') #define SHARP_S_SKIP 2 -#ifdef EBCDIC -/* IS_UTF8_CHAR() is not ported to EBCDIC */ -#else -#define IS_UTF8_CHAR_1(p) \ +#ifndef EBCDIC +# define IS_UTF8_CHAR_1(p) \ ((p)[0] <= 0x7F) -#define IS_UTF8_CHAR_2(p) \ +# define IS_UTF8_CHAR_2(p) \ ((p)[0] >= 0xC2 && (p)[0] <= 0xDF && \ (p)[1] >= 0x80 && (p)[1] <= 0xBF) -#define IS_UTF8_CHAR_3a(p) \ +# define IS_UTF8_CHAR_3a(p) \ ((p)[0] == 0xE0 && \ (p)[1] >= 0xA0 && (p)[1] <= 0xBF && \ (p)[2] >= 0x80 && (p)[2] <= 0xBF) -#define IS_UTF8_CHAR_3b(p) \ +# define IS_UTF8_CHAR_3b(p) \ ((p)[0] >= 0xE1 && (p)[0] <= 0xEC && \ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \ (p)[2] >= 0x80 && (p)[2] <= 0xBF) -#define IS_UTF8_CHAR_3c(p) \ +# define IS_UTF8_CHAR_3c(p) \ ((p)[0] == 0xED && \ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \ (p)[2] >= 0x80 && (p)[2] <= 0xBF) -/* In IS_UTF8_CHAR_3c(p) one could use - * (p)[1] >= 0x80 && (p)[1] <= 0x9F - * if one wanted to exclude surrogates. */ -#define IS_UTF8_CHAR_3d(p) \ + /* In IS_UTF8_CHAR_3c(p) one could use + * (p)[1] >= 0x80 && (p)[1] <= 0x9F + * if one wanted to exclude surrogates. */ +# define IS_UTF8_CHAR_3d(p) \ ((p)[0] >= 0xEE && (p)[0] <= 0xEF && \ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \ (p)[2] >= 0x80 && (p)[2] <= 0xBF) -#define IS_UTF8_CHAR_4a(p) \ +# define IS_UTF8_CHAR_4a(p) \ ((p)[0] == 0xF0 && \ (p)[1] >= 0x90 && (p)[1] <= 0xBF && \ (p)[2] >= 0x80 && (p)[2] <= 0xBF && \ (p)[3] >= 0x80 && (p)[3] <= 0xBF) -#define IS_UTF8_CHAR_4b(p) \ +# define IS_UTF8_CHAR_4b(p) \ ((p)[0] >= 0xF1 && (p)[0] <= 0xF3 && \ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \ (p)[2] >= 0x80 && (p)[2] <= 0xBF && \ @@ -499,18 +518,18 @@ Perl's extended UTF-8 means we can have start bytes up to FF. * since that is not needed (and that would not be strict * UTF-8, anyway). The "slow path" in Perl_is_utf8_char() * will take care of the "extended UTF-8". */ -#define IS_UTF8_CHAR_4c(p) \ +# define IS_UTF8_CHAR_4c(p) \ ((p)[0] >= 0xF4 && (p)[0] <= 0xF7 && \ (p)[1] >= 0x80 && (p)[1] <= 0xBF && \ (p)[2] >= 0x80 && (p)[2] <= 0xBF && \ (p)[3] >= 0x80 && (p)[3] <= 0xBF) -#define IS_UTF8_CHAR_3(p) \ +# define IS_UTF8_CHAR_3(p) \ (IS_UTF8_CHAR_3a(p) || \ IS_UTF8_CHAR_3b(p) || \ IS_UTF8_CHAR_3c(p) || \ IS_UTF8_CHAR_3d(p)) -#define IS_UTF8_CHAR_4(p) \ +# define IS_UTF8_CHAR_4(p) \ (IS_UTF8_CHAR_4a(p) || \ IS_UTF8_CHAR_4b(p) || \ IS_UTF8_CHAR_4c(p)) @@ -520,13 +539,65 @@ Perl's extended UTF-8 means we can have start bytes up to FF. * (2) it allows code points past U+10FFFF. * The Perl_is_utf8_char() full "slow" code will handle the Perl * "extended UTF-8". */ -#define IS_UTF8_CHAR(p, n) \ +# define IS_UTF8_CHAR(p, n) \ ((n) == 1 ? IS_UTF8_CHAR_1(p) : \ (n) == 2 ? IS_UTF8_CHAR_2(p) : \ (n) == 3 ? IS_UTF8_CHAR_3(p) : \ (n) == 4 ? IS_UTF8_CHAR_4(p) : 0) -#define IS_UTF8_CHAR_FAST(n) ((n) <= 4) +# define IS_UTF8_CHAR_FAST(n) ((n) <= 4) + +#else /* EBCDIC */ + +/* This is an attempt to port IS_UTF8_CHAR to EBCDIC based on eyeballing. + * untested. If want to exclude surrogates and above-Unicode, see the + * definitions for UTF8_IS_SURROGATE and UTF8_IS_SUPER */ +# define IS_UTF8_CHAR_1(p) \ + (NATIVE_TO_ASCII((p)[0]) <= 0x9F) +# define IS_UTF8_CHAR_2(p) \ + (NATIVE_TO_I8((p)[0]) >= 0xC5 && NATIVE_TO_I8((p)[0]) <= 0xDF && \ + NATIVE_TO_I8((p)[1]) >= 0xA0 && NATIVE_TO_I8((p)[1]) <= 0xBF) +# define IS_UTF8_CHAR_3(p) \ + (NATIVE_TO_I8((p)[0]) == 0xE1 && NATIVE_TO_I8((p)[1]) <= 0xEF && \ + NATIVE_TO_I8((p)[1]) >= 0xA0 && NATIVE_TO_I8((p)[1]) <= 0xBF && \ + NATIVE_TO_I8((p)[2]) >= 0xA0 && NATIVE_TO_I8((p)[2]) <= 0xBF) +# define IS_UTF8_CHAR_4a(p) \ + (NATIVE_TO_I8((p)[0]) == 0xF0 && \ + NATIVE_TO_I8((p)[1]) >= 0xB0 && NATIVE_TO_I8((p)[1]) <= 0xBF && \ + NATIVE_TO_I8((p)[2]) >= 0xA0 && NATIVE_TO_I8((p)[2]) <= 0xBF && \ + NATIVE_TO_I8((p)[3]) >= 0xA0 && NATIVE_TO_I8((p)[3]) <= 0xBF) +# define IS_UTF8_CHAR_4b(p) \ + (NATIVE_TO_I8((p)[0]) >= 0xF1 && NATIVE_TO_I8((p)[0]) <= 0xF7 && \ + NATIVE_TO_I8((p)[1]) >= 0xA0 && NATIVE_TO_I8((p)[1]) <= 0xBF && \ + NATIVE_TO_I8((p)[2]) >= 0xA0 && NATIVE_TO_I8((p)[2]) <= 0xBF && \ + NATIVE_TO_I8((p)[3]) >= 0xA0 && NATIVE_TO_I8((p)[3]) <= 0xBF) +# define IS_UTF8_CHAR_5a(p) \ + (NATIVE_TO_I8((p)[0]) == 0xF8 && \ + NATIVE_TO_I8((p)[1]) >= 0xA8 && NATIVE_TO_I8((p)[1]) <= 0xBF && \ + NATIVE_TO_I8((p)[1]) >= 0xA0 && NATIVE_TO_I8((p)[1]) <= 0xBF && \ + NATIVE_TO_I8((p)[2]) >= 0xA0 && NATIVE_TO_I8((p)[2]) <= 0xBF && \ + NATIVE_TO_I8((p)[3]) >= 0xA0 && NATIVE_TO_I8((p)[3]) <= 0xBF) +# define IS_UTF8_CHAR_5b(p) \ + (NATIVE_TO_I8((p)[0]) >= 0xF9 && NATIVE_TO_I8((p)[1]) <= 0xFB && \ + NATIVE_TO_I8((p)[1]) >= 0xA0 && NATIVE_TO_I8((p)[1]) <= 0xBF && \ + NATIVE_TO_I8((p)[1]) >= 0xA0 && NATIVE_TO_I8((p)[1]) <= 0xBF && \ + NATIVE_TO_I8((p)[2]) >= 0xA0 && NATIVE_TO_I8((p)[2]) <= 0xBF && \ + NATIVE_TO_I8((p)[3]) >= 0xA0 && NATIVE_TO_I8((p)[3]) <= 0xBF) + +# define IS_UTF8_CHAR_4(p) \ + (IS_UTF8_CHAR_4a(p) || \ + IS_UTF8_CHAR_4b(p)) +# define IS_UTF8_CHAR_5(p) \ + (IS_UTF8_CHAR_5a(p) || \ + IS_UTF8_CHAR_5b(p)) +# define IS_UTF8_CHAR(p, n) \ + ((n) == 1 ? IS_UTF8_CHAR_1(p) : \ + (n) == 2 ? IS_UTF8_CHAR_2(p) : \ + (n) == 3 ? IS_UTF8_CHAR_3(p) : \ + (n) == 4 ? IS_UTF8_CHAR_4(p) : \ + (n) == 5 ? IS_UTF8_CHAR_5(p) : 0) + +# define IS_UTF8_CHAR_FAST(n) ((n) <= 5) #endif /* IS_UTF8_CHAR() for UTF-8 */ diff --git a/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h b/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h index a9197a9bef9..eff444e7fde 100644 --- a/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h +++ b/Master/tlpkg/tlperl/lib/CORE/utfebcdic.h @@ -1,7 +1,7 @@ /* utfebcdic.h * - * Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007, 2009 by Larry Wall, - * Nick Ing-Simmons, and others + * Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007, 2009, + * 2010, 2011 by Larry Wall, Nick Ing-Simmons, and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -544,7 +544,9 @@ END_EXTERN_C #define ASCII_TO_NATIVE(ch) PL_a2e[(U8)(ch)] /* Transform after encoding, essentially converts to/from I8 */ #define NATIVE_TO_UTF(ch) PL_e2utf[(U8)(ch)] /* to I8 */ +#define NATIVE_TO_I8(ch) NATIVE_TO_UTF(ch) /* synonym */ #define UTF_TO_NATIVE(ch) PL_utf2e[(U8)(ch)] /* from I8 */ +#define I8_TO_NATIVE(ch) UTF_TO_NATIVE(ch) /* synonym */ /* Transform in wide UV char space */ #define NATIVE_TO_UNI(ch) (((ch) > 255) ? (ch) : NATIVE_TO_ASCII(ch)) #define UNI_TO_NATIVE(ch) (((ch) > 255) ? (ch) : ASCII_TO_NATIVE(ch)) @@ -582,10 +584,11 @@ END_EXTERN_C #define UNI_IS_INVARIANT(c) ((c) < 0xA0) /* UTF-EBCDIC semantic macros - transform back into I8 and then compare */ -#define UTF8_IS_START(c) (NATIVE_TO_UTF(c) >= 0xA0 && (NATIVE_TO_UTF(c) & 0xE0) != 0xA0) + +#define UTF8_IS_START(c) (NATIVE_TO_UTF(c) >= 0xC5 && NATIVE_TO_UTF(c) != 0xE0) #define UTF8_IS_CONTINUATION(c) ((NATIVE_TO_UTF(c) & 0xE0) == 0xA0) #define UTF8_IS_CONTINUED(c) (NATIVE_TO_UTF(c) >= 0xA0) -#define UTF8_IS_DOWNGRADEABLE_START(c) (NATIVE_TO_UTF(c) >= 0xA0 && (NATIVE_TO_UTF(c) & 0xF8) == 0xC0) +#define UTF8_IS_DOWNGRADEABLE_START(c) (NATIVE_TO_UTF(c) >= 0xC5 && NATIVE_TO_UTF(c) <= 0xC7) #define UTF_START_MARK(len) (((len) > 7) ? 0xFF : ((U8)(0xFE << (7-(len))))) #define UTF_START_MASK(len) (((len) >= 6) ? 0x01 : (0x1F >> ((len)-2))) diff --git a/Master/tlpkg/tlperl/lib/CORE/win32.h b/Master/tlpkg/tlperl/lib/CORE/win32.h index 4c58b8c2520..e906266a4ad 100644 --- a/Master/tlpkg/tlperl/lib/CORE/win32.h +++ b/Master/tlpkg/tlperl/lib/CORE/win32.h @@ -200,38 +200,6 @@ struct utsname { # define PERL_BITFIELD32 unsigned int #endif -#ifdef __BORLANDC__ /* Borland C++ */ - -#if (__BORLANDC__ <= 0x520) -#define _access access -#define _chdir chdir -#endif - -#define _getpid getpid -#define wcsicmp _wcsicmp -#include - -#ifndef DllMain -#define DllMain DllEntryPoint -#endif - -#pragma warn -8004 /* "'foo' is assigned a value that is never used" */ -#pragma warn -8008 /* "condition is always true/false" */ -#pragma warn -8012 /* "comparing signed and unsigned values" */ -#pragma warn -8027 /* "functions containing %s are not expanded inline" */ -#pragma warn -8057 /* "parameter 'foo' is never used" */ -#pragma warn -8060 /* "possibly incorrect assignment" */ -#pragma warn -8066 /* "unreachable code" */ -#pragma warn -8071 /* "conversion may lose significant digits" */ -#pragma warn -8080 /* "'foo' is declared but never used" */ - -/* Borland C thinks that a pointer to a member variable is 12 bytes in size. */ -#define PERL_MEMBER_PTR_SIZE 12 - -#define isnan _isnan - -#endif - #ifdef _MSC_VER /* Microsoft Visual C++ */ #ifndef UNDER_CE diff --git a/Master/tlpkg/tlperl/lib/CORE/win32iop-o.h b/Master/tlpkg/tlperl/lib/CORE/win32iop-o.h index 57b073ba874..6633f7a76ba 100644 --- a/Master/tlpkg/tlperl/lib/CORE/win32iop-o.h +++ b/Master/tlpkg/tlperl/lib/CORE/win32iop-o.h @@ -178,15 +178,6 @@ END_EXTERN_C #undef uname #undef wait -#ifdef __BORLANDC__ -#undef ungetc -#undef getc -#undef putc -#undef getchar -#undef putchar -#undef fileno -#endif - #define stderr win32_stderr() #define stdout win32_stdout() #define stdin win32_stdin() diff --git a/Master/tlpkg/tlperl/lib/CORE/win32iop.h b/Master/tlpkg/tlperl/lib/CORE/win32iop.h index 45207900de5..373e3e37ce9 100644 --- a/Master/tlpkg/tlperl/lib/CORE/win32iop.h +++ b/Master/tlpkg/tlperl/lib/CORE/win32iop.h @@ -190,15 +190,7 @@ END_EXTERN_C #undef uname #undef wait -#ifdef __BORLANDC__ -#undef ungetc -#undef getc -#undef putc -#undef getchar -#undef putchar -#endif - -#if defined(__MINGW32__) || defined(__BORLANDC__) +#if defined(__MINGW32__) #undef fileno #endif diff --git a/Master/tlpkg/tlperl/lib/CORE/win32thread.h b/Master/tlpkg/tlperl/lib/CORE/win32thread.h index c6f93097ffa..9af3aa3ea2b 100644 --- a/Master/tlpkg/tlperl/lib/CORE/win32thread.h +++ b/Master/tlpkg/tlperl/lib/CORE/win32thread.h @@ -109,10 +109,9 @@ typedef HANDLE perl_mutex; /* XXX Docs mention that the RTL versions of thread creation routines * should be used, but that advice only seems applicable when the RTL - * is not in a DLL. RTL DLLs in both Borland and VC seem to do all of - * the init/deinit required upon DLL_THREAD_ATTACH/DETACH. So we seem - * to be completely safe using straight Win32 API calls, rather than - * the much braindamaged RTL calls. + * is not in a DLL. RTL DLLs seem to do all of the init/deinit required + * upon DLL_THREAD_ATTACH/DETACH. So we seem to be completely safe using + * straight Win32 API calls, rather than the much braindamaged RTL calls. * * _beginthread() in the RTLs call CloseHandle() just after the thread * function returns, which means: 1) we have a race on our hands @@ -123,11 +122,7 @@ typedef HANDLE perl_mutex; */ #ifdef USE_RTL_THREAD_API # include -# if defined(__BORLANDC__) - /* Borland RTL doesn't allow a return value from thread function! */ -# define THREAD_RET_TYPE void _USERENTRY -# define THREAD_RET_CAST(p) ((void)(thr->i.retv = (void *)(p))) -# elif defined (_MSC_VER) +# if defined (_MSC_VER) # define THREAD_RET_TYPE unsigned __stdcall # define THREAD_RET_CAST(p) ((unsigned)(p)) # else @@ -145,7 +140,7 @@ typedef THREAD_RET_TYPE thread_func_t(void *); START_EXTERN_C -#if defined(PERLDLL) && defined(USE_DECLSPEC_THREAD) && (!defined(__BORLANDC__) || defined(_DLL)) +#if defined(PERLDLL) && defined(USE_DECLSPEC_THREAD) extern __declspec(thread) void *PL_current_context; #define PERL_SET_CONTEXT(t) (PL_current_context = t) #define PERL_GET_CONTEXT PL_current_context diff --git a/Master/tlpkg/tlperl/lib/CPAN.pm b/Master/tlpkg/tlperl/lib/CPAN.pm index f83e2985e00..4e1f2a30186 100644 --- a/Master/tlpkg/tlperl/lib/CPAN.pm +++ b/Master/tlpkg/tlperl/lib/CPAN.pm @@ -2,7 +2,7 @@ # vim: ts=4 sts=4 sw=4: use strict; package CPAN; -$CPAN::VERSION = '1.9600_01'; +$CPAN::VERSION = '1.9800'; $CPAN::VERSION =~ s/_//; # we need to run chdir all over and we would get at wrong libraries @@ -37,6 +37,7 @@ use CPAN::Shell; use CPAN::LWP::UserAgent; use CPAN::Exception::RecursiveDependency; use CPAN::Exception::yaml_not_installed; +use CPAN::Exception::yaml_process_error; use Carp (); use Config (); @@ -1069,7 +1070,7 @@ sub has_usable { # don't die, because we may need # Archive::Tar to upgrade } - + } }, ], @@ -1469,14 +1470,14 @@ mentioned four. Each of the four entities is implemented as a class with slightly differing methods for displaying an object. Arguments to these commands are either strings exactly matching -the identification string of an object, or regular expressions +the identification string of an object, or regular expressions matched case-insensitively against various attributes of the objects. The parser only recognizes a regular expression when you enclose it with slashes. The principle is that the number of objects found influences how an item is displayed. If the search finds one item, the result is -displayed with the rather verbose method C, but if +displayed with the rather verbose method C, but if more than one is found, each object is displayed with the terse method C. @@ -1588,7 +1589,7 @@ being executed within the distribution file's working directory. C displays the README file of the associated distribution. C gets and untars (if not yet done) the distribution file, changes to the appropriate directory and opens a subshell process in -that directory. C displays the module's pod documentation +that directory. C displays the module's pod documentation in html or plain text format. =item C author @@ -1699,8 +1700,11 @@ literal backslash. C writes a bundle file into the C<$CPAN::Config-E{cpan_home}/Bundle> directory. The file contains a list of all modules that are both available from CPAN and currently -installed within @INC. The name of the bundle file is based on the -current date and a counter. +installed within @INC. Duplicates of each distribution are suppressed. +The name of the bundle file is based on the current date and a +counter. + +Return value: path to the written file. =head2 hosts @@ -1718,10 +1722,35 @@ mkmyconfig() writes your own CPAN::MyConfig file into your C<~/.cpan/> directory so that you can save your own preferences instead of the system-wide ones. +=head2 r [Module|/Regexp/]... + +scans current perl installation for modules that have a newer version +available on CPAN and provides a list of them. If called without +argument, all potential upgrades are listed; if called with arguments +the list is filtered to the modules and regexps given as arguments. + +The listing looks something like this: + + Package namespace installed latest in CPAN file + CPAN 1.94_64 1.9600 ANDK/CPAN-1.9600.tar.gz + CPAN::Reporter 1.1801 1.1902 DAGOLDEN/CPAN-Reporter-1.1902.tar.gz + YAML 0.70 0.73 INGY/YAML-0.73.tar.gz + YAML::Syck 1.14 1.17 AVAR/YAML-Syck-1.17.tar.gz + YAML::Tiny 1.44 1.50 ADAMK/YAML-Tiny-1.50.tar.gz + CGI 3.43 3.55 MARKSTOS/CGI.pm-3.55.tar.gz + Module::Build::YAML 1.40 1.41 DAGOLDEN/Module-Build-0.3800.tar.gz + TAP::Parser::Result::YAML 3.22 3.23 ANDYA/Test-Harness-3.23.tar.gz + YAML::XS 0.34 0.35 INGY/YAML-LibYAML-0.35.tar.gz + +It suppresses duplicates in the column C such that +distributions with many upgradeable modules are listed only once. + +Note that the list is not sorted. + =head2 recent ***EXPERIMENTAL COMMAND*** The C command downloads a list of recent uploads to CPAN and -displays them I. While the command is running, a $SIG{INT} +displays them I. While the command is running, a $SIG{INT} exits the loop after displaying the current item. B: This command requires XML::LibXML installed. @@ -1776,7 +1805,7 @@ approach will likely remain. B: See also L -=head2 upgrade [Module|/Regex/]... +=head2 upgrade [Module|/Regexp/]... The C command first runs an C command with the given arguments and then installs the newest versions of all modules that @@ -1895,7 +1924,7 @@ Example: o conf shell If KEY starts and ends with a slash, the string in between is -treated as a regular expression and only keys matching this regex +treated as a regular expression and only keys matching this regexp are displayed Example: @@ -1998,7 +2027,7 @@ currently defined: inactivity_timeout breaks interactive Makefile.PLs or Build.PLs after this many seconds inactivity. Set to 0 to disable timeouts. - index_expire refetch index files after this many days + index_expire refetch index files after this many days inhibit_startup_message if true, suppress the startup message keep_source_where directory in which to keep the source (if we do) @@ -2192,7 +2221,7 @@ randomness into the URL selection. Since CPAN.pm version 1.88_51 modules declared as C by a distribution are treated differently depending on the config variable C. By setting -C to C, such a module is not +C to C, such a module is not installed. It is only built and tested, and then kept in the list of tested but uninstalled modules. As such, it is available during the build of the dependent module by integrating the path to the @@ -2246,7 +2275,7 @@ temporarily override assorted C configuration variables =item -specify dependencies the original maintainer forgot +specify dependencies the original maintainer forgot =item @@ -2583,7 +2612,7 @@ needs. You have been warned:-) =head1 PROGRAMMER'S INTERFACE -If you do not enter the shell, shell commands are +If you do not enter the shell, shell commands are available both as methods (Cinstall(...)>) and as functions in the calling package (C). Before calling low-level commands, it makes sense to initialize components of CPAN you need, e.g.: @@ -2596,9 +2625,20 @@ High-level commands do such initializations automatically. There's currently only one class that has a stable interface - CPAN::Shell. All commands that are available in the CPAN shell are -methods of the class CPAN::Shell. Each of the commands that produce -listings of modules (C, C, C) also return a list of -the IDs of all modules within the list. +methods of the class CPAN::Shell. The arguments on the commandline are +passed as arguments to the method. + +So if you take for example the shell command + + notest install A B C + +the actually executed command is + + CPAN::Shell->notest("install","A","B","C"); + +Each of the commands that produce listings of modules (C, +C, C) also return a list of the IDs of all modules +within the list. =over 2 @@ -2650,7 +2690,7 @@ all modules that need updating. First a quick and dirty way: If you don't want any output should all modules be up to date, parse the output of above command for the regular expression C and decide to mail the output -only if it doesn't match. +only if it doesn't match. If you prefer to do it more in a programmerish style in one single process, something like this may better suit you: @@ -2837,7 +2877,7 @@ cancellation can be avoided by letting C run the C for you. This install method only has the power to install the distribution if -there are no dependencies in the way. To install an object along with all +there are no dependencies in the way. To install an object along with all its dependencies, use CPAN::Shell->install. Note that install() gives no meaningful return value. See uptodate(). @@ -3231,7 +3271,7 @@ the software producing the indices on CPAN, the mirroring process on CPAN, packaging, configuration, synchronicity, and even (gasp!) due to bugs within the CPAN.pm module itself. -For debugging the code of CPAN.pm itself in interactive mode, some +For debugging the code of CPAN.pm itself in interactive mode, some debugging aid can be turned on for most packages within CPAN.pm with one of @@ -3387,7 +3427,7 @@ Maintaining a bundle definition file means keeping track of two things: dependencies and interactivity. CPAN.pm sometimes fails on calculating dependencies because not all modules define all MakeMaker attributes correctly, so a bundle definition file should specify -prerequisites as early as possible. On the other hand, it's +prerequisites as early as possible. On the other hand, it's annoying that so many distributions need some interactive configuring. So what you can try to accomplish in your private bundle file is to have the packages that need to be configured early in the file and the gentle @@ -3432,7 +3472,7 @@ need Net::FTP. =item One-way visibility -One-way visibility means these firewalls try to make themselves +One-way visibility means these firewalls try to make themselves invisible to users inside the firewall. An FTP data connection is normally created by sending your IP address to the remote server and then listening for the return connection. But the remote server will not be able to diff --git a/Master/tlpkg/tlperl/lib/CPAN/CacheMgr.pm b/Master/tlpkg/tlperl/lib/CPAN/CacheMgr.pm index b9b4eeb32bf..23e756e75b2 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/CacheMgr.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/CacheMgr.pm @@ -49,6 +49,7 @@ sub tidyup { $self->_clean_cache($toremove); return if $CPAN::Signal; } + $self->{FIFO} = []; } #-> sub CPAN::CacheMgr::dir ; diff --git a/Master/tlpkg/tlperl/lib/CPAN/Distribution.pm b/Master/tlpkg/tlperl/lib/CPAN/Distribution.pm index 637ab277d96..32648ecc1ff 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Distribution.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Distribution.pm @@ -8,7 +8,7 @@ use CPAN::InfoObj; use File::Path (); @CPAN::Distribution::ISA = qw(CPAN::InfoObj); use vars qw($VERSION); -$VERSION = "1.9602_01"; +$VERSION = "1.9602"; # Accessors sub cpan_comment { @@ -158,7 +158,7 @@ sub tested_ok_but_not_installed { || $self->{install}->failed ) - ); + ); } @@ -741,7 +741,7 @@ sub choose_MM_or_MB { $prefer_installer = CPAN::HandleConfig->prefs_lookup( $self, q{prefer_installer} ); - # M::B <= 0.35 left a DATA handle open that + # M::B <= 0.35 left a DATA handle open that # causes problems upgrading M::B on Windows close *Module::Build::Version::DATA if fileno *Module::Build::Version::DATA; @@ -777,6 +777,12 @@ sub choose_MM_or_MB { sub store_persistent_state { my($self) = @_; my $dir = $self->{build_dir}; + unless (defined $dir && length $dir) { + my $id = $self->id; + $CPAN::Frontend->mywarnonce("build_dir of $id is not known, ". + "will not store persistent state\n"); + return; + } unless (File::Spec->canonpath(File::Basename::dirname($dir)) eq File::Spec->canonpath($CPAN::Config->{build_dir})) { $CPAN::Frontend->mywarnonce("Directory '$dir' not below $CPAN::Config->{build_dir}, ". @@ -859,7 +865,7 @@ sub try_download { } } my $countedpatches = @$patches == 1 ? "1 patch" : (scalar @$patches . " patches"); - $CPAN::Frontend->myprint("Going to apply $countedpatches:\n"); + $CPAN::Frontend->myprint("Applying $countedpatches:\n"); my $patches_dir = $CPAN::Config->{patches_dir}; for my $patch (@$patches) { if ($patches_dir && !File::Spec->file_name_is_absolute($patch)) { @@ -1845,7 +1851,7 @@ is part of the perl-%s distribution. To install that, you need to run delete $self->{force_update}; return; } - $CPAN::Frontend->myprint("\n CPAN.pm: Going to build ".$self->id."\n\n"); + $CPAN::Frontend->myprint("\n CPAN.pm: Building ".$self->id."\n\n"); $self->debug("Changed directory to $builddir") if $CPAN::DEBUG; if ($^O eq 'MacOS') { @@ -2886,8 +2892,8 @@ sub read_yaml { if $CPAN::DEBUG; $self->debug($yaml) if $CPAN::DEBUG && $yaml; # MYMETA.yml is static and authoritative by definition - if ( $meta_file =~ /MYMETA\.yml/ ) { - return $yaml; + if ( $meta_file =~ /MYMETA\.yml/ ) { + return $yaml; } # META.yml is authoritative only if dynamic_config is defined and false if ( defined $yaml->{dynamic_config} && ! $yaml->{dynamic_config} ) { @@ -3167,7 +3173,7 @@ sub test { # bypass actual tests if "trust_test_report_history" and have a report my $have_tested_fcn; if ( $CPAN::Config->{trust_test_report_history} - && $CPAN::META->has_inst("CPAN::Reporter::History") + && $CPAN::META->has_inst("CPAN::Reporter::History") && ( $have_tested_fcn = CPAN::Reporter::History->can("have_tested" ))) { if ( my @reports = $have_tested_fcn->( dist => $self->base_id ) ) { # Do nothing if grade was DISCARD @@ -3287,43 +3293,43 @@ sub test { sub _make_test_illuminate_prereqs { my($self) = @_; - my @prereq; - - # local $CPAN::DEBUG = 16; # Distribution - for my $m (keys %{$self->{sponsored_mods}}) { - next unless $self->{sponsored_mods}{$m} > 0; - my $m_obj = CPAN::Shell->expand("Module",$m) or next; - # XXX we need available_version which reflects - # $ENV{PERL5LIB} so that already tested but not yet - # installed modules are counted. - my $available_version = $m_obj->available_version; - my $available_file = $m_obj->available_file; - if ($available_version && - !CPAN::Version->vlt($available_version,$self->{prereq_pm}{$m}) - ) { - CPAN->debug("m[$m] good enough available_version[$available_version]") - if $CPAN::DEBUG; - } elsif ($available_file - && ( - !$self->{prereq_pm}{$m} - || - $self->{prereq_pm}{$m} == 0 - ) - ) { - # lex Class::Accessor::Chained::Fast which has no $VERSION - CPAN->debug("m[$m] have available_file[$available_file]") - if $CPAN::DEBUG; - } else { - push @prereq, $m; - } - } + my @prereq; + + # local $CPAN::DEBUG = 16; # Distribution + for my $m (keys %{$self->{sponsored_mods}}) { + next unless $self->{sponsored_mods}{$m} > 0; + my $m_obj = CPAN::Shell->expand("Module",$m) or next; + # XXX we need available_version which reflects + # $ENV{PERL5LIB} so that already tested but not yet + # installed modules are counted. + my $available_version = $m_obj->available_version; + my $available_file = $m_obj->available_file; + if ($available_version && + !CPAN::Version->vlt($available_version,$self->{prereq_pm}{$m}) + ) { + CPAN->debug("m[$m] good enough available_version[$available_version]") + if $CPAN::DEBUG; + } elsif ($available_file + && ( + !$self->{prereq_pm}{$m} + || + $self->{prereq_pm}{$m} == 0 + ) + ) { + # lex Class::Accessor::Chained::Fast which has no $VERSION + CPAN->debug("m[$m] have available_file[$available_file]") + if $CPAN::DEBUG; + } else { + push @prereq, $m; + } + } my $but; - if (@prereq) { - my $cnt = @prereq; - my $which = join ",", @prereq; + if (@prereq) { + my $cnt = @prereq; + my $which = join ",", @prereq; $but = $cnt == 1 ? "one dependency not OK ($which)" : - "$cnt dependencies missing ($which)"; - } + "$cnt dependencies missing ($which)"; + } $but; } @@ -3669,7 +3675,7 @@ sub perldoc { $CPAN::Frontend->myprint(qq{ Function system("@args") returned status $estatus (wstat $wstatus) - }); + }); } } else { diff --git a/Master/tlpkg/tlperl/lib/CPAN/Distroprefs.pm b/Master/tlpkg/tlperl/lib/CPAN/Distroprefs.pm index e1be9cdf749..61c389ed2d3 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Distroprefs.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Distroprefs.pm @@ -169,7 +169,7 @@ sub find { file => $_, ext => $ext, dir => $dir }); # copied from CPAN.pm; is this ever actually possible? - redo unless -f $result->abs; + redo unless -f $result->abs; my $load_method = $self->_load_method($loader, $result); my @prefs = eval { $self->$load_method($loader, $result) }; @@ -314,7 +314,7 @@ __END__ CPAN::Distroprefs -- read and match distroprefs -=head1 SYNOPSIS +=head1 SYNOPSIS use CPAN::Distroprefs; @@ -381,7 +381,7 @@ All results share some common attributes: C, C, or C -=head3 file +=head3 file the file from which these prefs were read, or to which this error refers (relative filename) @@ -413,7 +413,7 @@ Success results contain: an arrayref of CPAN::Distroprefs::Pref objects -=head1 PREFS +=head1 PREFS CPAN::Distroprefs::Pref objects represent individual distroprefs documents. They are constructed automatically as part of C results from C. diff --git a/Master/tlpkg/tlperl/lib/CPAN/Exception/yaml_not_installed.pm b/Master/tlpkg/tlperl/lib/CPAN/Exception/yaml_not_installed.pm index e1259e5397d..1e7fa83a53b 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Exception/yaml_not_installed.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Exception/yaml_not_installed.pm @@ -20,54 +20,4 @@ sub as_string { "'$self->{module}' not installed, cannot $self->{during} '$self->{file}'\n"; } -package CPAN::Exception::yaml_process_error; -use strict; -use overload '""' => "as_string"; - -use vars qw( - $VERSION -); -$VERSION = "5.5"; - - -sub new { - my($class,$module,$file,$during,$error) = @_; - # my $at = Carp::longmess(""); # XXX find something more beautiful - bless { module => $module, - file => $file, - during => $during, - error => $error, - # at => $at, - }, $class; -} - -sub as_string { - my($self) = shift; - if ($self->{during}) { - if ($self->{file}) { - if ($self->{module}) { - if ($self->{error}) { - return "Alert: While trying to '$self->{during}' YAML file\n". - " '$self->{file}'\n". - "with '$self->{module}' the following error was encountered:\n". - " $self->{error}\n"; - } else { - return "Alert: While trying to '$self->{during}' YAML file\n". - " '$self->{file}'\n". - "with '$self->{module}' some unknown error was encountered\n"; - } - } else { - return "Alert: While trying to '$self->{during}' YAML file\n". - " '$self->{file}'\n". - "some unknown error was encountered\n"; - } - } else { - return "Alert: While trying to '$self->{during}' some YAML file\n". - "some unknown error was encountered\n"; - } - } else { - return "Alert: unknown error encountered\n"; - } -} - 1; diff --git a/Master/tlpkg/tlperl/lib/CPAN/Exception/yaml_process_error.pm b/Master/tlpkg/tlperl/lib/CPAN/Exception/yaml_process_error.pm new file mode 100644 index 00000000000..ae8c14ebebe --- /dev/null +++ b/Master/tlpkg/tlperl/lib/CPAN/Exception/yaml_process_error.pm @@ -0,0 +1,53 @@ +# -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*- +# vim: ts=4 sts=4 sw=4: +package CPAN::Exception::yaml_process_error; +use strict; +use overload '""' => "as_string"; + +use vars qw( + $VERSION +); +$VERSION = "5.5"; + + +sub new { + my($class,$module,$file,$during,$error) = @_; + # my $at = Carp::longmess(""); # XXX find something more beautiful + bless { module => $module, + file => $file, + during => $during, + error => $error, + # at => $at, + }, $class; +} + +sub as_string { + my($self) = shift; + if ($self->{during}) { + if ($self->{file}) { + if ($self->{module}) { + if ($self->{error}) { + return "Alert: While trying to '$self->{during}' YAML file\n". + " '$self->{file}'\n". + "with '$self->{module}' the following error was encountered:\n". + " $self->{error}\n"; + } else { + return "Alert: While trying to '$self->{during}' YAML file\n". + " '$self->{file}'\n". + "with '$self->{module}' some unknown error was encountered\n"; + } + } else { + return "Alert: While trying to '$self->{during}' YAML file\n". + " '$self->{file}'\n". + "some unknown error was encountered\n"; + } + } else { + return "Alert: While trying to '$self->{during}' some YAML file\n". + "some unknown error was encountered\n"; + } + } else { + return "Alert: unknown error encountered\n"; + } +} + +1; diff --git a/Master/tlpkg/tlperl/lib/CPAN/FTP.pm b/Master/tlpkg/tlperl/lib/CPAN/FTP.pm index 4f233814e54..997e141be5a 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/FTP.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/FTP.pm @@ -21,6 +21,11 @@ $VERSION = "5.5005"; sub _ftp_statistics { my($self,$fh) = @_; my $locktype = $fh ? LOCK_EX : LOCK_SH; + # XXX On Windows flock() implements mandatory locking, so we can + # XXX only use shared locking to still allow _yaml_load_file() to + # XXX read from the file using a different filehandle. + $locktype = LOCK_SH if $^O eq "MSWin32"; + $fh ||= FileHandle->new; my $file = File::Spec->catfile($CPAN::Config->{cpan_home},"FTPstats.yml"); mkpath dirname $file; @@ -56,6 +61,7 @@ sub _ftp_statistics { $CPAN::Frontend->mydie($@); } } + CPAN::_flock($fh, LOCK_UN); return $stats->[0]; } @@ -567,7 +573,7 @@ sub hostdleasy { #called from hostdlxxx $ThesiteURL = $ro_url; return $l; } - # If request is for a compressed file and we can find the + # If request is for a compressed file and we can find the # uncompressed file also, return the path of the uncompressed file # otherwise, decompress it and return the resulting path if ($l =~ /(.+)\.gz$/) { @@ -975,7 +981,7 @@ ftp config variable with Trying with external ftp to get '$url' $netrc_explain - Going to send the dialog + Sending the dialog $dialog } ); @@ -1014,7 +1020,7 @@ $dialog $CPAN::Frontend->myprint(qq{ Trying with external ftp to get $url - Going to send the dialog + Sending the dialog $dialog } ); diff --git a/Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm b/Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm index 667bdca2f9a..5030ef9b838 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/FirstTime.pm @@ -202,8 +202,8 @@ Preferred method for determining the current working directory? =item halt_on_failure Normally, CPAN.pm continues processing the full list of targets and -dependencies, even if one of them fails. However, you can specify -that CPAN should halt after the first failure. +dependencies, even if one of them fails. However, you can specify +that CPAN should halt after the first failure. Do you want to halt on failure (yes/no)? @@ -339,7 +339,7 @@ Your choice: Parameters for the './Build install' command? Typical frequently used setting: - --uninst 1 # uninstall conflicting files + --uninst 1 # uninstall conflicting files # (but do NOT use with local::lib or INSTALL_BASE) Your choice: @@ -781,8 +781,8 @@ sub init { if ( $args{autoconfig} ) { $auto_config = 1; } elsif ($matcher) { - $auto_config = 0; - } else { + $auto_config = 0; + } else { my $_conf = prompt($prompts{auto_config}, "yes"); $auto_config = ($_conf and $_conf =~ /^y/i) ? 1 : 0; } @@ -795,7 +795,7 @@ sub init { my $i_am_mad = 0; # silent prompting -- just quietly use default *_real_prompt = sub { return $_[1] }; - } + } # # bootstrap local::lib or sudo @@ -993,8 +993,8 @@ sub init { my_dflt_prompt(makepl_arg => "", $matcher); my_dflt_prompt(make_arg => "", $matcher); if ( $CPAN::Config->{makepl_arg} =~ /LIBS=|INC=/ ) { - $CPAN::Frontend->mywarn( - "Warning: Using LIBS or INC in makepl_arg will likely break distributions\n" . + $CPAN::Frontend->mywarn( + "Warning: Using LIBS or INC in makepl_arg will likely break distributions\n" . "that specify their own LIBS or INC options in Makefile.PL.\n" ); } @@ -1224,9 +1224,9 @@ sub init { ); } else { - $CPAN::Frontend->myprint( - "Autoconfigured everything but 'urllist'.\n" - ); + $CPAN::Frontend->myprint( + "Autoconfigured everything but 'urllist'.\n" + ); _do_pick_mirrors(); } } @@ -1247,8 +1247,8 @@ sub init { $CPAN::Frontend->myprint( "Skipping local::lib bootstrap because 'urllist' is not configured.\n" ); - } - else { + } + else { $CPAN::Frontend->myprint("\nAttempting to bootstrap local::lib...\n"); $CPAN::Frontend->myprint("\nWriting $configpm for bootstrap...\n"); delete $CPAN::Config->{install_help}; # temporary only @@ -1268,11 +1268,11 @@ sub init { $CPAN::Frontend->myprint("From the CPAN Shell, you might try 'look local::lib' and \n" . "run 'perl Makefile --bootstrap' and see if that is successful. Then\n" . "restart your CPAN client\n" - ); + ); } else { _local_lib_config(); - } + } } } @@ -1515,7 +1515,7 @@ ALERT: 'make' is an essential tool for building perl Modules. Please make sure you have 'make' (or some equivalent) working. HERE - if ($^O eq "MSWin32") { + if ($^O eq "MSWin32") { $CPAN::Frontend->mywarn(<<"HERE"); Windows users may want to follow this procedure when back in the CPAN shell: @@ -1528,7 +1528,7 @@ substitute. You can then revisit this dialog with o conf init make HERE - } + } } sub init_cpan_home { @@ -1657,7 +1657,7 @@ sub my_prompt_loop { # (2) We don't have a copy at all # (2a) If we are allowed to connect, we try to get a new copy. If it succeeds, # we use it, otherwise, we warn about failure -# (2b) If we aren't allowed to connect, +# (2b) If we aren't allowed to connect, sub conf_sites { my %args = @_; @@ -1732,7 +1732,7 @@ HERE } else { $CPAN::Frontend->mywarn(<<'HERE'); -You will need to provide CPAN mirror URLs yourself or set +You will need to provide CPAN mirror URLs yourself or set 'o conf connect_to_internet_ok 1' and try again. HERE } @@ -1851,7 +1851,9 @@ sub auto_mirrored_by { my $local = shift or return; local $|=1; $CPAN::Frontend->myprint("Looking for CPAN mirrors near you (please be patient)\n"); - my $mirrors = CPAN::Mirrors->new($local); + my $mirrors = CPAN::Mirrors->new; + $mirrors->parse_mirrored_by($local); + my $cnt = 0; my @best = $mirrors->best_mirrors( how_many => 3, @@ -1860,9 +1862,11 @@ sub auto_mirrored_by { if ($cnt++>60) { $cnt=0; $CPAN::Frontend->myprint("\n"); } }, ); + my $urllist = [ map { $_->http } @best ]; push @$urllist, grep { /^file:/ } @{$CPAN::Config->{urllist}}; $CPAN::Frontend->myprint(" done!\n\n"); + return $urllist } @@ -1998,8 +2002,8 @@ later if you\'re sure it\'s right.\n}, sub _print_urllist { my ($which) = @_; $CPAN::Frontend->myprint("$which urllist\n"); - for ( @{$CPAN::Config->{urllist} || []} ) { - $CPAN::Frontend->myprint(" $_\n") + for ( @{$CPAN::Config->{urllist} || []} ) { + $CPAN::Frontend->myprint(" $_\n") }; } diff --git a/Master/tlpkg/tlperl/lib/CPAN/HTTP/Client.pm b/Master/tlpkg/tlperl/lib/CPAN/HTTP/Client.pm index 52de7fe237c..c5eb0f6a435 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/HTTP/Client.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/HTTP/Client.pm @@ -31,8 +31,8 @@ sub mirror { my($self, $uri, $path) = @_; my $want_proxy = $self->_want_proxy($uri); - my $http = HTTP::Tiny->new( - $want_proxy ? (proxy => $self->{proxy}) : () + my $http = HTTP::Tiny->new( + $want_proxy ? (proxy => $self->{proxy}) : () ); my ($response, %headers); @@ -112,7 +112,7 @@ sub _get_challenge { my $auth_list = $response->{headers}(lc $auth_header); return unless defined $auth_list; $auth_list = [$auth_list] unless ref $auth_list; - + for my $challenge (@$auth_list) { $challenge =~ tr/,/;/; # "," is used to separate auth-params!! ($challenge) = $self->split_header_words($challenge); diff --git a/Master/tlpkg/tlperl/lib/CPAN/HandleConfig.pm b/Master/tlpkg/tlperl/lib/CPAN/HandleConfig.pm index 58ccbe50e5d..09c42efee08 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/HandleConfig.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/HandleConfig.pm @@ -265,11 +265,11 @@ sub commit { my($self,@args) = @_; CPAN->debug("args[@args]") if $CPAN::DEBUG; if ($CPAN::RUN_DEGRADED) { - $CPAN::Frontend->mydie( - "'o conf commit' disabled in ". - "degraded mode. Maybe try\n". - " !undef \$CPAN::RUN_DEGRADED\n" - ); + $CPAN::Frontend->mydie( + "'o conf commit' disabled in ". + "degraded mode. Maybe try\n". + " !undef \$CPAN::RUN_DEGRADED\n" + ); } my ($configpm, $must_reload); @@ -474,13 +474,13 @@ sub init { sub require_myconfig_or_config () { if ( $INC{"CPAN/MyConfig.pm"} || _try_loading("CPAN::MyConfig", cpan_home())) { return $INC{"CPAN/MyConfig.pm"}; - } + } elsif ( $INC{"CPAN/Config.pm"} || _try_loading("CPAN::Config") ) { return $INC{"CPAN/Config.pm"}; - } + } else { return q{}; - } + } } # Load a module, but ignore "can't locate..." errors @@ -495,8 +495,8 @@ sub _try_loading { if ( -f File::Spec->catfile($dir, $file) ) { unshift @INC, $dir; last; + } } - } eval { require $file }; my $err_myconfig = $@; @@ -515,7 +515,7 @@ sub cpan_home_dir_candidates { if ($^O ne 'darwin') { push @dirs, File::HomeDir->my_data; # my_data is ~/Library/Application Support on darwin, - # which causes issues in the toolchain. + # which causes issues in the toolchain. } push @dirs, File::HomeDir->my_home; } @@ -592,7 +592,7 @@ sub make_new_config { Old configuration file $configpm moved to $configpm_bak END - } + } } my $fh = FileHandle->new; if ($fh->open(">$configpm")) { diff --git a/Master/tlpkg/tlperl/lib/CPAN/Index.pm b/Master/tlpkg/tlperl/lib/CPAN/Index.pm index 4fcde8c390d..af98d7bf15c 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Index.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Index.pm @@ -132,7 +132,7 @@ sub reanimate_build_dir { return; } $CPAN::Frontend->myprint - (sprintf("Going to read %d yaml file%s from %s/\n", + (sprintf("Reading %d yaml file%s from %s/\n", scalar @candidates, @candidates==1 ? "" : "s", $CPAN::Config->{build_dir} @@ -231,7 +231,7 @@ sub rd_authindex { return unless defined $index_target; return if CPAN::_sqlite_running(); my @lines; - $CPAN::Frontend->myprint("Going to read '$index_target'\n"); + $CPAN::Frontend->myprint("Reading '$index_target'\n"); local(*FH); tie *FH, 'CPAN::Tarzip', $index_target; local($/) = "\n"; @@ -271,7 +271,7 @@ sub rd_modpacks { my($self, $index_target) = @_; return unless defined $index_target; return if CPAN::_sqlite_running(); - $CPAN::Frontend->myprint("Going to read '$index_target'\n"); + $CPAN::Frontend->myprint("Reading '$index_target'\n"); my $fh = CPAN::Tarzip->TIEHANDLE($index_target); local $_; CPAN->debug(sprintf "start[%d]", time) if $CPAN::DEBUG; @@ -494,7 +494,7 @@ sub rd_modlist { my($cl,$index_target) = @_; return unless defined $index_target; return if CPAN::_sqlite_running(); - $CPAN::Frontend->myprint("Going to read '$index_target'\n"); + $CPAN::Frontend->myprint("Reading '$index_target'\n"); my $fh = CPAN::Tarzip->TIEHANDLE($index_target); local $_; my $slurp = ""; @@ -556,7 +556,7 @@ sub write_metadata_cache { $cache->{last_time} = $LAST_TIME; $cache->{DATE_OF_02} = $DATE_OF_02; $cache->{PROTOCOL} = PROTOCOL; - $CPAN::Frontend->myprint("Going to write $metadata_file\n"); + $CPAN::Frontend->myprint("Writing $metadata_file\n"); eval { Storable::nstore($cache, $metadata_file) }; $CPAN::Frontend->mywarn($@) if $@; # ?? missing "\n" after $@ in mywarn ?? } @@ -569,7 +569,7 @@ sub read_metadata_cache { return unless $CPAN::META->has_usable("Storable"); my $metadata_file = File::Spec->catfile($CPAN::Config->{cpan_home},"Metadata"); return unless -r $metadata_file and -f $metadata_file; - $CPAN::Frontend->myprint("Going to read '$metadata_file'\n"); + $CPAN::Frontend->myprint("Reading '$metadata_file'\n"); my $cache; eval { $cache = Storable::retrieve($metadata_file) }; $CPAN::Frontend->mywarn($@) if $@; # ?? missing "\n" after $@ in mywarn ?? diff --git a/Master/tlpkg/tlperl/lib/CPAN/Meta.pm b/Master/tlpkg/tlperl/lib/CPAN/Meta.pm index ef798559fb4..f8185983a42 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Meta.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Meta.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta; -BEGIN { - $CPAN::Meta::VERSION = '2.110440'; -} -# ABSTRACT: the distribution metadata for a CPAN dist +our $VERSION = '2.120630'; # VERSION use Carp qw(carp croak); @@ -13,7 +10,9 @@ use CPAN::Meta::Feature; use CPAN::Meta::Prereqs; use CPAN::Meta::Converter; use CPAN::Meta::Validator; -use Parse::CPAN::Meta 1.44 (); +use Parse::CPAN::Meta 1.4400 (); + +BEGIN { *_dclone = \&CPAN::Meta::Converter::_dclone } BEGIN { @@ -47,7 +46,7 @@ BEGIN { my $value = $_[0]{ $attr }; croak "$attr must be called in list context" unless wantarray; - return @{ Storable::dclone($value) } if ref $value; + return @{ _dclone($value) } if ref $value; return $value; }; } @@ -73,7 +72,7 @@ BEGIN { (my $subname = $attr) =~ s/-/_/; *$subname = sub { my $value = $_[0]{ $attr }; - return Storable::dclone($value) if $value; + return _dclone($value) if $value; return {}; }; } @@ -87,7 +86,7 @@ sub custom_keys { sub custom { my ($self, $attr) = @_; my $value = $self->{$attr}; - return Storable::dclone($value) if ref $value; + return _dclone($value) if ref $value; return $value; } @@ -215,7 +214,6 @@ sub save { } -# XXX Do we need this if we always upconvert? -- dagolden, 2010-04-14 sub meta_spec_version { my ($self) = @_; return $self->meta_spec->{version}; @@ -290,10 +288,7 @@ sub feature { sub as_struct { my ($self, $options) = @_; - my $backend = Parse::CPAN::Meta->json_backend(); - my $struct = $backend->new->decode( - $backend->new->convert_blessed->encode($self) - ); + my $struct = _dclone($self); if ( $options->{version} ) { my $cmc = CPAN::Meta::Converter->new( $struct ); $struct = $cmc->convert( version => $options->{version} ); @@ -308,7 +303,7 @@ sub as_string { my $version = $options->{version} || '2'; my $struct; - if ( $self->version ne $version ) { + if ( $self->meta_spec_version ne $version ) { my $cmc = CPAN::Meta::Converter->new( $self->as_struct ); $struct = $cmc->convert( version => $version ); } @@ -339,6 +334,8 @@ sub TO_JSON { 1; +# ABSTRACT: the distribution metadata for a CPAN dist + =pod @@ -349,7 +346,7 @@ CPAN::Meta - the distribution metadata for a CPAN dist =head1 VERSION -version 2.110440 +version 2.120630 =head1 SYNOPSIS @@ -644,6 +641,10 @@ particular keys may be retrieved with the C method. If a custom key refers to a data structure, a deep clone is returned. +=for Pod::Coverage TO_JSON abstract author authors custom custom_keys description dynamic_config +generated_by keywords license licenses meta_spec name no_index +optional_features prereqs provides release_status resources version + =head1 BUGS Please report any bugs or feature using the CPAN Request Tracker. @@ -667,6 +668,25 @@ L =back +=for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan + +=head1 SUPPORT + +=head2 Bugs / Feature Requests + +Please report any bugs or feature requests through the issue tracker +at L. +You will be notified automatically of any progress on your issue. + +=head2 Source Code + +This is open source software. The code repository is available for +public review and contribution under the terms of the license. + +L + + git clone git://github.com/dagolden/cpan-meta.git + =head1 AUTHORS =over 4 diff --git a/Master/tlpkg/tlperl/lib/CPAN/Meta/Converter.pm b/Master/tlpkg/tlperl/lib/CPAN/Meta/Converter.pm index 2c6ce857d3d..0348e55504e 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Meta/Converter.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Meta/Converter.pm @@ -2,15 +2,29 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Converter; -BEGIN { - $CPAN::Meta::Converter::VERSION = '2.110440'; -} -# ABSTRACT: Convert CPAN distribution metadata structures +our $VERSION = '2.120630'; # VERSION use CPAN::Meta::Validator; -use Storable qw/dclone/; -use version 0.82 (); +use CPAN::Meta::Requirements; +use version 0.88 (); +use Parse::CPAN::Meta 1.4400 (); + +sub _dclone { + my $ref = shift; + + # if an object is in the data structure and doesn't specify how to + # turn itself into JSON, we just stringify the object. That does the + # right thing for typical things that might be there, like version objects, + # Path::Class objects, etc. + no warnings 'once'; + local *UNIVERSAL::TO_JSON = sub { return "$_[0]" }; + + my $backend = Parse::CPAN::Meta->json_backend(); + return $backend->new->utf8->decode( + $backend->new->utf8->allow_blessed->convert_blessed->encode($ref) + ); +} my %known_specs = ( '2' => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec', @@ -134,15 +148,18 @@ my @valid_licenses_2 = qw( unknown ); +# The "old" values were defined by Module::Build, and were often vague. I have +# made the decisions below based on reading Module::Build::API and how clearly +# it specifies the version of the license. my %license_map_2 = ( - ( map { $_ => $_ } @valid_licenses_2 ), - apache => 'apache_2_0', - artistic => 'artistic_1', - artistic2 => 'artistic_2', - gpl => 'gpl_1', - lgpl => 'lgpl_2_1', - mozilla => 'mozilla_1_0', - perl => 'perl_5', + (map { $_ => $_ } @valid_licenses_2), + apache => 'apache_2_0', # clearly stated as 2.0 + artistic => 'artistic_1', # clearly stated as 1 + artistic2 => 'artistic_2', # clearly stated as 2 + gpl => 'open_source', # we don't know which GPL; punt + lgpl => 'open_source', # we don't know which LGPL; punt + mozilla => 'open_source', # we don't know which MPL; punt + perl => 'perl_5', # clearly Perl 5 restrictive => 'restricted', ); @@ -300,7 +317,10 @@ sub _clean_version { return 0 if ! length $element; return 0 if ( $element eq 'undef' || $element eq '' ); - if ( my $v = eval { version->new($element) } ) { + my $v = eval { version->new($element) }; + # XXX check defined $v and not just $v because version objects leak memory + # in boolean context -- dagolden, 2012-02-03 + if ( defined $v ) { return $v->is_qv ? $v->normal : $element; } else { @@ -308,29 +328,36 @@ sub _clean_version { } } +sub _bad_version_hook { + my ($v) = @_; + $v =~ s{[a-z]+$}{}; # strip trailing alphabetics + my $vobj = eval { version->parse($v) }; + return defined($vobj) ? $vobj : version->parse(0); # or give up +} + sub _version_map { my ($element) = @_; - return undef unless defined $element; + return unless defined $element; if ( ref $element eq 'HASH' ) { - my $new_map = {}; - for my $k ( keys %$element ) { + # XXX turn this into CPAN::Meta::Requirements with bad version hook + # and then turn it back into a hash + my $new_map = CPAN::Meta::Requirements->new( + { bad_version_hook => sub { version->new(0) } } # punt + ); + while ( my ($k,$v) = each %$element ) { next unless _is_module_name($k); - my $value = $element->{$k}; - if ( ! ( defined $value && length $value ) ) { - $new_map->{$k} = 0; - } - elsif ( $value eq 'undef' || $value eq '' ) { - $new_map->{$k} = 0; + if ( !defined($v) || !length($v) || $v eq 'undef' || $v eq '' ) { + $v = 0; } - elsif ( _is_module_name( $value ) ) { # some weird, old META have this - $new_map->{$k} = 0; - $new_map->{$value} = 0; - } - else { - $new_map->{$k} = _clean_version($value); + # some weird, old META have bad yml with module => module + # so check if value is like a module name and not like a version + if ( _is_module_name($v) && ! version::is_lax($v) ) { + $new_map->add_minimum($k => 0); + $new_map->add_minimum($v => 0); } + $new_map->add_string_requirement($k => $v); } - return $new_map; + return $new_map->as_string_hash; } elsif ( ref $element eq 'ARRAY' ) { my $hashref = { map { $_ => 0 } @$element }; @@ -413,9 +440,8 @@ sub _get_build_requires { my $test_h = _extract_prereqs($_[2]->{prereqs}, qw(test requires)) || {}; my $build_h = _extract_prereqs($_[2]->{prereqs}, qw(build requires)) || {}; - require Version::Requirements; - my $test_req = Version::Requirements->from_string_hash($test_h); - my $build_req = Version::Requirements->from_string_hash($build_h); + my $test_req = CPAN::Meta::Requirements->from_string_hash($test_h); + my $build_req = CPAN::Meta::Requirements->from_string_hash($build_h); $test_req->add_requirements($build_req)->as_string_hash; } @@ -423,12 +449,12 @@ sub _get_build_requires { sub _extract_prereqs { my ($prereqs, $phase, $type) = @_; return unless ref $prereqs eq 'HASH'; - return $prereqs->{$phase}{$type}; + return scalar _version_map($prereqs->{$phase}{$type}); } sub _downgrade_optional_features { my (undef, undef, $meta) = @_; - return undef unless exists $meta->{optional_features}; + return unless exists $meta->{optional_features}; my $origin = $meta->{optional_features}; my $features = {}; for my $name ( keys %$origin ) { @@ -449,7 +475,7 @@ sub _downgrade_optional_features { sub _upgrade_optional_features { my (undef, undef, $meta) = @_; - return undef unless exists $meta->{optional_features}; + return unless exists $meta->{optional_features}; my $origin = $meta->{optional_features}; my $features = {}; for my $name ( keys %$origin ) { @@ -545,7 +571,7 @@ my $resource2_upgrade = { return unless $item; if ( $item =~ m{^mailto:(.*)$} ) { return { mailto => $1 } } elsif( _is_urlish($item) ) { return { web => $item } } - else { return undef } + else { return } }, repository => sub { return _is_urlish($_[0]) ? { url => $_[0] } : undef }, ':custom' => \&_prefix_custom, @@ -553,7 +579,7 @@ my $resource2_upgrade = { sub _upgrade_resources_2 { my (undef, undef, $meta, $version) = @_; - return undef unless exists $meta->{resources}; + return unless exists $meta->{resources}; return _convert($meta->{resources}, $resource2_upgrade); } @@ -591,7 +617,7 @@ my $resources2_cleanup = { sub _cleanup_resources_2 { my ($resources, $key, $meta, $to_version) = @_; - return undef unless $resources && ref $resources eq 'HASH'; + return unless $resources && ref $resources eq 'HASH'; return _convert($resources, $resources2_cleanup, $to_version); } @@ -605,7 +631,7 @@ my $resource1_spec = { sub _resources_1_3 { my (undef, undef, $meta, $version) = @_; - return undef unless exists $meta->{resources}; + return unless exists $meta->{resources}; return _convert($meta->{resources}, $resource1_spec); } @@ -618,7 +644,7 @@ sub _resources_1_2 { $resources->{license} = $meta->license_url if _is_urlish($meta->{license_url}); } - return undef unless keys %$resources; + return unless keys %$resources; return _convert($resources, $resource1_spec); } @@ -632,7 +658,7 @@ my $resource_downgrade_spec = { sub _downgrade_resources { my (undef, undef, $meta, $version) = @_; - return undef unless exists $meta->{resources}; + return unless exists $meta->{resources}; return _convert($meta->{resources}, $resource_downgrade_spec); } @@ -1187,7 +1213,7 @@ sub convert { my $new_version = $args->{version} || $HIGHEST; my ($old_version) = $self->{spec}; - my $converted = dclone $self->{data}; + my $converted = _dclone($self->{data}); if ( $old_version == $new_version ) { $converted = _convert( $converted, $cleanup{$old_version}, $old_version ); @@ -1232,6 +1258,8 @@ sub convert { 1; +# ABSTRACT: Convert CPAN distribution metadata structures + =pod @@ -1242,7 +1270,7 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures =head1 VERSION -version 2.110440 +version 2.120630 =head1 SYNOPSIS diff --git a/Master/tlpkg/tlperl/lib/CPAN/Meta/Feature.pm b/Master/tlpkg/tlperl/lib/CPAN/Meta/Feature.pm index d3575e5e7e8..cd7689e9a67 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Meta/Feature.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Meta/Feature.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Feature; -BEGIN { - $CPAN::Meta::Feature::VERSION = '2.110440'; -} -# ABSTRACT: an optional feature provided by a CPAN distribution +our $VERSION = '2.120630'; # VERSION use CPAN::Meta::Prereqs; @@ -33,6 +30,8 @@ sub prereqs { $_[0]{prereqs} } 1; +# ABSTRACT: an optional feature provided by a CPAN distribution + =pod @@ -43,7 +42,7 @@ CPAN::Meta::Feature - an optional feature provided by a CPAN distribution =head1 VERSION -version 2.110440 +version 2.120630 =head1 DESCRIPTION diff --git a/Master/tlpkg/tlperl/lib/CPAN/Meta/History.pm b/Master/tlpkg/tlperl/lib/CPAN/Meta/History.pm index ab036907a49..001686e1b70 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Meta/History.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Meta/History.pm @@ -3,12 +3,12 @@ use 5.006; use strict; use warnings; package CPAN::Meta::History; -BEGIN { - $CPAN::Meta::History::VERSION = '2.110440'; -} -# ABSTRACT: history of CPAN Meta Spec changes +our $VERSION = '2.120630'; # VERSION + 1; +# ABSTRACT: history of CPAN Meta Spec changes + __END__ @@ -20,7 +20,7 @@ CPAN::Meta::History - history of CPAN Meta Spec changes =head1 VERSION -version 2.110440 +version 2.120630 =head1 DESCRIPTION @@ -242,7 +242,7 @@ Added 'resources' field with subkeys 'homepage', 'license', and =item * -Added 'optional_features' field as an alterate under 'recommends'. +Added 'optional_features' field as an alternate under 'recommends'. Includes 'description', 'requires', 'build_requires', 'conflicts', 'requires_packages', 'requires_os' and 'excluded_os' as valid subkeys diff --git a/Master/tlpkg/tlperl/lib/CPAN/Meta/Prereqs.pm b/Master/tlpkg/tlperl/lib/CPAN/Meta/Prereqs.pm index 4fc20939abd..640a299a01d 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Meta/Prereqs.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Meta/Prereqs.pm @@ -2,15 +2,12 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Prereqs; -BEGIN { - $CPAN::Meta::Prereqs::VERSION = '2.110440'; -} -# ABSTRACT: a set of distribution prerequisites by phase and type +our $VERSION = '2.120630'; # VERSION use Carp qw(confess); use Scalar::Util qw(blessed); -use Version::Requirements 0.101020; # finalize +use CPAN::Meta::Requirements; sub __legal_phases { qw(configure build test runtime develop) } @@ -38,7 +35,7 @@ sub new { next TYPE unless keys %$spec; - $guts{prereqs}{$phase}{$type} = Version::Requirements->from_string_hash( + $guts{prereqs}{$phase}{$type} = CPAN::Meta::Requirements->from_string_hash( $spec ); } @@ -62,7 +59,7 @@ sub requirements_for { confess "requested requirements for unknown type: $type"; } - my $req = ($self->{prereqs}{$phase}{$type} ||= Version::Requirements->new); + my $req = ($self->{prereqs}{$phase}{$type} ||= CPAN::Meta::Requirements->new); $req->finalize if $self->is_finalized; @@ -81,7 +78,7 @@ sub with_merged_prereqs { for my $phase ($self->__legal_phases) { for my $type ($self->__legal_types) { - my $req = Version::Requirements->new; + my $req = CPAN::Meta::Requirements->new; for my $prereq (@prereq_objs) { my $this_req = $prereq->requirements_for($phase, $type); @@ -140,6 +137,8 @@ sub clone { 1; +# ABSTRACT: a set of distribution prerequisites by phase and type + =pod @@ -150,7 +149,7 @@ CPAN::Meta::Prereqs - a set of distribution prerequisites by phase and type =head1 VERSION -version 2.110440 +version 2.120630 =head1 DESCRIPTION @@ -190,10 +189,10 @@ dumping the whole set into a structure or string. my $requirements = $prereqs->requirements_for( $phase, $type ); -This method returns a L object for the given phase/type -combination. If no prerequisites are registered for that combination, a new -Version::Requirements object will be returned, and it may be added to as -needed. +This method returns a L object for the given +phase/type combination. If no prerequisites are registered for that +combination, a new CPAN::Meta::Requirements object will be returned, and it may +be added to as needed. If C<$phase> or C<$type> are undefined or otherwise invalid, an exception will be raised. @@ -216,7 +215,7 @@ will not alter them. This method returns a hashref containing structures suitable for dumping into a distmeta data structure. It is made up of hashes and strings, only; there will -be no Prereqs, Version::Requirements, or C objects inside it. +be no Prereqs, CPAN::Meta::Requirements, or C objects inside it. =head2 is_finalized diff --git a/Master/tlpkg/tlperl/lib/CPAN/Meta/Requirements.pm b/Master/tlpkg/tlperl/lib/CPAN/Meta/Requirements.pm new file mode 100644 index 00000000000..483a8448a5b --- /dev/null +++ b/Master/tlpkg/tlperl/lib/CPAN/Meta/Requirements.pm @@ -0,0 +1,680 @@ +use strict; +use warnings; +package CPAN::Meta::Requirements; +our $VERSION = '2.120630'; # VERSION +# ABSTRACT: a set of version requirements for a CPAN dist + + +use Carp (); +use Scalar::Util (); +use version 0.77 (); # the ->parse method + + +my @valid_options = qw( bad_version_hook ); + +sub new { + my ($class, $options) = @_; + $options ||= {}; + Carp::croak "Argument to $class\->new() must be a hash reference" + unless ref $options eq 'HASH'; + my %self = map {; $_ => $options->{$_}} @valid_options; + + return bless \%self => $class; +} + +sub _version_object { + my ($self, $version) = @_; + + my $vobj; + + eval { + $vobj = (! defined $version) ? version->parse(0) + : (! Scalar::Util::blessed($version)) ? version->parse($version) + : $version; + }; + + if ( my $err = $@ ) { + my $hook = $self->{bad_version_hook}; + $vobj = eval { $hook->($version) } + if ref $hook eq 'CODE'; + unless (Scalar::Util::blessed($vobj) && $vobj->isa("version")) { + $err =~ s{ at .* line \d+.*$}{}; + die "Can't convert '$version': $err"; + } + } + + # ensure no leading '.' + if ( $vobj =~ m{\A\.} ) { + $vobj = version->parse("0$vobj"); + } + + # ensure normal v-string form + if ( $vobj->is_qv ) { + $vobj = version->parse($vobj->normal); + } + + return $vobj; +} + + +BEGIN { + for my $type (qw(minimum maximum exclusion exact_version)) { + my $method = "with_$type"; + my $to_add = $type eq 'exact_version' ? $type : "add_$type"; + + my $code = sub { + my ($self, $name, $version) = @_; + + $version = $self->_version_object( $version ); + + $self->__modify_entry_for($name, $method, $version); + + return $self; + }; + + no strict 'refs'; + *$to_add = $code; + } +} + + +sub add_requirements { + my ($self, $req) = @_; + + for my $module ($req->required_modules) { + my $modifiers = $req->__entry_for($module)->as_modifiers; + for my $modifier (@$modifiers) { + my ($method, @args) = @$modifier; + $self->$method($module => @args); + }; + } + + return $self; +} + + +sub accepts_module { + my ($self, $module, $version) = @_; + + $version = $self->_version_object( $version ); + + return 1 unless my $range = $self->__entry_for($module); + return $range->_accepts($version); +} + + +sub clear_requirement { + my ($self, $module) = @_; + + return $self unless $self->__entry_for($module); + + Carp::confess("can't clear requirements on finalized requirements") + if $self->is_finalized; + + delete $self->{requirements}{ $module }; + + return $self; +} + + +sub required_modules { keys %{ $_[0]{requirements} } } + + +sub clone { + my ($self) = @_; + my $new = (ref $self)->new; + + return $new->add_requirements($self); +} + +sub __entry_for { $_[0]{requirements}{ $_[1] } } + +sub __modify_entry_for { + my ($self, $name, $method, $version) = @_; + + my $fin = $self->is_finalized; + my $old = $self->__entry_for($name); + + Carp::confess("can't add new requirements to finalized requirements") + if $fin and not $old; + + my $new = ($old || 'CPAN::Meta::Requirements::_Range::Range') + ->$method($version); + + Carp::confess("can't modify finalized requirements") + if $fin and $old->as_string ne $new->as_string; + + $self->{requirements}{ $name } = $new; +} + + +sub is_simple { + my ($self) = @_; + for my $module ($self->required_modules) { + # XXX: This is a complete hack, but also entirely correct. + return if $self->__entry_for($module)->as_string =~ /\s/; + } + + return 1; +} + + +sub is_finalized { $_[0]{finalized} } + + +sub finalize { $_[0]{finalized} = 1 } + + +sub as_string_hash { + my ($self) = @_; + + my %hash = map {; $_ => $self->{requirements}{$_}->as_string } + $self->required_modules; + + return \%hash; +} + + +my %methods_for_op = ( + '==' => [ qw(exact_version) ], + '!=' => [ qw(add_exclusion) ], + '>=' => [ qw(add_minimum) ], + '<=' => [ qw(add_maximum) ], + '>' => [ qw(add_minimum add_exclusion) ], + '<' => [ qw(add_maximum add_exclusion) ], +); + +sub add_string_requirement { + my ($self, $module, $req) = @_; + + my @parts = split qr{\s*,\s*}, $req; + for my $part (@parts) { + my ($op, $ver) = $part =~ m{\A\s*(==|>=|>|<=|<|!=)\s*(.*)\z}; + + if (! defined $op) { + $self->add_minimum($module => $part); + } else { + Carp::confess("illegal requirement string: $req") + unless my $methods = $methods_for_op{ $op }; + + $self->$_($module => $ver) for @$methods; + } + } +} + + +sub from_string_hash { + my ($class, $hash) = @_; + + my $self = $class->new; + + for my $module (keys %$hash) { + $self->add_string_requirement($module, $hash->{ $module }); + } + + return $self; +} + +############################################################## + +{ + package + CPAN::Meta::Requirements::_Range::Exact; + sub _new { bless { version => $_[1] } => $_[0] } + + sub _accepts { return $_[0]{version} == $_[1] } + + sub as_string { return "== $_[0]{version}" } + + sub as_modifiers { return [ [ exact_version => $_[0]{version} ] ] } + + sub _clone { + (ref $_[0])->_new( version->new( $_[0]{version} ) ) + } + + sub with_exact_version { + my ($self, $version) = @_; + + return $self->_clone if $self->_accepts($version); + + Carp::confess("illegal requirements: unequal exact version specified"); + } + + sub with_minimum { + my ($self, $minimum) = @_; + return $self->_clone if $self->{version} >= $minimum; + Carp::confess("illegal requirements: minimum above exact specification"); + } + + sub with_maximum { + my ($self, $maximum) = @_; + return $self->_clone if $self->{version} <= $maximum; + Carp::confess("illegal requirements: maximum below exact specification"); + } + + sub with_exclusion { + my ($self, $exclusion) = @_; + return $self->_clone unless $exclusion == $self->{version}; + Carp::confess("illegal requirements: excluded exact specification"); + } +} + +############################################################## + +{ + package + CPAN::Meta::Requirements::_Range::Range; + + sub _self { ref($_[0]) ? $_[0] : (bless { } => $_[0]) } + + sub _clone { + return (bless { } => $_[0]) unless ref $_[0]; + + my ($s) = @_; + my %guts = ( + (exists $s->{minimum} ? (minimum => version->new($s->{minimum})) : ()), + (exists $s->{maximum} ? (maximum => version->new($s->{maximum})) : ()), + + (exists $s->{exclusions} + ? (exclusions => [ map { version->new($_) } @{ $s->{exclusions} } ]) + : ()), + ); + + bless \%guts => ref($s); + } + + sub as_modifiers { + my ($self) = @_; + my @mods; + push @mods, [ add_minimum => $self->{minimum} ] if exists $self->{minimum}; + push @mods, [ add_maximum => $self->{maximum} ] if exists $self->{maximum}; + push @mods, map {; [ add_exclusion => $_ ] } @{$self->{exclusions} || []}; + return \@mods; + } + + sub as_string { + my ($self) = @_; + + return 0 if ! keys %$self; + + return "$self->{minimum}" if (keys %$self) == 1 and exists $self->{minimum}; + + my @exclusions = @{ $self->{exclusions} || [] }; + + my @parts; + + for my $pair ( + [ qw( >= > minimum ) ], + [ qw( <= < maximum ) ], + ) { + my ($op, $e_op, $k) = @$pair; + if (exists $self->{$k}) { + my @new_exclusions = grep { $_ != $self->{ $k } } @exclusions; + if (@new_exclusions == @exclusions) { + push @parts, "$op $self->{ $k }"; + } else { + push @parts, "$e_op $self->{ $k }"; + @exclusions = @new_exclusions; + } + } + } + + push @parts, map {; "!= $_" } @exclusions; + + return join q{, }, @parts; + } + + sub with_exact_version { + my ($self, $version) = @_; + $self = $self->_clone; + + Carp::confess("illegal requirements: exact specification outside of range") + unless $self->_accepts($version); + + return CPAN::Meta::Requirements::_Range::Exact->_new($version); + } + + sub _simplify { + my ($self) = @_; + + if (defined $self->{minimum} and defined $self->{maximum}) { + if ($self->{minimum} == $self->{maximum}) { + Carp::confess("illegal requirements: excluded all values") + if grep { $_ == $self->{minimum} } @{ $self->{exclusions} || [] }; + + return CPAN::Meta::Requirements::_Range::Exact->_new($self->{minimum}) + } + + Carp::confess("illegal requirements: minimum exceeds maximum") + if $self->{minimum} > $self->{maximum}; + } + + # eliminate irrelevant exclusions + if ($self->{exclusions}) { + my %seen; + @{ $self->{exclusions} } = grep { + (! defined $self->{minimum} or $_ >= $self->{minimum}) + and + (! defined $self->{maximum} or $_ <= $self->{maximum}) + and + ! $seen{$_}++ + } @{ $self->{exclusions} }; + } + + return $self; + } + + sub with_minimum { + my ($self, $minimum) = @_; + $self = $self->_clone; + + if (defined (my $old_min = $self->{minimum})) { + $self->{minimum} = (sort { $b cmp $a } ($minimum, $old_min))[0]; + } else { + $self->{minimum} = $minimum; + } + + return $self->_simplify; + } + + sub with_maximum { + my ($self, $maximum) = @_; + $self = $self->_clone; + + if (defined (my $old_max = $self->{maximum})) { + $self->{maximum} = (sort { $a cmp $b } ($maximum, $old_max))[0]; + } else { + $self->{maximum} = $maximum; + } + + return $self->_simplify; + } + + sub with_exclusion { + my ($self, $exclusion) = @_; + $self = $self->_clone; + + push @{ $self->{exclusions} ||= [] }, $exclusion; + + return $self->_simplify; + } + + sub _accepts { + my ($self, $version) = @_; + + return if defined $self->{minimum} and $version < $self->{minimum}; + return if defined $self->{maximum} and $version > $self->{maximum}; + return if defined $self->{exclusions} + and grep { $version == $_ } @{ $self->{exclusions} }; + + return 1; + } +} + +1; + +__END__ +=pod + +=head1 NAME + +CPAN::Meta::Requirements - a set of version requirements for a CPAN dist + +=head1 VERSION + +version 2.120630 + +=head1 SYNOPSIS + + use CPAN::Meta::Requirements; + + my $build_requires = CPAN::Meta::Requirements->new; + + $build_requires->add_minimum('Library::Foo' => 1.208); + + $build_requires->add_minimum('Library::Foo' => 2.602); + + $build_requires->add_minimum('Module::Bar' => 'v1.2.3'); + + $METAyml->{build_requires} = $build_requires->as_string_hash; + +=head1 DESCRIPTION + +A CPAN::Meta::Requirements object models a set of version constraints like +those specified in the F or F files in CPAN distributions. +It can be built up by adding more and more constraints, and it will reduce them +to the simplest representation. + +Logically impossible constraints will be identified immediately by thrown +exceptions. + +=head1 METHODS + +=head2 new + + my $req = CPAN::Meta::Requirements->new; + +This returns a new CPAN::Meta::Requirements object. It takes an optional +hash reference argument. The following keys are supported: + +=over 4 + +=item * + + -- if provided, when a version cannot be parsed into + +a version object, this code reference will be called with the invalid version +string as an argument. It must return a valid version object. + +=back + +All other keys are ignored. + +=head2 add_minimum + + $req->add_minimum( $module => $version ); + +This adds a new minimum version requirement. If the new requirement is +redundant to the existing specification, this has no effect. + +Minimum requirements are inclusive. C<$version> is required, along with any +greater version number. + +This method returns the requirements object. + +=head2 add_maximum + + $req->add_maximum( $module => $version ); + +This adds a new maximum version requirement. If the new requirement is +redundant to the existing specification, this has no effect. + +Maximum requirements are inclusive. No version strictly greater than the given +version is allowed. + +This method returns the requirements object. + +=head2 add_exclusion + + $req->add_exclusion( $module => $version ); + +This adds a new excluded version. For example, you might use these three +method calls: + + $req->add_minimum( $module => '1.00' ); + $req->add_maximum( $module => '1.82' ); + + $req->add_exclusion( $module => '1.75' ); + +Any version between 1.00 and 1.82 inclusive would be acceptable, except for +1.75. + +This method returns the requirements object. + +=head2 exact_version + + $req->exact_version( $module => $version ); + +This sets the version required for the given module to I the given +version. No other version would be considered acceptable. + +This method returns the requirements object. + +=head2 add_requirements + + $req->add_requirements( $another_req_object ); + +This method adds all the requirements in the given CPAN::Meta::Requirements object +to the requirements object on which it was called. If there are any conflicts, +an exception is thrown. + +This method returns the requirements object. + +=head2 accepts_module + + my $bool = $req->accepts_modules($module => $version); + +Given an module and version, this method returns true if the version +specification for the module accepts the provided version. In other words, +given: + + Module => '>= 1.00, < 2.00' + +We will accept 1.00 and 1.75 but not 0.50 or 2.00. + +For modules that do not appear in the requirements, this method will return +true. + +=head2 clear_requirement + + $req->clear_requirement( $module ); + +This removes the requirement for a given module from the object. + +This method returns the requirements object. + +=head2 required_modules + +This method returns a list of all the modules for which requirements have been +specified. + +=head2 clone + + $req->clone; + +This method returns a clone of the invocant. The clone and the original object +can then be changed independent of one another. + +=head2 is_simple + +This method returns true if and only if all requirements are inclusive minimums +-- that is, if their string expression is just the version number. + +=head2 is_finalized + +This method returns true if the requirements have been finalized by having the +C method called on them. + +=head2 finalize + +This method marks the requirements finalized. Subsequent attempts to change +the requirements will be fatal, I they would result in a change. If they +would not alter the requirements, they have no effect. + +If a finalized set of requirements is cloned, the cloned requirements are not +also finalized. + +=head2 as_string_hash + +This returns a reference to a hash describing the requirements using the +strings in the F specification. + +For example after the following program: + + my $req = CPAN::Meta::Requirements->new; + + $req->add_minimum('CPAN::Meta::Requirements' => 0.102); + + $req->add_minimum('Library::Foo' => 1.208); + + $req->add_maximum('Library::Foo' => 2.602); + + $req->add_minimum('Module::Bar' => 'v1.2.3'); + + $req->add_exclusion('Module::Bar' => 'v1.2.8'); + + $req->exact_version('Xyzzy' => '6.01'); + + my $hashref = $req->as_string_hash; + +C<$hashref> would contain: + + { + 'CPAN::Meta::Requirements' => '0.102', + 'Library::Foo' => '>= 1.208, <= 2.206', + 'Module::Bar' => '>= v1.2.3, != v1.2.8', + 'Xyzzy' => '== 6.01', + } + +=head2 add_string_requirement + + $req->add_string_requirement('Library::Foo' => '>= 1.208, <= 2.206'); + +This method parses the passed in string and adds the appropriate requirement +for the given module. It understands version ranges as described in the +L. For example: + +=over 4 + +=item 1.3 + +=item >= 1.3 + +=item <= 1.3 + +=item == 1.3 + +=item ! 1.3 + +=item > 1.3 + +=item < 1.3 + +=item >= 1.3, ! 1.5, <= 2.0 + +A version number without an operator is equivalent to specifying a minimum +(C=>). Extra whitespace is allowed. + +=back + +=head2 from_string_hash + + my $req = CPAN::Meta::Requirements->from_string_hash( \%hash ); + +This is an alternate constructor for a CPAN::Meta::Requirements object. It takes +a hash of module names and version requirement strings and returns a new +CPAN::Meta::Requirements object. + +=head1 AUTHORS + +=over 4 + +=item * + +David Golden + +=item * + +Ricardo Signes + +=back + +=head1 COPYRIGHT AND LICENSE + +This software is copyright (c) 2010 by David Golden and Ricardo Signes. + +This is free software; you can redistribute it and/or modify it under +the same terms as the Perl 5 programming language system itself. + +=cut + diff --git a/Master/tlpkg/tlperl/lib/CPAN/Meta/Spec.pm b/Master/tlpkg/tlperl/lib/CPAN/Meta/Spec.pm index 8f94c718cb4..07d32246411 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Meta/Spec.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Meta/Spec.pm @@ -3,12 +3,12 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Spec; -BEGIN { - $CPAN::Meta::Spec::VERSION = '2.110440'; -} -# ABSTRACT: specification for CPAN distribution metadata +our $VERSION = '2.120630'; # VERSION + 1; +# ABSTRACT: specification for CPAN distribution metadata + __END__ @@ -20,7 +20,7 @@ CPAN::Meta::Spec - specification for CPAN distribution metadata =head1 VERSION -version 2.110440 +version 2.120630 =head1 SYNOPSIS @@ -31,6 +31,7 @@ version 2.110440 . "building, testing, and installing Perl modules. " . "It is meant to ... blah blah blah ...", version => '0.36', + release_status => 'stable', author => [ 'Ken Williams ', 'Module-Build List ', # additional contact @@ -505,12 +506,12 @@ Valid subkeys are as follows: =item file A I of relative paths to files. Paths B specified with -unix convetions. +unix conventions. =item directory A I of relative paths to directories. Paths B specified -with unix convetions. +with unix conventions. [ Note: previous editions of the spec had C instead of C ] @@ -565,13 +566,13 @@ This entry is required and has the same structure as that of the C> key. It provides a list of package requirements that must be satisfied for the feature to be supported or enabled. -There is one crucial restriction: the preqreqs of an optional feature +There is one crucial restriction: the prereqs of an optional feature B include C phase prereqs. =back Consumers B include optional features as prerequisites without -explict instruction from users (whether via interactive prompting, +explicit instruction from users (whether via interactive prompting, a function parameter or a configuration value, etc. ). If an optional feature is used by a consumer to add additional @@ -663,8 +664,9 @@ the distribution. The values are Maps with the following valid subkeys: =item file -This field is required. The value must contain a relative file path -from the root of the distribution to the module containing the package. +This field is required. The value must contain a Unix-style relative +file path from the root of the distribution to the module containing the +package. =item version @@ -680,12 +682,12 @@ Example: license => [ 'http://dev.perl.org/licenses/' ], homepage => 'http://sourceforge.net/projects/module-build', bugtracker => { - web => 'http://github.com/dagolden/cpan-meta-spec/issues', + web => 'http://rt.cpan.org/Public/Dist/Display.html?Name=CPAN-Meta', mailto => 'meta-bugs@example.com', }, repository => { - url => 'git://github.com/dagolden/cpan-meta-spec.git', - web => 'http://github.com/dagolden/cpan-meta-spec', + url => 'git://github.com/dagolden/cpan-meta.git', + web => 'http://github.com/dagolden/cpan-meta', type => 'git', }, x_twitter => 'http://twitter.com/cpan_linked/', @@ -1027,10 +1029,10 @@ if both are found. =head2 Extracting Version Numbers from Perl Modules To get the version number from a Perl module, consumers should use the -C<< MM->parse_version($file) >> method provided by L or -the L module provided with L. For -example, for the module given by C<$mod>, the version may be retrieved in one -of the following ways: +C<< MM->parse_version($file) >> method provided by +L or L. For example, for the +module given by C<$mod>, the version may be retrieved in one of the +following ways: # via ExtUtils::MakeMaker my $file = MM->_installed_file_for_module($mod); @@ -1039,14 +1041,14 @@ of the following ways: The private C<_installed_file_for_module> method may be replaced with other methods for locating a module in C<@INC>. - # via Module::Build - my $info = Module::Build::ModuleInfo->new_from_module($mod); + # via Module::Metadata + my $info = Module::Metadata->new_from_module($mod); my $version = $info->version; If only a filename is available, the following approach may be used: # via Module::Build - my $info = Module::Build::ModuleInfo->new_from_file($file); + my $info = Module::Metadata->new_from_file($file); my $version = $info->version; =head2 Comparing Version Numbers diff --git a/Master/tlpkg/tlperl/lib/CPAN/Meta/Validator.pm b/Master/tlpkg/tlperl/lib/CPAN/Meta/Validator.pm index a203621ab8f..1bb53592275 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Meta/Validator.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Meta/Validator.pm @@ -2,10 +2,7 @@ use 5.006; use strict; use warnings; package CPAN::Meta::Validator; -BEGIN { - $CPAN::Meta::Validator::VERSION = '2.110440'; -} -# ABSTRACT: validate CPAN distribution metadata structures +our $VERSION = '2.120630'; # VERSION #--------------------------------------------------------------------------# @@ -692,7 +689,7 @@ my %v1_licenses = ( 'apache' => 'http://apache.org/licenses/LICENSE-2.0', 'artistic' => 'http://opensource.org/licenses/artistic-license.php', 'artistic_2' => 'http://opensource.org/licenses/artistic-license-2.0.php', - 'lgpl' => 'http://www.opensource.org/licenses/lgpl-license.phpt', + 'lgpl' => 'http://www.opensource.org/licenses/lgpl-license.php', 'bsd' => 'http://www.opensource.org/licenses/bsd-license.php', 'gpl' => 'http://www.opensource.org/licenses/gpl-license.php', 'mit' => 'http://opensource.org/licenses/mit-license.php', @@ -829,6 +826,8 @@ sub _error { 1; +# ABSTRACT: validate CPAN distribution metadata structures + =pod @@ -839,7 +838,7 @@ CPAN::Meta::Validator - validate CPAN distribution metadata structures =head1 VERSION -version 2.110440 +version 2.120630 =head1 SYNOPSIS @@ -881,87 +880,143 @@ is valid. Returns a list of errors seen during validation. -=begin internals +=begin :internals =head2 Check Methods =over -=item * check_map($spec,$data) +=item * + +check_map($spec,$data) Checks whether a map (or hash) part of the data structure conforms to the appropriate specification definition. -=item * check_list($spec,$data) + +=item * + +check_list($spec,$data) Checks whether a list (or array) part of the data structure conforms to the appropriate specification definition. -=item * check_lazylist($spec,$data) + +=item * + +check_lazylist($spec,$data) Checks whether a list conforms, but converts strings to a single-element list + =back =head2 Validator Methods =over -=item * header($self,$key,$value) +=item * + +header($self,$key,$value) Validates that the header is valid. -Note: No longer used as we now read the data structure, not the file.=item * url($self,$key,$value) +Note: No longer used as we now read the data structure, not the file. + +=item * + +url($self,$key,$value) Validates that a given value is in an acceptable URL format -=item * urlspec($self,$key,$value) + +=item * + +urlspec($self,$key,$value) Validates that the URL to a META specification is a known one. -=item * string_or_undef($self,$key,$value) + +=item * + +string_or_undef($self,$key,$value) Validates that the value is either a string or an undef value. Bit of a catchall function for parts of the data structure that are completely user defined. -=item * string($self,$key,$value) + +=item * + +string($self,$key,$value) Validates that a string exists for the given key. -=item * file($self,$key,$value) + +=item * + +file($self,$key,$value) Validate that a file is passed for the given key. This may be made more thorough in the future. For now it acts like \&string. -=item * exversion($self,$key,$value) + +=item * + +exversion($self,$key,$value) Validates a list of versions, e.g. '<= 5, >=2, ==3, !=4, >1, <6, 0'. -=item * version($self,$key,$value) + +=item * + +version($self,$key,$value) Validates a single version string. Versions of the type '5.8.8' and '0.00_00' are both valid. A leading 'v' like 'v1.2.3' is also valid. -=item * boolean($self,$key,$value) + +=item * + +boolean($self,$key,$value) Validates for a boolean value. Currently these values are '1', '0', 'true', 'false', however the latter 2 may be removed. -=item * license($self,$key,$value) + +=item * + +license($self,$key,$value) Validates that a value is given for the license. Returns 1 if an known license type, or 2 if a value is given but the license type is not a recommended one. -=item * custom_1($self,$key,$value) + +=item * + +custom_1($self,$key,$value) Validates that the given key is in CamelCase, to indicate a user defined keyword and only has characters in the class [-_a-zA-Z]. In version 1.X of the spec, this was only explicitly stated for 'resources'. -=item * custom_2($self,$key,$value) + +=item * + +custom_2($self,$key,$value) Validates that the given key begins with 'x_' or 'X_', to indicate a user defined keyword and only has characters in the class [-_a-zA-Z] -=item * identifier($self,$key,$value) + +=item * + +identifier($self,$key,$value) Validates that key is in an acceptable format for the META specification, for an identifier, i.e. any that matches the regular expression qr/[a-z][a-z_]/i. -=item * module($self,$key,$value) + +=item * + +module($self,$key,$value) Validates that a given key is in an acceptable module name format, e.g. 'Test::CPAN::Meta::Version'. + =back -=end internals +=end :internals + +=for Pod::Coverage anything boolean check_lazylist check_list custom_1 custom_2 exversion file +identifier license module phase relation release_status string string_or_undef +url urlspec version header check_map =head1 BUGS diff --git a/Master/tlpkg/tlperl/lib/CPAN/Meta/YAML.pm b/Master/tlpkg/tlperl/lib/CPAN/Meta/YAML.pm index 2e94a180840..ba8a702f74d 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Meta/YAML.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Meta/YAML.pm @@ -1,6 +1,6 @@ package CPAN::Meta::YAML; -BEGIN { - $CPAN::Meta::YAML::VERSION = '0.003'; +{ + $CPAN::Meta::YAML::VERSION = '0.007'; } use strict; @@ -459,7 +459,7 @@ sub _write_scalar { $string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g; return qq|"$string"|; } - if ( $string =~ /(?:^\W|\s)/ or $QUOTE{$string} ) { + if ( $string =~ /(?:^\W|\s|:\z)/ or $QUOTE{$string} ) { return "'$string'"; } return $string; @@ -610,12 +610,13 @@ sub LoadFile { # Use Scalar::Util if possible, otherwise emulate it BEGIN { + local $@; eval { require Scalar::Util; - *refaddr = *Scalar::Util::refaddr; }; - eval <<'END_PERL' if $@; -# Failed to load Scalar::Util + if ( $@ or $Scalar::Util::VERSION < 1.18 ) { + eval <<'END_PERL' if $@; +# Scalar::Util failed to load or too old sub refaddr { my $pkg = ref($_[0]) or return undef; if ( !! UNIVERSAL::can($_[0], 'can') ) { @@ -629,7 +630,9 @@ sub refaddr { $i; } END_PERL - + } else { + *refaddr = *Scalar::Util::refaddr; + } } 1; @@ -644,26 +647,26 @@ CPAN::Meta::YAML - Read and write a subset of YAML for CPAN Meta files =head1 VERSION -version 0.003 +version 0.007 =head1 SYNOPSIS use CPAN::Meta::YAML; - # methods for files - $yaml = CPAN::Meta::YAML->read('META.yml'); - $yaml->write('MYMETA.yml'); - - # methods for strings - $yaml_text = $yaml->write_string; - $yaml = CPAN::Meta::YAML->read_string($yaml_text); + # reading a META file + open $fh, "<:utf8", "META.yml"; + $yaml_text = do { local $/; <$fh> }; + $yaml = CPAN::Meta::YAML->read_string($yaml_text) + or die CPAN::Meta::YAML->errstr; # finding the metadata - my $meta = $yaml->[0]; + $meta = $yaml->[0]; - # handling errors - $yaml->write($file) + # writing a META file + $yaml_text = $yaml->write_string or die CPAN::Meta::YAML->errstr; + open $fh, ">:utf8", "META.yml"; + print $fh $yaml_text; =head1 DESCRIPTION @@ -671,6 +674,10 @@ This module implements a subset of the YAML specification for use in reading and writing CPAN metadata files like F and F. It should not be used for any other general YAML parsing or generation task. +NOTE: F (and F) files should be UTF-8 encoded. Users are +responsible for proper encoding and decoding. In particular, the C and +C methods do B support UTF-8 and should not be used. + =head1 SUPPORT This module is currently derived from L by Adam Kennedy. If @@ -682,6 +689,25 @@ L L, L, L +=for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders + +=head1 SUPPORT + +=head2 Bugs / Feature Requests + +Please report any bugs or feature requests through the issue tracker +at L. +You will be notified automatically of any progress on your issue. + +=head2 Source Code + +This is open source software. The code repository is available for +public review and contribution under the terms of the license. + +L + + git clone https://github.com/dagolden/cpan-meta-yaml.git + =head1 AUTHORS =over 4 diff --git a/Master/tlpkg/tlperl/lib/CPAN/Mirrors.pm b/Master/tlpkg/tlperl/lib/CPAN/Mirrors.pm index 3582b0acb4c..daafc1dbaf1 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Mirrors.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Mirrors.pm @@ -1,5 +1,37 @@ # -*- Mode: cperl; coding: utf-8; cperl-indent-level: 4 -*- # vim: ts=4 sts=4 sw=4: +=head1 NAME + +CPAN::Mirrors - Get CPAN miror information and select a fast one + +=head1 SYNOPSIS + + use CPAN::Mirrors; + + my $mirrors = CPAN::Mirrors->new; + $mirrors->parse_from_file( $mirrored_by_file ); + + my $seen = {}; + + my $best_continent = $mirrors->find_best_continents( { seen => $seen } ); + my @mirrors = $mirrors->get_mirrors_by_continents( $best_continent ); + + my $callback = sub { + my( $m ) = @_; + printf "%s = %s\n", $m->hostname, $m->rtt + }; + $mirrors->get_mirrors_timings( \@mirrors, $seen, $callback ); + + @mirrors = sort { $a->rtt <=> $b->rtt } @mirrors; + + print "Best mirrors are ", map( { $_->rtt } @mirrors[0..3] ), "\n"; + +=head1 DESCRIPTION + +=over + +=cut + package CPAN::Mirrors; use strict; use vars qw($VERSION $urllist $silent); @@ -10,31 +42,55 @@ use FileHandle; use Fcntl ":flock"; use Net::Ping (); +=item new( LOCAL_FILE_NAME ) + +=cut + sub new { my ($class, $file) = @_; - my $self = bless { - mirrors => [], - geography => {}, + my $self = bless { + mirrors => [], + geography => {}, }, $class; + if( defined $file ) { + $self->parse_mirrored_by( $file ); + } + + return $self +} + +sub parse_mirrored_by { + my ($self, $file) = @_; my $handle = FileHandle->new; - $handle->open($file) + $handle->open($file) or croak "Couldn't open $file: $!"; flock $handle, LOCK_SH; $self->_parse($file,$handle); flock $handle, LOCK_UN; $handle->close; +} - # populate continents & countries +=item continents() - return $self -} +Return a list of continents based on those defined in F. + +=cut sub continents { my ($self) = @_; return keys %{$self->{geography}}; } +=item countries( [CONTINENTS] ) + +Return a list of countries based on those defined in F. +It only returns countries for the continents you specify (as defined +in C). If you don't specify any continents, it returns all +of the countries listed in F. + +=cut + sub countries { my ($self, @continents) = @_; @continents = $self->continents unless @continents; @@ -45,6 +101,15 @@ sub countries { return @countries; } +=item mirrors( [COUNTRIES] ) + +Return a list of mirrors based on those defined in F. +It only returns mirrors for the countries you specify (as defined +in C). If you don't specify any countries, it returns all +of the mirrors listed in F. + +=cut + sub mirrors { my ($self, @countries) = @_; return @{$self->{mirrors}} unless @countries; @@ -56,118 +121,300 @@ sub mirrors { return @found; } +=item get_mirrors_by_countries( [COUNTRIES] ) + +A more sensible synonym for mirrors. + +=cut + +sub get_mirrors_by_countries { &mirrors } + +=item get_mirrors_by_continents( [CONTINENTS] ) + +Return a list of mirrors for all of continents you specify. If you don't +specify any continents, it returns all of the mirrors. + +=cut + +sub get_mirrors_by_continents { + my ($self, $continents ) = @_; + + $self->mirrors( $self->get_countries_by_continents( @$continents ) ); + } + +=item get_countries_by_continents( [CONTINENTS] ) + +A more sensible synonym for countries. + +=cut +sub get_countries_by_continents { &countries } + +=item best_mirrors + +C checks for the best mirrors based on the list of +continents you pass, or, without that, all continents, as defined +by C. It pings each mirror, up to the value of +C. In list context, it returns up to C mirror. +In scalar context, it returns the single best mirror. + +Arguments + + how_many - the number of mirrors to return. Default: 1 + callback - a callback for find_best_continents + verbose - true or false on all the whining and moaning. Default: false + continents - an array ref of the continents to check + +If you don't specify the continents, C calls +C to get the list of continents to check. + +=cut + sub best_mirrors { my ($self, %args) = @_; - my $how_many = $args{how_many} || 1; - my $callback = $args{callback}; - my $verbose = $args{verbose}; - my $conts = $args{continents} || []; - $conts = [$conts] unless ref $conts; + my $how_many = $args{how_many} || 1; + my $callback = $args{callback}; + my $verbose = defined $args{verbose} ? $args{verbose} : 0; + my $continents = $args{continents} || []; + $continents = [$continents] unless ref $continents; # Old Net::Ping did not do timings at all return "http://www.cpan.org/" unless Net::Ping->VERSION gt '2.13'; my $seen = {}; - if ( ! @$conts ) { + if ( ! @$continents ) { print "Searching for the best continent ...\n" if $verbose; - my @best = $self->_find_best_continent($seen, $verbose, $callback); + my @best_continents = $self->find_best_continents( + seen => $seen, + verbose => $verbose, + callback => $callback, + ); # Only add enough continents to find enough mirrors my $count = 0; - for my $c ( @best ) { - push @$conts, $c; - $count += $self->mirrors( $self->countries($c) ); + for my $continent ( @best_continents ) { + push @$continents, $continent; + $count += $self->mirrors( $self->countries($continent) ); last if $count >= $how_many; } } - print "Scanning " . join(", ", @$conts) . " ...\n" if $verbose; + print "Scanning " . join(", ", @$continents) . " ...\n" if $verbose; + + my $trial_mirrors = $self->get_n_random_mirrors_by_continents( 3 * $how_many, $continents->[0] ); + + my $timings = $self->get_mirrors_timings( $trial_mirrors, $seen, $callback ); + return [] unless @$timings; + + $how_many = @$timings if $how_many > @$timings; + + return wantarray ? @{$timings}[0 .. $how_many-1] : $timings->[0]; +} + +=item get_n_random_mirrors_by_continents( N, [CONTINENTS] + +Returns up to N random mirrors for the specified continents. Specify the +continents as an array reference. + +=cut + +sub get_n_random_mirrors_by_continents { + my( $self, $n, $continents ) = @_; + $n ||= 3; + $continents = [ $continents ] unless ref $continents; - my @timings; - my @long_list = $self->mirrors($self->countries(@$conts)); - my $long_list_size = ( $how_many > 10 ? $how_many : 10 ); - if ( @long_list > $long_list_size ) { - @long_list = map {$_->[0]} - sort {$a->[1] <=> $b->[1]} - map {[$_, rand]} @long_list; - splice @long_list, $long_list_size; # truncate + if ( $n <= 0 ) { + return wantarray ? () : []; } - for my $m ( @long_list ) { - next unless $m->http; - my $hostname = $m->hostname; - if ( $seen->{$hostname} ) { - push @timings, $seen->{$hostname} - if defined $seen->{$hostname}[1]; + my @long_list = $self->get_mirrors_by_continents( $continents ); + + if ( $n eq '*' or $n > @long_list ) { + return wantarray ? @long_list : \@long_list; + } + + @long_list = map {$_->[0]} + sort {$a->[1] <=> $b->[1]} + map {[$_, rand]} @long_list; + + splice @long_list, $n; # truncate + + \@long_list; +} + +=item get_mirrors_timings( MIRROR_LIST, SEEN, CALLBACK ); + +Pings the listed mirrors and returns a list of mirrors sorted +in ascending ping times. + +=cut + +sub get_mirrors_timings { + my( $self, $mirror_list, $seen, $callback ) = @_; + + $seen = {} unless defined $seen; + croak "The mirror list argument must be an array reference" + unless ref $mirror_list eq ref []; + croak "The seen argument must be a hash reference" + unless ref $seen eq ref {}; + croak "callback must be a subroutine" + if( defined $callback and ref $callback ne ref sub {} ); + + my $timings = []; + for my $m ( @$mirror_list ) { + $seen->{$m->hostname} = $m; + next unless eval{ $m->http }; + + if( $self->_try_a_ping( $seen, $m, ) ) { + my $ping = $m->ping; + next unless defined $ping; + push @$timings, $m; + $callback->( $m ) if $callback; } else { - my $ping = $m->ping; - next unless defined $ping; - push @timings, [$m, $ping]; - $callback->($m,$ping) if $callback; + push @$timings, $seen->{$m->hostname} + if defined $seen->{$m->hostname}->rtt; } } - return unless @timings; - - $how_many = @timings if $how_many > @timings; - my @best = - map { $_->[0] } - sort { $a->[1] <=> $b->[1] } @timings; - return wantarray ? @best[0 .. $how_many-1] : $best[0]; + my @best = sort { + if( defined $a->rtt and defined $b->rtt ) { + $a->rtt <=> $b->rtt + } + elsif( defined $a->rtt and ! defined $b->rtt ) { + return -1; + } + elsif( ! defined $a->rtt and defined $b->rtt ) { + return 1; + } + elsif( ! defined $a->rtt and ! defined $b->rtt ) { + return 0; + } + + } @$timings; + + return wantarray ? @best : \@best; } -sub _find_best_continent { - my ($self, $seen, $verbose, $callback) = @_; +=item find_best_continents( HASH_REF ); + +C goes through each continent and pings C random +mirrors on that continent. It then orders the continents by ascending +median ping time. In list context, it returns the ordered list of +continent. In scalar context, it returns the same list as an anonymous +array. + +Arguments: + + n - the number of hosts to ping for each continent. Default: 3 + seen - a hashref of cached hostname ping times + verbose - true or false for noisy or quiet. Default: false + callback - a subroutine to run after each ping. + ping_cache_limit - how long, in seconds, to reuse previous ping times. + Default: 1 day + +The C hash has hostnames as keys and anonymous arrays as values. The +anonymous array is a triplet of a C object, a ping +time, and the epoch time for the measurement. + +The callback subroutine gets the C object, the ping +time, and measurement time (the same things in the C hashref) as arguments. +C doesn't care what the callback does and ignores the return +value. - my %median; +=cut + +sub find_best_continents { + my ($self, %args) = @_; + + $args{n} ||= 3; + $args{verbose} = 0 unless defined $args{verbose}; + $args{seen} = {} unless defined $args{seen}; + croak "The seen argument must be a hash reference" + unless ref $args{seen} eq ref {}; + $args{ping_cache_limit} = 24 * 60 * 60 + unless defined $args{ping_cache_time}; + croak "callback must be a subroutine" + if( defined $args{callback} and ref $args{callback} ne ref sub {} ); + + my %medians; CONT: for my $c ( $self->continents ) { + print "Testing $c\n" if $args{verbose}; my @mirrors = $self->mirrors( $self->countries($c) ); + next CONT unless @mirrors; - my $sample = 3; - my $n = (@mirrors < $sample) ? @mirrors : $sample; + my $n = (@mirrors < $args{n}) ? @mirrors : $args{n}; + my @tests; - RANDOM: while ( @mirrors && @tests < $n ) { + my $tries = 0; + RANDOM: while ( @mirrors && @tests < $n && $tries++ < 15 ) { my $m = splice( @mirrors, int(rand(@mirrors)), 1 ); - my $ping = $m->ping; - $callback->($m,$ping) if $callback; - # record undef so we don't try again - $seen->{$m->hostname} = [$m, $ping]; - next RANDOM unless defined $ping; - push @tests, $ping; - } - next CONT unless @tests; - @tests = sort { $a <=> $b } @tests; - if ( @tests == 1 ) { - $median{$c} = $tests[0]; - } - elsif ( @tests % 2 ) { - $median{$c} = $tests[ int(@tests / 2) ]; - } - else { - my $mid_high = int(@tests/2); - $median{$c} = ($tests[$mid_high-1] + $tests[$mid_high])/2; + if( $self->_try_a_ping( $args{seen}, $m, $args{ping_cache_limit} ) ) { + $self->get_mirrors_timings( [ $m ], @args{qw(seen callback)} ); + next RANDOM unless defined $args{seen}{$m->hostname}->rtt; + } + printf "\t%s -> %0.2f ms\n", + $m->hostname, + join ' ', 1000 * $args{seen}{$m->hostname}->rtt + if $args{verbose}; + + push @tests, $args{seen}{$m->hostname}->rtt; } + + my $median = $self->_get_median_ping_time( \@tests, $args{verbose} ); + $medians{$c} = $median if defined $median; } - my @best_cont = sort { $median{$a} <=> $median{$b} } keys %median ; + my @best_cont = sort { $medians{$a} <=> $medians{$b} } keys %medians; - if ( $verbose ) { + if ( $args{verbose} ) { print "Median result by continent:\n"; for my $c ( @best_cont ) { - printf( " %d ms %s\n", int($median{$c}*1000+.5), $c ); + printf( " %4d ms %s\n", int($medians{$c}*1000+.5), $c ); } } return wantarray ? @best_cont : $best_cont[0]; } +# retry if +sub _try_a_ping { + my ($self, $seen, $mirror, $ping_cache_limit ) = @_; + + ( ! exists $seen->{$mirror->hostname} ) + or + ( + ! defined $seen->{$mirror->hostname}->rtt + or + time - $seen->{$mirror->hostname}->rtt > $ping_cache_limit + ) +} + +sub _get_median_ping_time { + my ($self, $tests, $verbose ) = @_; + + my @sorted = sort { $a <=> $b } @$tests; + + my $median = do { + if ( @sorted == 0 ) { undef } + elsif ( @sorted == 1 ) { $sorted[0] } + elsif ( @sorted % 2 ) { $sorted[ int(@sorted / 2) ] } + else { + my $mid_high = int(@sorted/2); + ($sorted[$mid_high-1] + $sorted[$mid_high])/2; + } + }; + + printf "\t-->median time: %0.2f ms\n", $median * 1000 if $verbose; + + return $median; +} + # Adapted from Parse::CPAN::MirroredBy by Adam Kennedy sub _parse { my ($self, $file, $handle) = @_; my $output = $self->{mirrors}; - my $geo = $self->{geography}; + my $geo = $self->{geography}; local $/ = "\012"; my $line = 0; @@ -193,7 +440,7 @@ sub _parse { $mirror ||= {}; if ( $prop eq 'dst_location' ) { my (@location,$continent,$country); - @location = (split /\s*,\s*/, $value) + @location = (split /\s*,\s*/, $value) and ($continent, $country) = @location[-1,-2]; $continent =~ s/\s\(.*//; $continent =~ s/\W+$//; # if Jarkko doesn't know latitude/longitude @@ -244,35 +491,61 @@ sub new { $arg ||= {}; bless $arg, $self; } -sub hostname { shift->{hostname} } -sub continent { shift->{continent} } -sub country { shift->{country} } -sub http { shift->{http} || '' } -sub ftp { shift->{ftp} || '' } -sub rsync { shift->{rsync} || '' } - -sub url { +sub hostname { shift->{hostname} } +sub continent { shift->{continent} } +sub country { shift->{country} } +sub http { shift->{http} || '' } +sub ftp { shift->{ftp} || '' } +sub rsync { shift->{rsync} || '' } +sub rtt { shift->{rtt} } +sub ping_time { shift->{ping_time} } + +sub url { my $self = shift; return $self->{http} || $self->{ftp}; } sub ping { my $self = shift; + my $ping = Net::Ping->new("tcp",1); my ($proto) = $self->url =~ m{^([^:]+)}; my $port = $proto eq 'http' ? 80 : 21; return unless $port; - if ( $ping->can('port_number') ) { - $ping->port_number($port); + + if ( $ping->can('port_number') ) { + $ping->port_number($port); } else { $ping->{'port_num'} = $port; } + $ping->hires(1) if $ping->can('hires'); my ($alive,$rtt) = $ping->ping($self->hostname); - return $alive ? $rtt : undef; + + $self->{rtt} = $alive ? $rtt : undef; + $self->{ping_time} = time; + + $self->rtt; } 1; +=back + +=head1 AUTHOR + +Andreas Koenig C<< >>, David Golden C<< >>, +brian d foy C<< >> + +=head1 LICENSE + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +See L + + + +=cut diff --git a/Master/tlpkg/tlperl/lib/CPAN/Shell.pm b/Master/tlpkg/tlperl/lib/CPAN/Shell.pm index 9effb0d2e70..21441df653f 100644 --- a/Master/tlpkg/tlperl/lib/CPAN/Shell.pm +++ b/Master/tlpkg/tlperl/lib/CPAN/Shell.pm @@ -653,7 +653,7 @@ sub mkmyconfig { "CPAN::MyConfig already exists as $configpm.\n" . "Running configuration again...\n" ); - require CPAN::FirstTime; + require CPAN::FirstTime; CPAN::FirstTime::init($configpm); } else { @@ -1221,6 +1221,7 @@ sub autobundle { $fh->close; $CPAN::Frontend->myprint("\nWrote bundle file $to\n\n"); + return $to; } #-> sub CPAN::Shell::expandany ; @@ -1684,7 +1685,7 @@ sub rematein { if ($meth =~ /^($needs_recursion_protection)$/) { # it would be silly to check for recursion for look or dump # (we are in CPAN::Shell::rematein) - CPAN->debug("Going to test against recursion") if $CPAN::DEBUG; + CPAN->debug("Testing against recursion") if $CPAN::DEBUG; eval { $obj->color_cmd_tmps(0,1); }; if ($@) { if (ref $@ @@ -1847,7 +1848,7 @@ sub recent { my($self) = @_; if ($CPAN::META->has_inst("XML::LibXML")) { my $url = $CPAN::Defaultrecent; - $CPAN::Frontend->myprint("Going to fetch '$url'\n"); + $CPAN::Frontend->myprint("Fetching '$url'\n"); unless ($CPAN::META->has_usable("LWP")) { $CPAN::Frontend->mydie("LWP not installed; cannot continue"); } @@ -1935,7 +1936,7 @@ sub smoke { my $distros = $self->recent; DISTRO: for my $distro (@$distros) { next if $distro =~ m|/Bundle-|; # XXX crude heuristic to skip bundles - $CPAN::Frontend->myprint(sprintf "Going to download and test '$distro'\n"); + $CPAN::Frontend->myprint(sprintf "Downloading and testing '$distro'\n"); { my $skip = 0; local $SIG{INT} = sub { $skip = 1 }; diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS.pm b/Master/tlpkg/tlperl/lib/CPANPLUS.pm index b0122572651..e1fc6ef8ad3 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS.pm @@ -13,7 +13,7 @@ BEGIN { use vars qw( @EXPORT @ISA $VERSION ); @EXPORT = qw( shell fetch get install ); @ISA = qw( Exporter ); - $VERSION = "0.9103"; #have to hardcode or cpan.org gets unhappy + $VERSION = "0.9121"; #have to hardcode or cpan.org gets unhappy } ### purely for backward compatibility, so we can call it from the commandline: @@ -124,21 +124,21 @@ that use this API. =head2 GENERAL USAGE -This is the document you are currently reading. It describes -basic usage and background information. Its main purpose is to +This is the document you are currently reading. It describes +basic usage and background information. Its main purpose is to assist the user who wants to learn how to invoke CPANPLUS and install modules from the commandline and to point you to more indepth reading if required. =head2 API REFERENCE -The C API is meant to let you programmatically +The C API is meant to let you programmatically interact with the C mirrors. The documentation in L shows you how to create an object capable of interacting with those mirrors, letting you create & retrieve module objects. L shows you how you can use these module -objects to perform actions like installing and testing. +objects to perform actions like installing and testing. The default shell, documented in L is also scriptable. You can use its API to dispatch calls @@ -150,7 +150,7 @@ from your script to the CPANPLUS Shell. =head2 STARTING AN INTERACTIVE SHELL -You can start an interactive shell by running either of +You can start an interactive shell by running either of the two following commands: $ cpanp @@ -158,34 +158,34 @@ the two following commands: $ perl -MCPANPLUS -eshell All commands available are listed in the interactive shells -help menu. See C or L -for instructions on using the default shell. +help menu. See C or L +for instructions on using the default shell. =head2 CHOOSE A SHELL By running C without arguments, you will start up -the shell specified in your config, which defaults to +the shell specified in your config, which defaults to L. There are more shells available. -C itself ships with an emulation shell called -L that looks and feels just like +C itself ships with an emulation shell called +L that looks and feels just like the old C shell. You can start this shell by typing: $ perl -MCPANPLUS -e'shell Classic' -Even more shells may be available from C. +Even more shells may be available from C. Note that if you have changed your default shell in your -configuration, that shell will be used instead. If for -some reason there was an error with your specified shell, +configuration, that shell will be used instead. If for +some reason there was an error with your specified shell, you will be given the default shell. =head2 BUILDING PACKAGES -C is a commandline tool to convert any distribution +C is a commandline tool to convert any distribution from C into a package in the format of your choice, like -for example C<.deb> or C. +for example C<.deb> or C. See C for details. @@ -238,10 +238,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO @@ -256,7 +256,7 @@ L, L, L, L =item * Questions & suggestions: -I +I =back diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Backend.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Backend.pm index 43e73b7b1fe..bb11f473618 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Backend.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Backend.pm @@ -36,7 +36,7 @@ $ENV{'PERL5_CPANPLUS_IS_VERSION'} = __PACKAGE__->VERSION; =head1 NAME -CPANPLUS::Backend +CPANPLUS::Backend - programmer's interface to CPANPLUS =head1 SYNOPSIS @@ -66,7 +66,7 @@ When C is loaded, which is necessary for just about every operation, the environment variable C is set to the current process id. -Additionally, the environment variable C +Additionally, the environment variable C will be set to the version of C. This information might be useful somehow to spawned processes. @@ -134,13 +134,13 @@ sub module_tree { my @rv; for my $name ( grep { defined } @_) { - ### From John Malmberg: This is failing on VMS - ### because ODS-2 does not retain the case of + ### From John Malmberg: This is failing on VMS + ### because ODS-2 does not retain the case of ### filenames that are created. - ### The problem is the filename is being converted - ### to a module name and then looked up in the + ### The problem is the filename is being converted + ### to a module name and then looked up in the ### %$modtree hash. - ### + ### ### As a fix, we do a search on VMS instead -- ### more cpu cycles, but it gets around the case ### problem --kane @@ -152,7 +152,7 @@ sub module_tree { ) : $modtree->{$name} }; - + push @rv, $modobj || ''; } return @rv == 1 ? $rv[0] : @rv; @@ -397,7 +397,7 @@ for my $func (qw[fetch extract install readme files distributions]) { return CPANPLUS::Backend::RV->new( function => $func, - ok => !$flag, + ok => ( !$flag ? 1 : 0 ), rv => $href, args => \%hash, ); @@ -418,6 +418,8 @@ C; =item Text-Bastardize +=item Text/Bastardize.pm + =item Text-Bastardize-1.06 =item AYRNIEU/Text-Bastardize @@ -444,7 +446,7 @@ would give back a C object of that version. Even if the version on CPAN is currently higher. The last three are examples of PATH resolution. In the first, we supply -an absolute path to the unwrapped distribution. In the second the +an absolute path to the unwrapped distribution. In the second the distribution is relative to the current working directory. In the third, we will use the current working directory. @@ -483,7 +485,7 @@ sub parse_module { error(loc("Can not parse module string from reference '%1'", $mod )); return; } - + ### check only for allowed characters in a module name unless( $mod =~ /[^\w:]/ ) { @@ -516,17 +518,17 @@ sub parse_module { ); ### better guess for the version - $modobj->version( $modobj->package_version ) + $modobj->version( $modobj->package_version ) if defined $modobj->package_version; - + ### better guess at module name, if possible if ( my $pkgname = $modobj->package_name ) { $pkgname =~ s/-/::/g; - + ### no sense replacing it unless we changed something - $modobj->module( $pkgname ) + $modobj->module( $pkgname ) if ($pkgname ne $modobj->package_name) || $pkgname !~ /-/; - } + } $modobj->status->fetch( $parent ); $modobj->status->extract( $dir ); @@ -549,27 +551,37 @@ sub parse_module { UNKNOWN_DL_LOCATION ), author => CPANPLUS::Module::Author::Fake->new ); - + ### set the fetch_from accessor so we know to by pass the ### usual mirrors $modobj->status->_fetch_from( $mod ); - + ### better guess for the version - $modobj->version( $modobj->package_version ) + $modobj->version( $modobj->package_version ) if defined $modobj->package_version; - + ### better guess at module name, if possible if ( my $pkgname = $modobj->package_name ) { $pkgname =~ s/-/::/g; - + ### no sense replacing it unless we changed something - $modobj->module( $pkgname ) + $modobj->module( $pkgname ) if ($pkgname ne $modobj->package_name) || $pkgname !~ /-/; - } - - return $modobj; + } + + return $modobj; + } + + # Stolen from cpanminus to support 'Module/Install.pm' + # type input + if ( ( my $tmpmod = $mod ) =~ s/\.pm$//i ) { + my ($volume, $dirs, $file) = File::Spec->splitpath( $tmpmod ); + $tmpmod = join '::', grep { $_ } File::Spec->splitdir( $dirs ), $file; + ### perhaps we can find it in the module tree? + my $maybe = $self->module_tree( $tmpmod ); + return $maybe if IS_MODOBJ->( module => $maybe ); } - + ### perhaps we can find it's a third party module? { my $modobj = CPANPLUS::Module::Fake->new( module => $mod, @@ -582,7 +594,7 @@ sub parse_module { ); if( $modobj->is_third_party ) { my $info = $modobj->third_party_information; - + $modobj->author->author( $info->{author} ); $modobj->author->email( $info->{author_url} ); $modobj->description( $info->{url} ); @@ -595,30 +607,30 @@ sub parse_module { error( loc("%1 is not a proper distribution name!", $mod) ); return; } - + ### there's wonky uris out there, like this: ### E/EY/EYCK/Net/Lite/Net-Lite-FTP-0.091 ### compensate for that my $author; ### you probably have an A/AB/ABC/....../Dist.tgz type uri - if( (defined $parts[0] and length $parts[0] == 1) and + if( (defined $parts[0] and length $parts[0] == 1) and (defined $parts[1] and length $parts[1] == 2) and $parts[2] =~ /^$parts[0]/i and $parts[2] =~ /^$parts[1]/i - ) { + ) { splice @parts, 0, 2; # remove the first 2 entries from the list - $author = shift @parts; # this is the actual author name then + $author = shift @parts; # this is the actual author name then ### we''ll assume a ABC/..../Dist.tgz } else { $author = shift @parts || ''; } - my($pkg, $version, $ext, $full) = + my($pkg, $version, $ext, $full) = $self->_split_package_string( package => $dist ); - + ### translate a distribution into a module name ### - my $guess = $pkg; - $guess =~ s/-/::/g if $guess; + my $guess = $pkg; + $guess =~ s/-/::/g if $guess; my $maybe = $self->module_tree( $guess ); if( IS_MODOBJ->( module => $maybe ) ) { @@ -648,18 +660,18 @@ sub parse_module { } else { $auth_obj = $maybe->author; $path = $maybe->path; - } - + } + if( $maybe->package_name eq $pkg ) { - + my $modobj = CPANPLUS::Module::Fake->new( module => $maybe->module, version => $version, ### no extension? use the extension the original package ### had instead - package => do { $ext - ? $full - : $full .'.'. $maybe->package_extension + package => do { $ext + ? $full + : $full .'.'. $maybe->package_extension }, path => $path, author => $auth_obj, @@ -669,27 +681,27 @@ sub parse_module { ### you asked for a specific version? ### assume our $maybe is the one you wanted, - ### and fix up the version.. + ### and fix up the version.. } else { - + my $modobj = $maybe->clone; $modobj->version( $version ); - $modobj->package( - $maybe->package_name .'-'. - $version .'.'. - $maybe->package_extension + $modobj->package( + $maybe->package_name .'-'. + $version .'.'. + $maybe->package_extension ); - + ### you wanted a specific author, but it's not the one ### from the module tree? we'll fix it up if( $author and $author ne $modobj->author->cpanid ) { $modobj->author( $auth_obj ); $modobj->path( $path ); } - + return $modobj; } - + ### you didn't care about a version, so just return the object then } elsif ( !$version ) { return $maybe; @@ -734,7 +746,7 @@ sub parse_module { # This should catch edge-cases where the package name # is unrelated to the modules it contains. - my ($modobj) = grep { $_->package_name eq $mod } + my ($modobj) = grep { $_->package_name eq $mod } $self->search( type => 'package', allow => [ qr/^\Q$mod\E/ ], ); return $modobj if IS_MODOBJ->( module => $modobj ); @@ -829,7 +841,7 @@ modules they are in our @INC. =item * C This resets the cache of modules we've attempted to load, but failed. -This enables you to load them again after a failed load, if they +This enables you to load them again after a failed load, if they somehow have become available. =item * C @@ -904,7 +916,7 @@ The location where to create the local mirror. =item index_files Enable/disable fetching of index files. You can disable fetching of the -index files if you don't plan to use the local mirror as your primary +index files if you don't plan to use the local mirror as your primary site, or if you'd like up-to-date index files be fetched from elsewhere. Defaults to true. @@ -1014,7 +1026,7 @@ different or on a different machine by issuing the following commands: ### using the default shell: CPAN Terminal> i file://path/to/Snapshot_XXYY.pm - + ### using the API $modobj = $cb->parse_module( module => 'file://path/to/Snapshot_XXYY.pm' ); $modobj->install; @@ -1077,7 +1089,7 @@ sub autobundle { error( loc( "Could not open '%1' for writing: %2", $file, $! ) ); return; } - + ### make sure we load the module tree *before* doing this, as it ### starts to chdir all over the place $self->module_tree; @@ -1139,7 +1151,7 @@ EOF =head2 $bool = $cb->save_state Explicit command to save memory state to disk. This can be used to save -information to disk about where a module was extracted, the result of +information to disk about where a module was extracted, the result of C, etc. This will then be re-loaded into memory when a new session starts. @@ -1150,7 +1162,7 @@ source engine). The default storage engine supports this option. Most users will not need this command, but it can handy for automated systems like setting up CPAN smoke testers. -The method will return true if it managed to save the state to disk, +The method will return true if it managed to save the state to disk, or false if it did not. =cut @@ -1168,7 +1180,7 @@ sub save_state { =head1 CUSTOM MODULE SOURCES -Besides the sources as provided by the general C mirrors, it's +Besides the sources as provided by the general C mirrors, it's possible to add your own sources list to your C index. The methodology behind this works much like C. @@ -1195,13 +1207,13 @@ sub list_custom_sources { =head2 $local_index = $cb->add_custom_source( uri => URI, [verbose => BOOL] ); -Adds an C to your own sources list and mirrors its index. See the +Adds an C to your own sources list and mirrors its index. See the documentation on C<< $cb->update_custom_source >> on how this is done. Returns the full path to the local index on success, or false on failure. Note that when adding a new C, the change to the in-memory tree is -not saved until you rebuild or save the tree to disk again. You can do +not saved until you rebuild or save the tree to disk again. You can do this using the C<< $cb->reload_indices >> method. =cut @@ -1250,14 +1262,14 @@ users to index it. For details, see the C<< $cb->write_custom_source_index >> method below. All packages that are added via this mechanism will be attributed to the -author with C C. You can use this id to search for all +author with C C. You can use this id to search for all added packages. =cut sub update_custom_source { my $self = shift; - + ### if it mentions /remote/, the request is to update a single uri, ### not all the ones we have, so dispatch appropriately my $rv = grep( /remote/i, @_) @@ -1265,11 +1277,11 @@ sub update_custom_source { : $self->__update_custom_module_sources( @_ ); return $rv; -} +} =head2 $file = $cb->write_custom_source_index( path => /path/to/package/root, [to => /path/to/index/file, verbose => BOOL] ); -Writes the index for a custom repository root. Most users will not have to +Writes the index for a custom repository root. Most users will not have to worry about this, but administrators of a repository will need to make sure their indexes are up to date. @@ -1278,7 +1290,7 @@ root, which you can specify with the C argument. You can override this location by specifying the C argument, but in normal operation, that should not be required. -Once the index file is written, users can then add the C pointing to +Once the index file is written, users can then add the C pointing to the repository to their custom list of sources and start using it right away. See the C<< $cb->add_custom_source >> method for user details. =cut @@ -1301,15 +1313,15 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO -L, L, L, +L, L, L, L =cut diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Backend/RV.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Backend/RV.pm index e861a093a27..4a7dec12f0d 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Backend/RV.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Backend/RV.pm @@ -19,7 +19,7 @@ local $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Backend::RV +CPANPLUS::Backend::RV - return value objects =head1 SYNOPSIS @@ -117,7 +117,7 @@ sub _ok { return shift->ok } ### this allows people to not have to explicitly say ### if( $rv->ok ) { foo() } ### XXX add an explicit stringify, so it doesn't fall back to "bool"? :( -use overload bool => \&_ok, +use overload bool => \&_ok, # '""' => \&_stringify, fallback => 1; @@ -133,10 +133,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =cut diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Config.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Config.pm index 5cf11d3e732..e148b8fca75 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Config.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Config.pm @@ -18,25 +18,26 @@ use File::Basename qw[dirname]; use IPC::Cmd qw[can_run]; use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; use Module::Load::Conditional qw[check_install]; +use version; =pod =head1 NAME -CPANPLUS::Config +CPANPLUS::Config - configuration defaults and heuristics for CPANPLUS =head1 SYNOPSIS ### conf object via CPANPLUS::Backend; $cb = CPANPLUS::Backend->new; $conf = $cb->configure_object; - + ### or as a standalone object $conf = CPANPLUS::Configure->new; ### values in 'conf' section - $verbose = $conf->get_conf( 'verbose' ); + $verbose = $conf->get_conf( 'verbose' ); $conf->set_conf( verbose => 1 ); ### values in 'program' section @@ -45,7 +46,7 @@ CPANPLUS::Config =head1 DESCRIPTION -This module contains defaults and heuristics for configuration +This module contains defaults and heuristics for configuration information for CPANPLUS. To change any of these values, please see the documentation in C. @@ -62,7 +63,7 @@ my $Conf = { '_fetch' => { 'blacklist' => [ 'ftp' ], }, - + ### _source, _build and _mirror are supposed to be static ### no changes should be needed unless pause/cpan changes '_source' => { @@ -139,7 +140,7 @@ An example entry would like this: 'host' => 'ftp.funet.fi' } ]; - + =item allow_build_interactivity Boolean flag to indicate whether 'perl Makefile.PL' and similar @@ -149,6 +150,19 @@ are run interactively or not. Defaults to 'true'. $Conf->{'conf'}->{'allow_build_interactivity'} = 1; +=item allow_unknown_prereqs + +Boolean flag to indicate that unresolvable prereqs are acceptable. +If C then only warnings will be issued (the behaviour before 0.9114) +when a module is unresolvable from any our sources (CPAN and/or +C). If C then an unresolvable prereq will fail +during the C stage of distribution installation. +Defaults to C. + +=cut + + $Conf->{'conf'}->{'allow_unknown_prereqs'} = 1; + =item base The directory CPANPLUS keeps all its build and state information in. @@ -199,7 +213,7 @@ Defaults to 'false'. =item dist_type Default distribution type to use when building packages. See C -or C for details. An empty string will not use any +or C for details. An empty string will not use any package building software. Defaults to an empty string. =cut @@ -214,7 +228,7 @@ when sending emails. Defaults to an C address. =cut $Conf->{'conf'}->{'email'} = DEFAULT_EMAIL; - + =item enable_custom_sources Boolean flag indicating whether custom sources should be enabled or @@ -231,7 +245,7 @@ Defaults to C =item extractdir -String containing the directory where fetched archives should be +String containing the directory where fetched archives should be extracted. An empty string will use a directory under your C directory. Defaults to an empty string. @@ -241,7 +255,7 @@ directory. Defaults to an empty string. =item fetchdir -String containing the directory where fetched archives should be +String containing the directory where fetched archives should be stored. An empty string will use a directory under your C directory. Defaults to an empty string. @@ -303,7 +317,7 @@ installed, 'false' otherwise. =cut - $Conf->{'conf'}->{'md5'} = ( + $Conf->{'conf'}->{'md5'} = ( check_install( module => 'Digest::SHA' ) ? 1 : 0 ); =item no_update @@ -326,8 +340,8 @@ Defaults to 'true'. =item prefer_bin -A boolean indicating whether or not to prefer command line programs -over perl modules. Defaults to 'false' unless you do not have +A boolean indicating whether or not to prefer command line programs +over perl modules. Defaults to 'false' unless you do not have C installed (as that would mean we could not extract C<.tar.gz> files) @@ -335,22 +349,22 @@ C<.tar.gz> files) ### if we dont have c::zlib, we'll need to use /bin/tar or we ### can not extract any files. Good time to change the default - $Conf->{'conf'}->{'prefer_bin'} = + $Conf->{'conf'}->{'prefer_bin'} = (eval {require Compress::Zlib; 1} ? 0 : 1 ); =item prefer_makefile -A boolean indicating whether or not prefer a C over a +A boolean indicating whether or not prefer a C over a C file if both are present. Defaults to 'true', unless the perl version is at least 5.10.1 or appropriate versions of L and L are available. =cut - $Conf->{'conf'}->{'prefer_makefile'} = - ( $] >= 5.010001 or + $Conf->{'conf'}->{'prefer_makefile'} = + ( $] >= 5.010001 or ( check_install( module => 'Module::Build', version => '0.32' ) and - check_install( module => INSTALLER_BUILD, version => '0.24' ) ) + check_install( module => INSTALLER_BUILD, version => '0.60' ) ) ? 0 : 1 ); =item prereqs @@ -382,7 +396,7 @@ Defaults to C, the default CPANPLUS shell. =item show_startup_tip -A boolean indicating whether or not to show start up tips in the +A boolean indicating whether or not to show start up tips in the interactive shell. Defaults to 'true'. =cut @@ -392,14 +406,14 @@ interactive shell. Defaults to 'true'. =item signature A boolean indicating whether or not check signatures if packages are -signed. Defaults to 'true' if you have C or C +signed. Defaults to 'true' if you have C or C installed, 'false' otherwise. =cut $Conf->{'conf'}->{'signature'} = do { check_install( module => 'Module::Signature', version => '0.06' ) - and ( can_run('gpg') || + and ( can_run('gpg') || check_install(module => 'Crypt::OpenPGP') ); } ? 1 : 0; @@ -417,12 +431,12 @@ Defaults to 'false'. A boolean indicating whether or not to use C to write compiled source file information to disk. This makes for faster startup and look -up times, but takes extra diskspace. Defaults to 'true' if you have +up times, but takes extra diskspace. Defaults to 'true' if you have C installed and 'false' if you don't. =cut - $Conf->{'conf'}->{'storable'} = + $Conf->{'conf'}->{'storable'} = ( check_install( module => 'Storable' ) ? 1 : 0 ); =item timeout @@ -437,7 +451,7 @@ Defaults to 300. =item verbose A boolean indicating whether or not C runs in verbose mode. -Defaults to 'true' if you have the environment variable +Defaults to 'true' if you have the environment variable C set to true, 'false' otherwise. It is recommended you run with verbose enabled, but it is disabled @@ -464,7 +478,7 @@ C. Default to C{'conf'}->{'source_engine'} = DEFAULT_SOURCE_ENGINE; + $Conf->{'conf'}->{'source_engine'} = DEFAULT_SOURCE_ENGINE; =item cpantest_reporter_args @@ -474,14 +488,14 @@ set it to: { transport => 'Net::SMTP::TLS', transport_args => [ User => 'Joe', Password => '123' ], - } + } =cut $Conf->{'conf'}->{'cpantest_reporter_args'} = {}; =back - + =head2 Section 'program' =cut @@ -510,7 +524,7 @@ program used to build perl or failing that, a C in your path. =cut - $Conf->{'program'}->{'make'} = + $Conf->{'program'}->{'make'} = can_run($Config{'make'}) || can_run('make'); =item pager @@ -520,7 +534,7 @@ $ENV{PAGER}, 'less' or 'more' programs, in that order. =cut - $Conf->{'program'}->{'pager'} = + $Conf->{'program'}->{'pager'} = $ENV{'PAGER'} || can_run('less') || can_run('more'); ### no one uses this feature anyway, and it's only working for EU::MM @@ -534,14 +548,14 @@ $ENV{SHELL} setting, or $ENV{COMSPEC} on Windows. =cut - $Conf->{'program'}->{'shell'} = $^O eq 'MSWin32' - ? $ENV{COMSPEC} + $Conf->{'program'}->{'shell'} = $^O eq 'MSWin32' + ? $ENV{COMSPEC} : $ENV{SHELL}; =item sudo A string holding the path to your C binary if your install path -requires super user permissions. Looks for C in your path, or +requires super user permissions. Looks for C in your path, or remains empty if you do not require super user permissions to install. =cut @@ -550,19 +564,19 @@ remains empty if you do not require super user permissions to install. ### let's assume you dont need sudo, ### unless one of the below criteria tells us otherwise my $sudo = undef; - + ### you're a normal user, you might need sudo if( $> ) { - + ### check for all install dirs! ### you have write permissions to the installdir, ### you don't need sudo - if( -w $Config{'installsitelib'} && -w $Config{'installsitebin'} ) { - + if( -w $Config{'installsitelib'} && -w $Config{'installsitebin'} ) { + ### installsiteman3dir is a 5.8'ism.. don't check - ### it on 5.6.x... + ### it on 5.6.x... if( defined $Config{'installsiteman3dir'} ) { - $sudo = -w $Config{'installsiteman3dir'} + $sudo = -w $Config{'installsiteman3dir'} ? undef : can_run('sudo'); } else { @@ -572,36 +586,38 @@ remains empty if you do not require super user permissions to install. ### you have PERL_MM_OPT set to some alternate ### install place. You probably have write permissions ### to that - } elsif ( $ENV{'PERL_MM_OPT'} and + } elsif ( $ENV{'PERL_MM_OPT'} and $ENV{'PERL_MM_OPT'} =~ /INSTALL|LIB|PREFIX/ ) { $sudo = undef; ### you probably don't have write permissions - } else { + } else { $sudo = can_run('sudo'); } - } - + } + ### and return the value $sudo; }; =item perlwrapper +B + A string holding the path to the C utility bundled with CPANPLUS, which is used to enable autoflushing in spawned processes. =cut - ### perlwrapper that allows us to turn on autoflushing - $Conf->{'program'}->{'perlwrapper'} = sub { + ### perlwrapper that allows us to turn on autoflushing + $Conf->{'program'}->{'perlwrapper'} = sub { my $name = 'cpanp-run-perl'; my @bins = do{ require Config; my $ver = $Config::Config{version}; - + ### if we are running with 'versiononly' enabled, ### all binaries will have the perlversion appended ### ie, cpanp will become cpanp5.9.5 @@ -618,17 +634,17 @@ with CPANPLUS, which is used to enable autoflushing in spawned processes. my $path; BIN: for my $bin (@bins) { - + ### parallel to your cpanp/cpanp-boxed my $maybe = File::Spec->rel2abs( File::Spec->catfile( dirname($0), $bin ) - ); + ); $path = $maybe and last BIN if -f $maybe; - + ### parallel to your CPANPLUS.pm: ### $INC{cpanplus}/../bin/cpanp-run-perl $maybe = File::Spec->rel2abs( - File::Spec->catfile( + File::Spec->catfile( dirname($INC{'CPANPLUS.pm'}), '..', # lib dir 'bin', # bin dir @@ -636,14 +652,14 @@ with CPANPLUS, which is used to enable autoflushing in spawned processes. ) ); $path = $maybe and last BIN if -f $maybe; - + ### you installed CPANPLUS in a custom prefix, ### so go parallel to /that/. PREFIX=/tmp/cp ### would put cpanp-run-perl in /tmp/cp/bin and ### CPANPLUS.pm in ### /tmp/cp/lib/perl5/site_perl/5.8.8 $maybe = File::Spec->rel2abs( - File::Spec->catfile( + File::Spec->catfile( dirname( $INC{'CPANPLUS.pm'} ), '..', '..', '..', '..', # 4x updir 'bin', # bin dir @@ -660,8 +676,8 @@ with CPANPLUS, which is used to enable autoflushing in spawned processes. ### prefer anything that's found in the path paralel to your $^X for my $dir (File::Spec->rel2abs( dirname($^X) ), split(/\Q$Config::Config{path_sep}\E/, $ENV{PATH}), - File::Spec->curdir, - ) { + File::Spec->curdir, + ) { ### On VMS the path could be in UNIX format, and we ### currently need it to be in VMS format @@ -670,15 +686,21 @@ with CPANPLUS, which is used to enable autoflushing in spawned processes. $maybe = File::Spec->catfile( $dir, $bin ); $path = $maybe and last BIN if -f $maybe; } - } - + } + ### we should have a $path by now ideally, if so return it return $path if defined $path; - + + ### CPANPLUS::Dist::MM doesn't require this anymore + ### but CPANPLUS::Dist::Build might if it is less than 0.60 + my $cpdb = check_install( module => INSTALLER_BUILD ); + return '' unless + $cpdb and eval { version->parse($cpdb->{version}) < version->parse('0.60') }; + ### if not, warn about it and give sensible default. - ### XXX try to be a no-op instead then.. + ### XXX try to be a no-op instead then.. ### cross your fingers... - ### pass '-P' to perl: "run program through C + ### pass '-P' to perl: "run program through C ### preprocessor before compilation" ### XXX using -P actually changes the way some Makefile.PLs ### are executed, so don't do that... --kane @@ -690,13 +712,13 @@ with CPANPLUS, which is used to enable autoflushing in spawned processes. "From the default shell, you can do this by typing:\n\n". " %3\n". " %4\n", - $name, 'perlwrapper', + $name, 'perlwrapper', 's program perlwrapper FULL_PATH_TO_CPANP_RUN_PERL', 's save' - )); + )); return ''; }->(); - + =back =cut @@ -719,12 +741,12 @@ sub new { ### now store it in the parent object $obj->$acc( $subobj ); } - + $obj->_clean_up_paths; - + ### shut up IPC::Cmd warning about not findin IPC::Run on win32 $IPC::Cmd::WARN = 0; - + return $obj; } @@ -743,18 +765,18 @@ sub _clean_up_paths { ### patch from Steve Hay, 13nd of June 2007 ### msg-id: <467012A4.6060705@uk.radan.com> - ### windows directories are not allowed to end with + ### windows directories are not allowed to end with ### a space, so any occurrence of '\w\s+/\w+' means ### we're dealing with arguments, not directory ### names. if ($path =~ /^(.*?)(\s+\/.*$)/) { ($prog, $args) = ($1, $2); - + ### otherwise, there are no arguments } else { ($prog, $args) = ($path, ''); } - + $prog = Win32::GetShortPathName( $prog ); $self->program->$pgm( $prog . $args ); } @@ -778,10 +800,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Configure.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Configure.pm index ba1ca0785ac..04a08753d55 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Configure.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Configure.pm @@ -26,12 +26,12 @@ $VERSION = $CPANPLUS::Internals::VERSION = $CPANPLUS::Internals::VERSION; ### the config options. for my $meth ( qw[conf _lib _perl5lib]) { no strict 'refs'; - + *$meth = sub { my $self = shift; $self->{'_'.$meth} = $_[0] if @_; return $self->{'_'.$meth}; - } + } } @@ -39,7 +39,7 @@ for my $meth ( qw[conf _lib _perl5lib]) { =head1 NAME -CPANPLUS::Configure +CPANPLUS::Configure - configuration for CPANPLUS =head1 SYNOPSIS @@ -74,7 +74,7 @@ a method call on a C object. =item load_configs -Controls whether or not additional user configurations are to be loaded +Controls whether or not additional user configurations are to be loaded or not. Defaults to C. =back @@ -89,7 +89,7 @@ or not. Defaults to C. sub new { my $class = shift; my %hash = @_; - + ### XXX pass on options to ->init() like rescan? my ($load); my $tmpl = { @@ -99,7 +99,7 @@ or not. Defaults to C. check( $tmpl, \%hash ) or ( warn Params::Check->last_error, return ); - + $Config ||= CPANPLUS::Config->new; my $self = bless {}, $class; $self->conf( $Config ); @@ -108,11 +108,11 @@ or not. Defaults to C. ### these can override things in the default config $self->init if $load; - ### after processing the config files, check what + ### after processing the config files, check what ### @INC and PERL5LIB are set to. $self->_lib( \@INC ); $self->_perl5lib( $ENV{'PERL5LIB'} ); - + return $self; } } @@ -143,21 +143,21 @@ Returns true on success, false on failure. my $self = shift; my $obj = $self->conf; my %hash = @_; - + my ($rescan); my $tmpl = { rescan => { default => 0, store => \$rescan }, }; - + check( $tmpl, \%hash ) or ( warn Params::Check->last_error, return - ); - + ); + ### if the base dir is changed, we have to rescan it ### for any CPANPLUS::Config::* files as well, so keep ### track of it my $cur_base = $self->get_conf('base'); - + ### warn if we find an old style config specified ### via environment variables { my $env = ENV_CPANPLUS_CONFIG; @@ -169,17 +169,17 @@ Returns true on success, false on failure. "in the default shell to use custom config files.", $env, "CPANPLUS::Configure->save", 's save')); } - } - + } + { ### make sure that the homedir is included now local @INC = ( LIB_DIR->($cur_base), @INC ); - + ### only set it up once - if( !$loaded++ or $rescan ) { + if( !$loaded++ or $rescan ) { ### find plugins & extra configs ### check $home/.cpanplus/lib as well require Module::Pluggable; - + Module::Pluggable->import( search_path => ['CPANPLUS::Config'], search_dirs => [ LIB_DIR->($cur_base) ], @@ -187,54 +187,54 @@ Returns true on success, false on failure. sub_name => 'configs' ); } - - + + ### do system config, user config, rest.. in that order ### apparently, on a 2nd invocation of -->configs, a ### ::ISA::CACHE package can appear.. that's bad... - my %confs = map { $_ => $_ } + my %confs = map { $_ => $_ } grep { $_ !~ /::ISA::/ } __PACKAGE__->configs; - my @confs = grep { defined } + my @confs = grep { defined } map { delete $confs{$_} } CONFIG_SYSTEM, CONFIG_USER; - push @confs, sort keys %confs; - + push @confs, sort keys %confs; + for my $plugin ( @confs ) { msg(loc("Found config '%1'", $plugin),0); - - ### if we already did this the /last/ time around dont + + ### if we already did this the /last/ time around dont ### run the setup agian. if( my $loc = Module::Loaded::is_loaded( $plugin ) ) { msg(loc(" Already loaded '%1' (%2)", $plugin, $loc), 0); next; } else { msg(loc(" Loading config '%1'", $plugin),0); - + if( eval { load $plugin; 1 } ) { - msg(loc(" Loaded '%1' (%2)", + msg(loc(" Loaded '%1' (%2)", $plugin, Module::Loaded::is_loaded( $plugin ) ), 0); } else { error(loc(" Error loading '%1': %2", $plugin, $@)); - } - } - + } + } + if( $@ ) { error(loc("Could not load '%1': %2", $plugin, $@)); next; - } - + } + my $sub = $plugin->can('setup'); $sub->( $self ) if $sub; } } - + ### did one of the plugins change the base dir? then we should ### scan the dirs again if( $cur_base ne $self->get_conf('base') ) { msg(loc("Base dir changed from '%1' to '%2', rescanning", $cur_base, $self->get_conf('base')), 0); $self->init( @_, rescan => 1 ); - } - + } + ### clean up the paths once more, just in case $obj->_clean_up_paths; @@ -244,10 +244,10 @@ Returns true on success, false on failure. my %inc = map { $_ => $_ } @INC; for my $l ( @$lib ) { push @INC, $l unless $inc{$l}; - } + } $self->_lib( \@INC ); } - + return 1; } } @@ -265,7 +265,7 @@ Returns true if the file can be saved, false otherwise. sub can_save { my $self = shift; my $file = shift || CONFIG_USER_FILE->(); - + return 1 unless -e $file; chmod 0644, $file; @@ -284,7 +284,7 @@ be attempted to be saved in the system wide directory. If no argument is provided, it will default to your personal config. -Returns the full path to the file if the config was saved, +Returns the full path to the file if the config was saved, false otherwise. =cut @@ -298,12 +298,12 @@ sub _config_pm_to_file { ### so figure out where to save them based on their type my $file; if( $pm eq CONFIG_USER ) { - $file = CONFIG_USER_FILE->(); + $file = CONFIG_USER_FILE->(); } elsif ( $pm eq CONFIG_SYSTEM ) { $file = CONFIG_SYSTEM_FILE->(); - - ### third party file + + ### third party file } else { my $cfg_pkg = CONFIG . '::'; unless( $pm =~ /^$cfg_pkg/ ) { @@ -311,13 +311,13 @@ sub _config_pm_to_file { "WARNING: Your config package '%1' is not in the '%2' ". "namespace and will not be automatically detected by %3", $pm, $cfg_pkg, 'CPANPLUS' - )); - } - + )); + } + $file = File::Spec->catfile( $dir, split( '::', $pm ) - ) . '.pm'; + ) . '.pm'; } return $file; @@ -328,16 +328,16 @@ sub save { my $self = shift; my $pm = shift || CONFIG_USER; my $savedir = shift || ''; - + my $file = $self->_config_pm_to_file( $pm, $savedir ) or return; my $dir = dirname( $file ); - + unless( -d $dir ) { $self->_mkdir( dir => $dir ) or ( error(loc("Can not create directory '%1' to save config to",$dir)), return ) - } + } return unless $self->can_save($file); ### find only accessors that are not private @@ -345,18 +345,18 @@ sub save { ### for dumping the values use Data::Dumper; - + my @lines; for my $acc ( @acc ) { - + push @lines, "### $acc section", $/; - + for my $key ( $self->conf->$acc->ls_accessors ) { my $val = Dumper( $self->conf->$acc->$key ); - + $val =~ s/\$VAR1\s+=\s+//; $val =~ s/;\n//; - + push @lines, '$'. "conf->set_${acc}( $key => $val );", $/; } push @lines, $/,$/; @@ -368,13 +368,13 @@ sub save { ### use a variable to make sure the pod parser doesn't snag it my $is = '='; my $time = gmtime; - - + + my $msg = <<_END_OF_CONFIG_; ############################################### -### -### Configuration structure for $pm -### +### +### Configuration structure for $pm +### ############################################### #last changed: $time GMT @@ -399,11 +399,11 @@ use strict; sub setup { my \$conf = shift; - + $str - return 1; -} + return 1; +} 1; @@ -447,7 +447,7 @@ sub options { my %seen; return sort grep { !$seen{$_}++ } - map { $_->$type->ls_accessors if $_->can($type) } + map { $_->$type->ls_accessors if $_->can($type) } $self->conf; return; } @@ -546,9 +546,9 @@ sub AUTOLOAD { ### cpanplus 0.04x; we renamed ->_get_build('base') to ### ->get_conf('base') } elsif ( $type eq '_build' and $key eq 'base' ) { - return $self->get_conf($key); - - } else { + return $self->get_conf($key); + + } else { error( loc(q[No such key '%1' in field '%2'], $key, $type) ); return; } @@ -564,7 +564,7 @@ sub AUTOLOAD { if( $conf->can($type) and $conf->$type->can($key) ) { $conf->$type->$key( $val ); - + } else { error( loc(q[No such key '%1' in field '%2'], $key, $type) ); return; @@ -613,10 +613,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Configure/Setup.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Configure/Setup.pm index b6f34f2a521..7720d853083 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Configure/Setup.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Configure/Setup.pm @@ -60,20 +60,20 @@ sub new { my $obj = $class->SUPER::new( keys %$tmpl ); for my $acc ( $obj->ls_accessors ) { $obj->$acc( $args->{$acc} ); - } - + } + ### otherwise there's a circular use ### load CPANPLUS::Configure; load CPANPLUS::Backend; $obj->configure_object( CPANPLUS::Configure->new() ) unless $obj->configure_object; - + $obj->backend( CPANPLUS::Backend->new( $obj->configure_object ) ) unless $obj->backend; ### use empty string in case user only has T::R::Stub -- it complains - $obj->term( Term::ReadLine->new('') ) + $obj->term( Term::ReadLine->new('') ) unless $obj->term; ### enable autoreply if that was passed ### @@ -85,10 +85,10 @@ sub new { sub init { my $self = shift; my $term = $self->term; - + ### default setting, unless changed $self->config_type( CONFIG_USER ) unless $self->config_type; - + my $save = loc('Save & exit'); my $exit = loc('Quit without saving'); my @map = ( @@ -99,45 +99,45 @@ sub init { [ loc('Setup FTP/Email settings') => '_setup_ftp' ], [ loc('Setup basic preferences') => '_setup_conf' ], [ loc('Setup installer settings') => '_setup_installer' ], - [ loc('Select mirrors'), => '_setup_hosts' ], - [ loc('Edit configuration file') => '_edit' ], + [ loc('Select mirrors'), => '_setup_hosts' ], + [ loc('Edit configuration file') => '_edit' ], [ $save => '_save' ], - [ $exit => 1 ], + [ $exit => 1 ], ); my @keys = map { $_->[0] } @map; # sorted keys my %map = map { @$_ } @map; # lookup hash - + PICK_SECTION: { print loc(" -=================> MAIN MENU <================= - +=================> MAIN MENU <================= + Welcome to the CPANPLUS configuration. Please select which parts you wish to configure Defaults are taken from your current configuration. If you would save now, your settings would be written to: - + %1 - + ", $self->config_type ); - + my $choice = $term->get_reply( prompt => "Section to configure:", choices => \@keys, default => $keys[0] - ); - + ); + ### exit configuration? if( $choice eq $exit ) { print loc(" Quitting setup, changes will not be saved. "); return 1; - } - + } + my $method = $map{$choice}; - + my $rv = $self->$method or print loc(" There was an error setting up this section. You might want to try again "); @@ -146,14 +146,14 @@ There was an error setting up this section. You might want to try again if( $choice eq $save and $rv ) { print loc(" Quitting setup, changes are saved to '%1' - ", $self->config_type + ", $self->config_type ); return 1; } ### otherwise, present choice again redo PICK_SECTION; - } + } return 1; } @@ -168,22 +168,22 @@ sub _save_where { ASK_CONFIG_TYPE: { - - print loc( q[ + + print loc( q[ Where would you like to save your CPANPLUS Configuration file? -If you want to configure CPANPLUS for this user only, +If you want to configure CPANPLUS for this user only, select the '%1' option. The file will then be saved in your homedirectory. -If you are the system administrator of this machine, -and would like to make this config available globally, +If you are the system administrator of this machine, +and would like to make this config available globally, select the '%2' option. -The file will be then be saved in your CPANPLUS +The file will be then be saved in your CPANPLUS installation directory. ], CONFIG_USER, CONFIG_SYSTEM ); - + ### ask what config type we should save to my $type = $term->get_reply( @@ -191,19 +191,19 @@ installation directory. default => $self->config_type || CONFIG_USER, choices => [CONFIG_USER, CONFIG_SYSTEM], ); - + my $file = $conf->_config_pm_to_file( $type ); - + ### can we save to this file? unless( $conf->can_save( $file ) ) { error(loc( "Can not save to file '%1'-- please check permissions " . - "and try again", $file + "and try again", $file )); - + redo ASK_CONFIG_FILE; - } - + } + ### you already have the file -- are we allowed to overwrite ### or should we try again? if ( -e $file and -w _ ) { @@ -214,18 +214,18 @@ I see you already have this file: The file will not be overwritten until you explicitly save it. ], $file ); - - redo ASK_CONFIG_TYPE + + redo ASK_CONFIG_TYPE unless $term->ask_yn( prompt => loc( "Do you wish to use this file?"), default => 'n', ); } - + print $/, loc("Using '%1' as your configuration type", $type); - + return $self->config_type($type); - } + } } @@ -237,10 +237,10 @@ sub _setup_base { my $base = $conf->get_conf('base'); my $home = File::Spec->catdir( $self->_home_dir, DOT_CPANPLUS ); - + print loc(" CPANPLUS needs a directory of its own to cache important index -files and maybe keep a temporary mirror of CPAN files. +files and maybe keep a temporary mirror of CPAN files. This may be a site-wide directory or a personal directory. For a single-user installation, we suggest using your home directory. @@ -266,7 +266,7 @@ For a single-user installation, we suggest using your home directory. print loc(" I see you already have a directory: %1 - + "), $where; my $yn = $term->ask_yn( @@ -338,7 +338,7 @@ First of all, I'd like to create this directory. print loc(q[ Your CPANPLUS build and cache directory has been set to: %1 - + ], $where); return 1; @@ -422,7 +422,7 @@ is required for the 'from' field, so choose wisely. unless (grep { $_ eq $current } @choices) { unshift @choices, $current; } - + my $email = $term->get_reply( prompt => loc('Which email address shall I use?'), default => $current || $choices[0], @@ -434,7 +434,7 @@ is required for the 'from' field, so choose wisely. $email = $term->get_reply( prompt => loc('Email address: '), ); - + unless( $self->_valid_email($email) ) { print loc(" You did not enter a valid email address, please try again! @@ -448,7 +448,7 @@ You did not enter a valid email address, please try again! print loc(" Your 'email' is now: %1 - + ", $email); $conf->set_conf( email => $email ); @@ -481,16 +481,16 @@ like '%1'. PROGRAM: { print "\n", loc("Where can I find your '%1' utility? ". "(Enter a single space to disable)", $prog ), "\n"; - + my $loc = $term->get_reply( prompt => "Path to your '$prog'", default => $conf->get_program( $prog ), - ); - - ### empty line clears it + ); + + ### empty line clears it my $cmd = $loc =~ /^\s*$/ ? undef : $loc; my ($bin) = $cmd =~ /^(\S+)/; - + ### did you provide a valid program ? if( $bin and not can_run( $bin ) ) { print "\n"; @@ -505,27 +505,27 @@ like '%1'. 'make' ); print loc("Please provide one!"); - + ### show win32 where to download - if ( $^O eq 'MSWin32' ) { + if ( $^O eq 'MSWin32' ) { print loc("You can get '%1' from:", NMAKE); print "\t". NMAKE_URL ."\n"; } print "\n"; - redo PROGRAM; + redo PROGRAM; } $conf->set_program( $prog => $cmd ); print $cmd - ? loc( "Your '%1' utility has been set to '%2'.", + ? loc( "Your '%1' utility has been set to '%2'.", $prog, $cmd ) - : loc( "Your '%1' has been disabled.", $prog ); + : loc( "Your '%1' has been disabled.", $prog ); print "\n"; } } - + return 1; -} +} sub _setup_installer { my $self = shift; @@ -533,7 +533,7 @@ sub _setup_installer { my $conf = $self->configure_object; my $none = 'None'; - { + { print loc(" CPANPLUS uses binary programs as well as Perl modules to accomplish various tasks. Normally, CPANPLUS will prefer the use of Perl modules @@ -543,7 +543,7 @@ You can change this setting by making CPANPLUS prefer the use of certain binary programs if they are available. "); - + ### default to using binaries if we don't have compress::zlib only ### -- it'll get very noisy otherwise my $type = 'prefer_bin'; @@ -670,7 +670,7 @@ Again, if you don't understand this question, just press ENTER. Some modules provide both a Build.PL (Module::Build) and a Makefile.PL (ExtUtils::MakeMaker). By default, CPANPLUS prefers Makefile.PL. -Module::Build support is not bundled standard with CPANPLUS, but +Module::Build support is not bundled standard with CPANPLUS, but requires you to install 'CPANPLUS::Dist::Build' from CPAN. Although Module::Build is a pure perl solution, which means you will @@ -722,10 +722,10 @@ pathnames to be added to your @INC, quoting any with embedded whitespace. $conf->set_conf( $type => $lib ); } - + return 1; -} - +} + sub _setup_conf { my $self = shift; @@ -834,37 +834,37 @@ Otherwise, select ASK to have us ask your permission to install them. "); my $type = 'prereqs'; - + my @map = ( - [ PREREQ_IGNORE, # conf value - loc('No, do not install prerequisites'), # UI Value + [ PREREQ_IGNORE, # conf value + loc('No, do not install prerequisites'), # UI Value loc("I won't install prerequisites") # diag message ], [ PREREQ_INSTALL, - loc('Yes, please install prerequisites'), - loc("I will install prerequisites") + loc('Yes, please install prerequisites'), + loc("I will install prerequisites") ], - [ PREREQ_ASK, - loc('Ask me before installing a prerequisite'), - loc("I will ask permission to install") + [ PREREQ_ASK, + loc('Ask me before installing a prerequisite'), + loc("I will ask permission to install") ], - [ PREREQ_BUILD, + [ PREREQ_BUILD, loc('Build prerequisites, but do not install them'), loc( "I will only build, but not install prerequisites" ) ], ); - + my %reply = map { $_->[1] => $_->[0] } @map; # choice => value my %diag = map { $_->[1] => $_->[2] } @map; # choice => diag message my %conf = map { $_->[0] => $_->[1] } @map; # value => ui choice - + my $reply = $term->get_reply( prompt => loc('Follow prerequisites?'), default => $conf{ $conf->get_conf( $type ) }, choices => [ @conf{ sort keys %conf } ], ); print "\n"; - + my $value = $reply{ $reply }; my $diag = $diag{ $reply }; @@ -880,7 +880,7 @@ CPANPLUS can do for you later); "); my $type = 'md5'; - + my $yn = $term->ask_yn( prompt => loc("Shall I use the MD5 checksums?"), default => $conf->get_conf( $type ), @@ -894,7 +894,7 @@ CPANPLUS can do for you later); } - + { ########################################### ## sally sells seashells by the seashore ## ########################################### @@ -909,7 +909,7 @@ please enter the full name for your shell module. my $type = 'shell'; my $other = 'Other'; my @choices = (qw| CPANPLUS::Shell::Default - CPANPLUS::Shell::Classic |, + CPANPLUS::Shell::Classic |, $other ); my $default = $conf->get_conf($type); @@ -929,9 +929,9 @@ please enter the full name for your shell module. ); unless( check_install( module => $reply ) ) { - print "\n", + print "\n", loc("Could not find '$reply' in your path " . - "-- please try again"), + "-- please try again"), "\n"; redo SHELL; } @@ -973,8 +973,8 @@ Would you like to do this? ################### print loc(" - -To limit the amount of RAM used by CPANPLUS, you can use the SQLite + +To limit the amount of RAM used by CPANPLUS, you can use the SQLite source backend instead. Note that it is currently still experimental. Would you like to do this? @@ -1197,26 +1197,26 @@ are done. } CHOICE: { - + ### doesn't play nice with Term::UI :( ### should make t::ui figure out pager opens #$self->_pager_open; # host lists might be long - + print loc(" You can enter multiple sites by separating them by a space. For example: 1 4 2 5 - "); - + "); + my @reply = $term->get_reply( prompt => loc('Please pick a site: '), - choices => [sort(keys %map), + choices => [sort(keys %map), qw|Custom View Up Quit|], default => $default, multi => 1, ); #$self->_pager_close; - + goto COUNTRY if grep { $_ eq 'Up' } @reply; goto CUSTOM if grep { $_ eq 'Custom' } @reply; @@ -1646,8 +1646,8 @@ post-configuration editing of the config file sub _save { my $self = shift; my $conf = $self->configure_object; - + return $conf->save( $self->config_type ); -} +} 1; diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist.pm index 20c74fcd4ad..5df2ef0c64f 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist.pm @@ -22,7 +22,7 @@ local $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Dist +CPANPLUS::Dist - base class for plugins =head1 SYNOPSIS @@ -313,7 +313,7 @@ sub find_configure_requires { defaults => $mod->status->$meth || {}, ); - my @possibles = do { defined $mod->status->extract + my @possibles = do { defined $mod->status->extract ? ( META_JSON->( $mod->status->extract ), META_YML->( $mod->status->extract ) ) : () @@ -363,7 +363,7 @@ sub find_mymeta_requires { defaults => $mod->status->$meth || {}, ); - my @possibles = do { defined $mod->status->extract + my @possibles = do { defined $mod->status->extract ? ( MYMETA_JSON->( $mod->status->extract ), MYMETA_YML->( $mod->status->extract ) ) : () @@ -418,6 +418,9 @@ sub _prereqs_from_meta_file { ### Parse::CPAN::Meta uses exceptions for errors ### hash returned in list context!!! + + local $ENV{PERL_JSON_BACKEND}; + my ($doc) = eval { Parse::CPAN::Meta::LoadFile( $meta ) }; unless( $doc ) { @@ -465,6 +468,9 @@ sub _prereqs_from_meta_json { ### Parse::CPAN::Meta uses exceptions for errors ### hash returned in list context!!! + + local $ENV{PERL_JSON_BACKEND}; + my ($doc) = eval { Parse::CPAN::Meta->load_file( $meta ) }; unless( $doc ) { @@ -523,7 +529,7 @@ sub _resolve_prereqs { my $conf = $cb->configure_object; my %hash = @_; - my ($prereqs, $format, $verbose, $target, $force, $prereq_build); + my ($prereqs, $format, $verbose, $target, $force, $prereq_build,$tolerant); my $tmpl = { ### XXX perhaps this should not be required, since it may not be ### packaged, just installed... @@ -543,6 +549,8 @@ sub _resolve_prereqs { target => { default => '', store => \$target, allow => ['',qw[create ignore install]] }, prereq_build => { default => 0, store => \$prereq_build }, + tolerant => { default => $conf->get_conf('allow_unknown_prereqs'), + store => \$tolerant }, }; check( $tmpl, \%hash ) or return; @@ -594,6 +602,8 @@ sub _resolve_prereqs { ### list of module objects + desired versions my @install_me; + my $flag; + for my $mod ( @sorted_prereqs ) { ( my $version = $prereqs->{$mod} ) =~ s#[^0-9\._]+##g; @@ -626,6 +636,7 @@ sub _resolve_prereqs { my $core = $sub->( $mod ); unless ( defined $core ) { error( loc( "No such module '%1' found on CPAN", $mod ) ); + $flag++ unless $tolerant; next; } if ( $cb->_vcmp( $version, $core ) > 0 ) { @@ -684,7 +695,6 @@ sub _resolve_prereqs { } } - my $flag; for my $aref (@install_me) { my($modobj,$version) = @$aref; diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Autobundle.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Autobundle.pm index 9561dd9f325..546f1ba6382 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Autobundle.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Autobundle.pm @@ -10,7 +10,7 @@ use base qw[CPANPLUS::Dist::Base]; =head1 NAME -CPANPLUS::Dist::Autobundle +CPANPLUS::Dist::Autobundle - distribution class for installation snapshots =head1 SYNOPSIS @@ -29,13 +29,13 @@ All modules as mentioned in the snapshot will be installed on your system. sub init { my $dist = shift; my $status = $dist->status; - + $status->mk_accessors( qw[prepared created installed _prepare_args _create_args _install_args] ); - + return 1; -} +} sub prepare { my $dist = shift; @@ -50,11 +50,11 @@ sub prepare { sub create { my $dist = shift; my $self = $dist->parent; - + ### we're also the cpan_dist, since we don't need to have anything - ### prepared - $dist = $self->status->dist_cpan if $self->status->dist_cpan; - $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; + ### prepared + $dist = $self->status->dist_cpan if $self->status->dist_cpan; + $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; my $cb = $self->parent; my $conf = $cb->configure_object; @@ -62,25 +62,25 @@ sub create { my( $force, $verbose, $prereq_target, $prereq_format, $prereq_build); - my $args = do { + my $args = do { local $Params::Check::ALLOW_UNKNOWN = 1; my $tmpl = { - force => { default => $conf->get_conf('force'), + force => { default => $conf->get_conf('force'), store => \$force }, - verbose => { default => $conf->get_conf('verbose'), + verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, - prereq_target => { default => '', store => \$prereq_target }, + prereq_target => { default => '', store => \$prereq_target }, ### don't set the default prereq format to 'makemaker' -- wrong! prereq_format => { #default => $self->status->installer_type, default => '', - store => \$prereq_format }, - prereq_build => { default => 0, store => \$prereq_build }, - }; + store => \$prereq_format }, + prereq_build => { default => 0, store => \$prereq_build }, + }; check( $tmpl, \%hash ) or return; }; - + ### maybe we already ran a create on this object? ### return 1 if $dist->status->created && !$force; @@ -90,7 +90,7 @@ sub create { msg(loc("Resolving prerequisites mentioned in the bundle"), $verbose); ### this will set the directory back to the start - ### dir, so we must chdir /again/ + ### dir, so we must chdir /again/ my $ok = $dist->_resolve_prereqs( format => $prereq_format, verbose => $verbose, @@ -107,7 +107,7 @@ sub create { sub install { my $dist = shift; my %args = @_; - + ### store the arguments, so ->install can use them in recursive loops ### $dist->status->_install_args( \%args ); diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Base.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Base.pm index 904ab172266..8e4e02f1f50 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Base.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Base.pm @@ -19,13 +19,13 @@ CPANPLUS::Dist::Base - Base class for custom distribution classes sub prepare { my $dist = shift; - + ### do the 'standard' things $dist->SUPER::prepare( @_ ) or return; - + ### do MY_IMPLEMENTATION specific things ... - + ### don't forget to set the status! return $dist->status->prepared( $SUCCESS ? 1 : 0 ); } @@ -34,7 +34,7 @@ CPANPLUS::Dist::Base - Base class for custom distribution classes =head1 DESCRIPTION CPANPLUS::Dist::Base functions as a base class for all custom -distribution implementations. It does all the mundane work +distribution implementations. It does all the mundane work CPANPLUS would have done without a custom distribution, so you can override just the parts you need to make your own implementation work. @@ -50,7 +50,7 @@ class are called: $dist->prepare; # find/write meta information $dist->create; # write the distribution file $dist->install; # install the distribution file - + $dist->uninstall; # remove the distribution (OPTIONAL) =head1 METHODS @@ -64,8 +64,8 @@ override. =cut -sub methods { - return qw[format_available init prepare create install uninstall] +sub methods { + return qw[format_available init prepare create install uninstall] } =head2 $bool = $Class->format_available @@ -82,7 +82,7 @@ Simply return true if the request can proceed and false if it can not. The C implementation always returns true. -=cut +=cut sub format_available { return 1 } @@ -91,21 +91,21 @@ sub format_available { return 1 } This method is called just after the new dist object is set up and before the C method is called. This is the time to set up -the object so it can be used with your class. +the object so it can be used with your class. For example, you might want to add extra accessors to the C object, which you might do as follows: $dist->status->mk_accessors( qw[my_implementation_accessor] ); -The C object is implemented as an instance of the -C class. Please refer to its documentation for +The C object is implemented as an instance of the +C class. Please refer to its documentation for details. Return true if the initialization was successful, and false if it was not. -The C implementation does not alter your object +The C implementation does not alter your object and always returns true. =cut @@ -116,14 +116,14 @@ sub init { return 1; } This runs the preparation step of your distribution. This step is meant to set up the environment so the C step can create the actual -distribution(file). -A C call in the standard C distribution +distribution(file). +A C call in the standard C distribution would, for example, run C to find the dependencies -for a distribution. For a C distribution, this is where you +for a distribution. For a C distribution, this is where you would write all the metafiles required for the C tools. The C implementation simply calls the underlying -distribution class (Typically C or +distribution class (Typically C or C). Sets C<< $dist->status->prepared >> to the return value of this function. @@ -131,7 +131,7 @@ If you override this method, you should make sure to set this value. =cut -sub prepare { +sub prepare { ### just in case you already did a create call for this module object ### just via a different dist object my $dist = shift; @@ -147,18 +147,18 @@ sub prepare { =head2 $bool = $dist->create This runs the creation step of your distribution. This step is meant -to follow up on the C call, that set up your environment so -the C step can create the actual distribution(file). -A C call in the standard C distribution +to follow up on the C call, that set up your environment so +the C step can create the actual distribution(file). +A C call in the standard C distribution would, for example, run C and C to build and test -a distribution. For a C distribution, this is where you +a distribution. For a C distribution, this is where you would create the actual C<.deb> file using C. The C implementation simply calls the underlying -distribution class (Typically C or +distribution class (Typically C or C). -Sets C<< $dist->status->dist >> to the location of the created +Sets C<< $dist->status->dist >> to the location of the created distribution. If you override this method, you should make sure to set this value. @@ -167,7 +167,7 @@ If you override this method, you should make sure to set this value. =cut -sub create { +sub create { ### just in case you already did a create call for this module object ### just via a different dist object my $dist = shift; @@ -193,13 +193,13 @@ sub create { This runs the install step of your distribution. This step is meant to follow up on the C call, which prepared a distribution(file) to install. -A C call in the standard C distribution +A C call in the standard C distribution would, for example, run C to copy the distribution files -to their final destination. For a C distribution, this is where +to their final destination. For a C distribution, this is where you would run C on the created C<.deb> file. The C implementation simply calls the underlying -distribution class (Typically C or +distribution class (Typically C or C). Sets C<< $dist->status->installed >> to the return value of this function. @@ -207,12 +207,12 @@ If you override this method, you should make sure to set this value. =cut -sub install { +sub install { ### just in case you already did a create call for this module object ### just via a different dist object my $dist = shift; my $self = $dist->parent; - my $dist_cpan = $self->status->dist_cpan; + my $dist_cpan = $self->status->dist_cpan; my $cb = $self->parent; my $conf = $cb->configure_object; @@ -223,14 +223,14 @@ sub install { =head2 $bool = $dist->uninstall This runs the uninstall step of your distribution. This step is meant -to remove the distribution from the file system. -A C call in the standard C distribution -would, for example, run C to remove the distribution -files the file system. For a C distribution, this is where you +to remove the distribution from the file system. +A C call in the standard C distribution +would, for example, run C to remove the distribution +files the file system. For a C distribution, this is where you would run C. The C implementation simply calls the underlying -distribution class (Typically C or +distribution class (Typically C or C). Sets C<< $dist->status->uninstalled >> to the return value of this function. @@ -238,12 +238,12 @@ If you override this method, you should make sure to set this value. =cut -sub uninstall { +sub uninstall { ### just in case you already did a create call for this module object ### just via a different dist object my $dist = shift; my $self = $dist->parent; - my $dist_cpan = $self->status->dist_cpan; + my $dist_cpan = $self->status->dist_cpan; my $cb = $self->parent; my $conf = $cb->configure_object; @@ -251,7 +251,7 @@ sub uninstall { $dist->status->uninstalled( $dist_cpan->uninstall( @_ ) ); } -1; +1; # Local variables: # c-indentation-style: bsd diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Build.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Build.pm index 164bcb0a9ec..702d606115b 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Build.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Build.pm @@ -10,7 +10,7 @@ use CPANPLUS::Internals::Constants; ### these constants were exported by CPANPLUS::Internals::Constants ### in previous versions.. they do the same though. If we want to have ### a normal 'use' here, up the dependency to CPANPLUS 0.056 or higher -BEGIN { +BEGIN { require CPANPLUS::Dist::Build::Constants; CPANPLUS::Dist::Build::Constants->import() if not __PACKAGE__->can('BUILD') && __PACKAGE__->can('BUILD_DIR'); @@ -30,7 +30,7 @@ use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; local $Params::Check::VERBOSE = 1; -$VERSION = '0.54'; +$VERSION = '0.62'; =pod @@ -44,8 +44,8 @@ CPANPLUS::Dist::Build - CPANPLUS plugin to install packages that use Build.PL format => 'CPANPLUS::Dist::Build', module => $modobj, ); - - $build->prepare; # runs Build.PL + + $build->prepare; # runs Build.PL $build->create; # runs build && build test $build->install; # runs build install @@ -58,7 +58,7 @@ Using this package, you can create, install and uninstall perl modules. It inherits from C. Normal users won't have to worry about the interface to this module, -as it functions transparently as a plug-in to C and will +as it functions transparently as a plug-in to C and will just C when it's loaded. =head1 ACCESSORS @@ -104,7 +104,7 @@ This gets set after C =item C Full path to the directory in which the C call took place, -set after a call to C. +set after a call to C. =item C @@ -184,11 +184,11 @@ sub init { =head2 $bool = $dist->prepare([perl => '/path/to/perl', buildflags => 'EXTRA=FLAGS', force => BOOL, verbose => BOOL]) -C prepares a distribution, running C +C prepares a distribution, running C and establishing any prerequisites this distribution has. -The variable C will be set to the full path +The variable C will be set to the full path of the C that is being executed. This enables any code inside the C to know that it is being installed via CPANPLUS. @@ -232,9 +232,9 @@ sub prepare { perl => { default => $^X, store => \$perl }, buildflags => { default => $conf->get_conf('buildflags'), store => \$buildflags }, - prereq_target => { default => '', store => \$prereq_target }, + prereq_target => { default => '', store => \$prereq_target }, prereq_format => { default => '', - store => \$prereq_format }, + store => \$prereq_format }, prereq_build => { default => 0, store => \$prereq_build }, }; @@ -269,7 +269,8 @@ sub prepare { my @buildflags = $dist->_buildflags_as_list( $buildflags ); $dist->status->_buildflags( $buildflags ); - my $fail; + my $fail; my $prereq_fail; + my $status = { }; RUN: { # 0.85_01 ### we resolve 'configure requires' here, so we can run the 'perl @@ -281,7 +282,7 @@ sub prepare { ### containing a makefile.pl/build.pl for test purposes? my $safe_ver = version->new('0.85_01'); if ( version->new($CPANPLUS::Internals::VERSION) >= $safe_ver ) - { my $configure_requires = $dist->find_configure_requires; + { my $configure_requires = $dist->find_configure_requires; my $ok = $dist->_resolve_prereqs( format => $prereq_format, verbose => $verbose, @@ -289,18 +290,19 @@ sub prepare { target => $prereq_target, force => $force, prereq_build => $prereq_build, - ); - + ); + unless( $ok ) { - + #### use $dist->flush to reset the cache ### error( loc( "Unable to satisfy '%1' for '%2' " . - "-- aborting install", - 'configure_requires', $self->module ) ); + "-- aborting install", + 'configure_requires', $self->module ) ); $dist->status->prepared(0); - $fail++; + $prereq_fail++; + $fail++; last RUN; - } + } ### end of prereq resolving ### } @@ -310,14 +312,18 @@ sub prepare { my $env = ENV_CPANPLUS_IS_EXECUTING; local $ENV{$env} = BUILD_PL->( $dir ); - my $run_perl = $conf->get_program('perlwrapper'); - my $cmd = [$perl, $run_perl, BUILD_PL->($dir), @buildflags]; + my @run_perl = ( '-e', CPDB_PERL_WRAPPER ); + my $cmd = [$perl, @run_perl, BUILD_PL->($dir), @buildflags]; unless ( scalar run( command => $cmd, buffer => \$prep_output, - verbose => $verbose ) + verbose => $verbose ) ) { error( loc( "Build.PL failed: %1", $prep_output ) ); + if ( $conf->get_conf('cpantest') ) { + $status->{stage} = 'prepare'; + $status->{capture} = $prep_output; + } $fail++; last RUN; } @@ -325,19 +331,20 @@ sub prepare { my $prereqs = $self->status->prereqs; - $prereqs ||= $dist->_find_prereqs( verbose => $verbose, - dir => $dir, + $prereqs ||= $dist->_find_prereqs( verbose => $verbose, + dir => $dir, perl => $perl, buildflags => $buildflags ); } - + ### send out test report? ### - if( $fail and $conf->get_conf('cpantest') ) { - $cb->_send_report( + if( $fail and $conf->get_conf('cpantest') and not $prereq_fail ) { + $cb->_send_report( module => $self, failed => $fail, buffer => CPANPLUS::Error->stack_as_string, + status => $status, verbose => $verbose, force => $force, ) or error(loc("Failed to send test report for '%1'", @@ -370,7 +377,7 @@ sub _find_prereqs { buildflags => { default => $conf->get_conf('buildflags'), store => \$buildflags }, }; - + my $args = check( $tmpl, \%hash ) or return; my $prereqs = {}; @@ -389,11 +396,11 @@ sub _find_prereqs { my @buildflags = $dist->_buildflags_as_list( $buildflags ); # Use the new Build action 'prereq_data' - my $run_perl = $conf->get_program('perlwrapper'); + my @run_perl = ( '-e', CPDB_PERL_WRAPPER ); - unless ( scalar run( command => [$perl, $run_perl, BUILD->($dir), 'prereq_data', @buildflags], + unless ( scalar run( command => [$perl, @run_perl, BUILD->($dir), 'prereq_data', @buildflags], buffer => \$content, - verbose => 0 ) + verbose => 0 ) ) { error( loc( "Build 'prereq_data' failed: %1 %2", $!, $content ) ); #return; @@ -413,7 +420,7 @@ sub _find_prereqs { error( loc( "Cannot open '%1': %2", $file, $! ) ); return; } - + $content = do { local $/; <$fh> }; } @@ -511,7 +518,7 @@ sub create { prereq_format => { #default => $self->status->installer_type, default => '', store => \$prereq_format }, - prereq_build => { default => 0, store => \$prereq_build }, + prereq_build => { default => 0, store => \$prereq_build }, }; $args = check( $tmpl, \%hash ) or return; @@ -567,9 +574,10 @@ sub create { $dist->status->_buildflags( $buildflags ); my $fail; my $prereq_fail; my $test_fail; + my $status = { }; RUN: { - my $run_perl = $conf->get_program('perlwrapper'); + my @run_perl = ( '-e', CPDB_PERL_WRAPPER ); ### this will set the directory back to the start ### dir, so we must chdir /again/ @@ -601,15 +609,19 @@ sub create { $cmd = [$perl, BUILD->($dir), @buildflags]; } else { - $cmd = [$perl, $run_perl, BUILD->($dir), @buildflags]; + $cmd = [$perl, @run_perl, BUILD->($dir), @buildflags]; } unless ( scalar run( command => $cmd, buffer => \$captured, - verbose => $verbose ) + verbose => $verbose ) ) { error( loc( "MAKE failed:\n%1", $captured ) ); $dist->status->build(0); + if ( $conf->get_conf('cpantest') ) { + $status->{stage} = 'build'; + $status->{capture} = $captured; + } $fail++; last RUN; } @@ -620,8 +632,8 @@ sub create { ### add this directory to your lib ### $self->add_to_includepath(); - ### this buffer will not include what tests failed due to a - ### M::B/Test::Harness bug. Reported as #9793 with patch + ### this buffer will not include what tests failed due to a + ### M::B/Test::Harness bug. Reported as #9793 with patch ### against 0.2607 on 26/1/2005 unless( $skiptest ) { my $test_output; @@ -629,13 +641,13 @@ sub create { $cmd = [$perl, BUILD->($dir), "test", @buildflags]; } else { - $cmd = [$perl, $run_perl, BUILD->($dir), "test", @buildflags]; + $cmd = [$perl, @run_perl, BUILD->($dir), "test", @buildflags]; } unless ( scalar run( command => $cmd, buffer => \$test_output, - verbose => $verbose ) + verbose => $verbose ) ) { - error( loc( "MAKE TEST failed:\n%1 ", $test_output ) ); + error( loc( "MAKE TEST failed:\n%1 ", $test_output ), ( $verbose ? 0 : 1 ) ); ### mark specifically *test* failure.. so we dont ### send success on force... @@ -645,16 +657,23 @@ sub create { $self, $@ ) ) { $dist->status->test(0); + if ( $conf->get_conf('cpantest') ) { + $status->{stage} = 'test'; + $status->{capture} = $test_output; + } $fail++; last RUN; } - } + } else { msg( loc( "MAKE TEST passed:\n%1", $test_output ), 0 ); - #msg( $test_output, 0 ); $dist->status->test(1); + if ( $conf->get_conf('cpantest') ) { + $status->{stage} = 'test'; + $status->{capture} = $test_output; + } } - } + } else { msg(loc("Tests skipped"), $verbose); } @@ -670,6 +689,7 @@ sub create { module => $self, failed => $test_fail || $fail, buffer => CPANPLUS::Error->stack_as_string, + status => $status, verbose => $verbose, force => $force, tests_skipped => $skiptest, @@ -702,7 +722,7 @@ sub install { my $conf = $cb->configure_object; my %hash = @_; - + my $verbose; my $perl; my $force; my $buildflags; { local $Params::Check::ALLOW_UNKNOWN = 1; my $tmpl = { @@ -714,7 +734,7 @@ sub install { store => \$buildflags }, perl => { default => $^X, store => \$perl }, }; - + my $args = check( $tmpl, \%hash ) or return; $dist->status->_install_args( $args ); } @@ -733,7 +753,7 @@ sub install { } ### value set and false -- means failure ### - if( defined $self->status->installed && + if( defined $self->status->installed && !$self->status->installed && !$force ) { error( loc( "Module '%1' has failed to install before this session " . @@ -743,7 +763,7 @@ sub install { my $fail; my @buildflags = $dist->_buildflags_as_list( $buildflags ); - my $run_perl = $conf->get_program('perlwrapper'); + my @run_perl = ( '-e', CPDB_PERL_WRAPPER ); ### hmm, how is this going to deal with sudo? ### for now, check effective uid, if it's not root, @@ -758,11 +778,19 @@ sub install { $cmd = [$perl, BUILD->($dir), "install", @buildflags]; } else { - $cmd = [$perl, $run_perl, BUILD->($dir), "install", @buildflags]; + $cmd = [$perl, @run_perl, BUILD->($dir), "install", @buildflags]; } - my $sudo = $conf->get_program('sudo'); - unshift @$cmd, $sudo if $sudo; + ### Detect local::lib type behaviour. Do not use 'sudo' in these cases + my $sudo = $conf->get_program('sudo'); + SUDO: { + ### Actual local::lib in use + last SUDO if defined $ENV{PERL_MB_OPT} and $ENV{PERL_MB_OPT} =~ m!install_base!; + ### 'buildflags' is configured with '--install_base' + last SUDO if scalar grep { m!install_base! } @buildflags; + ### oh well 'sudo make me a sandwich' + unshift @$cmd, $sudo; + } my $buffer; unless( scalar run( command => $cmd, @@ -778,7 +806,7 @@ sub install { $cmd = [$perl, BUILD->($dir), "install", @buildflags]; } else { - $cmd = [$perl, $run_perl, BUILD->($dir), "install", @buildflags]; + $cmd = [$perl, @run_perl, BUILD->($dir), "install", @buildflags]; } unless( scalar run( command => $cmd, buffer => \$install_output, diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Build/Constants.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Build/Constants.pm index ba1ca8665c0..c0fa040ffc5 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Build/Constants.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/Build/Constants.pm @@ -8,28 +8,31 @@ BEGIN { require Exporter; use vars qw[$VERSION @ISA @EXPORT]; - - $VERSION = '0.54'; + + $VERSION = '0.62'; @ISA = qw[Exporter]; - @EXPORT = qw[ BUILD_DIR BUILD ]; + @EXPORT = qw[ BUILD_DIR BUILD CPDB_PERL_WRAPPER]; } use constant BUILD_DIR => sub { return @_ ? File::Spec->catdir($_[0], '_build') : '_build'; - }; + }; use constant BUILD => sub { my $file = @_ ? File::Spec->catfile($_[0], 'Build') : 'Build'; - + ### on VMS, '.com' is appended when ### creating the Build file - $file .= '.com' if $^O eq 'VMS'; - + $file .= '.com' if $^O eq 'VMS'; + return $file; }; - + + +use constant CPDB_PERL_WRAPPER => 'use strict; BEGIN { my $old = select STDERR; $|++; select $old; $|++; $0 = shift(@ARGV); my $rv = do($0); die $@ if $@; }'; + 1; =head1 NAME diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/MM.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/MM.pm index b2205e46f0b..cd428691bcf 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/MM.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Dist/MM.pm @@ -23,12 +23,12 @@ local $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Dist::MM +CPANPLUS::Dist::MM - distribution class for MakeMaker related modules =head1 SYNOPSIS $mm = CPANPLUS::Dist::MM->new( module => $modobj ); - + $mm->create; # runs make && make test $mm->install; # runs make install @@ -37,7 +37,7 @@ CPANPLUS::Dist::MM C is a distribution class for MakeMaker related modules. -Using this package, you can create, install and uninstall perl +Using this package, you can create, install and uninstall perl modules. It inherits from C. =head1 ACCESSORS @@ -55,7 +55,7 @@ this module. =back -=head1 STATUS ACCESSORS +=head1 STATUS ACCESSORS All accessors can be accessed as follows: $mm->status->ACCESSOR @@ -64,7 +64,7 @@ All accessors can be accessed as follows: =item makefile () -Location of the Makefile (or Build file). +Location of the Makefile (or Build file). Set to 0 explicitly if something went wrong. =item make () @@ -73,7 +73,7 @@ BOOL indicating if the C (or C) command was successful. =item test () -BOOL indicating if the C (or C) command was +BOOL indicating if the C (or C) command was successful. =item prepared () @@ -84,7 +84,7 @@ This gets set after C =item distdir () Full path to the directory in which the C call took place, -set after a call to C. +set after a call to C. =item created () @@ -126,39 +126,39 @@ to create and install modules in your environment. ### check if the format is available ### sub format_available { my $dist = shift; - + ### we might be called as $class->format_available =/ require CPANPLUS::Internals; - my $cb = CPANPLUS::Internals->_retrieve_id( + my $cb = CPANPLUS::Internals->_retrieve_id( CPANPLUS::Internals->_last_id ); my $conf = $cb->configure_object; - + my $mod = "ExtUtils::MakeMaker"; unless( can_load( modules => { $mod => 0.0 } ) ) { error( loc( "You do not have '%1' -- '%2' not available", - $mod, __PACKAGE__ ) ); + $mod, __PACKAGE__ ) ); return; } - + for my $pgm ( qw[make] ) { - unless( $conf->get_program( $pgm ) ) { + unless( $conf->get_program( $pgm ) ) { error(loc( "You do not have '%1' in your path -- '%2' not available\n" . - "Please check your config entry for '%1'", + "Please check your config entry for '%1'", $pgm, __PACKAGE__ , $pgm - )); + )); return; } } - return 1; + return 1; } =pod =head2 $bool = $dist->init(); -Sets up the C object for use. +Sets up the C object for use. Effectively creates all the needed status accessors. Called automatically whenever you create a new C object. @@ -168,24 +168,24 @@ Called automatically whenever you create a new C object. sub init { my $dist = shift; my $status = $dist->status; - + $status->mk_accessors(qw[makefile make test created installed uninstalled bin_make _prepare_args _create_args _install_args] ); - + return 1; -} +} =pod =head2 $bool = $dist->prepare([perl => '/path/to/perl', makemakerflags => 'EXTRA=FLAGS', force => BOOL, verbose => BOOL]) -C preps a distribution for installation. This means it will +C preps a distribution for installation. This means it will run C and determine what prerequisites this distribution declared. -If you set C to true, it will go over all the stages of the -C process again, ignoring any previously cached results. +If you set C to true, it will go over all the stages of the +C process again, ignoring any previously cached results. When running C, the environment variable C will be set to the full path of the @@ -204,11 +204,11 @@ sub prepare { ### just via a different dist object my $dist = shift; my $self = $dist->parent; - + ### we're also the cpan_dist, since we don't need to have anything - ### prepared - $dist = $self->status->dist_cpan if $self->status->dist_cpan; - $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; + ### prepared + $dist = $self->status->dist_cpan if $self->status->dist_cpan; + $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; my $cb = $self->parent; my $conf = $cb->configure_object; @@ -219,7 +219,7 @@ sub prepare { error( loc( "No dir found to operate on!" ) ); return; } - + my $args; my( $force, $verbose, $perl, @mmflags, $prereq_target, $prereq_format, $prereq_build ); @@ -229,34 +229,34 @@ sub prepare { makemakerflags => { default => $conf->get_conf('makemakerflags') || '', store => \$mmflags[0] }, - force => { default => $conf->get_conf('force'), + force => { default => $conf->get_conf('force'), store => \$force }, - verbose => { default => $conf->get_conf('verbose'), + verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, - prereq_target => { default => '', store => \$prereq_target }, + prereq_target => { default => '', store => \$prereq_target }, prereq_format => { default => '', - store => \$prereq_format }, - prereq_build => { default => 0, store => \$prereq_build }, - }; + store => \$prereq_format }, + prereq_build => { default => 0, store => \$prereq_build }, + }; $args = check( $tmpl, \%hash ) or return; } - - + + ### maybe we already ran a create on this object? ### return 1 if $dist->status->prepared && !$force; - + ### store the arguments, so ->install can use them in recursive loops ### $dist->status->_prepare_args( $args ); - + ### chdir to work directory ### my $orig = cwd(); unless( $cb->_chdir( dir => $dir ) ) { error( loc( "Could not chdir to build directory '%1'", $dir ) ); return; } - - my $fail; + + my $fail; RUN: { ### we resolve 'configure requires' here, so we can run the 'perl @@ -266,7 +266,7 @@ sub prepare { ### on this step or failure ### XXX make a separate tarball to test for this scenario: simply ### containing a makefile.pl/build.pl for test purposes? - { my $configure_requires = $dist->find_configure_requires; + { my $configure_requires = $dist->find_configure_requires; my $ok = $dist->_resolve_prereqs( format => $prereq_format, verbose => $verbose, @@ -274,116 +274,104 @@ sub prepare { target => $prereq_target, force => $force, prereq_build => $prereq_build, - ); - + ); + unless( $ok ) { - + #### use $dist->flush to reset the cache ### error( loc( "Unable to satisfy '%1' for '%2' " . - "-- aborting install", - 'configure_requires', $self->module ) ); + "-- aborting install", + 'configure_requires', $self->module ) ); $dist->status->prepared(0); - $fail++; + $fail++; last RUN; - } + } ### end of prereq resolving ### } - - ### don't run 'perl makefile.pl' again if there's a makefile already + + ### don't run 'perl makefile.pl' again if there's a makefile already if( -e MAKEFILE->() && (-M MAKEFILE->() < -M $dir) && !$force ) { msg(loc("'%1' already exists, not running '%2 %3' again ". " unless you force", MAKEFILE->(), $perl, MAKEFILE_PL->() ), $verbose ); - + } else { unless( -e MAKEFILE_PL->() ) { msg(loc("No '%1' found - attempting to generate one", MAKEFILE_PL->() ), $verbose ); - - $dist->write_makefile_pl( - verbose => $verbose, - force => $force + + $dist->write_makefile_pl( + verbose => $verbose, + force => $force ); - + ### bail out if there's no makefile.pl ### unless( -e MAKEFILE_PL->() ) { - error( loc( "Could not find '%1' - cannot continue", + error( loc( "Could not find '%1' - cannot continue", MAKEFILE_PL->() ) ); - + ### mark that we screwed up ### $dist->status->makefile(0); $fail++; last RUN; } - } - + } + ### you can turn off running this verbose by changing ### the config setting below, although it is really not ### recommended - my $run_verbose = $verbose || + my $run_verbose = $verbose || $conf->get_conf('allow_build_interactivity') || 0; - + ### this makes MakeMaker use defaults if possible, according ### to schwern. See ticket 8047 for details. - local $ENV{PERL_MM_USE_DEFAULT} = 1 unless $run_verbose; - + local $ENV{PERL_MM_USE_DEFAULT} = 1 unless $run_verbose; + ### turn off our PERL5OPT so no modules from CPANPLUS::inc get ### included in the makefile.pl -- it should build without ### also, modules that run in taint mode break if we leave ### our code ref in perl5opt ### XXX we've removed the ENV settings from cp::inc, so only need ### to reset the @INC - #local $ENV{PERL5OPT} = CPANPLUS::inc->original_perl5opt || ''; - + #local $ENV{PERL5OPT} = CPANPLUS::inc->original_perl5opt || ''; + ### make sure it's a string, so that mmflags that have more than ### one key value pair are passed as is, rather than as: ### perl Makefile.PL "key=val key=>val" - - + + #### XXX this needs to be the absolute path to the Makefile.PL ### since cpanp-run-perl uses 'do' to execute the file, and do() ### checks your @INC.. so, if there's _another_ makefile.pl in ### your @INC, it will execute that one... my $makefile_pl = MAKEFILE_PL->( $cb->_safe_path( path => $dir ) ); - + ### setting autoflush to true fixes issue from rt #8047 ### XXX this means that we need to keep the path to CPANPLUS ### in @INC, stopping us from resolving dependencies on CPANPLUS ### at bootstrap time properly. - ### XXX this fails under ipc::run due to the extra quotes, - ### but it works in ipc::open3. however, ipc::open3 doesn't work - ### on win32/cygwin. XXX TODO get a windows box and sort this out - # my $cmd = qq[$perl -MEnglish -le ] . - # QUOTE_PERL_ONE_LINER->( - # qq[\$OUTPUT_AUTOFLUSH++,do(q($makefile_pl))] - # ) - # . $mmflags; - - # my $flush = OPT_AUTOFLUSH; - # my $cmd = "$perl $flush $makefile_pl $mmflags"; - - my $run_perl = $conf->get_program('perlwrapper'); - my $cmd = [$perl, $run_perl, $makefile_pl, @mmflags]; + my @run_perl = ( '-e', PERL_WRAPPER ); + my $cmd = [$perl, @run_perl, $makefile_pl, @mmflags]; ### set ENV var to tell underlying code this is what we're ### executing. - my $captured; + my $captured; my $rv = do { my $env = ENV_CPANPLUS_IS_EXECUTING; local $ENV{$env} = $makefile_pl; scalar run( command => $cmd, buffer => \$captured, - verbose => $run_verbose, # may be interactive + verbose => $run_verbose, # may be interactive ); }; - + unless( $rv ) { error( loc( "Could not run '%1 %2': %3 -- cannot continue", $perl, MAKEFILE_PL->(), $captured ) ); - + $dist->status->makefile(0); $fail++; last RUN; } @@ -391,7 +379,7 @@ sub prepare { ### put the output on the stack, don't print it msg( $captured, 0 ); } - + ### so, nasty feature in Module::Build, that when a Makefile.PL ### is a disguised Build.PL, it generates a Build file, not a ### Makefile. this breaks everything :( see rt bug #19741 @@ -407,39 +395,50 @@ sub prepare { "$^X ".MAKEFILE_PL->(), MAKEFILE->(), BUILD_PL->(), 'Module::Build', MAKEFILE_PL->(), 'Build', MAKEFILE->(), 'prefer_makefile', BUILD_PL->() - )); - + )); + $fail++, last RUN; } - + ### if we got here, we managed to make a 'makefile' ### - $dist->status->makefile( MAKEFILE->($dir) ); - + $dist->status->makefile( MAKEFILE->($dir) ); + + ### Make (haha) sure that Makefile.PL is older than the Makefile + ### we just generated. + eval { + my $makestat = ( stat MAKEFILE->( $dir ) )[9]; + my $mplstat = ( stat MAKEFILE_PL->( $cb->_safe_path( path => $dir ) ) )[9]; + if ( $makestat < $mplstat ) { + my $ftime = $makestat - 60; + utime $ftime, $ftime, MAKEFILE_PL->( $cb->_safe_path( path => $dir ) ); + } + }; + ### start resolving prereqs ### my $prereqs = $self->status->prereqs; - + ### a hashref of prereqs on success, undef on failure ### - $prereqs ||= $dist->_find_prereqs( + $prereqs ||= $dist->_find_prereqs( verbose => $verbose, - file => $dist->status->makefile + file => $dist->status->makefile ); - + unless( $prereqs ) { - error( loc( "Unable to scan '%1' for prereqs", + error( loc( "Unable to scan '%1' for prereqs", $dist->status->makefile ) ); $fail++; last RUN; } } - + unless( $cb->_chdir( dir => $orig ) ) { error( loc( "Could not chdir back to start dir '%1'", $orig ) ); - } - + } + ### save where we wrote this stuff -- same as extract dir in normal ### installer circumstances $dist->status->distdir( $self->status->extract ); - + return $dist->status->prepared( $fail ? 0 : 1); } @@ -467,28 +466,28 @@ sub _find_prereqs { verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, file => { required => 1, allow => FILE_READABLE, store => \$file }, }; - - my $args = check( $tmpl, \%hash ) or return; + + my $args = check( $tmpl, \%hash ) or return; ### see if we got prereqs from MYMETA my $prereqs = $dist->find_mymeta_requires(); - + ### we found some prereqs, we'll trust MYMETA ### but we do need to run it through the callback return $cb->_callbacks->filter_prereqs->( $cb, $prereqs ) if keys %$prereqs; - + my $fh = FileHandle->new(); unless( $fh->open( $file ) ) { error( loc( "Cannot open '%1': %2", $file, $! ) ); return; } - + my %p; while( local $_ = <$fh> ) { - my ($found) = m|^[\#]\s+PREREQ_PM\s+=>\s+(.+)|; - + my ($found) = m|^[\#]\s+PREREQ_PM\s+=>\s+(.+)|; + next unless $found; - + while( $found =~ m/(?:\s)([\w\:]+)=>(?:q\[(.*?)\],?|undef)/g ) { if( defined $p{$1} ) { my $ver = $cb->_version_to_number(version => $2); @@ -496,7 +495,7 @@ sub _find_prereqs { if $cb->_vcmp( $ver, $p{$1} ) > 0; } else { - $p{$1} = $cb->_version_to_number(version => $2); + $p{$1} = $cb->_version_to_number(version => $2); } } last; @@ -505,23 +504,23 @@ sub _find_prereqs { my $href = $cb->_callbacks->filter_prereqs->( $cb, \%p ); $self->status->prereqs( $href ); - + ### just to make sure it's not the same reference ### - return { %$href }; -} + return { %$href }; +} =pod =head2 $bool = $dist->create([perl => '/path/to/perl', make => '/path/to/make', makeflags => 'EXTRA=FLAGS', prereq_target => TARGET, skiptest => BOOL, force => BOOL, verbose => BOOL]) -C creates the files necessary for installation. This means -it will run C and C. This will also scan for and -attempt to satisfy any prerequisites the module may have. +C creates the files necessary for installation. This means +it will run C and C. This will also scan for and +attempt to satisfy any prerequisites the module may have. If you set C to true, it will skip the C stage. -If you set C to true, it will go over all the stages of the -C process again, ignoring any previously cached results. It -will also ignore a bad return value from C and still allow +If you set C to true, it will go over all the stages of the +C process again, ignoring any previously cached results. It +will also ignore a bad return value from C and still allow the operation to return true. Returns true on success and false on failure. @@ -536,11 +535,11 @@ sub create { ### just via a different dist object my $dist = shift; my $self = $dist->parent; - + ### we're also the cpan_dist, since we don't need to have anything - ### prepared - $dist = $self->status->dist_cpan if $self->status->dist_cpan; - $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; + ### prepared + $dist = $self->status->dist_cpan if $self->status->dist_cpan; + $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; my $cb = $self->parent; my $conf = $cb->configure_object; @@ -551,63 +550,64 @@ sub create { error( loc( "No dir found to operate on!" ) ); return; } - + my $args; - my( $force, $verbose, $make, $makeflags, $skiptest, $prereq_target, $perl, + my( $force, $verbose, $make, $makeflags, $skiptest, $prereq_target, $perl, @mmflags, $prereq_format, $prereq_build); { local $Params::Check::ALLOW_UNKNOWN = 1; my $tmpl = { perl => { default => $^X, store => \$perl }, - force => { default => $conf->get_conf('force'), + force => { default => $conf->get_conf('force'), store => \$force }, - verbose => { default => $conf->get_conf('verbose'), + verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, - make => { default => $conf->get_program('make'), + make => { default => $conf->get_program('make'), store => \$make }, - makeflags => { default => $conf->get_conf('makeflags'), + makeflags => { default => $conf->get_conf('makeflags'), store => \$makeflags }, - skiptest => { default => $conf->get_conf('skiptest'), + skiptest => { default => $conf->get_conf('skiptest'), store => \$skiptest }, - prereq_target => { default => '', store => \$prereq_target }, + prereq_target => { default => '', store => \$prereq_target }, ### don't set the default prereq format to 'makemaker' -- wrong! prereq_format => { #default => $self->status->installer_type, default => '', - store => \$prereq_format }, - prereq_build => { default => 0, store => \$prereq_build }, - }; + store => \$prereq_format }, + prereq_build => { default => 0, store => \$prereq_build }, + }; $args = check( $tmpl, \%hash ) or return; } - + ### maybe we already ran a create on this object? ### make sure we add to include path again, just in case we came from ### ->save_state, at which point we need to restore @INC/$PERL5LIB if( $dist->status->created && !$force ) { $self->add_to_includepath; return 1; - } - + } + ### store the arguments, so ->install can use them in recursive loops ### $dist->status->_create_args( $args ); - + unless( $dist->status->prepared ) { error( loc( "You have not successfully prepared a '%2' distribution ". "yet -- cannot create yet", __PACKAGE__ ) ); return; } - - + + ### chdir to work directory ### my $orig = cwd(); unless( $cb->_chdir( dir => $dir ) ) { error( loc( "Could not chdir to build directory '%1'", $dir ) ); return; } - + my $fail; my $prereq_fail; my $test_fail; + my $status = { }; RUN: { ### this will set the directory back to the start - ### dir, so we must chdir /again/ + ### dir, so we must chdir /again/ my $ok = $dist->_resolve_prereqs( format => $prereq_format, verbose => $verbose, @@ -616,40 +616,44 @@ sub create { force => $force, prereq_build => $prereq_build, ); - + unless( $cb->_chdir( dir => $dir ) ) { error( loc( "Could not chdir to build directory '%1'", $dir ) ); return; - } - + } + unless( $ok ) { - + #### use $dist->flush to reset the cache ### error( loc( "Unable to satisfy prerequisites for '%1' " . - "-- aborting install", $self->module ) ); + "-- aborting install", $self->module ) ); $dist->status->make(0); $fail++; $prereq_fail++; last RUN; - } - ### end of prereq resolving ### - + } + ### end of prereq resolving ### + my $captured; - ### 'make' section ### + ### 'make' section ### if( -d BLIB->($dir) && (-M BLIB->($dir) < -M $dir) && !$force ) { msg(loc("Already ran '%1' for this module [%2] -- " . - "not running again unless you force", + "not running again unless you force", $make, $self->module ), $verbose ); } else { unless(scalar run( command => [$make, $makeflags], buffer => \$captured, - verbose => $verbose ) + verbose => $verbose ) ) { error( loc( "MAKE failed: %1 %2", $!, $captured ) ); + if ( $conf->get_conf('cpantest') ) { + $status->{stage} = 'build'; + $status->{capture} = $captured; + } $dist->status->make(0); $fail++; last RUN; } - + ### put the output on the stack, don't print it msg( $captured, 0 ); @@ -657,12 +661,12 @@ sub create { ### add this directory to your lib ### $self->add_to_includepath(); - + ### dont bail out here, there's a conditional later on #last RUN if $skiptest; } - - ### 'make test' section ### + + ### 'make test' section ### unless( $skiptest ) { ### turn off our PERL5OPT so no modules from CPANPLUS::inc get @@ -673,16 +677,16 @@ sub create { #local $ENV{PERL5OPT} = CPANPLUS::inc->original_perl5opt || ''; ### you can turn off running this verbose by changing - ### the config setting below, although it is really not + ### the config setting below, although it is really not ### recommended - my $run_verbose = - $verbose || + my $run_verbose = + $verbose || $conf->get_conf('allow_build_interactivity') || 0; - ### XXX need to add makeflags here too? + ### XXX need to add makeflags here too? ### yes, but they should really be split out -- see bug #4143 - if( scalar run( + if( scalar run( command => [$make, 'test', $makeflags], buffer => \$captured, verbose => $run_verbose, @@ -695,47 +699,59 @@ sub create { } else { msg( loc( "MAKE TEST passed: %1", $captured ), 0 ); } - + + if ( $conf->get_conf('cpantest') ) { + $status->{stage} = 'test'; + $status->{capture} = $captured; + } + $dist->status->test(1); } else { - error( loc( "MAKE TEST failed: %1", $captured ) ); - + error( loc( "MAKE TEST failed: %1", $captured ), ( $run_verbose ? 0 : 1 ) ); + + if ( $conf->get_conf('cpantest') ) { + $status->{stage} = 'test'; + $status->{capture} = $captured; + } + ### send out error report here? or do so at a higher level? ### --higher level --kane. $dist->status->test(0); - + ### mark specifically *test* failure.. so we dont ### send success on force... $test_fail++; - + if( !$force and !$cb->_callbacks->proceed_on_test_failure->( - $self, $captured ) + $self, $captured ) ) { - $fail++; last RUN; + $fail++; last RUN; } } } } # - + unless( $cb->_chdir( dir => $orig ) ) { error( loc( "Could not chdir back to start dir '%1'", $orig ) ); - } - + } + + ### TODO: Add $stage to _send_report() ### send out test report? ### only do so if the failure is this module, not its prereq if( $conf->get_conf('cpantest') and not $prereq_fail) { - $cb->_send_report( + $cb->_send_report( module => $self, failed => $test_fail || $fail, buffer => CPANPLUS::Error->stack_as_string, + status => $status, verbose => $verbose, force => $force, ) or error(loc("Failed to send test report for '%1'", $self->module ) ); - } - + } + return $dist->status->created( $fail ? 0 : 1); -} +} =pod @@ -744,7 +760,7 @@ sub create { C runs the following command: make install -Returns true on success, false on failure. +Returns true on success, false on failure. =cut @@ -754,64 +770,64 @@ sub install { ### to the same module object my $dist = shift(); my $self = $dist->parent; - $dist = $self->status->dist_cpan if $self->status->dist_cpan; - + $dist = $self->status->dist_cpan if $self->status->dist_cpan; + my $cb = $self->parent; my $conf = $cb->configure_object; my %hash = @_; - - + + unless( $dist->status->created ) { error(loc("You have not successfully created a '%2' distribution yet " . "-- cannot install yet", __PACKAGE__ )); return; } - + my $dir; unless( $dir = $self->status->extract ) { error( loc( "No dir found to operate on!" ) ); return; } - + my $args; my($force,$verbose,$make,$makeflags); { local $Params::Check::ALLOW_UNKNOWN = 1; my $tmpl = { - force => { default => $conf->get_conf('force'), + force => { default => $conf->get_conf('force'), store => \$force }, - verbose => { default => $conf->get_conf('verbose'), + verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, - make => { default => $conf->get_program('make'), + make => { default => $conf->get_program('make'), store => \$make }, - makeflags => { default => $conf->get_conf('makeflags'), + makeflags => { default => $conf->get_conf('makeflags'), store => \$makeflags }, - }; - + }; + $args = check( $tmpl, \%hash ) or return; } ### value set and false -- means failure ### - if( defined $self->status->installed && - !$self->status->installed && !$force + if( defined $self->status->installed && + !$self->status->installed && !$force ) { error( loc( "Module '%1' has failed to install before this session " . "-- aborting install", $self->module ) ); return; } - + $dist->status->_install_args( $args ); - + my $orig = cwd(); unless( $cb->_chdir( dir => $dir ) ) { error( loc( "Could not chdir to build directory '%1'", $dir ) ); return; } - + my $fail; my $captured; - + ### 'make install' section ### - ### XXX need makeflags here too? + ### XXX need makeflags here too? ### yes, but they should really be split out.. see bug #4143 my $cmd = [$make, 'install', $makeflags]; my $sudo = $conf->get_program('sudo'); @@ -821,33 +837,33 @@ sub install { unless(scalar run( command => $cmd, verbose => $verbose, buffer => \$captured, - ) ) { + ) ) { error( loc( "MAKE INSTALL failed: %1 %2", $!, $captured ) ); - $fail++; - } + $fail++; + } ### put the output on the stack, don't print it msg( $captured, 0 ); - + unless( $cb->_chdir( dir => $orig ) ) { error( loc( "Could not chdir back to start dir '%1'", $orig ) ); - } - + } + return $dist->status->installed( $fail ? 0 : 1 ); - + } =pod =head2 $bool = $dist->write_makefile_pl([force => BOOL, verbose => BOOL]) -This routine can write a C from the information in a +This routine can write a C from the information in a module object. It is used to write a C when the original author forgot it (!!). Returns 1 on success and false on failure. -The file gets written to the directory the module's been extracted +The file gets written to the directory the module's been extracted to. =cut @@ -857,9 +873,9 @@ sub write_makefile_pl { ### just via a different dist object my $dist = shift; my $self = $dist->parent; - $dist = $self->status->dist_cpan if $self->status->dist_cpan; - $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; - + $dist = $self->status->dist_cpan if $self->status->dist_cpan; + $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; + my $cb = $self->parent; my $conf = $cb->configure_object; my %hash = @_; @@ -869,23 +885,23 @@ sub write_makefile_pl { error( loc( "No dir found to operate on!" ) ); return; } - + my ($force, $verbose); my $tmpl = { - force => { default => $conf->get_conf('force'), + force => { default => $conf->get_conf('force'), store => \$force }, - verbose => { default => $conf->get_conf('verbose'), - store => \$verbose }, - }; + verbose => { default => $conf->get_conf('verbose'), + store => \$verbose }, + }; + + my $args = check( $tmpl, \%hash ) or return; - my $args = check( $tmpl, \%hash ) or return; - my $file = MAKEFILE_PL->($dir); if( -s $file && !$force ) { - msg(loc("Already created '%1' - not doing so again without force", + msg(loc("Already created '%1' - not doing so again without force", $file ), $verbose ); return 1; - } + } ### due to a bug with AS perl 5.8.4 built 810 (and maybe others) ### opening files with content in them already does nasty things; @@ -899,58 +915,58 @@ sub write_makefile_pl { error( loc( "Could not create file '%1': %2", $file, $! ) ); return; } - + my $mf = MAKEFILE_PL->(); my $name = $self->module; my $version = $self->version; my $author = $self->author->author; my $href = $self->status->prereqs; - my $prereqs = join ",\n", map { - (' ' x 25) . "'$_'\t=> '$href->{$_}'" - } keys %$href; - $prereqs ||= ''; # just in case there are none; - + my $prereqs = join ",\n", map { + (' ' x 25) . "'$_'\t=> '$href->{$_}'" + } keys %$href; + $prereqs ||= ''; # just in case there are none; + print $fh qq| ### Auto-generated $mf by CPANPLUS ### - + use ExtUtils::MakeMaker; - + WriteMakefile( NAME => '$name', VERSION => '$version', AUTHOR => '$author', PREREQ_PM => { -$prereqs +$prereqs }, ); - \n|; - + \n|; + $fh->close; return 1; -} - +} + sub dist_dir { ### just in case you already did a call for this module object ### just via a different dist object my $dist = shift; my $self = $dist->parent; - $dist = $self->status->dist_cpan if $self->status->dist_cpan; - $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; - + $dist = $self->status->dist_cpan if $self->status->dist_cpan; + $self->status->dist_cpan( $dist ) unless $self->status->dist_cpan; + my $cb = $self->parent; my $conf = $cb->configure_object; my %hash = @_; - + my $make; my $verbose; { local $Params::Check::ALLOW_UNKNOWN = 1; my $tmpl = { make => { default => $conf->get_program('make'), - store => \$make }, - verbose => { default => $conf->get_conf('verbose'), + store => \$make }, + verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, - }; - - check( $tmpl, \%hash ) or return; + }; + + check( $tmpl, \%hash ) or return; } @@ -959,7 +975,7 @@ sub dist_dir { error( loc( "No dir found to operate on!" ) ); return; } - + ### chdir to work directory ### my $orig = cwd(); unless( $cb->_chdir( dir => $dir ) ) { @@ -968,14 +984,14 @@ sub dist_dir { } my $fail; my $distdir; - TRY: { + TRY: { $dist->prepare( @_ ) or (++$fail, last TRY); - my $captured; + my $captured; unless(scalar run( command => [$make, 'distdir'], buffer => \$captured, - verbose => $verbose ) + verbose => $verbose ) ) { error( loc( "MAKE DISTDIR failed: %1 %2", $!, $captured ) ); ++$fail, last TRY; @@ -998,7 +1014,7 @@ sub dist_dir { return if $fail; return $distdir; -} +} 1; diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Error.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Error.pm index c42435f1922..968cead5605 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Error.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Error.pm @@ -8,7 +8,7 @@ use Log::Message private => 0;; =head1 NAME -CPANPLUS::Error +CPANPLUS::Error - error handling for CPANPLUS =head1 SYNOPSIS @@ -79,17 +79,17 @@ BEGIN { for my $func ( @EXPORT ) { no strict 'refs'; - + my $prefix = 'cp_'; my $name = $func; $name =~ s/^$prefix//g; - + *$func = sub { my $msg = shift; - + ### no point storing non-messages return unless defined $msg; - + $log->store( message => $msg, tag => uc $name, @@ -143,7 +143,8 @@ local $| = 1; $ERROR_FH = \*STDERR; $MSG_FH = \*STDOUT; -package Log::Message::Handlers; +package # Hide from Pause + Log::Message::Handlers; use Carp (); { diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/FAQ.pod b/Master/tlpkg/tlperl/lib/CPANPLUS/FAQ.pod index 82bb57aaf47..00c186ab0d7 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/FAQ.pod +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/FAQ.pod @@ -2,6 +2,10 @@ =head1 NAME +CPANPLUS::FAQ - CPANPLUS Frequently Asked Questions + +=head1 NAME + CPANPLUS::FAQ =head1 DESCRIPTION @@ -20,10 +24,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =cut diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Hacking.pod b/Master/tlpkg/tlperl/lib/CPANPLUS/Hacking.pod index 6a754fb25ee..c226b071691 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Hacking.pod +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Hacking.pod @@ -2,7 +2,7 @@ =head1 NAME -CPANPLUS::Hacking +CPANPLUS::Hacking - developing CPANPLUS =head1 DESCRIPTION @@ -14,8 +14,8 @@ features or patches to CPANPLUS. =head1 OBTAINING CPANPLUS -Checkout CPANPLUS from its Subversion repository at -L . +Checkout CPANPLUS from its GIT repository at +L . =head1 INSTALLING CPANPLUS @@ -73,7 +73,7 @@ better than not reporting it at all. Before you do so though, make sure you have the B development snapshot, and the bug still persists there. If so, report the bug to this address: - cpanplus-devel@lists.sourceforge.net + bug-cpanplus@rt.cpan.org A good C would have the following characteristics: @@ -115,7 +115,7 @@ We prefer patches in the following format: =item * Including patches for code + tests + docs -=item * Sent per mail to cpanplus-devel@lists.sourceforge.net +=item * Sent per mail to bug-cpanplus@rt.cpan.org =item * With subject containing C<[PATCH]> + description of the patch diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals.pm index 4756421a4ad..e9f97bfa2a1 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals.pm @@ -42,13 +42,13 @@ use vars qw[@ISA $VERSION]; CPANPLUS::Internals::Report ]; -$VERSION = "0.9103"; +$VERSION = "0.9121"; =pod =head1 NAME -CPANPLUS::Internals +CPANPLUS::Internals - CPANPLUS internals =head1 SYNOPSIS @@ -109,7 +109,7 @@ Returns the object on success, or dies on failure. ### if extra callbacks are added, don't forget to update the ### 02-internals.t test script with them! my $callback_map = { - ### name default value + ### name default value install_prerequisite => 1, # install prereqs when 'ask' is set? edit_test_report => 0, # edit the prepared test report? send_test_report => 1, # send the test report? @@ -121,7 +121,7 @@ Returns the object on success, or dies on failure. proceed_on_test_failure => sub { return 0 }, munge_dist_metafile => sub { return $_[1] }, }; - + my $status = Object::Accessor->new; $status->mk_accessors(qw[pending_prereqs]); @@ -169,14 +169,14 @@ Returns the object on success, or dies on failure. for my $name ( $callback->ls_accessors ) { my $rv = ref $callback_map->{$name} ? 'sub return value' : $callback_map->{$name} ? 'true' : 'false'; - + $args->_callbacks->$name( sub { msg(loc("DEFAULT '%1' HANDLER RETURNING '%2'", - $name, $rv), $args->_conf->get_conf('debug')); - return ref $callback_map->{$name} + $name, $rv), $args->_conf->get_conf('debug')); + return ref $callback_map->{$name} ? $callback_map->{$name}->( @_ ) : $callback_map->{$name}; - } + } ); } @@ -199,24 +199,24 @@ Returns the object on success, or dies on failure. } ### different source engines available now, so set them here - { my $store = $conf->get_conf( 'source_engine' ) + { my $store = $conf->get_conf( 'source_engine' ) || DEFAULT_SOURCE_ENGINE; unless( can_load( modules => { $store => '0.0' }, verbose => 1 ) ) { error( loc( "Could not load source engine '%1'", $store ) ); - + if( $store ne DEFAULT_SOURCE_ENGINE ) { msg( loc("Falling back to %1", DEFAULT_SOURCE_ENGINE), 1 ); - + load DEFAULT_SOURCE_ENGINE; - + base->import( DEFAULT_SOURCE_ENGINE ); } else { return; - } + } } else { base->import( $store ); - } + } } return $args; @@ -268,7 +268,7 @@ be flushed. ### File::Fetch's method fail list } elsif ( $what eq 'methods' ) { - ### still fucking p4 :( ### + ### still unbelievably p4 :( ### $File'Fetch::METHOD_FAIL = $File'Fetch::METHOD_FAIL = {}; ### blow away the m::l::c cache, so modules can be (re)loaded @@ -293,7 +293,7 @@ be flushed. ### if extra callbacks are added, don't forget to update the ### 02-internals.t test script with them! -=pod +=pod =head2 $bool = $internals->_register_callback( name => CALLBACK_NAME, code => CODEREF ); @@ -312,20 +312,20 @@ the prerequisite and false to skip it. =item send_test_report Is called when the user should be prompted if he wishes to send the -test report. Should return a boolean indicating true to send the +test report. Should return a boolean indicating true to send the test report and false to skip it. =item munge_test_report Is called when the test report message has been composed, giving -the user a chance to programatically alter it. Should return the +the user a chance to programatically alter it. Should return the (munged) message to be sent. =item edit_test_report Is called when the user should be prompted to edit test reports -about to be sent out by Test::Reporter. Should return a boolean -indicating true to edit the test report in an editor and false +about to be sent out by Test::Reporter. Should return a boolean +indicating true to edit the test report in an editor and false to skip it. =item proceed_on_test_failure @@ -365,36 +365,36 @@ written to the metafile. } # =head2 $bool = $internals->_add_callback( name => CALLBACK_NAME, code => CODEREF ); -# +# # Adds a new callback to be used from anywhere in the system. If the callback # is already known, an error is raised and false is returned. If the callback # is not yet known, it is added, and the corresponding coderef is registered # using the -# +# # =cut -# +# # sub _add_callback { # my $self = shift or return; # my %hash = @_; -# +# # my ($name,$code); # my $tmpl = { # name => { required => 1, store => \$name, }, # code => { required => 1, allow => IS_CODEREF, # store => \$code }, # }; -# +# # check( $tmpl, \%hash ) or return; -# +# # if( $callback->can( $name ) ) { # error(loc("Callback '%1' is already registered")); # return; # } -# +# # $callback->mk_accessor( $name ); -# +# # $self->_register_callback( name => $name, code => $code ) or return; -# +# # return 1; # } @@ -424,14 +424,14 @@ sub _add_to_includepath { check( $tmpl, \%hash ) or return; my $s = $Config{'path_sep'}; - + ### only add if it's not added yet for my $lib (@$dirs) { push @INC, $lib unless grep { $_ eq $lib } @INC; # - ### it will be complaining if $ENV{PERL5LIB] is not defined (yet). - local $^W; - $ENV{'PERL5LIB'} .= $s . $lib + ### it will be complaining if $ENV{PERL5LIB] is not defined (yet). + local $^W; + $ENV{'PERL5LIB'} .= $s . $lib unless $ENV{'PERL5LIB'} =~ qr|\Q$s$lib\E|; } diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Constants.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Constants.pm index 443d5a4ca8a..bd48a1db8c6 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Constants.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Constants.pm @@ -21,10 +21,10 @@ sub constants { @EXPORT }; use constant INSTALLER_BUILD => 'CPANPLUS::Dist::Build'; -use constant INSTALLER_MM => 'CPANPLUS::Dist::MM'; -use constant INSTALLER_SAMPLE +use constant INSTALLER_MM => 'CPANPLUS::Dist::MM'; +use constant INSTALLER_SAMPLE => 'CPANPLUS::Dist::Sample'; -use constant INSTALLER_BASE => 'CPANPLUS::Dist::Base'; +use constant INSTALLER_BASE => 'CPANPLUS::Dist::Base'; use constant INSTALLER_AUTOBUNDLE => 'CPANPLUS::Dist::Autobundle'; @@ -50,26 +50,26 @@ use constant ON_NETWARE => $^O eq 'NetWare'; use constant ON_CYGWIN => $^O eq 'cygwin'; use constant ON_VMS => $^O eq 'VMS'; -use constant DOT_CPANPLUS => ON_VMS ? '_cpanplus' : '.cpanplus'; +use constant DOT_CPANPLUS => ON_VMS ? '_cpanplus' : '.cpanplus'; use constant OPT_AUTOFLUSH => '-MCPANPLUS::Internals::Utils::Autoflush'; use constant UNKNOWN_DL_LOCATION - => 'UNKNOWN-ORIGIN'; + => 'UNKNOWN-ORIGIN'; use constant NMAKE => 'nmake.exe'; -use constant NMAKE_URL => +use constant NMAKE_URL => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe'; -use constant INSTALL_VIA_PACKAGE_MANAGER +use constant INSTALL_VIA_PACKAGE_MANAGER => sub { my $fmt = $_[0] or return; return 1 if $fmt ne INSTALLER_BUILD and $fmt ne INSTALLER_MM; - }; + }; use constant IS_CODEREF => sub { ref $_[-1] eq 'CODE' }; -use constant IS_MODOBJ => sub { UNIVERSAL::isa($_[-1], - 'CPANPLUS::Module') }; +use constant IS_MODOBJ => sub { UNIVERSAL::isa($_[-1], + 'CPANPLUS::Module') }; use constant IS_FAKE_MODOBJ => sub { UNIVERSAL::isa($_[-1], 'CPANPLUS::Module::Fake') }; use constant IS_AUTHOBJ => sub { UNIVERSAL::isa($_[-1], @@ -83,48 +83,48 @@ use constant IS_CONFOBJ => sub { UNIVERSAL::isa($_[-1], use constant IS_RVOBJ => sub { UNIVERSAL::isa($_[-1], 'CPANPLUS::Backend::RV') }; - + use constant IS_INTERNALS_OBJ => sub { UNIVERSAL::isa($_[-1], - 'CPANPLUS::Internals') }; - -use constant IS_FILE => sub { return 1 if -e $_[-1] }; + 'CPANPLUS::Internals') }; + +use constant IS_FILE => sub { return 1 if -e $_[-1] }; -use constant FILE_EXISTS => sub { +use constant FILE_EXISTS => sub { my $file = $_[-1]; return 1 if IS_FILE->($file); - local $Carp::CarpLevel = + local $Carp::CarpLevel = $Carp::CarpLevel+2; error(loc( q[File '%1' does not exist], $file)); return; - }; + }; -use constant FILE_READABLE => sub { +use constant FILE_READABLE => sub { my $file = $_[-1]; return 1 if -e $file && -r _; - local $Carp::CarpLevel = + local $Carp::CarpLevel = $Carp::CarpLevel+2; error( loc( q[File '%1' is not readable ]. q[or does not exist], $file)); return; - }; + }; use constant IS_DIR => sub { return 1 if -d $_[-1] }; -use constant DIR_EXISTS => sub { +use constant DIR_EXISTS => sub { my $dir = $_[-1]; return 1 if IS_DIR->($dir); - local $Carp::CarpLevel = - $Carp::CarpLevel+2; + local $Carp::CarpLevel = + $Carp::CarpLevel+2; error(loc(q[Dir '%1' does not exist], $dir)); return; - }; - - ### On VMS, if the $Config{make} is either MMK + }; + + ### On VMS, if the $Config{make} is either MMK ### or MMS, then the makefile is 'DESCRIP.MMS'. use constant MAKEFILE => sub { my $file = - (ON_VMS and + (ON_VMS and $Config::Config{make} =~ /MM[S|K]/i) ? 'DESCRIP.MMS' : 'Makefile'; @@ -132,27 +132,27 @@ use constant MAKEFILE => sub { my $file = return @_ ? File::Spec->catfile( @_, $file ) : $file; - }; + }; use constant MAKEFILE_PL => sub { return @_ ? File::Spec->catfile( @_, 'Makefile.PL' ) : 'Makefile.PL'; - }; + }; use constant BUILD_PL => sub { return @_ ? File::Spec->catfile( @_, 'Build.PL' ) : 'Build.PL'; }; - + use constant META_YML => sub { return @_ ? File::Spec->catfile( @_, 'META.yml' ) : 'META.yml'; - }; + }; use constant MYMETA_YML => sub { return @_ ? File::Spec->catfile( @_, 'MYMETA.yml' ) : 'MYMETA.yml'; - }; + }; use constant META_JSON => sub { return @_ ? File::Spec->catfile( @_, 'META.json' ) @@ -167,41 +167,41 @@ use constant MYMETA_JSON => sub { return @_ use constant BLIB => sub { return @_ ? File::Spec->catfile(@_, 'blib') : 'blib'; - }; + }; use constant LIB => 'lib'; use constant LIB_DIR => sub { return @_ ? File::Spec->catdir(@_, LIB) : LIB; - }; -use constant AUTO => 'auto'; + }; +use constant AUTO => 'auto'; use constant LIB_AUTO_DIR => sub { return @_ ? File::Spec->catdir(@_, LIB, AUTO) : File::Spec->catdir(LIB, AUTO) - }; + }; use constant ARCH => 'arch'; use constant ARCH_DIR => sub { return @_ ? File::Spec->catdir(@_, ARCH) : ARCH; - }; + }; use constant ARCH_AUTO_DIR => sub { return @_ ? File::Spec->catdir(@_,ARCH,AUTO) : File::Spec->catdir(ARCH,AUTO) - }; + }; use constant BLIB_LIBDIR => sub { return @_ ? File::Spec->catdir( @_, BLIB->(), LIB ) : File::Spec->catdir( BLIB->(), LIB ); - }; + }; -use constant CONFIG_USER_LIB_DIR => sub { +use constant CONFIG_USER_LIB_DIR => sub { require CPANPLUS::Internals::Utils; LIB_DIR->( CPANPLUS::Internals::Utils->_home_dir, DOT_CPANPLUS ); - }; + }; use constant CONFIG_USER_FILE => sub { File::Spec->catfile( CONFIG_USER_LIB_DIR->(), @@ -214,13 +214,13 @@ use constant CONFIG_SYSTEM_FILE => sub { my $dir = File::Basename::dirname( $INC{'CPANPLUS/Internals.pm'} ); - + ### XXX use constants - File::Spec->catfile( + File::Spec->catfile( $dir, qw[Config System.pm] ); - }; - + }; + use constant README => sub { my $obj = $_[0]; my $pkg = $obj->package_name; $pkg .= '-' . $obj->package_version . @@ -234,8 +234,8 @@ use constant META => sub { my $obj = $_[0]; $pkg .= '-' . $obj->package_version . '.' . META_EXT; return $pkg; - }; - + }; + use constant OPEN_FILE => sub { my($file, $mode) = (@_, ''); my $fh; @@ -245,23 +245,23 @@ use constant OPEN_FILE => sub { $file, $!)); return $fh if $fh; return; - }; - -use constant OPEN_DIR => sub { + }; + +use constant OPEN_DIR => sub { my $dir = shift; my $dh; opendir $dh, $dir or error(loc( "Could not open dir '%1': %2", $dir, $! )); - + return $dh if $dh; return; }; -use constant READ_DIR => sub { +use constant READ_DIR => sub { my $dir = shift; my $dh = OPEN_DIR->( $dir ) or return; - + ### exclude . and .. my @files = grep { $_ !~ /^\.{1,2}/ } readdir($dh); @@ -271,27 +271,27 @@ use constant READ_DIR => sub { if( ON_VMS ) { s/(? sub { my $file = $_[0] or return; $file =~ s/.gz$//i; return $file; - }; - + }; + use constant CHECKSUMS => 'CHECKSUMS'; use constant PGP_HEADER => '-----BEGIN PGP SIGNED MESSAGE-----'; use constant ENV_CPANPLUS_CONFIG => 'PERL5_CPANPLUS_CONFIG'; use constant ENV_CPANPLUS_IS_EXECUTING => 'PERL5_CPANPLUS_IS_EXECUTING'; -use constant DEFAULT_EMAIL => 'cpanplus@example.com'; +use constant DEFAULT_EMAIL => 'cpanplus@example.com'; use constant CPANPLUS_UA => sub { ### for the version number ### require CPANPLUS::Internals; - "CPANPLUS/$CPANPLUS::Internals::VERSION" + "CPANPLUS/$CPANPLUS::Internals::VERSION" }; use constant TESTERS_URL => sub { 'http://cpantesters.org/distro/'. @@ -301,15 +301,15 @@ use constant TESTERS_DETAILS_URL => sub { 'http://cpantesters.org/distro/'. uc(substr($_[0],0,1)) .'/'. $_[0]; - }; + }; -use constant CREATE_FILE_URI - => sub { +use constant CREATE_FILE_URI + => sub { my $dir = $_[0] or return; - return $dir =~ m|^/| + return $dir =~ m|^/| ? 'file://' . $dir - : 'file:///' . $dir; - }; + : 'file:///' . $dir; + }; use constant EMPTY_DSLIP => ' '; @@ -318,64 +318,65 @@ use constant CUSTOM_AUTHOR_ID use constant DOT_SHELL_DEFAULT_RC => '.shell-default.rc'; - + use constant SOURCE_SQLITE_DB => 'db.sql'; -use constant PREREQ_IGNORE => 0; +use constant PREREQ_IGNORE => 0; use constant PREREQ_INSTALL => 1; use constant PREREQ_ASK => 2; use constant PREREQ_BUILD => 3; use constant BOOLEANS => [0,1]; -use constant CALLING_FUNCTION +use constant CALLING_FUNCTION => sub { my $lvl = $_[0] || 0; - return join '::', (caller(2+$lvl))[3] + return join '::', (caller(2+$lvl))[3] }; use constant PERL_CORE => 'perl'; +use constant PERL_WRAPPER => 'use strict; BEGIN { my $old = select STDERR; $|++; select $old; $|++; $0 = shift(@ARGV); my $rv = do($0); die $@ if $@; }'; use constant STORABLE_EXT => '.stored'; use constant GET_XS_FILES => sub { my $dir = $_[0] or return; require File::Find; my @files; - File::Find::find( + File::Find::find( sub { push @files, $File::Find::name if $File::Find::name =~ /\.xs$/i }, $dir ); - + return @files; - }; + }; -use constant INSTALL_LOG_FILE +use constant INSTALL_LOG_FILE => sub { my $obj = shift or return; my $name = $obj->name; $name =~ s/::/-/g; $name .= '-'. $obj->version; $name .= '-'. scalar(time) . '.log'; return $name; - }; + }; -use constant ON_OLD_CYGWIN => do { ON_CYGWIN and $] < 5.008 +use constant ON_OLD_CYGWIN => do { ON_CYGWIN and $] < 5.008 ? loc( "Your perl version for %1 is too low; ". "Require %2 or higher for this function", $^O, '5.8.0' ) - : ''; + : ''; }; ### XXX these 2 are probably obsolete -- check & remove; -use constant DOT_EXISTS => '.exists'; +use constant DOT_EXISTS => '.exists'; -use constant QUOTE_PERL_ONE_LINER +use constant QUOTE_PERL_ONE_LINER => sub { my $line = shift or return; ### use double quotes on these systems - return qq["$line"] + return qq["$line"] if ON_WIN32 || ON_NETWARE || ON_VMS; ### single quotes on the rest return qq['$line']; - }; + }; -1; +1; # Local variables: # c-indentation-style: bsd diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Constants/Report.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Constants/Report.pm index abdb3c98dd0..294de692369 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Constants/Report.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Constants/Report.pm @@ -100,7 +100,7 @@ use constant UNSUPPORTED_OS return 1; } return 0; - }; + }; use constant PERL_VERSION_TOO_LOW => sub { @@ -116,7 +116,7 @@ use constant PERL_VERSION_TOO_LOW return 1; } return 0; - }; + }; use constant NO_TESTS_DEFINED => sub { @@ -125,10 +125,10 @@ use constant NO_TESTS_DEFINED /(No tests defined( for [\w:]+ extension)?\.)/ and $buffer !~ /\*\.t/m and $buffer !~ /test\.pl/m - ) { - return $1 + ) { + return $1 } - + return; }; @@ -149,8 +149,8 @@ use constant MISSING_PREREQS_LIST my @list = map { s/.pm$//; s|/|::|g; $_ } ($last =~ m/\bCan\'t locate (\S+) in \@INC/g); - - ### make sure every missing prereq is only + + ### make sure every missing prereq is only ### listed once { my %seen; @list = grep { !$seen{$_}++ } @list @@ -162,7 +162,7 @@ use constant MISSING_PREREQS_LIST use constant MISSING_EXTLIBS_LIST => sub { my $buffer = shift; - my @list = + my @list = ($buffer =~ m/No library found for -l([-\w]+)/g); @@ -175,9 +175,9 @@ use constant REPORT_MESSAGE_HEADER return << "."; Dear $author, - + This is a computer-generated error report created automatically by -CPANPLUS, version $version. Testers personal comments may appear +CPANPLUS, version $version. Testers personal comments may appear at the end of this report. . @@ -197,18 +197,35 @@ Below is the error stack from stage '$stage': $buffer +. + }; + +use constant REPORT_MESSAGE_PASS_HEADER + => sub { + my($stage, $buffer) = @_; + return << "."; + +Thank you for uploading your work to CPAN. Congratulations! +All tests were successful. + +TEST RESULTS: + +Below is the error stack from stage '$stage': + +$buffer + . }; use constant REPORT_MISSING_PREREQS => sub { my ($author,$email,@missing) = @_; - $author = ($author && $email) - ? "$author ($email)" + $author = ($author && $email) + ? "$author ($email)" : 'Your Name Here'; - + my $modules = join "\n", @missing; - my $prereqs = join "\n", + my $prereqs = join "\n", map {"\t'$_'\t=> '0',". " # or a minimum working version"} @missing; @@ -242,7 +259,7 @@ use constant REPORT_MISSING_TESTS return << "."; RECOMMENDATIONS: -It would be very helpful if you could include even a simple test +It would be very helpful if you could include even a simple test script in the next release, so people can verify which platforms can successfully install them, as well as avoid regression bugs? @@ -266,7 +283,7 @@ Thanks! :-) . }; -use constant REPORT_LOADED_PREREQS +use constant REPORT_LOADED_PREREQS => sub { my $mod = shift; my $cb = $mod->parent; @@ -274,13 +291,13 @@ use constant REPORT_LOADED_PREREQS ### not every prereq may be coming from CPAN ### so maybe we wont find it in our module - ### tree at all... + ### tree at all... ### skip ones that cant be found in teh list ### as reported in #12723 my @prq = grep { defined } map { $cb->module_tree($_) } sort keys %$prq; - + ### no prereqs? return '' unless @prq; @@ -288,27 +305,27 @@ use constant REPORT_LOADED_PREREQS my $str = << "."; PREREQUISITES: -Here is a list of prerequisites you specified and versions we +Here is a list of prerequisites you specified and versions we managed to load: - + . - $str .= join '', - map { sprintf "\t%s %-30s %8s %8s\n", + $str .= join '', + map { sprintf "\t%s %-30s %8s %8s\n", @$_ - + } [' ', 'Module Name', 'Have', 'Want'], map { my $want = $prq->{$_->name}; - [ do { $_->is_uptodate( + [ do { $_->is_uptodate( version => $want - ) ? ' ' : '!' + ) ? ' ' : '!' }, $_->name, $_->installed_version, $want ], ### might be empty entries in there - } grep { $_ } @prq; - + } grep { $_ } @prq; + return $str; }; @@ -348,23 +365,23 @@ use constant REPORT_TOOLCHAIN_VERSIONS Perl module toolchain versions installed: . - $str .= join '', - map { sprintf "\t%-30s %8s\n", + $str .= join '', + map { sprintf "\t%-30s %8s\n", @$_ - + } ['Module Name', 'Have'], map { [ $_->name, $_->installed_version, ], ### might be empty entries in there - } @toolchain; - + } @toolchain; + return $str; }; -use constant REPORT_TESTS_SKIPPED +use constant REPORT_TESTS_SKIPPED => sub { return << "."; @@ -376,7 +393,7 @@ use constant REPORT_TESTS_SKIPPED . }; - + use constant REPORT_MESSAGE_FOOTER => sub { return << "."; @@ -384,7 +401,7 @@ use constant REPORT_MESSAGE_FOOTER ******************************** NOTE ******************************** The comments above are created mechanically, possibly without manual checking by the sender. As there are many people performing automatic -tests on each upload to CPAN, it is likely that you will receive +tests on each upload to CPAN, it is likely that you will receive identical messages about the same problem. If you believe that the message is mistaken, please reply to the first @@ -393,7 +410,7 @@ it personally. We appreciate your patience. :) ********************************************************************** Additional comments: - + . }; diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Extract.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Extract.pm index f30911bab88..2f8b730ca54 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Extract.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Extract.pm @@ -19,21 +19,21 @@ local $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Internals::Extract +CPANPLUS::Internals::Extract - internals for archive extraction =head1 SYNOPSIS ### for source files ### $self->_gunzip( file => 'foo.gz', output => 'blah.txt' ); - + ### for modules/packages ### - $dir = $self->_extract( module => $modobj, + $dir = $self->_extract( module => $modobj, extractdir => '/some/where' ); =head1 DESCRIPTION CPANPLUS::Internals::Extract extracts compressed files for CPANPLUS. -It can do this by either a pure perl solution (preferred) with the +It can do this by either a pure perl solution (preferred) with the use of C and C, or with binaries, like C and C. @@ -47,7 +47,7 @@ The flow looks like this: =head2 $dir = _extract( module => $modobj, [perl => '/path/to/perl', extractdir => '/path/to/extract/to', prefer_bin => BOOL, verbose => BOOL, force => BOOL] ) C<_extract> will take a module object and extract it to C -if provided, or the default location which is obtained from your +if provided, or the default location which is obtained from your config. The file name is obtained by looking at C<< $modobj->status->fetch >> @@ -67,7 +67,7 @@ A C object. This is required. =item extractdir -The directory to extract the archive to. By default this looks +The directory to extract the archive to. By default this looks something like: /CPANPLUS_BASE/PERL_VERSION/BUILD/MODULE_NAME @@ -105,26 +105,26 @@ sub _extract { my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + local $Params::Check::ALLOW_UNKNOWN = 1; - + my( $mod, $verbose, $force ); my $tmpl = { - force => { default => $conf->get_conf('force'), + force => { default => $conf->get_conf('force'), store => \$force }, - verbose => { default => $conf->get_conf('verbose'), + verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, prefer_bin => { default => $conf->get_conf('prefer_bin') }, extractdir => { default => $conf->get_conf('extractdir') }, module => { required => 1, allow => IS_MODOBJ, store => \$mod }, perl => { default => $^X }, }; - + my $args = check( $tmpl, \%hash ) or return; - + ### did we already extract it ? ### my $loc = $mod->status->extract(); - + if( $loc && !$force ) { msg(loc("Already extracted '%1' to '%2'. ". "Won't extract again without force", @@ -135,7 +135,7 @@ sub _extract { ### did we already fetch the file? ### my $file = $mod->status->fetch(); unless( -s $file ) { - error( loc( "File '%1' has zero size: cannot extract", $file ) ); + error( loc( "File '%1' has zero size: cannot extract", $file ) ); return; } @@ -146,7 +146,7 @@ sub _extract { $self->_perl_version( perl => $args->{'perl'} ), $conf->_get_build('moddir'), ); - + ### delegate to Archive::Extract ### ### set up some flags for archive::extract ### local $Archive::Extract::PREFER_BIN = $args->{'prefer_bin'}; @@ -160,7 +160,7 @@ sub _extract { $file, $to, $ae->error ) ); return; } - + ### if ->files is not filled, we dont know what the hell was ### extracted.. try to offer a suggestion and bail :( unless ( $ae->files ) { @@ -168,65 +168,65 @@ sub _extract { "files from the archive. Install '%2' and ensure ". "it works properly and try again", $ae->is_zip ? 'Archive::Zip' : 'Archive::Tar' ) ); - return; - } - - - ### print out what files we extracted ### - msg(loc("Extracted '%1'",$_),$verbose) for @{$ae->files}; - + return; + } + + + ### print out what files we extracted ### + msg(loc("Extracted '%1'",$_),$verbose) for @{$ae->files}; + ### set them all to be +w for the owner, so we don't get permission ### denied for overwriting files that are just +r - + ### this is too rigorous -- just change to +w for the owner [cpan #13358] #chmod 0755, map { File::Spec->rel2abs( File::Spec->catdir($to, $_) ) } # @{$ae->files}; - - for my $file ( @{$ae->files} ) { + + for my $file ( @{$ae->files} ) { my $path = File::Spec->rel2abs( File::Spec->catfile($to, $file) ); - + $self->_mode_plus_w( file => $path ); } - + ### check the return value for the extracted path ### ### Make an educated guess if we didn't get an extract_path ### back - ### XXX apparently some people make their own dists and they - ### pack up '.' which means the leading directory is '.' + ### XXX apparently some people make their own dists and they + ### pack up '.' which means the leading directory is '.' ### and only the second directory is the actual module directory - ### so, we'll have to check if our educated guess exists first, + ### so, we'll have to check if our educated guess exists first, ### then see if the extract path works.. and if nothing works... ### well, then we really don't know. my $dir; for my $try ( - File::Spec->rel2abs( - ### _safe_path must be called before catdir because catdir on + File::Spec->rel2abs( + ### _safe_path must be called before catdir because catdir on ### VMS currently will not handle the extra dots in the directories. - File::Spec->catdir( $self->_safe_path( path => $to ) , + File::Spec->catdir( $self->_safe_path( path => $to ) , $self->_safe_path( path => - $mod->package_name .'-'. + $mod->package_name .'-'. $mod->package_version ) ) ) , File::Spec->rel2abs( $ae->extract_path ), ) { ($dir = $try) && last if -d $try; } - + ### test if the dir exists ### unless( $dir && -d $dir ) { error(loc("Unable to determine extract dir for '%1'",$mod->module)); return; - - } else { + + } else { msg(loc("Extracted '%1' to '%2'", $mod->module, $dir), $verbose); - + ### register where we extracted the files to, ### also store what files were extracted - $mod->status->extract( $dir ); + $mod->status->extract( $dir ); $mod->status->files( $ae->files ); } - + ### also, figure out what kind of install we're dealing with ### $mod->get_installer_type(); diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Fetch.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Fetch.pm index 7dcb3c366bb..f8a232e1f8e 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Fetch.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Fetch.pm @@ -19,7 +19,7 @@ $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Internals::Fetch +CPANPLUS::Internals::Fetch - internals for fetching files =head1 SYNOPSIS @@ -148,62 +148,62 @@ sub _fetch { ### do we already have the file? if so, can we use the cached version, ### or do we need to refetch? if( -e $local_file ) { - + my $unlink = 0; my $use_cached = 0; - + ### if force is in effect, we have to refetch if( $force ) { $unlink++ - - ### if you provided a ttl, and it was exceeded, we'll refetch, + + ### if you provided a ttl, and it was exceeded, we'll refetch, } elsif( $ttl and ([stat $local_file]->[9] + $ttl > time) ) { msg(loc("Using cached file '%1' on disk; ". "ttl (%2s) is not exceeded", $local_file, $ttl), $verbose ); - + $use_cached++; ### if you provided a ttl, and the above conditional didn't match, ### we exceeded the ttl, so we refetch } elsif ( $ttl ) { $unlink++; - + ### otherwise we can use the cached version } else { $use_cached++; - } + } if( $unlink ) { ### some fetches will fail if the files exist already, so let's ### delete them first 1 while unlink $local_file; - + msg(loc("Could not delete %1, some methods may " . "fail to force a download", $local_file), $verbose) if -e $local_file; - + } else { - + ### store where we fetched it ### $modobj->status->fetch( $local_file ); - + return $local_file; } } } - ### we got a custom URI + ### we got a custom URI if ( $fetch_from ) { my $abs = $self->__file_fetch( from => $fetch_from, to => $local_path, verbose => $verbose ); - + unless( $abs ) { error(loc("Unable to download '%1'", $fetch_from)); return; - } + } ### store where we fetched it ### $modobj->status->fetch( $abs ); @@ -222,18 +222,18 @@ sub _fetch { return; } } - + ### see if we even have a host or a method to use to download with ### my $found_host; my @maybe_bad_host; - + HOST: { - ### F*CKING PIECE OF F*CKING p4 SHIT makes + ### F*CKING PIECE OF F*CKING p4 SHIT makes ### '$File :: Fetch::SOME_VAR' ### into a meta variable and starts substituting the file name... ### GRAAAAAAAAAAAAAAAAAAAAAAH! ### use ' to combat it! - + ### set up some flags for File::Fetch ### local $File'Fetch::BLACKLIST = $conf->_get_fetch('blacklist'); local $File'Fetch::TIMEOUT = $conf->get_conf('timeout'); @@ -242,41 +242,41 @@ sub _fetch { local $File'Fetch::FROM_EMAIL = $conf->get_conf('email'); local $File'Fetch::PREFER_BIN = $conf->get_conf('prefer_bin'); local $File'Fetch::WARN = $verbose; - - + + ### loop over all hosts we have ### for my $host ( @{$conf->get_conf('hosts')} ) { $found_host++; - + my $where; ### file:// uris are special and need parsing - if( $host->{'scheme'} eq 'file' ) { - + if( $host->{'scheme'} eq 'file' ) { + ### the full path in the native format of the OS - my $host_spec = + my $host_spec = File::Spec->file_name_is_absolute( $host->{'path'} ) ? $host->{'path'} : File::Spec->rel2abs( $host->{'path'} ); - + ### there might be volumes involved on vms/win32 if( ON_WIN32 or ON_VMS ) { - - ### now extract the volume in order to be Win32 and + + ### now extract the volume in order to be Win32 and ### VMS friendly. ### 'no_file' indicates that there's no file part ### of this path, so we only get 2 bits returned. my ($vol, $host_path) = File::Spec->splitpath( - $host_spec, 'no_file' + $host_spec, 'no_file' ); - + ### and split up the directories my @host_dirs = File::Spec->splitdir( $host_path ); - - ### if we got a volume we pretend its a directory for + + ### if we got a volume we pretend its a directory for ### the sake of the file:// url if( defined $vol and $vol ) { - + ### D:\foo\bar needs to be encoded as D|\foo\bar ### For details, see the following link: ### http://en.wikipedia.org/wiki/File:// @@ -284,89 +284,89 @@ sub _fetch { ### descriptors but it does address VMS volume ### descriptors, however wikipedia covers a bit of ### history regarding win32 - $vol =~ s/:$/|/ if ON_WIN32; - + $vol =~ s/:$/|/ if ON_WIN32; + $vol =~ s/:// if ON_VMS; - + ### XXX i'm not sure what cases this is addressing. ### this comes straight from dmq's file:// patches ### for win32. --kane ### According to dmq, the best summary is: ### "if file:// urls dont look right on VMS reuse ### the win32 logic and see if that fixes things" - + ### first element not empty? Might happen on VMS. ### prepend the volume in that case. if( $host_dirs[0] ) { unshift @host_dirs, $vol; - + ### element empty? reuse it to store the volume ### encoded as a directory name. (Win32/VMS) } else { $host_dirs[0] = $vol; - } + } } - + ### now it's in UNIX format, which is the same format ### as used for URIs - $host_spec = File::Spec::Unix->catdir( @host_dirs ); + $host_spec = File::Spec::Unix->catdir( @host_dirs ); } - ### now create the file:// uri from the components + ### now create the file:// uri from the components $where = CREATE_FILE_URI->( File::Spec::Unix->catfile( $host->{'host'} || '', $host_spec, $remote_file, - ) - ); + ) + ); ### its components will be in unix format, for a http://, ### ftp:// or any other style of URI - } else { + } else { my $mirror_path = File::Spec::Unix->catfile( $host->{'path'}, $remote_file ); - + my %args = ( scheme => $host->{scheme}, host => $host->{host}, path => $mirror_path, ); - + $where = $self->_host_to_uri( %args ); } - - my $abs = $self->__file_fetch( from => $where, + + my $abs = $self->__file_fetch( from => $where, to => $local_path, - verbose => $verbose ); - + verbose => $verbose ); + ### we got a path back? if( $abs ) { ### store where we fetched it ### $modobj->status->fetch( $abs ); - + ### this host is good, the previous ones are apparently ### not, so mark them as such. $self->_add_fail_host( host => $_ ) for @maybe_bad_host; - + return $abs; } - + ### so we tried to get the file but didn't actually fetch it -- - ### there's a chance this host is bad. mark it as such and - ### actually flag it back if we manage to get the file + ### there's a chance this host is bad. mark it as such and + ### actually flag it back if we manage to get the file ### somewhere else push @maybe_bad_host, $host; } } - + $found_host ? error(loc("Fetch failed: host list exhausted " . "-- are you connected today?")) : error(loc("No hosts found to download from " . "-- check your config")); } - + return; } @@ -382,7 +382,7 @@ sub __file_fetch { verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, }; - + check( $tmpl, \%hash ) or return; msg(loc("Trying to get '%1'", $where ), $verbose ); @@ -400,10 +400,10 @@ sub __file_fetch { } else { my $abs = File::Spec->rel2abs( $file ); - + ### so TTLs will work $self->_update_timestamp( file => $abs ); - + return $abs; } diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Report.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Report.pm index 73a2d297e2d..6e3cd5641dc 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Report.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Report.pm @@ -20,7 +20,7 @@ require CPANPLUS::Internals; =head1 NAME -CPANPLUS::Internals::Report +CPANPLUS::Internals::Report - internals for sending test reports =head1 SYNOPSIS @@ -297,11 +297,12 @@ sub _send_report { ### check arguments ### my ($buffer, $failed, $mod, $verbose, $force, $address, $save, - $tests_skipped ); + $tests_skipped, $status ); my $tmpl = { module => { required => 1, store => \$mod, allow => IS_MODOBJ }, buffer => { required => 1, store => \$buffer }, failed => { required => 1, store => \$failed }, + status => { default => {}, store => \$status, strict_type => 1 }, address => { default => CPAN_TESTERS_EMAIL, store => \$address }, save => { default => 0, store => \$save }, verbose => { default => $conf->get_conf('verbose'), @@ -471,8 +472,9 @@ sub _send_report { return 1 if $cp_conf =~ /\bmaketest_only\b/i and ($stage !~ /\btest\b/); + my $capture = ( $status && defined $status->{capture} ? $status->{capture} : $buffer ); ### the bit where we inform what went wrong - $message .= REPORT_MESSAGE_FAIL_HEADER->( $stage, $buffer ); + $message .= REPORT_MESSAGE_FAIL_HEADER->( $stage, $capture ); ### was it missing prereqs? ### if( my @missing = MISSING_PREREQS_LIST->($buffer) ) { @@ -507,8 +509,34 @@ sub _send_report { $message .= REPORT_TESTS_SKIPPED->(); } elsif( $grade eq GRADE_NA) { + my $capture = ( $status && defined $status->{capture} ? $status->{capture} : $buffer ); + + ### add the reason for the NA to the buffer + $capture = join $/, $capture, map { + '[' . $_->tag . '] [' . $_->when . '] ' . + $_->message } ( CPANPLUS::Error->stack )[-1]; + ### the bit where we inform what went wrong - $message .= REPORT_MESSAGE_FAIL_HEADER->( $stage, $buffer ); + $message .= REPORT_MESSAGE_FAIL_HEADER->( $stage, $capture ); + + ### add a list of what modules have been loaded of your prereqs list + $message .= REPORT_LOADED_PREREQS->($mod); + + ### add a list of versions of toolchain modules + $message .= REPORT_TOOLCHAIN_VERSIONS->($mod); + + ### the footer + $message .= REPORT_MESSAGE_FOOTER->(); + + } elsif ( $grade eq GRADE_PASS and ( $status and defined $status->{capture} ) ) { + ### the bit where we inform what went right + $message .= REPORT_MESSAGE_PASS_HEADER->( $stage, $status->{capture} ); + + ### add a list of what modules have been loaded of your prereqs list + $message .= REPORT_LOADED_PREREQS->($mod); + + ### add a list of versions of toolchain modules + $message .= REPORT_TOOLCHAIN_VERSIONS->($mod); ### the footer $message .= REPORT_MESSAGE_FOOTER->(); diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Search.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Search.pm index a93626b618e..6a5a6cf9a48 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Search.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Search.pm @@ -19,7 +19,7 @@ $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Internals::Search +CPANPLUS::Internals::Search - internals for searching for modules =head1 SYNOPSIS @@ -163,7 +163,7 @@ sub _search_module_tree { } or return; ### a list of module objects was supplied - if( @$mods ) { + if( @$mods ) { local $Params::Check::VERBOSE = 0; my @rv; @@ -242,7 +242,7 @@ sub _search_author_tree { my $args = check( $tmpl, \%hash ) or return; - if( @$authors ) { + if( @$authors ) { local $Params::Check::VERBOSE = 0; my @rv; @@ -258,7 +258,7 @@ sub _search_author_tree { my @rv = $self->_source_search_author_tree( allow => $list, type => $type, - ); + ); return \@rv; } } @@ -302,18 +302,18 @@ sub _all_installed { for my $dir (@INC ) { next if $dir eq '.'; - ### not a directory after all + ### not a directory after all ### may be coderef or some such next unless -d $dir; ### make sure to clean up the directories just in case, ### as we're making assumptions about the length ### This solves rt.cpan issue #19738 - - ### John M. notes: On VMS cannonpath can not currently handle + + ### John M. notes: On VMS cannonpath can not currently handle ### the $dir values that are in UNIX format. $dir = File::Spec->canonpath( $dir ) unless ON_VMS; - + ### have to use F::S::Unix on VMS, or things will break my $file_spec = ON_VMS ? 'File::Spec::Unix' : 'File::Spec'; @@ -328,15 +328,15 @@ sub _all_installed { ### make sure it's in Unix format, as it ### may be in VMS format on VMS; - $mod = VMS::Filespec::unixify( $mod ) if ON_VMS; - + $mod = VMS::Filespec::unixify( $mod ) if ON_VMS; + $mod = substr($mod, length($dir) + 1, -3); $mod = join '::', $file_spec->splitdir($mod); return if $seen{$mod}++; my $modobj = $self->module_tree($mod); - + ### separate return, a list context return with one '' ### in it, is also true! return unless $modobj; diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source.pm index 96370046255..1f75535fa65 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source.pm @@ -21,22 +21,22 @@ use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; $Params::Check::VERBOSE = 1; ### list of methods the parent class must implement -{ for my $sub ( qw[_init_trees _finalize_trees +{ for my $sub ( qw[_init_trees _finalize_trees _standard_trees_completed _custom_trees_completed _add_module_object _add_author_object _save_state - ] + ] ) { no strict 'refs'; - *$sub = sub { + *$sub = sub { my $self = shift; my $class = ref $self || $self; - - require Carp; - Carp::croak( loc( "Class %1 must implement method '%2'", + + require Carp; + Carp::croak( loc( "Class %1 must implement method '%2'", $class, $sub ) ); } } -} +} { my $recurse; # flag to prevent recursive calls to *_tree functions @@ -74,7 +74,7 @@ $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Internals::Source +CPANPLUS::Internals::Source - internals for updating source files =head1 SYNOPSIS @@ -98,14 +98,14 @@ The flow looks like this: $cb->_check_trees $cb->__check_uptodate $cb->_update_source - $cb->__update_custom_module_sources + $cb->__update_custom_module_sources $cb->__update_custom_module_source $cb->_build_trees ### engine methods { $cb->_init_trees; $cb->_standard_trees_completed $cb->_custom_trees_completed - } + } $cb->__create_author_tree ### engine methods { $cb->_add_author_object } @@ -113,7 +113,7 @@ The flow looks like this: $cb->__create_dslip_tree ### engine methods { $cb->_add_module_object } - $cb->__create_custom_module_entries + $cb->__create_custom_module_entries $cb->_dslip_defs @@ -177,43 +177,43 @@ sub _build_trees { ) or do { error( loc("Could not initialize trees" ) ); return; - }; + }; ### return if we weren't able to build the trees ### return unless $self->_mtree && $self->_atree; - + ### did we get everything from a stored state? if not, ### process them now. if( not $self->_standard_trees_completed ) { - + ### first, prep the author tree $self->__create_author_tree( uptodate => $uptodate, path => $path, - verbose => $verbose, + verbose => $verbose, ) or return; ### and now the module tree $self->_create_mod_tree( uptodate => $uptodate, path => $path, - verbose => $verbose, + verbose => $verbose, ) or return; } - + ### XXX unpleasant hack. since custom sources uses ->parse_module, we - ### already have a special module object with extra meta data. that + ### already have a special module object with extra meta data. that ### doesn't gelwell with the sqlite storage engine. So, we check 'normal' ### trees from separate trees, so the engine can treat them differently. ### Effectively this means that with the SQLite engine, for now, custom ### sources are continuously reparsed =/ -kane if( not $self->_custom_trees_completed ) { - + ### update them if the other sources are also deemed out of date if( $conf->get_conf('enable_custom_sources') ) { - $self->__update_custom_module_sources( verbose => $verbose ) + $self->__update_custom_module_sources( verbose => $verbose ) or error(loc("Could not update custom module sources")); - } + } ### add custom sources here if enabled if( $conf->get_conf('enable_custom_sources') ) { @@ -226,13 +226,13 @@ sub _build_trees { $self->_finalize_trees( path => $path, uptodate => $uptodate, - verbose => $verbose, + verbose => $verbose, use_stored => $use_stored, ) or do { error(loc( "Could not finalize trees" )); return; - }; - + }; + ### still necessary? can only run one instance now ### ### will probably stay that way --kane # my $id = $self->_store_id( $self ); @@ -320,7 +320,7 @@ sub _check_trees { ### as well ### RT #47820: Don't try to update custom sources if they are disabled ### in the configuration. - $self->__update_custom_module_sources( verbose => $verbose ) + $self->__update_custom_module_sources( verbose => $verbose ) if $conf->get_conf('enable_custom_sources') and ( $update_source or !$uptodate ); return $uptodate; @@ -389,7 +389,7 @@ sub __check_uptodate { if ( $flag or $args->{'update_source'} ) { if ( $self->_update_source( name => $args->{'name'} ) ) { - return 0; # return 0 so 'uptodate' will be set to 0, meaning no + return 0; # return 0 so 'uptodate' will be set to 0, meaning no # use of previously stored hashrefs! } else { msg( loc("Unable to update source, attempting to get away with using old source file!"), $args->{verbose} ); @@ -549,6 +549,16 @@ sub __create_author_tree { ### don't need it anymore ### unlink $out; + my ($tot,$prce,$prc,$idx); + + $args->{verbose} + and local $|=1, + $tot = scalar(split /\n/, $cont), + ($prce, $prc, $idx) = (int $tot / 25, 0, 0); + + $args->{verbose} + and print "\t0%"; + for ( split /\n/, $cont ) { my($id, $name, $email) = m/^alias \s+ (\S+) \s+ @@ -561,8 +571,24 @@ sub __create_author_tree { cpanid => $id, #authors CPAN ID ) or error( loc("Could not add author '%1'", $name ) ); + $args->{verbose} + and ( + $idx++, + + ($idx==$prce + and ($prc+=4,$idx=0,print ".")), + + (($prc % 10) + or $idx + or print $prc,'%') + ); + } + $args->{verbose} + and print "\n"; + + return $self->_atree; } #__create_author_tree @@ -636,9 +662,17 @@ sub _create_mod_tree { ### don't need it anymore ### unlink $out; - my($past_header, $count); - for ( split /\n/, $content ) { + my($past_header, $count, $tot, $prce, $prc, $idx); + + $args->{verbose} + and local $|=1, + $tot = scalar(split /\n/, $content), + ($prce, $prc, $idx) = (int $tot / 25, 0, 0); + + $args->{verbose} + and print "\t0%"; + for ( split /\n/, $content ) { ### quick hack to read past the header of the file ### ### this is still rather evil... fix some time - Kane if( m|^\s*$| ) { @@ -647,11 +681,11 @@ sub _create_mod_tree { return; } $past_header = 1; - } - + } + ### we're still in the header -- find the amount of lines we expect unless( $past_header ) { - + ### if the line count doesn't match what we expect, bail out ### this should address: #45644: detect broken index $count = $1 if /^Line-Count:\s+(\d+)/; @@ -661,12 +695,12 @@ sub _create_mod_tree { "contains only %3 lines!", $count, $file, $lines )); return; - } + } } ### still in the header, keep moving next; } - + ### skip empty lines ### next unless /\S/; chomp; @@ -704,7 +738,7 @@ sub _create_mod_tree { ? $dslip_tree->{ $data[0] }->{$item} : ' '; } - + ### XXX this could be sped up if we used author names, not author ### objects in creation, and then look them up in the author tree ### when needed. This will need a fix to all the places that create @@ -713,9 +747,9 @@ sub _create_mod_tree { ### callback to store the individual object $self->_add_module_object( module => $data[0], # full module name - version => ($data[1] eq 'undef' # version number - ? '0.0' - : $data[1]), + version => ($data[1] eq 'undef' # version number + ? '0.0' + : $data[1]), path => File::Spec::Unix->catfile( $conf->_get_mirror('base'), $data[2], @@ -730,8 +764,23 @@ sub _create_mod_tree { mtime => '', ) or error( loc( "Could not add module '%1'", $data[0] ) ); + $args->{verbose} + and ( + $idx++, + + ($idx==$prce + and ($prc+=4,$idx=0,print ".")), + + (($prc % 10) + or $idx + or print $prc,'%') + ); + } #for + $args->{verbose} + and print "\n"; + return $self->_mtree; } #_create_mod_tree @@ -822,9 +871,9 @@ sub __create_dslip_tree { ### use this regex to make sure dslips with ';' in them don't cause ### parser errors my ($ds_one, $ds_two) = ($in =~ m|.+}\s+ - (\$(?:CPAN::Modulelist::)?cols.*?) - (\$(?:CPAN::Modulelist::)?data.*) - |sx); + (\$(?:CPAN::Modulelist::)?cols.*?) + (\$(?:CPAN::Modulelist::)?data.*) + |sx); ### eval them into existence ### ### still not too fond of this solution - kane ### @@ -925,7 +974,7 @@ sub _dslip_defs { return $aref; } -=head2 $file = $cb->_add_custom_module_source( uri => URI, [verbose => BOOL] ); +=head2 $file = $cb->_add_custom_module_source( uri => URI, [verbose => BOOL] ); Adds a custom source index and updates it based on the provided URI. @@ -937,16 +986,16 @@ sub _add_custom_module_source { my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my($verbose,$uri); - my $tmpl = { + my $tmpl = { verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, uri => { required => 1, store => \$uri } }; - + check( $tmpl, \%hash ) or return; - + ### what index file should we use on disk? my $index = $self->__custom_module_source_index_file( uri => $uri ); @@ -954,29 +1003,29 @@ sub _add_custom_module_source { if( IS_FILE->( $index ) ) { msg(loc("Source '%1' already added", $uri)); return 1; - } - - ### do we need to create the targe dir? + } + + ### do we need to create the targe dir? { my $dir = dirname( $index ); unless( IS_DIR->( $dir ) ) { $self->_mkdir( dir => $dir ) or return } - } - + } + ### write the file my $fh = OPEN_FILE->( $index => '>' ) or do { error(loc("Could not open index file for '%1'", $uri)); return; }; - - ### basically we 'touched' it. Check the return value, may be + + ### basically we 'touched' it. Check the return value, may be ### important on win32 and similar OS, where there's file length ### limits close $fh or do { error(loc("Could not write index file to disk for '%1'", $uri)); return; - }; - + }; + $self->__update_custom_module_source( remote => $uri, local => $index, @@ -985,9 +1034,9 @@ sub _add_custom_module_source { ### we faild to update it, we probably have an empty ### possibly silly filename on disk now -- remove it 1 while unlink $index; - return; + return; }; - + return $index; } @@ -1002,24 +1051,24 @@ sub __custom_module_source_index_file { my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my($verbose,$uri); - my $tmpl = { + my $tmpl = { uri => { required => 1, store => \$uri } }; - + check( $tmpl, \%hash ) or return; - + my $index = File::Spec->catfile( $conf->get_conf('base'), - $conf->_get_build('custom_sources'), + $conf->_get_build('custom_sources'), $self->_uri_encode( uri => $uri ), - ); + ); return $index; } -=head2 $file = $cb->_remove_custom_module_source( uri => URI, [verbose => BOOL] ); +=head2 $file = $cb->_remove_custom_module_source( uri => URI, [verbose => BOOL] ); Removes a custom index file based on the URI provided. @@ -1031,19 +1080,19 @@ sub _remove_custom_module_source { my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my($verbose,$uri); - my $tmpl = { + my $tmpl = { verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, uri => { required => 1, store => \$uri } }; - + check( $tmpl, \%hash ) or return; ### use uri => local, instead of the other way around my %files = reverse $self->__list_custom_module_sources; - + ### On VMS the case of key to %files can be either exact or lower case ### XXX abstract this lookup out? --kane my $file = $files{ $uri }; @@ -1053,15 +1102,15 @@ sub _remove_custom_module_source { error(loc("No such custom source '%1'", $uri)); return; }; - + 1 while unlink $file; - + if( IS_FILE->( $file ) ) { error(loc("Could not remove index file '%1' for custom source '%2'", $file, $uri)); return; - } - + } + msg(loc("Successfully removed index file for '%1'", $uri), $verbose); return $file; @@ -1081,12 +1130,12 @@ Returns a list of key value pairs as follows: sub __list_custom_module_sources { my $self = shift; my $conf = $self->configure_object; - + my($verbose); - my $tmpl = { + my $tmpl = { verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, - }; + }; my $dir = File::Spec->catdir( $conf->get_conf('base'), @@ -1097,16 +1146,16 @@ sub __list_custom_module_sources { msg(loc("No '%1' dir, skipping custom sources", $dir), $verbose); return; } - + ### unencode the files ### skip ones starting with # though - my %files = map { - my $org = $_; - my $dec = $self->_uri_decode( uri => $_ ); + my %files = map { + my $org = $_; + my $dec = $self->_uri_decode( uri => $_ ); File::Spec->catfile( $dir, $org ) => $dec - } grep { $_ !~ /^#/ } READ_DIR->( $dir ); + } grep { $_ !~ /^#/ } READ_DIR->( $dir ); - return %files; + return %files; } =head2 $bool = $cb->__update_custom_module_sources( [verbose => BOOL] ); @@ -1124,35 +1173,35 @@ sub __update_custom_module_sources { my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my $verbose; - my $tmpl = { + my $tmpl = { verbose => { default => $conf->get_conf('verbose'), store => \$verbose } }; - + check( $tmpl, \%hash ) or return; - + my %files = $self->__list_custom_module_sources; - - ### uptodate check has been done a few levels up. + + ### uptodate check has been done a few levels up. my $fail; while( my($local,$remote) = each %files ) { - + $self->__update_custom_module_source( remote => $remote, local => $local, verbose => $verbose, - ) or ( $fail++, next ); + ) or ( $fail++, next ); } - + error(loc("Failed updating one or more remote sources files")) if $fail; - + return if $fail; return 1; } -=head2 $ok = $cb->__update_custom_module_source +=head2 $ok = $cb->__update_custom_module_source Attempts to update all the index files to your custom module sources. @@ -1167,9 +1216,9 @@ sub __update_custom_module_source { my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my($verbose,$local,$remote); - my $tmpl = { + my $tmpl = { verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, local => { store => \$local, allow => FILE_EXISTS }, @@ -1179,7 +1228,7 @@ sub __update_custom_module_source { check( $tmpl, \%hash ) or return; msg( loc("Updating sources from '%1'", $remote), $verbose); - + ### if you didn't provide a local file, we'll look in your custom ### dir to find the local encoded version for you $local ||= do { @@ -1187,7 +1236,7 @@ sub __update_custom_module_source { my %files = reverse $self->__list_custom_module_sources or do { error(loc("No custom modules sources defined -- need '%1' argument", 'local')); - return; + return; }; ### On VMS the case of key to %files can be either exact or lower case @@ -1200,68 +1249,69 @@ sub __update_custom_module_source { error(loc("Remote source '%1' unknown -- needs '%2' argument", $remote, 'local')); return; - }; + }; }; - + my $uri = join '/', $remote, $conf->_get_source('custom_index'); - my $ff = File::Fetch->new( uri => $uri ); + my $ff = File::Fetch->new( uri => $uri ); ### tempdir doesn't clean up by default, as opposed to tempfile() ### so add it explicitly. my $dir = tempdir( CLEANUP => 1 ); - - my $res = do { local $File::Fetch::WARN = 0; + + my $res = do { local $File::Fetch::WARN = 0; + local $File::Fetch::TIMEOUT = $conf->get_conf('timeout'); $ff->fetch( to => $dir ); - }; + }; ### couldn't get the file unless( $res ) { - + ### it's not a local scheme, so can't auto index unless( $ff->scheme eq 'file' ) { error(loc("Could not update sources from '%1': %2", $remote, $ff->error )); - return; - + return; + ### it's a local uri, we can index it ourselves } else { msg(loc("No index file found at '%1', generating one", $ff->uri), $verbose ); - + ### ON VMS, if you are working with a UNIX file specification, ### you need currently use the UNIX variants of the File::Spec. my $ff_path = do { my $file_class = 'File::Spec'; $file_class .= '::Unix' if ON_VMS; $file_class->catdir( File::Spec::Unix->splitdir( $ff->path ) ); - }; + }; $self->__write_custom_module_index( path => $ff_path, to => $local, verbose => $verbose, ) or return; - + ### XXX don't write that here, __write_custom_module_index ### already prints this out #msg(loc("Index file written to '%1'", $to), $verbose); } - + ### copy it to the real spot and update its timestamp - } else { + } else { $self->_move( file => $res, to => $local ) or return; $self->_update_timestamp( file => $local ); - + msg(loc("Index file saved to '%1'", $local), $verbose); } - + return $local; } =head2 $bool = $cb->__write_custom_module_index( path => /path/to/packages, [to => /path/to/index/file, verbose => BOOL] ) -Scans the C you provided for packages and writes an index with all +Scans the C you provided for packages and writes an index with all the available packages to C<$path/packages.txt>. If you'd like the index to be written to a different file, provide the C argument. @@ -1273,29 +1323,29 @@ sub __write_custom_module_index { my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my ($verbose, $path, $to); - my $tmpl = { + my $tmpl = { verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, path => { required => 1, allow => DIR_EXISTS, store => \$path }, to => { store => \$to }, }; - - check( $tmpl, \%hash ) or return; + + check( $tmpl, \%hash ) or return; ### no explicit to? then we'll use our default $to ||= File::Spec->catfile( $path, $conf->_get_source('custom_index') ); my @files; require File::Find; - File::Find::find( sub { + File::Find::find( sub { ### let's see if A::E can even parse it my $ae = do { local $Archive::Extract::WARN = 0; local $Archive::Extract::WARN = 0; - Archive::Extract->new( archive => $File::Find::name ) - } or return; + Archive::Extract->new( archive => $File::Find::name ) + } or return; ### it's a type A::E recognize, so we can add it $ae->type or return; @@ -1305,11 +1355,11 @@ sub __write_custom_module_index { ### path, so we have to strip it ourselves ### make sure to remove the leading slash as well. my $copy = $File::Find::name; - my $re = quotemeta($path); + my $re = quotemeta($path); $copy =~ s|^$re[\\/]?||i; - + push @files, $copy; - + }, $path ); ### does the dir exist? if not, create it. @@ -1317,80 +1367,80 @@ sub __write_custom_module_index { unless( IS_DIR->( $dir ) ) { $self->_mkdir( dir => $dir ) or return } - } + } ### create the index file my $fh = OPEN_FILE->( $to => '>' ) or return; - + print $fh "$_\n" for @files; close $fh; - + msg(loc("Successfully written index file to '%1'", $to), $verbose); - + return $to; } -=head2 $bool = $cb->__create_custom_module_entries( [verbose => BOOL] ) +=head2 $bool = $cb->__create_custom_module_entries( [verbose => BOOL] ) Creates entries in the module tree based upon the files as returned by C<__list_custom_module_sources>. Returns true on success, false on failure. -=cut +=cut ### use $auth_obj as a persistent version, so we don't have to recreate ### modules all the time -{ my $auth_obj; +{ my $auth_obj; sub __create_custom_module_entries { my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my $verbose; my $tmpl = { verbose => { default => $conf->get_conf('verbose'), store => \$verbose }, }; - + check( $tmpl, \%hash ) or return undef; - - my %files = $self->__list_custom_module_sources; - + + my %files = $self->__list_custom_module_sources; + while( my($file,$name) = each %files ) { - + msg(loc("Adding packages from custom source '%1'", $name), $verbose); - + my $fh = OPEN_FILE->( $file ) or next; - + while( local $_ = <$fh> ) { chomp; next if /^#/; next unless /\S+/; - + ### join on / -- it's a URI after all! my $parse = join '/', $name, $_; - + ### try to make a module object out of it my $mod = $self->parse_module( module => $parse ) or ( error(loc("Could not parse '%1'", $_)), next ); - + ### mark this object with a custom author $auth_obj ||= do { my $id = CUSTOM_AUTHOR_ID; - + ### if the object is being created for the first time, ### make sure there's an entry in the author tree as ### well, so we can search on the CPAN ID - $self->author_tree->{ $id } = - CPANPLUS::Module::Author::Fake->new( cpanid => $id ); + $self->author_tree->{ $id } = + CPANPLUS::Module::Author::Fake->new( cpanid => $id ); }; - + $mod->author( $auth_obj ); - + ### and now add it to the module tree -- this MAY ### override things of course if( my $old_mod = $self->module_tree( $mod->module ) ) { @@ -1401,15 +1451,15 @@ Returns true on success, false on failure. msg(loc("About to overwrite module tree entry for '%1' with '%2'", $mod->module, $mod->package), $verbose); } - + ### mark where it came from $mod->description( loc("Custom source from '%1'",$name) ); - + ### store it in the module tree $self->module_tree->{ $mod->module } = $mod; } } - + return 1; } } diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/Memory.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/Memory.pm index cb3fd4f1e76..d589bbd1d8b 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/Memory.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/Memory.pm @@ -22,7 +22,7 @@ use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; $Params::Check::VERBOSE = 1; -=head1 NAME +=head1 NAME CPANPLUS::Internals::Source::Memory - In memory implementation @@ -36,7 +36,7 @@ CPANPLUS::Internals::Source::Memory - In memory implementation my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my($path,$uptodate,$verbose,$use_stored); my $tmpl = { path => { default => $conf->get_conf('base'), store => \$path }, @@ -44,21 +44,21 @@ CPANPLUS::Internals::Source::Memory - In memory implementation uptodate => { required => 1, store => \$uptodate }, use_stored => { default => 1, store => \$use_stored }, }; - + check( $tmpl, \%hash ) or return; - + ### retrieve the stored source files ### my $stored = $self->__memory_retrieve_source( path => $path, uptodate => $uptodate && $use_stored, verbose => $verbose, ) || {}; - + ### we got this from storable if $stored has keys.. $from_storable = keys %$stored ? 1 : 0; - + ### set up the trees - $self->_atree( $stored->{_atree} || {} ); + $self->_atree( $stored->{_atree} || {} ); $self->_mtree( $stored->{_mtree} || {} ); return 1; @@ -71,7 +71,7 @@ CPANPLUS::Internals::Source::Memory - In memory implementation my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my($path,$uptodate,$verbose); my $tmpl = { path => { default => $conf->get_conf('base'), store => \$path }, @@ -79,34 +79,34 @@ CPANPLUS::Internals::Source::Memory - In memory implementation uptodate => { required => 1, store => \$uptodate }, }; - { local $Params::Check::ALLOW_UNKNOWN = 1; + { local $Params::Check::ALLOW_UNKNOWN = 1; check( $tmpl, \%hash ) or return; } - + ### write the stored files to disk, so we can keep using them ### from now on, till they become invalid ### write them if the original sources weren't uptodate, or ### we didn't just load storable files $self->__memory_save_source() if !$uptodate or not $from_storable; - + return 1; } - + ### saves current memory state sub _save_state { my $self = shift; return $self->_finalize_trees( @_, uptodate => 0 ); - } + } } sub _add_author_object { my $self = shift; my %hash = @_; - + my $class; my $tmpl = { class => { default => 'CPANPLUS::Module::Author', store => \$class }, - map { $_ => { required => 1 } } + map { $_ => { required => 1 } } qw[ author cpanid email ] }; @@ -114,9 +114,9 @@ sub _add_author_object { local $Params::Check::NO_DUPLICATES = 1; check( $tmpl, \%hash ) or return; }; - + my $obj = $class->new( %$href, _id => $self->_id ); - + $self->author_tree->{ $href->{'cpanid'} } = $obj or return; return $obj; @@ -126,10 +126,10 @@ sub _add_module_object { my $self = shift; my %hash = @_; - my $class; + my $class; my $tmpl = { class => { default => 'CPANPLUS::Module', store => \$class }, - map { $_ => { required => 1 } } + map { $_ => { required => 1 } } qw[ module version path comment author package description dslip mtime ] }; @@ -137,30 +137,30 @@ sub _add_module_object { local $Params::Check::NO_DUPLICATES = 1; check( $tmpl, \%hash ) or return; }; - + my $obj = $class->new( %$href, _id => $self->_id ); - + ### Every module get's stored as a module object ### $self->module_tree->{ $href->{module} } = $obj or return; - return $obj; + return $obj; } { my %map = ( _source_search_module_tree => [ module_tree => 'CPANPLUS::Module' ], _source_search_author_tree => [ author_tree => 'CPANPLUS::Module::Author' ], - ); + ); while( my($sub, $aref) = each %map ) { no strict 'refs'; - + my($meth, $class) = @$aref; - + *$sub = sub { my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my($authors,$list,$verbose,$type); my $tmpl = { data => { default => [], @@ -172,9 +172,9 @@ sub _add_module_object { type => { required => 1, allow => [$class->accessors()], store => \$type }, }; - - my $args = check( $tmpl, \%hash ) or return; - + + my $args = check( $tmpl, \%hash ) or return; + my @rv; for my $obj ( values %{ $self->$meth } ) { #push @rv, $auth if check( @@ -182,8 +182,8 @@ sub _add_module_object { # { $type => $auth->$type } # ); push @rv, $obj if allow( $obj->$type() => $list ); - } - + } + return @rv; } } @@ -343,7 +343,7 @@ sub __memory_storable_file { : 0; return unless $storable; - + ### $stored is the name of the frozen data structure ### ### changed to use File::Spec->catfile -jmb my $stored = File::Spec->rel2abs( @@ -351,7 +351,7 @@ sub __memory_storable_file { $path, #base dir $conf->_get_source('stored') #file . '.s' . - $Storable::VERSION #the version of storable + $Storable::VERSION #the version of storable . '.c' . $self->VERSION #the version of CPANPLUS . STORABLE_EXT #append a suffix diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/SQLite.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/SQLite.pm index 556be6456d5..47bdbebfd77 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/SQLite.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/SQLite.pm @@ -18,7 +18,7 @@ use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; use constant TXN_COMMIT => 1000; -=head1 NAME +=head1 NAME CPANPLUS::Internals::Source::SQLite - SQLite implementation @@ -27,23 +27,23 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation { my $Dbh; my $DbFile; - sub __sqlite_file { + sub __sqlite_file { return $DbFile if $DbFile; my $self = shift; my $conf = $self->configure_object; - $DbFile = File::Spec->catdir( + $DbFile = File::Spec->catdir( $conf->get_conf('base'), SOURCE_SQLITE_DB ); - + return $DbFile; }; - sub __sqlite_dbh { + sub __sqlite_dbh { return $Dbh if $Dbh; - + my $self = shift; $Dbh = DBIx::Simple->connect( "dbi:SQLite:dbname=" . $self->__sqlite_file, @@ -53,7 +53,7 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation #$Dbh->dbh->trace(1); $Dbh->query(qq{PRAGMA synchronous = OFF}); - return $Dbh; + return $Dbh; }; sub __sqlite_disconnect { @@ -70,7 +70,7 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation my $self = shift; my $conf = $self->configure_object; my %hash = @_; - + my($path,$uptodate,$verbose,$use_stored); my $tmpl = { path => { default => $conf->get_conf('base'), store => \$path }, @@ -78,60 +78,60 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation uptodate => { required => 1, store => \$uptodate }, use_stored => { default => 1, store => \$use_stored }, }; - + check( $tmpl, \%hash ) or return; ### if it's not uptodate, or the file doesn't exist, we need to create ### a new sqlite db - if( not $uptodate or not -e $self->__sqlite_file ) { + if( not $uptodate or not -e $self->__sqlite_file ) { $used_old_copy = 0; ### chuck the file $self->__sqlite_disconnect; 1 while unlink $self->__sqlite_file; - + ### and create a new one $self->__sqlite_create_db or do { error(loc("Could not create new SQLite DB")); - return; - } + return; + } } else { $used_old_copy = 1; - } - + } + ### set up the author tree { my %at; tie %at, 'CPANPLUS::Internals::Source::SQLite::Tie', - dbh => $self->__sqlite_dbh, table => 'author', + dbh => $self->__sqlite_dbh, table => 'author', key => 'cpanid', cb => $self; - + $self->_atree( \%at ); } ### set up the author tree { my %mt; tie %mt, 'CPANPLUS::Internals::Source::SQLite::Tie', - dbh => $self->__sqlite_dbh, table => 'module', + dbh => $self->__sqlite_dbh, table => 'module', key => 'module', cb => $self; $self->_mtree( \%mt ); } - + ### start a transaction $self->__sqlite_dbh->query('BEGIN'); - - return 1; - + + return 1; + } - + sub _standard_trees_completed { return $used_old_copy } sub _custom_trees_completed { return } ### finish transaction sub _finalize_trees { $_[0]->__sqlite_dbh->commit; return 1 } ### saves current memory state, but not implemented in sqlite - sub _save_state { - error(loc("%1 has not implemented writing state to disk", __PACKAGE__)); + sub _save_state { + error(loc("%1 has not implemented writing state to disk", __PACKAGE__)); return; } } @@ -145,7 +145,7 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation class => { default => 'CPANPLUS::Module::Author', store => \$class }, map { $_ => { required => 1 } } @keys }; - + ### dbix::simple's expansion of (??) is REALLY expensive, so do it manually my $ph = join ',', map { '?' } @keys; @@ -154,9 +154,9 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation my $self = shift; my %hash = @_; my $dbh = $self->__sqlite_dbh; - + my $href = do { - local $Params::Check::NO_DUPLICATES = 1; + local $Params::Check::NO_DUPLICATES = 1; local $Params::Check::SANITY_CHECK_TEMPLATE = 0; check( $tmpl, \%hash ) or return; }; @@ -167,15 +167,15 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation $dbh->commit or error( $dbh->error ); # commit previous transaction $dbh->begin_work or error( $dbh->error ); # and start a new one } - - $dbh->query( + + $dbh->query( "INSERT INTO author (". join(',',keys(%$href)) .") VALUES ($ph)", values %$href ) or do { error( $dbh->error ); return; }; - + return 1; } } @@ -183,13 +183,13 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation { my $txn_count = 0; ### XXX move this outside the sub, so we only compute it once - my $class; + my $class; my @keys = qw[ module version path comment author package description dslip mtime ]; my $tmpl = { class => { default => 'CPANPLUS::Module', store => \$class }, map { $_ => { required => 1 } } @keys }; - + ### dbix::simple's expansion of (??) is REALLY expensive, so do it manually my $ph = join ',', map { '?' } @keys; @@ -197,13 +197,13 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation my $self = shift; my %hash = @_; my $dbh = $self->__sqlite_dbh; - + my $href = do { local $Params::Check::NO_DUPLICATES = 1; local $Params::Check::SANITY_CHECK_TEMPLATE = 0; check( $tmpl, \%hash ) or return; }; - + ### fix up author to be 'plain' string $href->{'author'} = $href->{'author'}->cpanid; @@ -213,35 +213,35 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation $dbh->commit or error( $dbh->error ); # commit previous transaction $dbh->begin_work or error( $dbh->error ); # and start a new one } - - $dbh->query( - "INSERT INTO module (". join(',',keys(%$href)) .") VALUES ($ph)", + + $dbh->query( + "INSERT INTO module (". join(',',keys(%$href)) .") VALUES ($ph)", values %$href ) or do { error( $dbh->error ); return; }; - + return 1; } } { my %map = ( - _source_search_module_tree + _source_search_module_tree => [ module => module => 'CPANPLUS::Module' ], - _source_search_author_tree + _source_search_author_tree => [ author => cpanid => 'CPANPLUS::Module::Author' ], - ); + ); while( my($sub, $aref) = each %map ) { no strict 'refs'; - + my($table, $key, $class) = @$aref; *$sub = sub { my $self = shift; my %hash = @_; my $dbh = $self->__sqlite_dbh; - + my($list,$type); my $tmpl = { allow => { required => 1, default => [ ], strict_type => 1, @@ -249,19 +249,19 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation type => { required => 1, allow => [$class->accessors()], store => \$type }, }; - + check( $tmpl, \%hash ) or return; - - + + ### we aliased 'module' to 'name', so change that here too $type = 'module' if $type eq 'name'; - + my $res = $dbh->query( "SELECT * from $table" ); - + my $meth = $table .'_tree'; - my @rv = map { $self->$meth( $_->{$key} ) } + my @rv = map { $self->$meth( $_->{$key} ) } grep { allow( $_->{$type} => $list ) } $res->hashes; - + return @rv; } } @@ -272,29 +272,29 @@ CPANPLUS::Internals::Source::SQLite - SQLite implementation sub __sqlite_create_db { my $self = shift; my $dbh = $self->__sqlite_dbh; - + ### we can ignore the result/error; not all sqlite implementations - ### support this + ### support this $dbh->query( qq[ DROP TABLE IF EXISTS author; \n] ) or do { msg( $dbh->error ); - }; + }; $dbh->query( qq[ DROP TABLE IF EXISTS module; \n] ) or do { msg( $dbh->error ); - }; + }; + - $dbh->query( qq[ /* the author information */ CREATE TABLE author ( id INTEGER PRIMARY KEY AUTOINCREMENT, - + author varchar(255), email varchar(255), cpanid varchar(255) @@ -310,7 +310,7 @@ sub __sqlite_create_db { /* the module information */ CREATE TABLE module ( id INTEGER PRIMARY KEY AUTOINCREMENT, - + module varchar(255), version varchar(255), path varchar(255), @@ -321,13 +321,13 @@ sub __sqlite_create_db { dslip varchar(255), mtime varchar(255) ); - + \n] ) or do { error( $dbh->error ); return; - }; + }; $dbh->query( qq[ /* the module index */ @@ -368,7 +368,7 @@ sub __sqlite_create_db { return; }; - return 1; + return 1; } 1; diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/SQLite/Tie.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/SQLite/Tie.pm index f908c9803e4..7208e00ee11 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/SQLite/Tie.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Source/SQLite/Tie.pm @@ -26,7 +26,7 @@ push @ISA, 'Tie::StdHash'; sub TIEHASH { my $class = shift; my %hash = @_; - + my $tmpl = { dbh => { required => 1 }, table => { required => 1 }, @@ -34,12 +34,12 @@ sub TIEHASH { cb => { required => 1 }, offset => { default => 0 }, }; - + my $args = check( $tmpl, \%hash ) or return; my $obj = bless { %$args, store => {} } , $class; return $obj; -} +} sub FETCH { my $self = shift; @@ -47,28 +47,28 @@ sub FETCH { my $dbh = $self->{dbh}; my $cb = $self->{cb}; my $table = $self->{table}; - - + + ### did we look this one up before? if( my $obj = $self->{store}->{$key} ) { return $obj; } - + my $res = $dbh->query( "SELECT * from $table where $self->{key} = ?", $key ) or do { error( $dbh->error ); return; }; - + my $href = $res->hash; - + ### get rid of the primary key delete $href->{'id'}; - + ### no results? return unless keys %$href; - + ### expand author if needed ### XXX no longer generic :( if( $table eq 'module' ) { @@ -80,16 +80,16 @@ sub FETCH { author => 'CPANPLUS::Module::Author', }->{ $table }; - my $obj = $self->{store}->{$key} = $class->new( %$href, _id => $cb->_id ); - + my $obj = $self->{store}->{$key} = $class->new( %$href, _id => $cb->_id ); + return $obj; } -sub STORE { +sub STORE { my $self = shift; my $key = shift; my $val = shift; - + $self->{store}->{$key} = $val; } @@ -104,7 +104,7 @@ sub FIRSTKEY { ); $self->{offset} = 0; - + my $key = $res->flat->[0]; return $key; @@ -130,7 +130,7 @@ sub NEXTKEY { sub EXISTS { !!$_[0]->FETCH( $_[1] ) } -sub SCALAR { +sub SCALAR { my $self = shift; my $dbh = $self->{'dbh'}; diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Utils.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Utils.pm index 31abaffed4d..e9651ed45fd 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Utils.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Internals/Utils.pm @@ -10,6 +10,7 @@ use File::Copy; use Params::Check qw[check]; use Module::Load::Conditional qw[can_load]; use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; +use version; local $Params::Check::VERBOSE = 1; @@ -17,7 +18,7 @@ local $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Internals::Utils +CPANPLUS::Internals::Utils - convenience functions for CPANPLUS =head1 SYNOPSIS @@ -59,7 +60,7 @@ sub _mkdir { my $args = check( $tmpl, \%hash ) or ( error(loc( Params::Check->last_error ) ), return - ); + ); unless( can_load( modules => { 'File::Path' => 0.0 } ) ) { error( loc("Could not use File::Path! This module should be core!") ); @@ -162,20 +163,20 @@ sub _perl_version { }; check( $tmpl, \%hash ) or return; - + my $perl_version; ### special perl, or the one we are running under? if( $perl eq $^X ) { - ### just load the config + ### just load the config require Config; $perl_version = $Config::Config{version}; - + } else { my $cmd = $perl . ' -MConfig -eprint+Config::config_vars+version'; ($perl_version) = (`$cmd` =~ /version='(.*)'/); } - + return $perl_version if defined $perl_version; return; } @@ -199,7 +200,11 @@ sub _version_to_number { check( $tmpl, \%hash ) or return; - return $version if $version =~ /^\.?\d/; + $version =~ s!_!!g; # *sigh* + return $version if $version =~ /^\d*(?:\.\d+)?$/; + if ( my ($vers) = $version =~ /^(v?\d+(?:\.\d+(?:\.\d+)?)?)/ ) { + return eval { version->parse($vers)->numify }; + } return '0.0'; } @@ -282,7 +287,7 @@ Returns true on success, false on failure. sub _copy { my $self = shift; my %hash = @_; - + my($from,$to); my $tmpl = { file =>{ required => 1, allow => [IS_FILE,IS_DIR], @@ -311,28 +316,28 @@ Returns true on success, false on failure. sub _mode_plus_w { my $self = shift; my %hash = @_; - + require File::stat; - + my $file; my $tmpl = { file => { required => 1, allow => IS_FILE, store => \$file }, }; - + check( $tmpl, \%hash ) or return; - + ### set the mode to +w for a file and +wx for a dir my $x = File::stat::stat( $file ); my $mask = -d $file ? 0100 : 0200; - + if( $x and chmod( $x->mode|$mask, $file ) ) { return 1; - } else { + } else { error(loc("Failed to '%1' '%2': '%3'", 'chmod +w', $file, $!)); return; } -} +} =head2 $uri = $cb->_host_to_uri( scheme => SCHEME, host => HOST, path => PATH ); @@ -345,23 +350,23 @@ Returns the uri on success, and false on failure sub _host_to_uri { my $self = shift; my %hash = @_; - + my($scheme, $host, $path); my $tmpl = { scheme => { required => 1, store => \$scheme }, host => { default => 'localhost', store => \$host }, path => { default => '', store => \$path }, - }; + }; check( $tmpl, \%hash ) or return; ### it's an URI, so unixify the path. ### VMS has a special method for just that $path = ON_VMS - ? VMS::Filespec::unixify($path) + ? VMS::Filespec::unixify($path) : File::Spec::Unix->catdir( File::Spec->splitdir( $path ) ); - return "$scheme://" . File::Spec::Unix->catdir( $host, $path ); + return "$scheme://" . File::Spec::Unix->catdir( $host, $path ); } =head2 $cb->_vcmp( VERSION, VERSION ); @@ -373,8 +378,9 @@ Normalizes the versions passed and does a '<=>' on them, returning the result. sub _vcmp { my $self = shift; my ($x, $y) = @_; - - s/_//g foreach $x, $y; + + $x = $self->_version_to_number(version => $x); + $y = $self->_version_to_number(version => $y); return $x <=> $y; } @@ -399,7 +405,7 @@ sub _home_dir { =head2 $path = $cb->_safe_path( path => $path ); -Returns a path that's safe to us on Win32 and VMS. +Returns a path that's safe to us on Win32 and VMS. Only cleans up the path on Win32 if the path exists. @@ -409,36 +415,36 @@ On VMS, it encodes dots to _ using C sub _safe_path { my $self = shift; - + my %hash = @_; - + my $path; my $tmpl = { path => { required => 1, store => \$path }, - }; + }; check( $tmpl, \%hash ) or return; - + if( ON_WIN32 ) { - ### only need to fix it up if there's spaces in the path + ### only need to fix it up if there's spaces in the path return $path unless $path =~ /\s+/; - + ### clean up paths if we are on win32 return Win32::GetShortPathName( $path ) || $path; } elsif ( ON_VMS ) { ### XXX According to John Malmberg, there's an VMS issue: ### catdir on VMS can not currently deal with directory components - ### with dots in them. - ### Fixing this is a a three step procedure, which will work for - ### VMS in its traditional ODS-2 mode, and it will also work if + ### with dots in them. + ### Fixing this is a a three step procedure, which will work for + ### VMS in its traditional ODS-2 mode, and it will also work if ### VMS is in the ODS-5 mode that is being implemented. ### If the path is already in VMS syntax, assume that we are done. - + ### VMS format is a path with a trailing ']' or ':' return $path if $path =~ /\:|\]$/; - ### 1. Make sure that the value to be converted, $path is + ### 1. Make sure that the value to be converted, $path is ### in UNIX directory syntax by appending a '/' to it. $path .= '/' unless $path =~ m|/$|; @@ -448,17 +454,17 @@ sub _safe_path { ### filename translation, as filename translation leaves one dot. $path = VMS::Filespec::vmsify( $path ); - ### 3. Use $path = File::Spec->splitdir( VMS::Filespec::vmsify( + ### 3. Use $path = File::Spec->splitdir( VMS::Filespec::vmsify( ### $path . '/') to remove the directory delimiters. ### From John Malmberg: ### File::Spec->catdir will put the path back together. - ### The '/' trick only works if the string is a directory name - ### with UNIX style directory delimiters or no directory delimiters. + ### The '/' trick only works if the string is a directory name + ### with UNIX style directory delimiters or no directory delimiters. ### It is to force vmsify to treat the input specification as UNIX. ### ### There is a VMS::Filespec::unixpath() to do the appending of the '/' - ### to the specification, which will do a VMS::Filespec::vmsify() + ### to the specification, which will do a VMS::Filespec::vmsify() ### if needed. ### However it is not a good idea to call vmsify() on a pathname ### returned by unixify(), and it is not a good idea to call unixify() @@ -469,14 +475,14 @@ sub _safe_path { ### trip, but not ones containing filenames. $path = File::Spec->catdir( File::Spec->splitdir( $path ) ) } - + return $path; } =head2 ($pkg, $version, $ext) = $cb->_split_package_string( package => PACKAGE_STRING ); -Splits the name of a CPAN package string up into its package, version +Splits the name of a CPAN package string up into its package, version and extension parts. For example, C would return the following parts: @@ -488,27 +494,27 @@ For example, C would return the following parts: =cut { my $del_re = qr/[-_\+]/i; # delimiter between elements - my $pkg_re = qr/[a-z] # any letters followed by + my $pkg_re = qr/[a-z] # any letters followed by [a-z\d]* # any letters, numbers (?i:\.pm)? # followed by '.pm'--authors do this :( (?: # optionally repeating: $del_re # followed by a delimiter - [a-z] # any letters followed by - [a-z\d]* # any letters, numbers + [a-z] # any letters followed by + [a-z\d]* # any letters, numbers (?i:\.pm)? # followed by '.pm'--authors do this :( )* - /xi; - + /xi; + my $ver_re = qr/[a-z]*\d*?[a-z]* # contains a digit and possibly letters (?: # however, some start with a . only :( [-._] # followed by a delimiter [a-z\d]+ # and more digits and or letters )*? /xi; - + my $ext_re = qr/[a-z] # a letter, followed by [a-z\d]* # letters and or digits, optionally - (?: + (?: \. # followed by a dot and letters [a-z\d]+ # and or digits (like .tar.bz2) )? # optionally @@ -521,20 +527,20 @@ For example, C would return the following parts: ($ext_re) # extension, )? # optional, but requires version /xi; - + ### composed regex for CPAN packages my $full_re = qr/ ^ ( # the whole thing ($pkg_re+) # package - (?: + (?: $del_re # delimiter $ver_ext_re # version + extension )? ) - $ + $ /xi; - + ### composed regex for perl packages my $perl = PERL_CORE; my $perl_re = qr/ @@ -546,97 +552,97 @@ For example, C would return the following parts: )? ) $ - /xi; + /xi; sub _split_package_string { my $self = shift; my %hash = @_; - + my $str; my $tmpl = { package => { required => 1, store => \$str } }; check( $tmpl, \%hash ) or return; - - - ### 2 different regexes, one for the 'perl' package, - ### one for ordinary CPAN packages.. try them both, + + + ### 2 different regexes, one for the 'perl' package, + ### one for ordinary CPAN packages.. try them both, ### first match wins. for my $re ( $full_re, $perl_re ) { - + ### try the next if the match fails $str =~ $re or next; my $full = $1 || ''; - my $pkg = $2 || ''; + my $pkg = $2 || ''; my $ver = $3 || ''; my $ext = $4 || ''; ### this regex resets the capture markers! ### strip the trailing delimiter $pkg =~ s/$del_re$//; - + ### strip the .pm package suffix some authors insist on adding $pkg =~ s/\.pm$//i; return ($pkg, $ver, $ext, $full ); } - + return; } } { my %escapes = map { chr($_) => sprintf("%%%02X", $_) - } 0 .. 255; - + } 0 .. 255; + sub _uri_encode { my $self = shift; my %hash = @_; - + my $str; my $tmpl = { uri => { store => \$str, required => 1 } }; - + check( $tmpl, \%hash ) or return; ### XXX taken straight from URI::Encode ### Default unsafe characters. RFC 2732 ^(uric - reserved) $str =~ s|([^A-Za-z0-9\-_.!~*'()])|$escapes{$1}|g; - - return $str; + + return $str; } - - + + sub _uri_decode { my $self = shift; my %hash = @_; - + my $str; my $tmpl = { uri => { store => \$str, required => 1 } }; - + check( $tmpl, \%hash ) or return; - + ### XXX use unencode routine in utils? - $str =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; - - return $str; + $str =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; + + return $str; } } sub _update_timestamp { my $self = shift; my %hash = @_; - + my $file; my $tmpl = { file => { required => 1, store => \$file, allow => FILE_EXISTS } }; - + check( $tmpl, \%hash ) or return; - + ### `touch` the file, so windoze knows it's new -jmb ### works on *nix too, good fix -Kane ### make sure it is writable first, otherwise the `touch` will fail @@ -646,7 +652,7 @@ sub _update_timestamp { error( loc("Couldn't touch %1", $file) ); return; } - + return 1; } diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Module.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Module.pm index 8d237efc050..4d470c6a71c 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Module.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Module.pm @@ -27,7 +27,7 @@ $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Module +CPANPLUS::Module - CPAN module objects for CPANPLUS =head1 SYNOPSIS @@ -87,9 +87,9 @@ my $tmpl = { ### autogenerate accessors ### for my $key ( keys %$tmpl ) { no strict 'refs'; - + my $sub = $rename{$key} || $key; - + *{__PACKAGE__."::$sub"} = sub { $_[0]->{$key} = $_[1] if @_ > 1; return $_[0]->{$key}; @@ -153,7 +153,7 @@ module -- again, only registered modules have this. =cut sub dslip { - my $self = shift; + my $self = shift; ### if this module has relevant dslip info, return it return $self->_dslip if $self->_dslip ne EMPTY_DSLIP; @@ -163,7 +163,7 @@ sub dslip { for my $mod ( $self->contains ) { return $mod->_dslip if $mod->_dslip ne EMPTY_DSLIP; } - + ### ok, really no dslip info found, return the default return EMPTY_DSLIP; } @@ -334,7 +334,7 @@ sub new { sub status { my $self = shift; return $self->_status if $self->_status; - + my $acc = Object::Accessor->new; $acc->mk_accessors( qw[ installer_type dist_cpan dist prereqs signature extract fetch readme uninstall @@ -395,19 +395,19 @@ with C. =head2 $mod->is_autobundle; Returns a boolean indicating if the module you are looking at, is -actually an autobundle as generated by C<< $cb->autobundle >>. +actually an autobundle as generated by C<< $cb->autobundle >>. =head2 $mod->is_third_party -Returns a boolean indicating whether the package is a known third-party -module (i.e. it's not provided by the standard Perl distribution and +Returns a boolean indicating whether the package is a known third-party +module (i.e. it's not provided by the standard Perl distribution and is not available on the CPAN, but on a third party software provider). See L for more details. =head2 $mod->third_party_information Returns a reference to a hash with more information about a third-party -module. See the documentation about C in +module. See the documentation about C in L for more details. =cut @@ -417,22 +417,22 @@ L for more details. name => 0, version => 1, extension => 2, - ); - + ); + while ( my($type, $index) = each %map ) { my $name = 'package_' . $type; - + no strict 'refs'; *$name = sub { my $self = shift; my $val = shift || $self->package; my @res = $self->parent->_split_package_string( package => $val ); - + ### return the corresponding index from the result return $res[$index] if @res; return; }; - } + } sub package_is_perl_core { my $self = shift; @@ -441,8 +441,8 @@ L for more details. ### check if the package looks like a perl core package return 1 if $self->package_name eq PERL_CORE; - ### address #44562: ::Module->package_is_perl_code : problem comparing - ### version strings -- use $cb->_vcmp to avoid warnings when version + ### address #44562: ::Module->package_is_perl_code : problem comparing + ### version strings -- use $cb->_vcmp to avoid warnings when version ### have _ in them my $core = $self->module_is_supplied_with_perl_core; @@ -450,10 +450,10 @@ L for more details. if (defined $core) { ### if the package is newer than installed, then it's dual-lifed return if $cb->_vcmp($self->version, $self->installed_version) > 0; - - ### if the package is newer or equal to the corelist, + + ### if the package is newer or equal to the corelist, ### then it's dual-lifed - return if $cb->_vcmp( $self->version, $core ) >= 0; + return if $cb->_vcmp( $self->version, $core ) >= 0; ### otherwise, it's older than corelist, thus unsuitable. return 1; @@ -475,9 +475,9 @@ L for more details. ### check Module::CoreList to see if it's a core package require Module::CoreList; - - ### Address #41157: Module::module_is_supplied_with_perl_core() - ### broken for perl 5.10: Module::CoreList's version key for the + + ### Address #41157: Module::module_is_supplied_with_perl_core() + ### broken for perl 5.10: Module::CoreList's version key for the ### hash has a different number of trailing zero than $] aka ### $PERL_VERSION. @@ -493,13 +493,13 @@ L for more details. ### make sure Bundle-Foo also gets flagged as bundle sub is_bundle { my $self = shift; - + ### cpan'd bundle return 1 if $self->module =~ /^bundle(?:-|::)/i; - + ### autobundle return 1 if $self->is_autobundle; - + ### neither return; } @@ -516,16 +516,16 @@ L for more details. sub is_third_party { my $self = shift; - + return unless can_load( modules => { 'Module::ThirdParty' => 0 } ); - + return Module::ThirdParty::is_3rd_party( $self->name ); } sub third_party_information { my $self = shift; - return unless $self->is_third_party; + return unless $self->is_third_party; return Module::ThirdParty::module_information( $self->name ); } @@ -543,15 +543,15 @@ a fake C object. { ### accessors dont change during run time, so only compute once my @acc = grep !/status/, __PACKAGE__->accessors(); - + sub clone { my $self = shift; - + ### clone the object ### my %data = map { $_ => $self->$_ } @acc; - + my $obj = CPANPLUS::Module::Fake->new( %data ); - + return $obj; } } @@ -574,13 +574,13 @@ sub fetch { my %args = ( module => $self ); ### if a custom fetch location got specified before, add that here - $args{fetch_from} = $self->status->_fetch_from + $args{fetch_from} = $self->status->_fetch_from if $self->status->_fetch_from; my $where = $cb->_fetch( @_, %args ) or return; ### do an md5 check ### - if( !$self->status->_fetch_from and + if( !$self->status->_fetch_from and $cb->configure_object->get_conf('md5') and $self->package ne CHECKSUMS ) { @@ -613,16 +613,16 @@ sub extract { $self->module) ); return; } - + ### can't extract these, so just use the basedir for the file if( $self->is_autobundle ) { - + ### this is expected to be set after an extract call $self->get_installer_type; - + return $self->status->extract( dirname( $self->status->fetch ) ); } - + return $cb->_extract( @_, module => $self ); } @@ -649,16 +649,16 @@ sub get_installer_type { prefer_makefile => { default => $conf->get_conf('prefer_makefile'), store => \$prefer_makefile, allow => BOOLEANS }, verbose => { default => $conf->get_conf('verbose'), - store => \$verbose }, + store => \$verbose }, }; check( $tmpl, \%hash ) or return; my $type; - + ### autobundles use their own installer, so return that if( $self->is_autobundle ) { - $type = INSTALLER_AUTOBUNDLE; + $type = INSTALLER_AUTOBUNDLE; } else { my $extract = $self->status->extract(); @@ -669,15 +669,18 @@ sub get_installer_type { )); return; } - + ### check if it's a makemaker or a module::build type dist ### my $found_build = -e BUILD_PL->( $extract ); my $found_makefile = -e MAKEFILE_PL->( $extract ); - + $type = INSTALLER_BUILD if !$prefer_makefile && $found_build; $type = INSTALLER_BUILD if $found_build && !$found_makefile; $type = INSTALLER_MM if $prefer_makefile && $found_makefile; $type = INSTALLER_MM if $found_makefile && !$found_build; + # Special case Module::Build to always use INSTALLER_MM + $type = INSTALLER_MM if $self->package =~ m{^Module-Build-\d}; + } ### ok, so it's a 'build' installer, but you don't /have/ module build @@ -685,22 +688,22 @@ sub get_installer_type { if( $type and $type eq INSTALLER_BUILD and ( not CPANPLUS::Dist->has_dist_type( INSTALLER_BUILD ) or not $cb->module_tree( INSTALLER_BUILD ) - ->is_uptodate( version => '0.24' ) + ->is_uptodate( version => '0.60' ) ) ) { - + ### XXX this is for recording purposes only. We *have* to install ### these before even creating a dist object, or we'll get an error ### saying 'no such dist type'; ### XXX duplicated from CPANPLUS::Selfupdate. fix somehow? my $href = $self->status->configure_requires || {}; - my $deps = { INSTALLER_BUILD, '0.24', %$href }; - + my $deps = { INSTALLER_BUILD, '0.60', %$href }; + $self->status->configure_requires( $deps ); - + msg(loc("This module requires '%1' and '%2' to be installed first. ". "Adding these modules to your prerequisites list", 'Module::Build', INSTALLER_BUILD - ), $verbose ); + ), $verbose ); ### ok, actually we found neither ### @@ -747,7 +750,7 @@ sub dist { format => { default => $conf->get_conf('dist_type') || $self->status->installer_type, store => \$type }, - target => { default => TARGET_CREATE, store => \$target }, + target => { default => TARGET_CREATE, store => \$target }, args => { default => {}, store => \$args }, }; @@ -761,20 +764,20 @@ sub dist { ### XXX we _could_ do this for any type we dont have actually... if( $type eq INSTALLER_BUILD ) { msg(loc("Bootstrapping installer '%1'", $type)); - + ### don't propagate the format, it's the one we're trying to ### bootstrap, so it'll be an infinite loop if we do - + $cb->module_tree( $type )->install( target => $target, %$args ) or do { error(loc("Could not bootstrap installer '%1' -- ". "can not continue", $type)); - return; + return; }; - + ### re-scan for available modules now CPANPLUS::Dist->rescan_dist_types; - + unless( CPANPLUS::Dist->has_dist_type( $type ) ) { error(loc("Newly installed installer type '%1' should be ". "available, but is not! -- aborting", $type)); @@ -782,40 +785,40 @@ sub dist { } else { msg(loc("Installer '%1' successfully bootstrapped", $type)); } - + ### some other plugin you dont have. Abort } else { error(loc("Installer type '%1' not found. Please verify your ". "installation -- aborting", $type )); return; - } + } } - ### make sure we don't overwrite it, just in case we came + ### make sure we don't overwrite it, just in case we came ### back from a ->save_state. This allows restoration to - ### work correctly + ### work correctly my( $dist, $dist_cpan ); - + unless( $dist = $self->status->dist ) { $dist = $type->new( module => $self ) or return; $self->status->dist( $dist ); } - + unless( $dist_cpan = $self->status->dist_cpan ) { - + $dist_cpan = $type eq $self->status->installer_type ? $self->status->dist - : $self->status->installer_type->new( module => $self ); + : $self->status->installer_type->new( module => $self ); $self->status->dist_cpan( $dist_cpan ); } - - + + DIST: { ### just wanted the $dist object? last DIST if $target eq TARGET_INIT; - + ### first prepare the dist $dist->prepare( %$args ) or return; $self->status->prepared(1); @@ -834,7 +837,7 @@ sub dist { =head2 $bool = $mod->prepare( ) -Convenience method around C that prepares a module +Convenience method around C that prepares a module without actually building it. This is equivalent to invoking C with C set to C @@ -842,22 +845,22 @@ Returns true on success, false on failure. =cut -sub prepare { +sub prepare { my $self = shift; return $self->install( @_, target => TARGET_PREPARE ); } =head2 $bool = $mod->create( ) -Convenience method around C that creates a module. -This is equivalent to invoking C with C set to +Convenience method around C that creates a module. +This is equivalent to invoking C with C set to C Returns true on success, false on failure. =cut -sub create { +sub create { my $self = shift; return $self->install( @_, target => TARGET_CREATE ); } @@ -923,7 +926,7 @@ sub install { } - ### if this target isn't 'install', we will need to at least 'create' + ### if this target isn't 'install', we will need to at least 'create' ### every prereq, so it can build ### XXX prereq_target of 'prepare' will do weird things here, and is ### not supported. @@ -964,7 +967,7 @@ sub install { $self->version, $self->package ) ); } return; - + ### it might be a known 3rd party module } elsif ( $self->is_third_party ) { my $info = $self->third_party_information; @@ -978,7 +981,7 @@ sub install { $self->name, $self->name, $info->{name}, $info->{author}, $info->{url} )); - + return; } @@ -1028,10 +1031,10 @@ sub install { "-- Not trusting this module, aborting install", $self->module ) ); $self->status->signature(0); - + ### send out test report on broken sig if( $conf->get_conf('cpantest') ) { - $cb->_send_report( + $cb->_send_report( module => $self, failed => 1, buffer => CPANPLUS::Error->stack_as_string, @@ -1039,8 +1042,8 @@ sub install { force => $args->{force}, ) or error(loc("Failed to send test report for '%1'", $self->module ) ); - } - + } + return; } else { @@ -1065,8 +1068,8 @@ sub install { } } - my $dist = $self->dist( format => $format, - target => $target, + my $dist = $self->dist( format => $format, + target => $target, args => $args ); unless( $dist ) { error( loc( "Unable to create a new distribution object for '%1' " . @@ -1105,7 +1108,7 @@ sub bundle_modules { } my @files; - + ### autobundles are special files generated by CPANPLUS. If we can ### read the file, we can determine the prereqs if( $self->is_autobundle ) { @@ -1114,11 +1117,11 @@ sub bundle_modules { error(loc("Don't know where '%1' was fetched to", $self->package)); return; } - + push @files, $where - + ### regular bundle::* upload - } else { + } else { my $dir; unless( $dir = $self->status->extract ) { error(loc("Don't know where '%1' was extracted to", $self->module)); @@ -1188,7 +1191,7 @@ success and returns false on failure. sub readme { my $self = shift; - my $conf = $self->parent->configure_object; + my $conf = $self->parent->configure_object; ### did we already dl the readme once? ### return $self->status->readme() if $self->status->readme(); @@ -1207,10 +1210,10 @@ sub readme { my $file; { ### disable checksum fetches on readme downloads - + my $tmp = $conf->get_conf( 'md5' ); $conf->set_conf( md5 => 0 ); - + $file = $obj->fetch; $conf->set_conf( md5 => $tmp ); @@ -1275,7 +1278,7 @@ Returns a boolean indicating if this module is uptodate or not. #local @INC = CPANPLUS::inc->original_inc; my $self = shift; - + ### make sure check_install is not looking in %INC, as ### that may contain some of our sneakily loaded modules ### that aren't installed as such. -- kane @@ -1288,6 +1291,10 @@ Returns a boolean indicating if this module is uptodate or not. @_, ); + ### Don't trust modules which are the result of @INC hooks + ### FatPacker uses this trickery and it causes WTF moments + return $alt_rv if defined $href->{dir} && ref $href->{dir}; + return $href->{$key} || $alt_rv; } } @@ -1349,7 +1356,7 @@ sub details { =head2 @list = $self->contains() -Returns a list of module objects that represent the modules also +Returns a list of module objects that represent the modules also present in the package of this module. For example, for C this might return: @@ -1366,7 +1373,7 @@ sub contains { my $pkg = $self->package; my @mods = $cb->search( type => 'package', allow => [qr/^$pkg$/] ); - + return @mods; } @@ -1491,10 +1498,10 @@ sub uninstall { # error( loc( "Could not remove '%1': %2", $dir, $! ) ) # unless $^O eq 'MSWin32'; #} - + my @cmd = ($^X, "-e", "rmdir q[$dir]"); unshift @cmd, $sudo if $sudo; - + my $buffer; unless ( run( command => \@cmd, verbose => $verbose, @@ -1619,19 +1626,19 @@ sub _extutils_installed { my @libs; for my $lib ( @{ $conf->get_conf('lib') } ) { require Config; - + ### and just the standard dir push @libs, $lib; - + ### figure out what an MM prefix expands to. Basically, it's the - ### site install target from %Config, ie: /opt/lib/perl5/site_perl/5.8.8 + ### site install target from %Config, ie: /opt/lib/perl5/site_perl/5.8.8 ### minus the site wide prefix, ie: /opt ### this lets users add the dir they have set as their EU::MM PREFIX ### to our 'lib' config and it Just Works ### the arch specific dir, ie: - ### /opt/lib/perl5/site_perl/5.8.8/darwin-2level + ### /opt/lib/perl5/site_perl/5.8.8/darwin-2level ### XXX is this the right thing to do? - + ### we add all 6 dir combos for prefixes: ### /foo/lib ### /foo/lib/arch @@ -1641,7 +1648,7 @@ sub _extutils_installed { ### /foo/vendor/lib/arch for my $href ( @config_names ) { for my $key ( qw[lib arch] ) { - + ### look up the config value -- use EXP for the EXPANDED ### version, so no ~ etc are found in there my $dir = $Config::Config{ $href->{ $key } .'exp' } or next; @@ -1653,15 +1660,15 @@ sub _extutils_installed { ### remove the prefix from it, so we can append to our $lib $dir =~ s/^\Q$prefix\E//; - + ### do the appending push @libs, File::Spec->catdir( $lib, $dir ); - + } } - } + } - my $inst; + my $inst; unless( $inst = ExtUtils::Installed->new( extra_libs => \@libs ) ) { error( loc("Could not create an '%1' object", 'ExtUtils::Installed' ) ); @@ -1694,15 +1701,15 @@ You can reset C<@INC> and C<$PERL5LIB> to its original state when you started the program, by calling: $self->parent->flush('lib'); - + =cut sub add_to_includepath { my $self = shift; my $cb = $self->parent; - + if( my $dir = $self->status->extract ) { - + $cb->_add_to_includepath( directories => [ File::Spec->catdir(BLIB->($dir), LIB), @@ -1710,7 +1717,7 @@ sub add_to_includepath { BLIB->($dir), ] ) or return; - + } else { error(loc( "No extract dir registered for '%1' -- can not add ". "add builddir to search path!", $self->module )); @@ -1769,7 +1776,7 @@ sub best_path_to_module_build { # CPANPLUS::inc->path_to('Module::Build') eq # CPANPLUS::inc->installer_path ) # ) { -# +# # ### if the module being installed is *not* Module::Build # ### itself -- as that would undoubtedly be newer -- add # ### the path to the installers to @INC @@ -1798,10 +1805,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =cut diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Author.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Author.pm index 0daac6716d7..9ce12ebfde2 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Author.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Author.pm @@ -13,7 +13,7 @@ local $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Module::Author +CPANPLUS::Module::Author - CPAN author object for CPANPLUS =head1 SYNOPSIS @@ -195,7 +195,7 @@ sub distributions { my $dist = CPANPLUS::Module::Fake->new( module => do { my $m = $mod->package_name( $name ); $m =~ s/-/::/g; $m; - }, + }, version => $mod->package_version( $name ), package => $name, path => $mod->path, # same author after all diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Author/Fake.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Author/Fake.pm index 3156c5c7abb..0c844714981 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Author/Fake.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Author/Fake.pm @@ -17,7 +17,7 @@ $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Module::Author::Fake +CPANPLUS::Module::Author::Fake - dummy author object for CPANPLUS =head1 SYNOPSIS @@ -63,7 +63,7 @@ sub new { unless( $obj->_id ) { error(loc("No '%1' specified -- No CPANPLUS object associated!",'_id')); return; - } + } ### rebless object ### return bless $obj, $class; diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Checksums.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Checksums.pm index 3f9561e2dfe..8dde1cc0554 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Checksums.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Checksums.pm @@ -19,7 +19,7 @@ $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Module::Checksums +CPANPLUS::Module::Checksums - checking the checksum of a distribution =head1 SYNOPSIS @@ -28,7 +28,7 @@ CPANPLUS::Module::Checksums =head1 DESCRIPTION -This is a class that provides functions for checking the checksum +This is a class that provides functions for checking the checksum of a distribution. Should not be loaded directly, but used via the interface provided via C. @@ -102,7 +102,7 @@ sub _validate_checksum { } else { msg(loc("Archive size is not known for '%1'",$self->package),$verbose); } - + my $sha = $href->{ $self->package }->{'sha256'}; unless( defined $sha ) { diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Fake.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Fake.pm index 84d0233cf83..b0db1dae109 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Fake.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Module/Fake.pm @@ -17,7 +17,7 @@ $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Module::Fake +CPANPLUS::Module::Fake - fake module object for internal use =head1 SYNOPSIS @@ -49,9 +49,9 @@ are required. sub new { my $class = shift; my %hash = @_; - + local $Params::Check::ALLOW_UNKNOWN = 1; - + my $tmpl = { module => { required => 1 }, path => { required => 1 }, @@ -59,22 +59,22 @@ sub new { _id => { default => CPANPLUS::Internals->_last_id }, author => { default => '' }, }; - + my $args = check( $tmpl, \%hash ) or return; - - $args->{author} ||= CPANPLUS::Module::Author::Fake->new( + + $args->{author} ||= CPANPLUS::Module::Author::Fake->new( _id => $args->{_id} ); - + my $obj = CPANPLUS::Module->new( %$args ) or return; - + unless( $obj->_id ) { error(loc("No '%1' specified -- No CPANPLUS object associated!",'_id')); return; - } - + } + ### rebless object ### - return bless $obj, $class; -} + return bless $obj, $class; +} 1; @@ -83,4 +83,4 @@ sub new { # c-basic-offset: 4 # indent-tabs-mode: nil # End: -# vim: expandtab shiftwidth=4: +# vim: expandtab shiftwidth=4: diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Selfupdate.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Selfupdate.pm index 6f2015c504c..26d3dc81f5b 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Selfupdate.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Selfupdate.pm @@ -13,25 +13,25 @@ $Params::Check::VERBOSE = 1; =head1 NAME -CPANPLUS::Selfupdate +CPANPLUS::Selfupdate - self-updating for CPANPLUS =head1 SYNOPSIS $su = $cb->selfupdate_object; - + @feats = $su->list_features; @feats = $su->list_enabled_features; - + @mods = map { $su->modules_for_feature( $_ ) } @feats; @mods = $su->list_core_dependencies; @mods = $su->list_core_modules; - + for ( @mods ) { print $_->name " should be version " . $_->version_required; - print "Installed version is not uptodate!" + print "Installed version is not uptodate!" unless $_->is_installed_version_sufficient; } - + $ok = $su->selfupdate( update => 'all', latest => 0 ); =cut @@ -49,8 +49,8 @@ CPANPLUS::Selfupdate 'Module::Load' => '0.10', 'Module::Load::Conditional' => '0.38', # returns dir for loaded # modules - 'version' => '0.73', # needed for M::L::C - # addresses #24630 and + 'version' => '0.77', # needed for M::L::C + # addresses #24630 and # #24675 # Address ~0 overflow issue 'Params::Check' => '0.22', @@ -68,10 +68,10 @@ CPANPLUS::Selfupdate 'Module::Loaded' => '0.01', 'Parse::CPAN::Meta' => '1.4200', # config_requires support 'ExtUtils::Install' => '1.42', # uninstall outside @INC - ( check_install( module => 'CPANPLUS::Dist::Build' ) - ? ( 'CPANPLUS::Dist::Build' => '0.24' ) : () ), + ( check_install( module => 'CPANPLUS::Dist::Build' ) + ? ( 'CPANPLUS::Dist::Build' => '0.60' ) : () ), }, - + features => { # config_key_name => [ # sub { } to list module key/value pairs @@ -80,29 +80,29 @@ CPANPLUS::Selfupdate prefer_makefile => [ sub { my $cb = shift; - $cb->configure_object->get_conf('prefer_makefile') + $cb->configure_object->get_conf('prefer_makefile') ? { } - : { 'CPANPLUS::Dist::Build' => '0.24' }; + : { 'CPANPLUS::Dist::Build' => '0.60' }; }, sub { return 1 }, # always enabled - ], + ], cpantest => [ { 'Test::Reporter' => '1.34', 'Parse::CPAN::Meta' => '1.4200' }, - sub { + sub { my $cb = shift; return $cb->configure_object->get_conf('cpantest'); }, - ], + ], dist_type => [ - sub { + sub { my $cb = shift; my $dist = $cb->configure_object->get_conf('dist_type'); return { $dist => '0.0' } if $dist; return; - }, - sub { + }, + sub { my $cb = shift; return $cb->configure_object->get_conf('dist_type'); }, @@ -111,17 +111,17 @@ CPANPLUS::Selfupdate md5 => [ { 'Digest::SHA' => '0.0', - }, - sub { + }, + sub { my $cb = shift; return $cb->configure_object->get_conf('md5'); }, ], shell => [ - sub { + sub { my $cb = shift; my $dist = $cb->configure_object->get_conf('shell'); - + ### we bundle these shells, so don't bother having a dep ### on them... If we don't do this, CPAN.pm actually detects ### a recursive dependency and breaks (see #26077). @@ -130,9 +130,9 @@ CPANPLUS::Selfupdate return if $dist eq SHELL_DEFAULT or $dist eq SHELL_CLASSIC; return { $dist => '0.0' } if $dist; return; - }, + }, sub { return 1 }, - ], + ], signature => [ sub { my $cb = shift; @@ -146,19 +146,19 @@ CPANPLUS::Selfupdate ### this change due to this ticket: #26914 # and $cb->configure_object->get_conf('prefer_bin'); - return { - 'Crypt::OpenPGP' => '0.0', + return { + 'Crypt::OpenPGP' => '0.0', 'Module::Signature' => '0.06', }; - }, + }, sub { my $cb = shift; return $cb->configure_object->get_conf('signature'); }, ], storable => [ - { 'Storable' => '0.0' }, - sub { + { 'Storable' => '0.0' }, + sub { my $cb = shift; return $cb->configure_object->get_conf('storable'); }, @@ -170,10 +170,10 @@ CPANPLUS::Selfupdate sub { my $cb = shift; my $conf = $cb->configure_object; - return $conf->get_conf('source_engine') + return $conf->get_conf('source_engine') eq 'CPANPLUS::Internals::Source::SQLite' - }, - ], + }, + ], }, core => { 'CPANPLUS' => '0.0', @@ -196,35 +196,35 @@ sub new { my $class = shift; my $cb = shift or return; return bless sub { $cb }, $class; -} +} { ### cache to find the relevant modules my $cache = { - core + core => sub { my $self = shift; core => [ $self->list_core_modules ] }, - - dependencies + + dependencies => sub { my $self = shift; dependencies => [ $self->list_core_dependencies ] }, - enabled_features + enabled_features => sub { my $self = shift; map { $_ => [ $self->modules_for_feature( $_ ) ] } - $self->list_enabled_features + $self->list_enabled_features }, features => sub { my $self = shift; map { $_ => [ $self->modules_for_feature( $_ ) ] } - $self->list_features + $self->list_features }, ### make sure to do 'core' first, in case ### we are out of date ourselves all => [ qw|core dependencies enabled_features| ], }; - - + + =head2 @cat = $self->list_categories Returns a list of categories that the C method accepts. @@ -237,14 +237,14 @@ See C for details. =head2 %list = $self->list_modules_to_update( update => "core|dependencies|enabled_features|features|all", [latest => BOOL] ) -List which modules C would upgrade. You can update either +List which modules C would upgrade. You can update either the core (CPANPLUS itself), the core dependencies, all features you have currently turned on, or all features available, or everything. The C option determines whether it should update to the latest version on CPAN, or if the minimal required version for CPANPLUS is good enough. - + Returns a hash of feature names and lists of module objects to be upgraded based on the category you provided. For example: @@ -254,40 +254,40 @@ Would return: ( core => [ $module_object_for_cpanplus ] ); -=cut - +=cut + sub list_modules_to_update { my $self = shift; my $cb = $self->(); my $conf = $cb->configure_object; my %hash = @_; - + my($type, $latest); my $tmpl = { update => { required => 1, store => \$type, allow => [ keys %$cache ], }, - latest => { default => 0, store => \$latest, allow => BOOLEANS }, - }; - + latest => { default => 0, store => \$latest, allow => BOOLEANS }, + }; + { local $Params::Check::ALLOW_UNKNOWN = 1; check( $tmpl, \%hash ) or return; } - + my $ref = $cache->{$type}; - ### a list of ( feature1 => \@mods, feature2 => \@mods, etc ) + ### a list of ( feature1 => \@mods, feature2 => \@mods, etc ) my %list = UNIVERSAL::isa( $ref, 'ARRAY' ) ? map { $cache->{$_}->( $self ) } @$ref : $ref->( $self ); ### filter based on whether we need the latest ones or not - for my $aref ( values %list ) { - $aref = [ $latest + for my $aref ( values %list ) { + $aref = [ $latest ? grep { !$_->is_uptodate } @$aref : grep { !$_->is_installed_version_sufficient } @$aref ]; } - + return %list; } @@ -310,21 +310,21 @@ Returns true on success, false on error. my $cb = $self->(); my $conf = $cb->configure_object; my %hash = @_; - + my $force; my $tmpl = { force => { default => $conf->get_conf('force'), store => \$force }, - }; - + }; + { local $Params::Check::ALLOW_UNKNOWN = 1; check( $tmpl, \%hash ) or return; } - + my %list = $self->list_modules_to_update( %hash ) or return; ### just the modules please my @mods = map { @$_ } values %list; - + my $flag; for my $mod ( @mods ) { unless( $mod->install( force => $force ) ) { @@ -332,10 +332,10 @@ Returns true on success, false on error. error(loc("Failed to update module '%1'", $mod->name)); } } - + return if $flag; return 1; - } + } } @@ -360,19 +360,19 @@ CPANPLUS installation. sub list_enabled_features { my $self = shift; my $cb = $self->(); - + my @enabled; for my $feat ( $self->list_features ) { my $ref = $self->_get_config->{'features'}->{$feat}->[1]; push @enabled, $feat if $ref->($cb); } - + return @enabled; } =head2 @mods = $self->modules_for_feature( FEATURE [,AS_HASH] ) -Returns a list of C objects which +Returns a list of C objects which represent the modules required to support this feature. For a list of features, call the C method. @@ -388,18 +388,18 @@ sub modules_for_feature { my $feature = shift or return; my $as_hash = shift || 0; my $cb = $self->(); - + unless( exists $self->_get_config->{'features'}->{$feature} ) { error(loc("Unknown feature '%1'", $feature)); return; } - + my $ref = $self->_get_config->{'features'}->{$feature}->[0]; - + ### it's either a list of modules/versions or a subroutine that ### returns a list of modules/versions my $href = UNIVERSAL::isa( $ref, 'HASH' ) ? $ref : $ref->( $cb ); - + return unless $href; # nothing needed for the feature? return $href if $as_hash; @@ -409,7 +409,7 @@ sub modules_for_feature { =head2 @mods = $self->list_core_dependencies( [AS_HASH] ) -Returns a list of C objects which +Returns a list of C objects which represent the modules that comprise the core dependencies of CPANPLUS. If the C argument is provided, no module objects are @@ -430,7 +430,7 @@ sub list_core_dependencies { =head2 @mods = $self->list_core_modules( [AS_HASH] ) -Returns a list of C objects which +Returns a list of C objects which represent the modules that comprise the core of CPANPLUS. If the C argument is provided, no module objects are @@ -453,14 +453,14 @@ sub _hashref_to_module { my $self = shift; my $cb = $self->(); my $href = shift or return; - - return map { + + return map { CPANPLUS::Selfupdate::Module->new( $cb->module_tree($_) => $href->{$_} ) } keys %$href; -} - +} + =head1 CPANPLUS::Selfupdate::Module @@ -474,22 +474,22 @@ that return module objects. { package CPANPLUS::Selfupdate::Module; use base 'CPANPLUS::Module'; - + ### stores module name -> cpanplus required version ### XXX only can deal with 1 pair! my %Cache = (); my $Acc = 'version_required'; - + sub new { my $class = shift; my $mod = shift or return; my $ver = shift; return unless defined $ver; - + my $obj = $mod->clone; # clone the module object bless $obj, $class; # rebless it to our class - + $obj->$Acc( $ver ); - + return $obj; } @@ -498,12 +498,12 @@ that return module objects. Returns the version of this module required for CPANPLUS. =cut - + sub version_required { my $self = shift; $Cache{ $self->name } = shift() if @_; return $Cache{ $self->name }; - } + } =head2 $bool = $mod->is_installed_version_sufficient @@ -512,13 +512,13 @@ for CPANPLUS, or false if it is not. =cut - + sub is_installed_version_sufficient { my $self = shift; return $self->is_uptodate( version => $self->$Acc ); } -} +} 1; @@ -534,10 +534,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =cut diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell.pm index e3eb181c6dc..04735275121 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell.pm @@ -20,7 +20,7 @@ $DEFAULT = SHELL_DEFAULT; =head1 NAME -CPANPLUS::Shell +CPANPLUS::Shell - base class for CPANPLUS shells =head1 SYNOPSIS @@ -56,17 +56,17 @@ sub import { ### find out what shell we're supposed to load ### $SHELL = $option ? $class . '::' . $option - : do { ### XXX this should offer to reconfigure + : do { ### XXX this should offer to reconfigure ### CPANPLUS, somehow. --rs ### XXX load Configure only if we really have to ### as that means any $Conf passed later on will - ### be ignored in favour of the one that was + ### be ignored in favour of the one that was ### retrieved via ->new --kane - my $conf = CPANPLUS::Configure->new() or + my $conf = CPANPLUS::Configure->new() or die loc("No configuration available -- aborting") . $/; $conf->get_conf('shell') || $DEFAULT; }; - + ### load the shell, fall back to the default if required ### and die if even that doesn't work EVAL: { @@ -294,13 +294,13 @@ sub _pager_close { my $self = shift; print @_; } - + sub __printf { my $self = shift; my $fmt = shift; - + ### MUST specify $fmt as a separate param, and not as part - ### of @_, as it will then miss the $fmt and return the + ### of @_, as it will then miss the $fmt and return the ### number of elements in the list... =/ --kane $self->__print( sprintf( $fmt, @_ ) ); } @@ -320,10 +320,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Classic.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Classic.pm index 08c03bcf383..089d3de16bd 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Classic.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Classic.pm @@ -1207,10 +1207,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default.pm index 35c02aff2b7..56dce061ae3 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default.pm @@ -26,7 +26,7 @@ local $Data::Dumper::Indent = 1; # for dumpering from ! BEGIN { use vars qw[ $VERSION @ISA ]; @ISA = qw[ CPANPLUS::Shell::_Base::ReadLine ]; - $VERSION = "0.9103"; + $VERSION = "0.9121"; } load CPANPLUS::Shell; @@ -56,6 +56,7 @@ my $map = { 'u' => '_uninstall', '/' => '_meta', # undocumented for now 'c' => '_reports', + 'e' => '_reload_shell', }; ### free letters: e g j k n y ### @@ -73,7 +74,7 @@ my $Prompt = $Brand . '> '; =head1 NAME -CPANPLUS::Shell::Default +CPANPLUS::Shell::Default - the default CPANPLUS shell =head1 SYNOPSIS @@ -119,8 +120,8 @@ CPANPLUS::Shell::Default cpanp> r Acme::Foo # view Acme::Foo's README file cpanp> o # get a list of all installed modules that # are out of date - cpanp> o 1..3 # list uptodateness from a previous search - + cpanp> o 1..3 # list uptodateness from a previous search + cpanp> s conf # show config settings cpanp> s conf md5 1 # enable md5 checks cpanp> s program # show program settings @@ -141,9 +142,10 @@ CPANPLUS::Shell::Default cpanp> w # show last search results again cpanp> q # quit the shell + cpanp> e # exit the shell and reload cpanp> /plugins # list available plugins - cpanp> /? PLUGIN # list help test of + cpanp> /? PLUGIN # list help test of ### common options: cpanp> i ... --skiptest # skip tests @@ -250,11 +252,11 @@ sub _input_loop { } continue { ### clear the sigint count $self->_signals->{INT}{count}-- - if $self->_signals->{INT}{count}; - + if $self->_signals->{INT}{count}; + ### reset the 'install prereq?' cached answer - $self->settings->{'install_all_prereqs'} = undef; - + $self->settings->{'install_all_prereqs'} = undef; + } return 1; @@ -280,7 +282,7 @@ sub dispatch_on_input { $self->noninteractive($noninteractive) if defined $noninteractive; my $rv = 1; - + my @cmds = split ';', $string; while( my $input = shift @cmds ) { @@ -304,9 +306,9 @@ sub dispatch_on_input { if( $input and $input !~ s/^\s+// ) { $self->__print( loc("Could not understand command: %1\n". "Possibly missing command before argument(s)?\n", - $org_input) ); + $org_input) ); return; - } + } ### allow overrides from the config file ### if( defined $rc->{$key} ) { @@ -343,9 +345,9 @@ sub dispatch_on_input { if( $key eq 'z' or ($key eq 's' and $input =~ /^\s*edit/) ) { - $self->__print( "\n", + $self->__print( "\n", loc( "Command '%1' not supported over remote connection", - join ' ', $key, $input + join ' ', $key, $input ), "\n\n" ); } else { @@ -377,7 +379,7 @@ sub dispatch_on_input { unless grep {$key eq $_} qw[! m a v w x p s b / ? h]; ### keep track of failures - $rv *= defined eval { $self->$method( + $rv *= defined eval { $self->$method( modules => \@mods, options => $options, input => $input, @@ -502,7 +504,7 @@ sub __display_results { } else { $self->__print( loc("No results to display"), "\n" ); } - + return 1; } @@ -514,7 +516,7 @@ sub _quit { if defined $rc->{'logout'}; $self->__print( loc("Exiting CPANPLUS shell"), "\n" ); - + return 1; } @@ -529,21 +531,22 @@ sub _quit { sub _help { my $self = shift; my %hash = @_; - + my $input; { local $Params::Check::ALLOW_UNKNOWN = 1; - + my $tmpl = { input => { required => 0, store => \$input } }; - + my $args = check( $tmpl, \%hash ) or return; } - + @help = ( loc('[General]' ), loc(' h | ? # display help' ), loc(' q # exit' ), +loc(' e # exit and reload' ), loc(' v # version information' ), loc('[Search]' ), loc(' a AUTHOR ... # search by author(s)' ), @@ -584,7 +587,7 @@ loc(' /plugins # list available plugins' ), loc(' /? [PLUGIN NAME] # show usage for (a particular) plugin(s)' ), ) unless @help; - + $self->_pager_open if (@help >= $self->_term_rowcount); ### XXX: functional placeholder for actual 'detailed' help. $self->__print( "Detailed help for the command '$input' is " . @@ -592,7 +595,7 @@ loc(' /? [PLUGIN NAME] # show usage for (a particular) plugin(s)' ), $self->__print( map {"$_\n"} @help ); $self->__print( $/ ); $self->_pager_close; - + return 1; } } @@ -760,7 +763,7 @@ sub _fetch { $self->__print( "\n" ); } $self->_pager_close; - + return 1 if $rv; return; } @@ -860,16 +863,16 @@ sub _reload_indices { } my $rv = $cb->reload_indices( %$opts ); - + ### so the update failed, but you didnt give it any options either if( !$rv and !(keys %$opts) ) { $self->__print( "\nFailure may be due to corrupt source files\n" . "Try this:\n\tx --update_source\n\n" ); } - + return $rv; - + } sub _install { @@ -906,20 +909,20 @@ sub _install { $self->__print( $prompt, $mod->module, " (".$mod->version.")", "\n" ); my $log_length = length CPANPLUS::Error->stack_as_string; - + ### store the status for look up when we're done with all ### install calls $status->{$mod} = $mod->install( %$opts, target => $target ); - + ### would you like a log file of what happened? if( $conf->get_conf('write_install_logs') ) { if ( ON_WIN32 and !check_install( - module => 'IPC::Run', version => 0.55 ) + module => 'IPC::Run', version => 0.55 ) ) { - error(loc("IPC::Run version '%1' is required on MSWin32" - . " in order to capture buffers." - . " The logfile generated may not contain" + error(loc("IPC::Run version '%1' is required on MSWin32" + . " in order to capture buffers." + . " The logfile generated may not contain" . " any useful data, until it is installed", 0.55)); } @@ -930,26 +933,26 @@ sub _install { ### create the dir if it doesn't exit yet $cb->_mkdir( dir => $dir ) unless -d $dir; - my $file = File::Spec->catfile( + my $file = File::Spec->catfile( $dir, - INSTALL_LOG_FILE->( $mod ) + INSTALL_LOG_FILE->( $mod ) ); if ( open my $fh, ">$file" ) { my $stack = CPANPLUS::Error->stack_as_string; ### remove everything in the log that was there *before* ### we started this install substr( $stack, 0, $log_length, '' ); - + print $fh $stack; close $fh; - - $self->__print( + + $self->__print( loc("*** Install log written to:\n %1\n\n", $file) ); - } else { + } else { warn "Could not open '$file': $!\n"; next; - } + } } } @@ -961,7 +964,7 @@ sub _install { $self->__print( loc("Module '%1' %tense(%2,past) successfully\n", $mod->module, $action) - ); + ); } else { $flag++; $self->__print( @@ -981,8 +984,8 @@ sub _install { loc("Problem %tense(%1,present) one or more modules", $action) ); $self->__print( "\n" ); - - $self->__print( + + $self->__print( loc("*** You can view the complete error buffer by pressing ". "'%1' ***\n", 'p') ) unless $conf->get_conf('verbose') || $self->noninteractive; @@ -1001,13 +1004,13 @@ sub __ask_about_install { $Shell->__print( loc("Module '%1' requires '%2' to be installed", $mod->module, $prereq->module ) ); $Shell->__print( "\n\n" ); - + ### previously cached answer? return $Shell->settings->{'install_all_prereqs'} if defined $Shell->settings->{'install_all_prereqs'}; - - - $Shell->__print( + + + $Shell->__print( loc( "If you don't wish to see this question anymore\n". "you can disable it by entering the following ". "commands on the prompt:\n '%1'", @@ -1025,9 +1028,9 @@ sub __ask_about_install { default => $yes, ); - ### if 'all' or 'none', save this, so we can apply it to + ### if 'all' or 'none', save this, so we can apply it to ### other prereqs in this chain. - $Shell->settings->{'install_all_prereqs'} = + $Shell->settings->{'install_all_prereqs'} = $reply eq $all ? 1 : $reply eq $none ? 0 : undef; @@ -1064,7 +1067,7 @@ sub __ask_about_edit_test_report { my $term = $Shell->term; $Shell->__print( "\n" ); - $Shell->__print( + $Shell->__print( loc("Test report prepared for module '%1'. You can edit this ". "report if you would like", $mod->module ) ); $Shell->__print("\n\n"); @@ -1082,11 +1085,11 @@ sub __ask_about_test_failure { my $term = $Shell->term; $Shell->__print( "\n" ); - $Shell->__print( + $Shell->__print( loc( "The tests for '%1' failed. Would you like me to proceed ". "anyway or should we abort?", $mod->module ) ); $Shell->__print( "\n\n" ); - + my $bool = $term->ask_yn( prompt => loc("Proceed anyway?"), default => 'n', @@ -1125,7 +1128,7 @@ sub _details { my @list = sort { $a->module cmp $b->module } $mod->contains; unless( $href ) { - $self->__print( + $self->__print( loc("No details for %1 - it might be outdated.", $mod->module), "\n" ); next; @@ -1135,11 +1138,11 @@ sub _details { for my $item ( sort keys %$href ) { $self->__printf( $format, $item, $href->{$item} ); } - + my $showed; for my $item ( @list ) { $self->__printf( - $cformat, ($showed ? '' : 'Contains:'), + $cformat, ($showed ? '' : 'Contains:'), $item->module, $item->version ); $showed++; @@ -1199,7 +1202,7 @@ sub _set_conf { ### possible options ### XXX hard coded, not optimal :( my %types = ( - reconfigure => '', + reconfigure => '', save => q([user | system | boxed]), edit => '', program => q([key => val]), @@ -1238,8 +1241,8 @@ sub _set_conf { user => CONFIG_USER, system => CONFIG_SYSTEM, boxed => CONFIG_BOXED, - }->{ $key } || CONFIG_USER; - + }->{ $key } || CONFIG_USER; + ### boxed is special, so let's get its value from %INC ### so we can tell it where to save ### XXX perhaps this logic should be generic for all @@ -1248,15 +1251,15 @@ sub _set_conf { if( $where eq CONFIG_BOXED ) { my $file = join( '/', split( '::', CONFIG_BOXED ) ) . '.pm'; my $file_re = quotemeta($file); - + my $path = $INC{$file} || ''; - $path =~ s/$file_re$//; + $path =~ s/$file_re$//; $dir = $path; - } - + } + my $rv = $cb->configure_object->save( $where => $dir ); - $self->__print( + $self->__print( $rv ? loc("Configuration successfully saved to %1\n (%2)\n", $where, $rv) @@ -1272,7 +1275,7 @@ sub _set_conf { my $where = { user => CONFIG_USER, system => CONFIG_SYSTEM, - }->{ $key } || CONFIG_USER; + }->{ $key } || CONFIG_USER; my $file = $conf->_config_pm_to_file( $where ); system($editor,$file); @@ -1290,35 +1293,35 @@ sub _set_conf { return 1; } elsif ( $type eq 'mirrors' ) { - - $self->__print( + + $self->__print( loc("Readonly list of mirrors (in order of preference):\n\n" ) ); - + my $i; for my $host ( @{$conf->get_conf('hosts')} ) { my $uri = $cb->_host_to_uri( %$host ); - + $i++; $self->__print( "\t[$i] $uri\n" ); } - + $self->__print( loc("\nTo edit this list, please type: '%1'\n", 's edit') ); } elsif ( $type eq 'selfupdate' ) { - my %valid = map { $_ => $_ } - $cb->selfupdate_object->list_categories; + my %valid = map { $_ => $_ } + $cb->selfupdate_object->list_categories; unless( $valid{$key} ) { $self->__print( loc( "To update your current CPANPLUS installation, ". "choose one of the these options:\n%1", - ( join $/, map { + ( join $/, map { sprintf "\ts selfupdate %-17s " . - "[--latest=0] [--dryrun]", $_ - } sort keys %valid ) + "[--latest=0] [--dryrun]", $_ + } sort keys %valid ) ) - ); + ); } else { my %update_args = ( update => $key, @@ -1331,35 +1334,35 @@ sub _set_conf { ->list_modules_to_update( %update_args ); $self->__print(loc("The following updates will take place:"),$/.$/); - + for my $feature ( sort keys %list ) { my $aref = $list{$feature}; - + ### is it a 'feature' or a built in? $self->__print( - $valid{$feature} + $valid{$feature} ? " " . ucfirst($feature) . ":\n" : " Modules for '$feature' support:\n" ); - - ### show what modules would be installed + + ### show what modules would be installed $self->__print( scalar @$aref - ? map { sprintf " %-42s %-6s -> %-6s \n", + ? map { sprintf " %-42s %-6s -> %-6s \n", $_->name, $_->installed_version, $_->version - } @$aref + } @$aref : " No upgrades required\n" - ); + ); $self->__print( $/ ); } - - - unless( $opts->{'dryrun'} ) { + + + unless( $opts->{'dryrun'} ) { $self->__print( loc("Updating your CPANPLUS installation\n") ); $cb->selfupdate_object->selfupdate( %update_args ); } } - + } else { if ( $type eq 'program' or $type eq 'conf' ) { @@ -1367,7 +1370,7 @@ sub _set_conf { my $format = { conf => '%-25s %s', program => '%-12s %s', - }->{ $type }; + }->{ $type }; unless( $key ) { my @list = grep { $_ ne 'hosts' } @@ -1386,7 +1389,7 @@ sub _set_conf { } } elsif ( $key eq 'hosts' or $key eq 'lib' ) { - $self->__print( + $self->__print( loc( "Setting %1 is not trivial.\n" . "It is suggested you use '%2' and edit the " . "configuration file manually", $key, 's edit') @@ -1402,8 +1405,8 @@ sub _set_conf { $self->__print( loc("Unknown type '%1'",$type || 'EMPTY' ) ); $self->__print( $/ ); $self->__print( loc("Try one of the following:") ); - $self->__print( $/, join $/, - map { sprintf "\t%-11s %s", $_, $types{$_} } + $self->__print( $/, join $/, + map { sprintf "\t%-11s %s", $_, $types{$_} } sort keys %types ); } } @@ -1491,7 +1494,7 @@ sub _autobundle { my $where = $cb->autobundle( %$opts ); - $self->__print( + $self->__print( $where ? loc("Wrote autobundle to '%1'", $where) : loc("Could not create autobundle" ) @@ -1550,25 +1553,25 @@ should use the same package manager to uninstall them ### then report whether all this went ok or not ### for my $mod (@$mods) { if( $mod->status->uninstall ) { - $self->__print( + $self->__print( loc("Module '%1' %tense(uninstall,past) successfully\n", $mod->module ) ); } else { $flag++; - $self->__print( + $self->__print( loc("Error %tense(uninstall,present) '%1'\n", $mod->module) ); } } if( !$flag ) { - $self->__print( + $self->__print( loc("All modules %tense(uninstall,past) successfully"), "\n" ); } else { - $self->__print( + $self->__print( loc("Problem %tense(uninstall,present) one or more modules" ), "\n" ); - - $self->__print( + + $self->__print( loc("*** You can view the complete error buffer by pressing '%1'". "***\n", 'p') ) unless $conf->get_conf('verbose'); } @@ -1617,13 +1620,13 @@ sub _reports { my %seen; for my $href (@list ) { - $self->__print( + $self->__print( "[" . $mod->author->cpanid .'/'. $href->{'dist'} . "]\n" ) unless $seen{ $href->{'dist'} }++; - $self->__printf( - $format, - $href->{'grade'}, + $self->__printf( + $format, + $href->{'grade'}, $href->{'platform'}, ($href->{'details'} ? '(*)' : '') ); @@ -1641,62 +1644,62 @@ sub _reports { ### Load plugins { my @PluginModules; - my %Dispatch = ( - showtip => [ __PACKAGE__, '_show_random_tip'], - plugins => [ __PACKAGE__, '_list_plugins' ], + my %Dispatch = ( + showtip => [ __PACKAGE__, '_show_random_tip'], + plugins => [ __PACKAGE__, '_list_plugins' ], '?' => [ __PACKAGE__, '_plugins_usage' ], - ); + ); sub plugin_modules { return @PluginModules } sub plugin_table { return %Dispatch } - + my $init_done; sub _plugins_init { ### only initialize once return if $init_done++; - + ### find all plugins first if( check_install( module => 'Module::Pluggable', version => '2.4') ) { require Module::Pluggable; - + my $only_re = __PACKAGE__ . '::Plugins::\w+$'; - + Module::Pluggable->import( sub_name => '_plugins', search_path => __PACKAGE__, only => qr/$only_re/, #except => [ INSTALLER_MM, INSTALLER_SAMPLE ] ); - + push @PluginModules, __PACKAGE__->_plugins; } - + ### now try to load them for my $p ( __PACKAGE__->plugin_modules ) { my %map = eval { load $p; $p->import; $p->plugins }; error(loc("Could not load plugin '$p': $@")), next if $@; - + ### register each plugin while( my($name, $func) = each %map ) { - + if( not length $name or not length $func ) { error(loc("Empty plugin name or dispatch function detected")); next; - } - + } + if( exists( $Dispatch{$name} ) ) { - error(loc("'%1' is already registered by '%2'", + error(loc("'%1' is already registered by '%2'", $name, $Dispatch{$name}->[0])); - next; + next; } - + ### register name, package and function $Dispatch{$name} = [ $p, $func ]; } } } - + ### dispatch a plugin command to its function sub _meta { my $self = shift; @@ -1704,69 +1707,69 @@ sub _reports { my $cb = $self->backend; my $term = $self->term; my $conf = $cb->configure_object; - + my $opts; my $input; { local $Params::Check::ALLOW_UNKNOWN = 1; - + my $tmpl = { options => { default => { }, store => \$opts }, input => { default => '', store => \$input }, }; - + check( $tmpl, \%hash ) or return; } - + $input =~ s/\s*(\S+)\s*//; my $cmd = $1; - + ### look up the command, or go to the default my $aref = $Dispatch{ $cmd } || [ __PACKAGE__, '_plugin_default' ]; - + my($pkg,$func) = @$aref; - + my $rv = eval { $pkg->$func( $self, $cb, $cmd, $input, $opts ) }; - + error( $@ ) if $@; ### return $rv instead, so input loop can be terminated? return 1; } - + sub _plugin_default { error(loc("No such plugin command")) } } -### plugin commands -{ my $help_format = " /%-21s # %s\n"; - +### plugin commands +{ my $help_format = " /%-21s # %s\n"; + sub _list_plugins { my $self = shift; - + $self->__print( loc("Available plugins:\n") ); $self->__print( loc(" List usage by using: /? PLUGIN_NAME\n" ) ); $self->__print( $/ ); - + my %table = __PACKAGE__->plugin_table; for my $name( sort keys %table ) { my $pkg = $table{$name}->[0]; my $this = __PACKAGE__; - + my $who = $pkg eq $this ? "Standard Plugin" : do { my $v = $self->_format_version($pkg->VERSION) || ''; $pkg =~ s/^$this/../; - sprintf "Provided by: %-30s %-10s", $pkg, $v; + sprintf "Provided by: %-30s %-10s", $pkg, $v; }; - + $self->__printf( $help_format, $name, $who ); - } - + } + $self->__print( $/.$/ ); - + $self->__print( " Write your own plugins? Read the documentation of:\n" . " CPANPLUS::Shell::Default::Plugins::HOWTO\n" ); - - $self->__print( $/ ); + + $self->__print( $/ ); } sub _list_plugins_help { @@ -1776,7 +1779,7 @@ sub _reports { ### registered as a plugin too sub _show_random_tip_help { return sprintf $help_format, 'showtip', loc("show usage tips" ); - } + } sub _plugins_usage { my $self = shift; @@ -1785,9 +1788,9 @@ sub _reports { my $cmd = shift; my $input = shift; my %table = $self->plugin_table; - + my @list = length $input ? split /\s+/, $input : sort keys %table; - + for my $name( @list ) { ### no such plugin? skip @@ -1795,21 +1798,21 @@ sub _reports { my $pkg = $table{$name}->[0]; my $func = $table{$name}->[1] . '_help'; - + if ( my $sub = $pkg->can( $func ) ) { eval { $self->__print( $sub->() ) }; error( $@ ) if $@; - + } else { $self->__print(" No usage for '$name' -- try perldoc $pkg"); } - + $self->__print( $/ ); - } - - $self->__print( $/.$/ ); + } + + $self->__print( $/.$/ ); } - + sub _plugins_usage_help { return sprintf $help_format, '? [NAME ...]', loc("show usage for plugins"); @@ -1856,8 +1859,8 @@ sub _read_configuration_from_rc { eval { $href = Config::Auto::parse( $rc_file, format => 'space' ) }; - $self->__print( - loc( "Unable to read in config file '%1': %2", $rc_file, $@ ) + $self->__print( + loc( "Unable to read in config file '%1': %2", $rc_file, $@ ) ) if $@; } @@ -1867,34 +1870,38 @@ sub _read_configuration_from_rc { { my @tips = ( loc( "You can update CPANPLUS by running: '%1'", 's selfupdate' ), loc( "You can install modules by URL using '%1'", 'i URL' ), - loc( "You can turn off these tips using '%1'", + loc( "You can turn off these tips using '%1'", 's conf show_startup_tip 0' ), loc( "You can use wildcards like '%1' and '%2' on search results", '*', '2..5' ) , loc( "You can use plugins. Type '%1' to list available plugins", '/plugins' ), - loc( "You can show all your out of date modules using '%1'", 'o' ), + loc( "You can show all your out of date modules using '%1'", 'o' ), loc( "Many operations take options, like '%1', '%2' or '%3'", '--verbose', '--force', '--skiptest' ), loc( "The documentation in %1 and %2 is very useful", "CPANPLUS::Module", "CPANPLUS::Backend" ), loc( "You can type '%1' for help and '%2' to exit", 'h', 'q' ), - loc( "You can run an interactive setup using '%1'", 's reconfigure' ), + loc( "You can run an interactive setup using '%1'", 's reconfigure' ), loc( "You can add custom sources to your index. See '%1' for details", '/cs --help' ), loc( "CPANPLUS now has an experimental SQLite backend. You can enable ". "it via: '%1'. Update dependencies via '%2'", 's conf source_engine CPANPLUS::Internals::Source::SQLite; s save', - 's selfupdate enabled_features ' ), + 's selfupdate enabled_features ' ), ); - + sub _show_random_tip { my $self = shift; - $self->__print( $/, "Did you know...\n ", + $self->__print( $/, "Did you know...\n ", $tips[ int rand scalar @tips ], $/ ); return 1; } -} +} + +sub _reload_shell { + { exec ($^X, '-MCPANPLUS', '-e', 'shell') }; print STDERR "couldn't exec foo: $!"; +} 1; @@ -1912,10 +1919,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm index 7b546819075..b602a547ac3 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/CustomSource.pm @@ -9,7 +9,7 @@ use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; =head1 NAME -CPANPLUS::Shell::Default::Plugins::CustomSource +CPANPLUS::Shell::Default::Plugins::CustomSource - add custom sources to CPANPLUS =head1 SYNOPSIS @@ -18,10 +18,10 @@ CPANPLUS::Shell::Default::Plugins::CustomSource ### add a new custom source CPAN Terminal> /cs --add file:///path/to/releases - - ### list all your custom sources by + + ### list all your custom sources by CPAN Terminal> /cs --list - + ### display the contents of a custom source by URI or ID CPAN Terminal> /cs --contents file:///path/to/releases CPAN Terminal> /cs --contents 1 @@ -29,11 +29,11 @@ CPANPLUS::Shell::Default::Plugins::CustomSource ### Update a custom source by URI or ID CPAN Terminal> /cs --update file:///path/to/releases CPAN Terminal> /cs --update 1 - + ### Remove a custom source by URI or ID CPAN Terminal> /cs --remove file:///path/to/releases CPAN Terminal> /cs --remove 1 - + ### Write an index file for a custom source, to share ### with 3rd parties or remote users CPAN Terminal> /cs --write file:///path/to/releases @@ -44,13 +44,13 @@ CPANPLUS::Shell::Default::Plugins::CustomSource =head1 DESCRIPTION -This is a C plugin that can add -custom sources to your CPANPLUS installation. This is a +This is a C plugin that can add +custom sources to your CPANPLUS installation. This is a wrapper around the C code as outlined in L. This allows you to extend your index of available modules -beyond what's available on C with your own local +beyond what's available on C with your own local distributions, or ones offered by third parties. =cut @@ -68,8 +68,8 @@ sub _uri_from_cache { my $self = shift; my $input = shift or return; - ### you gave us a search number - my $uri = $input =~ /^\d+$/ + ### you gave us a search number + my $uri = $input =~ /^\d+$/ ? $Index[ $input - 1 ] # remember, off by 1! : $input; @@ -79,13 +79,13 @@ sub _uri_from_cache { ### VMS can lower case all files, so make sure we check that too my $local = $files{ $uri }; $local = $files{ lc $uri } if !$local && ON_VMS; - + if( $local ) { - return wantarray + return wantarray ? ($uri, $local) : $uri; } - + ### couldn't resolve the input error(loc("Unknown URI/index: '%1'", $input)); return; @@ -93,11 +93,11 @@ sub _uri_from_cache { sub _list_custom_sources { my $class = shift; - + my %files = $Cb->list_custom_sources; - + $Shell->__print( loc("Your remote sources:"), $/ ) if keys %files; - + my $i = 0; while(my($local,$remote) = each %files) { $Shell->__printf( " [%2d] %s\n", ++$i, $remote ); @@ -105,7 +105,7 @@ sub _list_custom_sources { ### remember, off by 1! push @Index, $remote; } - + $Shell->__print( $/ ); } @@ -117,7 +117,7 @@ sub _list_contents { unless( $uri ) { error(loc("--contents needs URI parameter")); return; - } + } my $fh = OPEN_FILE->( $local ) or return; @@ -139,45 +139,45 @@ sub custom_source { } elsif ( $opts->{'contents'} ) { $class->_list_contents( $input ); - - } elsif ( $opts->{'add'} ) { + + } elsif ( $opts->{'add'} ) { unless( $input ) { error(loc("--add needs URI parameter")); return; - } - - $cb->add_custom_source( uri => $input ) + } + + $cb->add_custom_source( uri => $input ) and $shell->__print(loc("Added remote source '%1'", $input), $/); - + $Shell->__print($/, loc("Remote source contains:"), $/, $/); $class->_list_contents( $input ); - + } elsif ( $opts->{'remove'} ) { my($uri,$local) = $class->_uri_from_cache( $input ); unless( $uri ) { error(loc("--remove needs URI parameter")); return; - } - - 1 while unlink $local; - + } + + 1 while unlink $local; + $shell->__print( loc("Removed remote source '%1'", $uri), $/ ); } elsif ( $opts->{'update'} ) { ### did we get input? if so, it's a remote part my $uri = $class->_uri_from_cache( $input ); - $cb->update_custom_source( $uri ? ( remote => $uri ) : () ) - and do { $shell->__print( loc("Updated remote sources"), $/ ) }; + $cb->update_custom_source( $uri ? ( remote => $uri ) : () ) + and do { $shell->__print( loc("Updated remote sources"), $/ ) }; } elsif ( $opts->{'write'} ) { $cb->write_custom_source_index( path => $input ) and - $shell->__print( loc("Wrote remote source index for '%1'", $input), $/); - + $shell->__print( loc("Wrote remote source index for '%1'", $input), $/); + } else { error(loc("Unrecognized command, see '%1' for help", '/? cs')); } - + return; } @@ -192,10 +192,10 @@ sub custom_source_help { ' /cs --remove URI | INDEX # remove source' . $/ . ' /cs --contents URI | INDEX # show packages from source'. $/ . ' /cs --update [URI | INDEX] # update source index' . $/ . - ' /cs --write PATH # write source index' . $/ - ); + ' /cs --write PATH # write source index' . $/ + ); } 1; - + diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod index ca765f9e0ac..8000aac9884 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/HOWTO.pod @@ -5,20 +5,20 @@ CPANPLUS::Shell::Default::Plugins::HOWTO -- documentation on how to write your o =head1 SYNOPSIS package CPANPLUS::Shell::Default::Plugins::MyPlugin; - + ### return command => method mapping sub plugins { ( myplugin1 => 'mp1', myplugin2 => 'mp2' ) } - + ### method called when the command '/myplugin1' is issued sub mp1 { .... } ### method called when the command '/? myplugin1' is issued sub mp1_help { return "Help Text" } - + =head1 DESCRIPTION -This pod text explains how to write your own plugins for -C. +This pod text explains how to write your own plugins for +C. =head1 HOWTO @@ -34,18 +34,18 @@ C<.pm> file. =head2 Registering Plugin Commands To register any plugin commands, a list of key value pairs must be returned -by a C method in your package. The keys are the commands you wish +by a C method in your package. The keys are the commands you wish to register, the values are the methods in the plugin package you wish to have called when the command is issued. For example, a simple 'Hello, World!' plugin: package CPANPLUS::Shell::Default::Plugins::HW; - + sub plugins { return ( helloworld => 'hw' ) }; - + sub hw { print "Hello, world!\n" } - + When the user in the default shell now issues the C command, this command will be dispatched to the plugin, and its C method will be called @@ -60,7 +60,7 @@ For example, extending the above example, when a user calls C, the function C will be called, which might look like this: sub hw_help { " /helloworld # prints "Hello, world!\n" } - + If you dont provide a corresponding _help function to your commands, the default shell will handle it gracefully, but the user will be stuck without usage information on your commands, so it's considered undesirable to omit @@ -90,8 +90,8 @@ are all positional: For example, the following command: /helloworld bob --nofoo --bar=2 joe - -Would yield the following arguments: + +Would yield the following arguments: sub hw { my $class = shift; # CPANPLUS::Shell::Default::Plugins::HW @@ -115,10 +115,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/Remote.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/Remote.pm index d2b829abded..9d14a5976dc 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/Remote.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/Remote.pm @@ -9,7 +9,7 @@ use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; =head1 NAME -CPANPLUS::Shell::Default::Plugins::Remote +CPANPLUS::Shell::Default::Plugins::Remote - connect to a remote CPANPLUS =head1 SYNOPSIS @@ -29,17 +29,17 @@ like this: CPAN Terminal> /connect --user=my_user --pass=secret localhost 1337 Connection accepted - + Successfully connected to 'localhost' on port '11337' - + Note that no output will appear until a command has completed -- this may take a while CPAN Terminal@localhost> o; i * - + [....] - + CPAN Terminal@localhost> /disconnect CPAN Terminal> @@ -139,7 +139,7 @@ sub disconnect { } sub connect_help { - return loc( + return loc( " /connect [HOST PORT] # Connect to the remote machine,\n" . " # defaults taken from your config\n" . " --user=USER # Optional username\n" . @@ -151,8 +151,8 @@ sub disconnect_help { " /disconnect # Disconnect from the remote server" ); } -1; - +1; + =pod =head1 BUG REPORTS @@ -165,10 +165,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO diff --git a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/Source.pm b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/Source.pm index 889b3d3d9bd..74c3582ffb4 100644 --- a/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/Source.pm +++ b/Master/tlpkg/tlperl/lib/CPANPLUS/Shell/Default/Plugins/Source.pm @@ -6,7 +6,7 @@ use Locale::Maketext::Simple Class => 'CPANPLUS', Style => 'gettext'; =head1 NAME -CPANPLUS::Shell::Default::Plugins::Source +CPANPLUS::Shell::Default::Plugins::Source - read in CPANPLUS commands =head1 SYNOPSIS @@ -23,12 +23,12 @@ A sample file might look like this: # first, update all the source files x --update_source - # find all of my modules that are on the CPAN + # find all of my modules that are on the CPAN # test them, and store the error log a ^KANE$' t * p /home/kane/cpan-autotest/log - + # and inform us we're good to go ! print "Autotest complete, log stored; please enter your commands!" @@ -48,20 +48,20 @@ sub source { my $input = shift || ''; my $opts = shift || {}; my $verbose = $cb->configure_object->get_conf('verbose'); - + for my $file ( split /\s+/, $input ) { - my $fh = FileHandle->new("$file") or( + my $fh = FileHandle->new("$file") or( error(loc("Could not open file '%1': %2", $file, $!)), next ); - + while( my $line = <$fh> ) { chomp $line; - + next if $line !~ /\S+/; # skip empty/whitespace only lines next if $line =~ /^#/; # skip comments - - msg(loc("Dispatching '%1'", $line), $verbose); + + msg(loc("Dispatching '%1'", $line), $verbose); return 1 if $shell->dispatch_on_input( input => $line ); } } @@ -86,10 +86,10 @@ This module by Jos Boumans Ekane@cpan.orgE. =head1 COPYRIGHT -The CPAN++ interface (of which this module is a part of) is copyright (c) +The CPAN++ interface (of which this module is a part of) is copyright (c) 2001 - 2007, Jos Boumans Ekane@cpan.orgE. All rights reserved. -This library is free software; you may redistribute and/or modify it +This library is free software; you may redistribute and/or modify it under the same terms as Perl itself. =head1 SEE ALSO diff --git a/Master/tlpkg/tlperl/lib/Carp.pm b/Master/tlpkg/tlperl/lib/Carp.pm index 77fc2a1e2c1..51df862dd5b 100644 --- a/Master/tlpkg/tlperl/lib/Carp.pm +++ b/Master/tlpkg/tlperl/lib/Carp.pm @@ -1,9 +1,30 @@ package Carp; +{ use 5.006; } use strict; use warnings; -our $VERSION = '1.20'; +BEGIN { + no strict "refs"; + if(exists($::{"utf8::"}) && exists(*{$::{"utf8::"}}{HASH}->{"is_utf8"}) && + defined(*{*{$::{"utf8::"}}{HASH}->{"is_utf8"}}{CODE})) { + *is_utf8 = \&{"utf8::is_utf8"}; + } else { + *is_utf8 = sub { 0 }; + } +} + +BEGIN { + no strict "refs"; + if(exists($::{"utf8::"}) && exists(*{$::{"utf8::"}}{HASH}->{"downgrade"}) && + defined(*{*{$::{"utf8::"}}{HASH}->{"downgrade"}}{CODE})) { + *downgrade = \&{"utf8::downgrade"}; + } else { + *downgrade = sub {}; + } +} + +our $VERSION = '1.26'; our $MaxEvalLen = 0; our $Verbose = 0; @@ -81,13 +102,29 @@ sub confess { die longmess @_ } sub carp { warn shortmess @_ } sub cluck { warn longmess @_ } +BEGIN { + if("$]" >= 5.015002 || ("$]" >= 5.014002 && "$]" < 5.015) || + ("$]" >= 5.012005 && "$]" < 5.013)) { + *CALLER_OVERRIDE_CHECK_OK = sub () { 1 }; + } else { + *CALLER_OVERRIDE_CHECK_OK = sub () { 0 }; + } +} + sub caller_info { my $i = shift(@_) + 1; my %call_info; my $cgc = _cgc(); { + # Some things override caller() but forget to implement the + # @DB::args part of it, which we need. We check for this by + # pre-populating @DB::args with a sentinel which no-one else + # has the address of, so that we can detect whether @DB::args + # has been properly populated. However, on earlier versions + # of perl this check tickles a bug in CORE::caller() which + # leaks memory. So we only check on fixed perls. + @DB::args = \$i if CALLER_OVERRIDE_CHECK_OK; package DB; - @DB::args = \$i; # A sentinel, which no-one else has the address of @call_info{ qw(pack file line sub has_args wantarray evaltext is_require) } = $cgc ? $cgc->($i) : caller($i); @@ -100,14 +137,19 @@ sub caller_info { my $sub_name = Carp::get_subname( \%call_info ); if ( $call_info{has_args} ) { my @args; - if ( @DB::args == 1 + if (CALLER_OVERRIDE_CHECK_OK && @DB::args == 1 && ref $DB::args[0] eq ref \$i && $DB::args[0] == \$i ) { @DB::args = (); # Don't let anyone see the address of $i local $@; my $where = eval { my $func = $cgc or return ''; - my $gv = B::svref_2object($func)->GV; + my $gv = + *{ + ( $::{"B::"} || return '') # B stash + ->{svref_2object} || return '' # entry in stash + }{CODE} # coderef in entry + ->($func)->GV; my $package = $gv->STASH->NAME; my $subname = $gv->NAME; return unless defined $package && defined $subname; @@ -115,7 +157,7 @@ sub caller_info { # returning CORE::GLOBAL::caller isn't useful for tracing the cause: return if $package eq 'CORE::GLOBAL' && $subname eq 'caller'; " in &${package}::$subname"; - } // ''; + } || ''; @args = "** Incomplete caller override detected$where; \@DB::args were not set **"; } @@ -146,16 +188,20 @@ sub format_arg { $arg = str_len_trim( $arg, $MaxArgLen ); # Quote it? + # Downgrade, and use [0-9] rather than \d, to avoid loading + # Unicode tables, which would be liable to fail if we're + # processing a syntax error. + downgrade($arg, 1); $arg = "'$arg'" unless $arg =~ /^-?[0-9.]+\z/; - } # 0-9, not \d, as \d will try to - else { # load Unicode tables + } + else { $arg = 'undef'; } # The following handling of "control chars" is direct from # the original code - it is broken on Unicode though. # Suggestions? - utf8::is_utf8($arg) + is_utf8($arg) or $arg =~ s/([[:cntrl:]]|[[:^ascii:]])/sprintf("\\x{%x}",ord($1))/eg; return $arg; } @@ -240,7 +286,18 @@ sub ret_backtrace { } my %i = caller_info($i); - $mess = "$err at $i{file} line $i{line}$tid_msg\n"; + $mess = "$err at $i{file} line $i{line}$tid_msg"; + if( defined $. ) { + local $@ = ''; + local $SIG{__DIE__}; + eval { + CORE::die; + }; + if($@ =~ /^Died at .*(, <.*?> line \d+).$/ ) { + $mess .= $1; + } + } + $mess .= "\.\n"; while ( my %i = caller_info( ++$i ) ) { $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n"; @@ -261,7 +318,7 @@ sub ret_summary { } my %i = caller_info($i); - return "$err at $i{file} line $i{line}$tid_msg\n"; + return "$err at $i{file} line $i{line}$tid_msg\.\n"; } sub short_error_loc { @@ -345,6 +402,18 @@ sub trusts_directly { : @{"$class\::ISA"}; } +if(!defined($warnings::VERSION) || + do { no warnings "numeric"; $warnings::VERSION < 1.03 }) { + # Very old versions of warnings.pm import from Carp. This can go + # wrong due to the circular dependency. If Carp is invoked before + # warnings, then Carp starts by loading warnings, then warnings + # tries to import from Carp, and gets nothing because Carp is in + # the process of loading and hasn't defined its import method yet. + # So we work around that by manually exporting to warnings here. + no strict "refs"; + *{"warnings::$_"} = \&$_ foreach @EXPORT; +} + 1; __END__ @@ -576,3 +645,25 @@ The Carp routines don't handle exception objects currently. If called with a first argument that is a reference, they simply call die() or warn(), as appropriate. +=head1 SEE ALSO + +L, +L + +=head1 AUTHOR + +The Carp module first appeared in Larry Wall's perl 5.000 distribution. +Since then it has been modified by several of the perl 5 porters. +Andrew Main (Zefram) divested Carp into an independent +distribution. + +=head1 COPYRIGHT + +Copyright (C) 1994-2012 Larry Wall + +Copyright (C) 2011, 2012 Andrew Main (Zefram) + +=head1 LICENSE + +This module is free software; you can redistribute it and/or modify it +under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/Carp/Heavy.pm b/Master/tlpkg/tlperl/lib/Carp/Heavy.pm index 38f95d8a5aa..3147d9b27a7 100644 --- a/Master/tlpkg/tlperl/lib/Carp/Heavy.pm +++ b/Master/tlpkg/tlperl/lib/Carp/Heavy.pm @@ -1,10 +1,13 @@ -package Carp; +package Carp::Heavy; -# On one line so MakeMaker will see it. -use Carp; our $VERSION = $Carp::VERSION; +use Carp (); + +our $VERSION = '1.26'; 1; -# Most of the machinery of Carp used to be there. +# Most of the machinery of Carp used to be here. # It has been moved in Carp.pm now, but this placeholder remains for # the benefit of modules that like to preload Carp::Heavy directly. +# This must load Carp, because some modules rely on the historical +# behaviour of Carp::Heavy loading Carp. diff --git a/Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm b/Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm index 9aadba333b0..43a5fbcc5bb 100644 --- a/Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm +++ b/Master/tlpkg/tlperl/lib/Compress/Raw/Bzip2.pm @@ -4,7 +4,7 @@ package Compress::Raw::Bzip2; use strict ; use warnings ; -require 5.004 ; +require 5.006 ; require Exporter; use AutoLoader; use Carp ; @@ -12,7 +12,7 @@ use Carp ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD); -$VERSION = '2.033'; +$VERSION = '2.048'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @@ -91,6 +91,31 @@ or do { # return wantarray ? ($obj, $status) : $obj; #} +sub Compress::Raw::Bzip2::STORABLE_freeze +{ + my $type = ref shift; + croak "Cannot freeze $type object\n"; +} + +sub Compress::Raw::Bzip2::STORABLE_thaw +{ + my $type = ref shift; + croak "Cannot thaw $type object\n"; +} + +sub Compress::Raw::Bunzip2::STORABLE_freeze +{ + my $type = ref shift; + croak "Cannot freeze $type object\n"; +} + +sub Compress::Raw::Bunzip2::STORABLE_thaw +{ + my $type = ref shift; + croak "Cannot thaw $type object\n"; +} + + package Compress::Raw::Bzip2; 1; @@ -334,7 +359,7 @@ The following bzip2 constants are exported by this module L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L -L +L L, L, L, @@ -354,7 +379,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2011 Paul Marquess. All rights reserved. +Copyright (c) 2005-2012 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm b/Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm index 8b17dcc9f39..3a4bcfffda6 100644 --- a/Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm +++ b/Master/tlpkg/tlperl/lib/Compress/Raw/Zlib.pm @@ -1,33 +1,66 @@ package Compress::Raw::Zlib; -require 5.004 ; +require 5.006 ; require Exporter; use AutoLoader; use Carp ; -#use Parse::Parameters; - use strict ; use warnings ; use bytes ; -our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD); +our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS ); -$VERSION = '2.033'; +$VERSION = '2.048'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @ISA = qw(Exporter); +%EXPORT_TAGS = ( flush => [qw{ + Z_NO_FLUSH + Z_PARTIAL_FLUSH + Z_SYNC_FLUSH + Z_FULL_FLUSH + Z_FINISH + Z_BLOCK + }], + level => [qw{ + Z_NO_COMPRESSION + Z_BEST_SPEED + Z_BEST_COMPRESSION + Z_DEFAULT_COMPRESSION + }], + strategy => [qw{ + Z_FILTERED + Z_HUFFMAN_ONLY + Z_RLE + Z_FIXED + Z_DEFAULT_STRATEGY + }], + status => [qw{ + Z_OK + Z_STREAM_END + Z_NEED_DICT + Z_ERRNO + Z_STREAM_ERROR + Z_DATA_ERROR + Z_MEM_ERROR + Z_BUF_ERROR + Z_VERSION_ERROR + }], + ); + +%DEFLATE_CONSTANTS = %EXPORT_TAGS; + # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. +@DEFLATE_CONSTANTS = @EXPORT = qw( - adler32 crc32 - ZLIB_VERSION ZLIB_VERNUM - DEF_WBITS + OS_CODE MAX_MEM_LEVEL @@ -68,6 +101,8 @@ $VERSION = eval $VERSION; WANT_GZIP_OR_ZLIB ); +push @EXPORT, qw(crc32 adler32 DEF_WBITS); + use constant WANT_GZIP => 16; use constant WANT_GZIP_OR_ZLIB => 32; @@ -383,6 +418,19 @@ sub Compress::Raw::Zlib::Deflate::new } +sub Compress::Raw::Zlib::deflateStream::STORABLE_freeze +{ + my $type = ref shift; + croak "Cannot freeze $type object\n"; +} + +sub Compress::Raw::Zlib::deflateStream::STORABLE_thaw +{ + my $type = ref shift; + croak "Cannot thaw $type object\n"; +} + + sub Compress::Raw::Zlib::Inflate::new { my $pkg = shift ; @@ -420,6 +468,18 @@ sub Compress::Raw::Zlib::Inflate::new $got->value('Dictionary')) ; } +sub Compress::Raw::Zlib::inflateStream::STORABLE_freeze +{ + my $type = ref shift; + croak "Cannot freeze $type object\n"; +} + +sub Compress::Raw::Zlib::inflateStream::STORABLE_thaw +{ + my $type = ref shift; + croak "Cannot thaw $type object\n"; +} + sub Compress::Raw::Zlib::InflateScan::new { my $pkg = shift ; @@ -580,6 +640,7 @@ Compress::Raw::Zlib - Low-Level Interface to zlib compression library $crc = crc32_combine($adler1, $adler2, $len2) my $version = Compress::Raw::Zlib::zlib_version(); + my $flags = Compress::Raw::Zlib::zlibCompileFlags(); =head1 DESCRIPTION @@ -1241,6 +1302,17 @@ These functions allow checksums to be merged. Returns the version of the zlib library. +=head2 my $flags = Compress::Raw::Zlib::zlibCompileFlags(); + +Returns the flags indicating compile-time options that were used to build +the zlib library. See the zlib documentation for a description of the flags +returned by C. + +Note that when the zlib sources are built along with this module the +C flags (bits 24, 25 and 26) should be ignored. + +If you are using zlib 1.2.0 or older, C will return 0. + =head1 The LimitOutput option. By default C<< $i->inflate($input, $output) >> will uncompress I data @@ -1384,6 +1456,101 @@ to access .zip files, there are other perl modules available that will do all the hard work for you. Check out C, C and C. +=head1 FAQ + +=head2 Compatibility with Unix compress/uncompress. + +This module is not compatible with Unix C. + +If you have the C program available, you can use this to read +compressed files + + open F, "uncompress -c $filename |"; + while () + { + ... + +Alternatively, if you have the C program available, you can use +this to read compressed files + + open F, "gunzip -c $filename |"; + while () + { + ... + +and this to write compress files, if you have the C program +available + + open F, "| compress -c $filename "; + print F "data"; + ... + close F ; + +=head2 Accessing .tar.Z files + +See previous FAQ item. + +If the C module is installed and either the C or +C programs are available, you can use one of these workarounds to +read C<.tar.Z> files. + +Firstly with C + + use strict; + use warnings; + use Archive::Tar; + + open F, "uncompress -c $filename |"; + my $tar = Archive::Tar->new(*F); + ... + +and this with C + + use strict; + use warnings; + use Archive::Tar; + + open F, "gunzip -c $filename |"; + my $tar = Archive::Tar->new(*F); + ... + +Similarly, if the C program is available, you can use this to +write a C<.tar.Z> file + + use strict; + use warnings; + use Archive::Tar; + use IO::File; + + my $fh = new IO::File "| compress -c >$filename"; + my $tar = Archive::Tar->new(); + ... + $tar->write($fh); + $fh->close ; + +=head2 Zlib Library Version Support + +By default C will build with a private copy of version +1.2.5 of the zlib library. (See the F file for details of +how to override this behaviour) + +If you decide to use a different version of the zlib library, you need to be +aware of the following issues + +=over 5 + +=item * + +First off, you must have zlib 1.0.5 or better. + +=item * + +You need to have zlib 1.2.1 or better if you want to use the C<-Merge> +option with C, C and +C. + +=back + =head1 CONSTANTS All the I constants are automatically imported when you make use @@ -1393,7 +1560,7 @@ of I. L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L -L +L L, L, L, @@ -1422,7 +1589,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2011 Paul Marquess. All rights reserved. +Copyright (c) 2005-2012 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/Compress/Zlib.pm b/Master/tlpkg/tlperl/lib/Compress/Zlib.pm index db206366b51..db13bb03860 100644 --- a/Master/tlpkg/tlperl/lib/Compress/Zlib.pm +++ b/Master/tlpkg/tlperl/lib/Compress/Zlib.pm @@ -1,23 +1,23 @@ package Compress::Zlib; -require 5.004 ; +require 5.006 ; require Exporter; use Carp ; use IO::Handle ; use Scalar::Util qw(dualvar); -use IO::Compress::Base::Common 2.033 ; -use Compress::Raw::Zlib 2.033 ; -use IO::Compress::Gzip 2.033 ; -use IO::Uncompress::Gunzip 2.033 ; +use IO::Compress::Base::Common 2.048 ; +use Compress::Raw::Zlib 2.048 ; +use IO::Compress::Gzip 2.048 ; +use IO::Uncompress::Gunzip 2.048 ; use strict ; use warnings ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); -$VERSION = '2.033'; +$VERSION = '2.048'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @@ -87,15 +87,16 @@ sub _set_gzerr_undef _set_gzerr(@_); return undef; } + sub _save_gzerr { my $gz = shift ; my $test_eof = shift ; my $value = $gz->errorNo() || 0 ; + my $eof = $gz->eof() ; if ($test_eof) { - #my $gz = $self->[0] ; # gzread uses Z_STREAM_END to denote a successful end $value = Z_STREAM_END() if $gz->eof() && $value == 0 ; } @@ -162,13 +163,14 @@ sub Compress::Zlib::gzFile::gzread my $len = defined $_[1] ? $_[1] : 4096 ; + my $gz = $self->[0] ; if ($self->gzeof() || $len == 0) { # Zap the output buffer to match ver 1 behaviour. $_[0] = "" ; + _save_gzerr($gz, 1); return 0 ; } - my $gz = $self->[0] ; my $status = $gz->read($_[0], $len) ; _save_gzerr($gz, 1); return $status ; @@ -451,7 +453,7 @@ sub inflate package Compress::Zlib ; -use IO::Compress::Gzip::Constants 2.033 ; +use IO::Compress::Gzip::Constants 2.048 ; sub memGzip($) { @@ -576,7 +578,7 @@ sub memGunzip($) substr($$string, 0, 8) = ''; return _set_gzerr_undef(Z_DATA_ERROR()) unless $len == length($output) and - $crc == crc32($output); + $crc == Compress::Raw::Zlib::crc32($output); } else { @@ -698,7 +700,7 @@ enhancements/changes have been made to the C interface: =item 1 -If you want to to open either STDIN or STDOUT with C, you can now +If you want to open either STDIN or STDOUT with C, you can now optionally use the special filename "C<->" as a synonym for C<\*STDIN> and C<\*STDOUT>. @@ -1447,7 +1449,7 @@ of I. L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L -L +L L, L, L, @@ -1476,7 +1478,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 1995-2011 Paul Marquess. All rights reserved. +Copyright (c) 1995-2012 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/Config.pm b/Master/tlpkg/tlperl/lib/Config.pm index 2c05af8a161..2000dffc07e 100644 --- a/Master/tlpkg/tlperl/lib/Config.pm +++ b/Master/tlpkg/tlperl/lib/Config.pm @@ -54,11 +54,11 @@ sub import { return; } -die "Perl lib version (5.14.2) doesn't match executable '$0' version ($])" +die "Perl lib version (5.16.2) doesn't match executable '$0' version ($])" unless $^V; -$^V eq 5.14.2 - or die "Perl lib version (5.14.2) doesn't match executable '$0' version (" . +$^V eq 5.16.2 + or die "Perl lib version (5.16.2) doesn't match executable '$0' version (" . sprintf("v%vd",$^V) . ")"; @@ -111,5 +111,5 @@ tie %Config, 'Config', { so => 'dll', useithreads => 'define', usevendorprefix => undef, - version => '5.14.2', + version => '5.16.2', }; diff --git a/Master/tlpkg/tlperl/lib/Config.pm.orig b/Master/tlpkg/tlperl/lib/Config.pm.orig index b4a3087e763..599da3989ca 100644 --- a/Master/tlpkg/tlperl/lib/Config.pm.orig +++ b/Master/tlpkg/tlperl/lib/Config.pm.orig @@ -54,11 +54,11 @@ sub import { return; } -die "Perl lib version (5.14.2) doesn't match executable '$0' version ($])" +die "Perl lib version (5.16.2) doesn't match executable '$0' version ($])" unless $^V; -$^V eq 5.14.2 - or die "Perl lib version (5.14.2) doesn't match executable '$0' version (" . +$^V eq 5.16.2 + or die "Perl lib version (5.16.2) doesn't match executable '$0' version (" . sprintf("v%vd",$^V) . ")"; @@ -83,7 +83,7 @@ sub AUTOLOAD { # tie returns the object, so the value returned to require will be true. tie %Config, 'Config', { - archlibexp => 'x:\\tlperl\\lib', + archlibexp => 'c:\\perl\\lib', archname => 'MSWin32-x86-multi-thread', cc => 'gcc', d_readlink => undef, @@ -95,16 +95,16 @@ tie %Config, 'Config', { inc_version_list => '', intsize => '4', ldlibpthname => '', - libpth => 'C:\\MinGW\\lib', + libpth => 'X:\\MinGW\\lib', osname => 'MSWin32', osvers => '5.1', path_sep => ';', - privlibexp => 'x:\\tlperl\\lib', - scriptdir => 'x:\\tlperl\\bin', - sitearchexp => 'x:\\tlperl\\site\\lib', - sitelibexp => 'x:\\tlperl\\site\\lib', + privlibexp => 'c:\\perl\\lib', + scriptdir => 'c:\\perl\\bin', + sitearchexp => 'c:\\perl\\site\\lib', + sitelibexp => 'c:\\perl\\site\\lib', so => 'dll', useithreads => 'define', usevendorprefix => undef, - version => '5.14.2', + version => '5.16.2', }; diff --git a/Master/tlpkg/tlperl/lib/Config.pod b/Master/tlpkg/tlperl/lib/Config.pod index c4bcd0f14f0..c14aa382366 100644 --- a/Master/tlpkg/tlperl/lib/Config.pod +++ b/Master/tlpkg/tlperl/lib/Config.pod @@ -41,7 +41,7 @@ http://perl5.git.perl.org/perl.git/blob/HEAD:/Porting/Glossary =item myconfig() Returns a textual summary of the major perl configuration values. -See also C<-V> in L. +See also C<-V> in L. =item config_sh() @@ -61,7 +61,7 @@ printed on a separate line in the form: name='value'; Names which are unknown are output as C. -See also C<-V:name> in L. +See also C<-V:name> in L. =item bincompat_options() @@ -621,8 +621,8 @@ From F: This variable contains the number of command-line arguments passed to Configure, as reported by the shell in the $# variable. -The individual arguments are stored as variables config_argc1, -config_argc2, etc. +The individual arguments are stored as variables config_arg1, +config_arg2, etc. =item C @@ -2214,6 +2214,13 @@ From F: This symbol will be defined if the C compiler supports int64_t. +=item C + +From F: + +This variable conditionally defines the HAS_IPV6_MREQ symbol, which +indicates the availability of a struct ipv6_mreq. + =item C From F: @@ -2221,6 +2228,13 @@ From F: This variable conditionally defines the C constant, which indicates to the C program that isascii() is available. +=item C + +From F: + +This variable conditionally defines the C constant, +which indicates to the C program that isblank() is available. + =item C From F: @@ -3560,6 +3574,13 @@ This variable conditionally defines the C symbol, which indicates to the C program that the snprintf () library function is available. +=item C + +From F: + +This variable conditionally defines the HAS_SOCKADDR_IN6 symbol, which +indicates the availability of a struct sockaddr_in6. + =item C From F: @@ -5378,6 +5399,14 @@ This variable conditionally defines the C symbol, which indicates to the C program that exists and should be included. +=item C + +From F: + +This variable conditionally defines the C symbol, which +indicates to the C program that exists and should +be included. + =item C From F: @@ -6091,6 +6120,14 @@ libraries for dynamic loading. On some systems, it is C. On C systems, it should be $cc. Mostly, we'll try to respect the hint file setting. +=item C + +From F: + +This variable shows if the loader accepts scripts in the form of +-Wl,--version-script=F. This is currently only supported +for C ld on C in dynamic loading builds. + =item C From F: @@ -7976,6 +8013,19 @@ long or int. It is used by functions that return a count of bytes or an error condition. It must be a signed type. We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). +=item C + +From F: + +This variable contains the signedness of struct stat's st_ino. +1 for unsigned, -1 for signed. + +=item C + +From F: + +This variable contains the size of struct stat's st_ino in bytes. + =item C From F: @@ -8411,6 +8461,14 @@ This variable conditionally defines the C symbol, and indicates that Perl should be built to use the interpreter-based threading implementation. +=item C + +From F: + +This variable, indicates that we can use sysctl with +C to get a full path for the executable, and hence +convert $^X to an absolute path. + =item C From F: @@ -8465,6 +8523,14 @@ From F: This variable contains C or C depending whether the nm extraction is wanted or not. +=item C + +From F: + +This symbol, if defined, indicates that we can use _NSGetExecutablePath +and realpath to get a full path for the executable, and hence convert +$^X to an absolute path. + =item C From F: diff --git a/Master/tlpkg/tlperl/lib/Config_heavy.pl b/Master/tlpkg/tlperl/lib/Config_heavy.pl index d7aa3528699..16d50afc6ee 100644 --- a/Master/tlpkg/tlperl/lib/Config_heavy.pl +++ b/Master/tlpkg/tlperl/lib/Config_heavy.pl @@ -142,15 +142,15 @@ Header='' Id='\$Id' Locker='' Log='\$Log' -PATCHLEVEL='14' +PATCHLEVEL='16' PERL_API_REVISION='5' PERL_API_SUBVERSION='0' -PERL_API_VERSION='14' +PERL_API_VERSION='16' PERL_CONFIG_SH='true' PERL_PATCHLEVEL='' PERL_REVISION='5' PERL_SUBVERSION='2' -PERL_VERSION='14' +PERL_VERSION='16' RCSfile='\$RCSfile' Revision='\$Revision' SUBVERSION='2' @@ -166,8 +166,8 @@ ansi2knr='' aphostname='' api_revision='5' api_subversion='0' -api_version='14' -api_versionstring='5.14.0' +api_version='16' +api_versionstring='5.16.0' ar='ar' archlib='$rootdir\\lib' archlibexp='$rootdir\\lib' @@ -189,14 +189,14 @@ cat='type' cc='gcc' cccdlflags=' ' ccdlflags=' ' -ccflags=' -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields' +ccflags=' -s -O0 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields' ccflags_uselargefiles='' ccname='gcc' ccsymbols='' ccversion='' cf_by='siepo' cf_email='tex-live\@tug.org' -cf_time='Fri May 18 10:52:25 2012' +cf_time='Fri Nov 16 21:24:42 2012' charbits='8' chgrp='' chmod='' @@ -417,7 +417,9 @@ d_inetaton='undef' d_inetntop='undef' d_inetpton='undef' d_int64_t='undef' +d_ipv6_mreq='undef' d_isascii='define' +d_isblank='undef' d_isfinite='undef' d_isinf='undef' d_isnan='define' @@ -581,6 +583,7 @@ d_sigsetjmp='undef' d_sin6_scope_id='define' d_sitearch='define' d_snprintf='define' +d_sockaddr_in6='undef' d_sockaddr_sa_len='undef' d_sockatmark='undef' d_sockatmarkproto='undef' @@ -686,7 +689,7 @@ doublesize='8' drand01='(rand()/(double)((unsigned)1< with the message +that it started in. If it has changed it will C with the message "Unstable directory path, current directory changed -unexpectedly". That should never happen. +unexpectedly". That should never happen. =item fastgetcwd @@ -136,8 +136,8 @@ modules wherever portability is a concern. =item * Actually, on Mac OS, the C, C and C -functions are all aliases for the C function, which, on Mac OS, -calls `pwd`. Likewise, the C function is an alias for +functions are all aliases for the C function, which, on Mac OS, +calls `pwd`. Likewise, the C function is an alias for C. =back @@ -171,9 +171,9 @@ use strict; use Exporter; use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); -$VERSION = '3.36'; +$VERSION = '3.39_02'; my $xs_version = $VERSION; -$VERSION = eval $VERSION; +$VERSION =~ tr/_//; @ISA = qw/ Exporter /; @EXPORT = qw(cwd getcwd fastcwd fastgetcwd); @@ -253,9 +253,6 @@ eval { } }; -# Must be after the DynaLoader stuff: -$VERSION = eval $VERSION; - # Big nasty table of function aliases my %METHOD_MAP = ( @@ -582,6 +579,7 @@ sub _perl_abs_path unless (opendir(PARENT, $dotdots)) { # probably a permissions issue. Try the native command. + require File::Spec; return File::Spec->rel2abs( $start, _backtick_pwd() ); } unless (@cst = stat($dotdots)) @@ -755,7 +753,14 @@ sub _win32_cwd_simple { } sub _win32_cwd { - if (eval 'defined &DynaLoader::boot_DynaLoader') { + # Need to avoid taking any sort of reference to the typeglob or the code in + # the optree, so that this tests the runtime state of things, as the + # ExtUtils::MakeMaker tests for "miniperl" need to be able to fake things at + # runtime by deleting the subroutine. *foo{THING} syntax on a symbol table + # lookup avoids needing a string eval, which has been reported to cause + # problems (for reasons that we haven't been able to get to the bottom of - + # rt.cpan.org #56225) + if (*{$DynaLoader::{boot_DynaLoader}}{CODE}) { $ENV{'PWD'} = Win32::GetCwd(); } else { # miniperl diff --git a/Master/tlpkg/tlperl/lib/DB.pm b/Master/tlpkg/tlperl/lib/DB.pm index 16ff99afa52..03f2b21e03b 100644 --- a/Master/tlpkg/tlperl/lib/DB.pm +++ b/Master/tlpkg/tlperl/lib/DB.pm @@ -41,7 +41,7 @@ BEGIN { $DB::subname = ''; # currently executing sub (fullly qualified name) $DB::lineno = ''; # current line number - $DB::VERSION = $DB::VERSION = '1.03'; + $DB::VERSION = $DB::VERSION = '1.04'; # initialize private globals to avoid warnings @@ -258,7 +258,7 @@ sub backtrace { } elsif ($s eq '(eval)') { $s = "eval {...}"; } - $f = "file `$f'" unless $f eq '-e'; + $f = "file '$f'" unless $f eq '-e'; push @ret, "$w&$s$a from $f line $l"; last if $DB::signal; } diff --git a/Master/tlpkg/tlperl/lib/Data/Dumper.pm b/Master/tlpkg/tlperl/lib/Data/Dumper.pm index 1c68c987563..a0992776137 100644 --- a/Master/tlpkg/tlperl/lib/Data/Dumper.pm +++ b/Master/tlpkg/tlperl/lib/Data/Dumper.pm @@ -9,7 +9,9 @@ package Data::Dumper; -$VERSION = '2.130_02'; # Don't forget to set version and release date in POD! +BEGIN { + $VERSION = '2.135_06'; # Don't forget to set version and release +} # date in POD! #$| = 1; @@ -29,12 +31,12 @@ BEGIN { # toggled on load failure. eval { require XSLoader; - }; - $Useperl = 1 if $@; + XSLoader::load( 'Data::Dumper' ); + 1 + } + or $Useperl = 1; } -XSLoader::load( 'Data::Dumper' ) unless $Useperl; - # module vars and their defaults $Indent = 2 unless defined $Indent; $Purity = 0 unless defined $Purity; @@ -101,26 +103,39 @@ sub new { return bless($s, $c); } -if ($] >= 5.008) { - # Packed numeric addresses take less memory. Plus pack is faster than sprintf - *init_refaddr_format = sub {}; +# Packed numeric addresses take less memory. Plus pack is faster than sprintf + +# Most users of current versions of Data::Dumper will be 5.008 or later. +# Anyone on 5.6.1 and 5.6.2 upgrading will be rare (particularly judging by +# the bug reports from users on those platforms), so for the common case avoid +# complexity, and avoid even compiling the unneeded code. - *format_refaddr = sub { +sub init_refaddr_format { +} + +sub format_refaddr { require Scalar::Util; pack "J", Scalar::Util::refaddr(shift); - }; -} else { - *init_refaddr_format = sub { - require Config; - my $f = $Config::Config{uvxformat}; - $f =~ tr/"//d; - our $refaddr_format = "0x%" . $f; - }; - - *format_refaddr = sub { - require Scalar::Util; - sprintf our $refaddr_format, Scalar::Util::refaddr(shift); - } +}; + +if ($] < 5.008) { + eval <<'EOC' or die; + no warnings 'redefine'; + my $refaddr_format; + sub init_refaddr_format { + require Config; + my $f = $Config::Config{uvxformat}; + $f =~ tr/"//d; + $refaddr_format = "0x%" . $f; + } + + sub format_refaddr { + require Scalar::Util; + sprintf $refaddr_format, Scalar::Util::refaddr(shift); + } + + 1 +EOC } # @@ -255,6 +270,10 @@ sub _quote { return "'" . $val . "'"; } +# Old Perls (5.14-) have trouble resetting vstring magic when it is no +# longer valid. +use constant _bad_vsmg => defined &_vstring && (_vstring(~v0)||'') eq "v0"; + # # twist, toil and turn; # and recurse, of course. @@ -367,10 +386,11 @@ sub _dump { } else { $pat = "$val"; } - $pat =~ s,/,\\/,g; + $pat =~ s <(\\.)|/> { $1 || '\\/' }ge; $out .= "qr/$pat/"; } - elsif ($realtype eq 'SCALAR' || $realtype eq 'REF') { + elsif ($realtype eq 'SCALAR' || $realtype eq 'REF' + || $realtype eq 'VSTRING') { if ($realpack) { $out .= 'do{\\(my $o = ' . $s->_dump($$val, "\${$name}") . ')}'; } @@ -475,6 +495,7 @@ sub _dump { else { # simple scalar my $ref = \$_[1]; + my $v; # first, catalog the scalar if ($name ne '') { $id = format_refaddr($ref); @@ -490,14 +511,20 @@ sub _dump { $s->{seen}{$id} = ["\\$name", $ref]; } } - if (ref($ref) eq 'GLOB' or "$ref" =~ /=GLOB\([^()]+\)$/) { # glob + $ref = \$val; + if (ref($ref) eq 'GLOB') { # glob my $name = substr($val, 1); - if ($name =~ /^[A-Za-z_][\w:]*$/) { + if ($name =~ /^[A-Za-z_][\w:]*$/ && $name ne 'main::') { $name =~ s/^main::/::/; $sname = $name; } else { - $sname = $s->_dump($name, ""); + $sname = $s->_dump( + $name eq 'main::' || $] < 5.007 && $name eq "main::\0" + ? '' + : $name, + "", + ); $sname = '{' . $sname . '}'; } if ($s->{purity}) { @@ -520,6 +547,14 @@ sub _dump { elsif (!defined($val)) { $out .= "undef"; } + elsif (defined &_vstring and $v = _vstring($val) + and !_bad_vsmg || eval $v eq $val) { + $out .= $v; + } + elsif (!defined &_vstring + and ref $ref eq 'VSTRING' || eval{Scalar::Util::isvstring($val)}) { + $out .= sprintf "%vd", $val; + } elsif ($val =~ /^(?:0|-?[1-9]\d{0,8})\z/) { # safe decimal number $out .= $val; } @@ -1106,20 +1141,20 @@ distribution for more examples.) print($@) if $@; print Dumper($boo), Dumper($bar); # pretty print (no array indices) - $Data::Dumper::Terse = 1; # don't output names where feasible - $Data::Dumper::Indent = 0; # turn off all pretty print + $Data::Dumper::Terse = 1; # don't output names where feasible + $Data::Dumper::Indent = 0; # turn off all pretty print print Dumper($boo), "\n"; - $Data::Dumper::Indent = 1; # mild pretty print + $Data::Dumper::Indent = 1; # mild pretty print print Dumper($boo); - $Data::Dumper::Indent = 3; # pretty print with array indices + $Data::Dumper::Indent = 3; # pretty print with array indices print Dumper($boo); - $Data::Dumper::Useqq = 1; # print strings in double quotes + $Data::Dumper::Useqq = 1; # print strings in double quotes print Dumper($boo); - $Data::Dumper::Pair = " : "; # specify hash key/value separator + $Data::Dumper::Pair = " : "; # specify hash key/value separator print Dumper($boo); @@ -1297,7 +1332,7 @@ modify it under the same terms as Perl itself. =head1 VERSION -Version 2.130_02 (Dec 20 2010) +Version 2.135_06 (March 20 2012) =head1 SEE ALSO diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf.pm b/Master/tlpkg/tlperl/lib/Devel/DProf.pm deleted file mode 100644 index 62485a9f3cb..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf.pm +++ /dev/null @@ -1,247 +0,0 @@ -use 5.006_001; - -=head1 NAME - -Devel::DProf - a B Perl code profiler - -=head1 SYNOPSIS - - perl -d:DProf test.pl - -=head1 ACHTUNG! - -C is B and will be removed from a future version of -Perl. We strongly recommend that you install and use L instead, -as it offers significantly improved profiling and reporting. - -=head1 DESCRIPTION - -The Devel::DProf package is a Perl code profiler. This will collect -information on the execution time of a Perl script and of the subs in that -script. This information can be used to determine which subroutines are -using the most time and which subroutines are being called most often. This -information can also be used to create an execution graph of the script, -showing subroutine relationships. - -To profile a Perl script run the perl interpreter with the B<-d> debugging -switch. The profiler uses the debugging hooks. So to profile script -F the following command should be used: - - perl -d:DProf test.pl - -When the script terminates (or when the output buffer is filled) the -profiler will dump the profile information to a file called -F. A tool like I can be used to interpret the -information which is in that profile. The following command will -print the top 15 subroutines which used the most time: - - dprofpp - -To print an execution graph of the subroutines in the script use the -following command: - - dprofpp -T - -Consult L for other options. - -=head1 PROFILE FORMAT - -The old profile is a text file which looks like this: - - #fOrTyTwO - $hz=100; - $XS_VERSION='DProf 19970606'; - # All values are given in HZ - $rrun_utime=2; $rrun_stime=0; $rrun_rtime=7 - PART2 - + 26 28 566822884 DynaLoader::import - - 26 28 566822884 DynaLoader::import - + 27 28 566822885 main::bar - - 27 28 566822886 main::bar - + 27 28 566822886 main::baz - + 27 28 566822887 main::bar - - 27 28 566822888 main::bar - [....] - -The first line is the magic number. The second line is the hertz value, or -clock ticks, of the machine where the profile was collected. The third line -is the name and version identifier of the tool which created the profile. -The fourth line is a comment. The fifth line contains three variables -holding the user time, system time, and realtime of the process while it was -being profiled. The sixth line indicates the beginning of the sub -entry/exit profile section. - -The columns in B are: - - sub entry(+)/exit(-) mark - app's user time at sub entry/exit mark, in ticks - app's system time at sub entry/exit mark, in ticks - app's realtime at sub entry/exit mark, in ticks - fully-qualified sub name, when possible - -With newer perls another format is used, which may look like this: - - #fOrTyTwO - $hz=10000; - $XS_VERSION='DProf 19971213'; - # All values are given in HZ - $over_utime=5917; $over_stime=0; $over_rtime=5917; - $over_tests=10000; - $rrun_utime=1284; $rrun_stime=0; $rrun_rtime=1284; - $total_marks=6; - - PART2 - @ 406 0 406 - & 2 main bar - + 2 - @ 456 0 456 - - 2 - @ 1 0 1 - & 3 main baz - + 3 - @ 141 0 141 - + 2 - @ 141 0 141 - - 2 - @ 1 0 1 - & 4 main foo - + 4 - @ 142 0 142 - + & Devel::DProf::write - @ 5 0 5 - - & Devel::DProf::write - -(with high value of $ENV{PERL_DPROF_TICKS}). - -New C<$over_*> values show the measured overhead of making $over_tests -calls to the profiler These values are used by the profiler to -subtract the overhead from the runtimes. - -Lines starting with C<@> mark the amount of time passed since the -previous C<@> line. The numbers following the C<@> are integer tick -counts representing user, system, and real time. Divide these numbers -by the $hz value in the header to get seconds. - -Lines starting with C<&> map subroutine identifiers (an integer) to -subroutine packages and names. These should only occur once per -subroutine. - -Lines starting with C<+> or C<-> mark normal entering and exit of -subroutines. The number following is a reference to a subroutine -identifier. - -Lines starting with C<*> mark where subroutines are entered by C, but note that the return will still be marked as coming from -the original sub. The sequence might look like this: - - + 5 - * 6 - - 5 - -Lines starting with C is like C<-> but mark where subroutines are -exited by dying. Example: - - + 5 - + 6 - / 6 - / 5 - -Finally you might find C<@> time stamp marks surrounded by C<+ & -Devel::DProf::write> and C<- & Devel::DProf::write> lines. These 3 -lines are outputted when printing of the mark above actually consumed -measurable time. - -=head1 AUTOLOAD - -When Devel::DProf finds a call to an C<&AUTOLOAD> subroutine it looks at the -C<$AUTOLOAD> variable to find the real name of the sub being called. See -L. - -=head1 ENVIRONMENT - -C sets size of output buffer in words. Defaults to 2**14. - -C sets number of ticks per second on some systems where -a replacement for times() is used. Defaults to the value of C macro. - -C sets the name of the output file. If not set, -defaults to tmon.out. - -=head1 BUGS - -Builtin functions cannot be measured by Devel::DProf. - -With a newer Perl DProf relies on the fact that the numeric slot of -$DB::sub contains an address of a subroutine. Excessive manipulation -of this variable may overwrite this slot, as in - - $DB::sub = 'current_sub'; - ... - $addr = $DB::sub + 0; - -will set this numeric slot to numeric value of the string -C, i.e., to C<0>. This will cause a segfault on the exit -from this subroutine. Note that the first assignment above does not -change the numeric slot (it will I it as invalid, but will not -write over it). - -Another problem is that if a subroutine exits using goto(LABEL), -last(LABEL) or next(LABEL) then perl may crash or Devel::DProf will die -with the error: - - panic: Devel::DProf inconsistent subroutine return - -For example, this code will break under Devel::DProf: - - sub foo { - last FOO; - } - FOO: { - foo(); - } - -A pattern like this is used by Test::More's skip() function, for -example. See L for more details. - -=head1 SEE ALSO - -L, L, times(2) - -=cut - -# This sub is needed for calibration. -package Devel::DProf; - -sub NONESUCH_noxs { - return $Devel::DProf::VERSION; -} - -{ - package DB; - - # - # As of perl5.003_20, &DB::sub stub is not needed (some versions - # even had problems if stub was redefined with XS version). - # - - # disable DB single-stepping - BEGIN { $single = 0; } - - # This sub is needed during startup. - sub DB { - # print "nonXS DBDB\n"; - } -} - -use XSLoader (); - -$Devel::DProf::VERSION = '20110228.00'; # this version not authorized by - # Dean Roehrich. See "Changes" file. - -use if $] >= 5.013, 'deprecate'; - -sub import { - XSLoader::load 'Devel::DProf', $Devel::DProf::VERSION; -} - -1; diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/V.pm b/Master/tlpkg/tlperl/lib/Devel/DProf/V.pm deleted file mode 100644 index e613f6f4410..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/V.pm +++ /dev/null @@ -1,63 +0,0 @@ -package V; - -use Getopt::Std 'getopts'; -getopts('vp:d:'); - -require Exporter; -@ISA = 'Exporter'; - -@EXPORT = qw( dprofpp $opt_v $results $expected report @results ); -@EXPORT_OK = qw( notok ok $num ); - -$num = 0; -$results = $expected = ''; -$perl = $opt_p || $^X; -$dpp = $opt_d || '../../utils/dprofpp'; -$dpp .= '.com' if $^O eq 'VMS'; - -print "\nperl: $perl\n" if $opt_v; -if( ! -f $perl ){ die "Where's Perl?" } -if( ! -f $dpp ) { - ($dpp = $^X) =~ s@(^.*)[/|\\].*@$1/dprofpp@; - die "Where's dprofpp?" if( ! -f $dpp ); -} - -sub dprofpp { - my $switches = shift; - - open( D, "$perl \"-I../lib\" $dpp \"$switches\" 2> err |" ) || warn "$0: Can't run. $!\n"; - @results = ; - close D; - - open( D, "; - close D; - push( @results, @err ) if @err; - - $results = qq{@results}; - # ignore Loader (Dyna/Auto etc), leave newline - $results =~ s/^\w+Loader::import//; - $results =~ s/\n /\n/gm; - $results; -} - -sub report { - $num = shift; - my $sub = shift; - my $x; - - $x = &$sub; - $x ? &ok : ¬ok; -} - -sub ok { - print "ok $num\n"; -} - -sub notok { - print "not ok $num\n"; - print "\nResult\n{$results}\n"; - print "Expected\n{$expected}\n"; -} - -1; diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test1_t b/Master/tlpkg/tlperl/lib/Devel/DProf/test1_t deleted file mode 100644 index d504cd55365..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test1_t +++ /dev/null @@ -1,18 +0,0 @@ -sub foo { - print "in sub foo\n"; - bar(); -} - -sub bar { - print "in sub bar\n"; -} - -sub baz { - print "in sub baz\n"; - bar(); - foo(); -} - -bar(); -baz(); -foo(); diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test1_v b/Master/tlpkg/tlperl/lib/Devel/DProf/test1_v deleted file mode 100644 index 542a503414e..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test1_v +++ /dev/null @@ -1,24 +0,0 @@ -# perl - -use V; - -dprofpp( '-T' ); -$expected = -qq{main::bar -main::baz - main::bar - main::foo - main::bar -main::foo - main::bar -}; -report 1, sub { $expected eq $results }; - -dprofpp('-TF'); -report 2, sub { $expected eq $results }; - -dprofpp( '-t' ); -report 3, sub { $expected eq $results }; - -dprofpp('-tF'); -report 4, sub { $expected eq $results }; diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test2_t b/Master/tlpkg/tlperl/lib/Devel/DProf/test2_t deleted file mode 100644 index edc46c527e6..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test2_t +++ /dev/null @@ -1,21 +0,0 @@ -sub foo { - print "in sub foo\n"; - bar(); -} - -sub bar { - print "in sub bar\n"; -} - -sub baz { - print "in sub baz\n"; - bar(); - bar(); - bar(); - foo(); -} - -bar(); -bar(); -baz(); -foo(); diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test2_v b/Master/tlpkg/tlperl/lib/Devel/DProf/test2_v deleted file mode 100644 index 8b775b31315..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test2_v +++ /dev/null @@ -1,36 +0,0 @@ -# perl - -use V; - -dprofpp( '-T' ); -$expected = -qq{main::bar -main::bar -main::baz - main::bar - main::bar - main::bar - main::foo - main::bar -main::foo - main::bar -}; -report 5, sub { $expected eq $results }; - -dprofpp('-TF'); -report 6, sub { $expected eq $results }; - -dprofpp( '-t' ); -$expected = -qq{main::bar (2x) -main::baz - main::bar (3x) - main::foo - main::bar -main::foo - main::bar -}; -report 7, sub { $expected eq $results }; - -dprofpp('-tF'); -report 8, sub { $expected eq $results }; diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test3_t b/Master/tlpkg/tlperl/lib/Devel/DProf/test3_t deleted file mode 100644 index a5327f4d7ad..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test3_t +++ /dev/null @@ -1,19 +0,0 @@ -sub foo { - print "in sub foo\n"; - exit(0); - bar(); -} - -sub bar { - print "in sub bar\n"; -} - -sub baz { - print "in sub baz\n"; - bar(); - foo(); -} - -bar(); -baz(); -foo(); diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test3_v b/Master/tlpkg/tlperl/lib/Devel/DProf/test3_v deleted file mode 100644 index df7543e2b80..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test3_v +++ /dev/null @@ -1,29 +0,0 @@ -# perl - -use V; - -dprofpp( '-T' ); -$e1 = $expected = -qq{main::bar -main::baz - main::bar - main::foo -}; -report 9, sub { $expected eq $results }; - -dprofpp('-TF'); -$e2 = $expected = -qq{main::bar -main::baz - main::bar - main::foo -}; -report 10, sub { $expected eq $results }; - -dprofpp( '-t' ); -$expected = $e1; -report 11, sub { 1 }; - -dprofpp('-tF'); -$expected = $e2; -report 12, sub { $expected eq $results }; diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test4_t b/Master/tlpkg/tlperl/lib/Devel/DProf/test4_t deleted file mode 100644 index 729968270aa..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test4_t +++ /dev/null @@ -1,24 +0,0 @@ -sub foo { - print "in sub foo\n"; - bar(); -} - -sub bar { - print "in sub bar\n"; -} - -sub baz { - print "in sub baz\n"; - bar(); - bar(); - bar(); - foo(); -} - -bar(); - -eval { fork }; - -bar(); -baz(); -foo(); diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test4_v b/Master/tlpkg/tlperl/lib/Devel/DProf/test4_v deleted file mode 100644 index d9677ff7853..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test4_v +++ /dev/null @@ -1,36 +0,0 @@ -# perl - -use V; - -dprofpp( '-T' ); -$expected = -qq{main::bar -main::bar -main::baz - main::bar - main::bar - main::bar - main::foo - main::bar -main::foo - main::bar -}; -report 13, sub { $expected eq $results }; - -dprofpp('-TF'); -report 14, sub { $expected eq $results }; - -dprofpp( '-t' ); -$expected = -qq{main::bar (2x) -main::baz - main::bar (3x) - main::foo - main::bar -main::foo - main::bar -}; -report 15, sub { $expected eq $results }; - -dprofpp('-tF'); -report 16, sub { $expected eq $results }; diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test5_t b/Master/tlpkg/tlperl/lib/Devel/DProf/test5_t deleted file mode 100644 index 0b1113757fd..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test5_t +++ /dev/null @@ -1,25 +0,0 @@ -# Test that dprof doesn't break -# &bar; used as &bar(@_); - -sub foo1 { - print "in foo1(@_)\n"; - bar(@_); -} -sub foo2 { - print "in foo2(@_)\n"; - &bar; -} -sub bar { - print "in bar(@_)\n"; - if( @_ > 0 ){ - &yeppers; - } -} -sub yeppers { - print "rest easy\n"; -} - - -&foo1( A ); -&foo2( B ); - diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test5_v b/Master/tlpkg/tlperl/lib/Devel/DProf/test5_v deleted file mode 100644 index 9e9298c6896..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test5_v +++ /dev/null @@ -1,15 +0,0 @@ -# perl - -use V; - -dprofpp( '-T' ); -$expected = -qq{main::foo1 - main::bar - main::yeppers -main::foo2 - main::bar - main::yeppers -}; -report 17, sub { $expected eq $results }; - diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test6_t b/Master/tlpkg/tlperl/lib/Devel/DProf/test6_t deleted file mode 100644 index 7b8bf4a722b..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test6_t +++ /dev/null @@ -1,29 +0,0 @@ -sub foo { - my $x; - my $y; - print "in sub foo\n"; - for( $x = 1; $x < 100; ++$x ){ - bar(); - for( $y = 1; $y < 100; ++$y ){ - } - } -} - -sub bar { - my $x; - print "in sub bar\n"; - for( $x = 1; $x < 100; ++$x ){ - } - die "bar exiting"; -} - -sub baz { - print "in sub baz\n"; - eval { bar(); }; - eval { foo(); }; -} - -eval { bar(); }; -baz(); -eval { foo(); }; - diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test6_v b/Master/tlpkg/tlperl/lib/Devel/DProf/test6_v deleted file mode 100644 index 2f651ea7945..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test6_v +++ /dev/null @@ -1,16 +0,0 @@ -# perl - -use V; - -dprofpp( '-T' ); -$expected = -qq{main::bar -main::baz - main::bar - main::foo - main::bar -main::foo - main::bar -}; -report 18, sub { $expected eq $results }; - diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test7_t b/Master/tlpkg/tlperl/lib/Devel/DProf/test7_t deleted file mode 100644 index 56dbfd341c4..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test7_t +++ /dev/null @@ -1,9 +0,0 @@ -BEGIN { - print "in BEGIN\n"; -} - -sub foo { - print "in sub foo\n"; -} - -foo(); diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test7_v b/Master/tlpkg/tlperl/lib/Devel/DProf/test7_v deleted file mode 100644 index 1d19fe5cd52..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test7_v +++ /dev/null @@ -1,10 +0,0 @@ -# perl - -use V; - -dprofpp( '-T' ); -$expected = -qq{main::BEGIN -main::foo -}; -report 19, sub { $expected eq $results }; diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test8_t b/Master/tlpkg/tlperl/lib/Devel/DProf/test8_t deleted file mode 100644 index 6154c8a5307..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test8_t +++ /dev/null @@ -1,15 +0,0 @@ -sub foo { - print "in sub foo\n"; -} - -sub bar { - print "in sub bar\n"; - $^P -= 0x40; -} - -foo(); -$^P -= 0x40; -foo(); -$^P += 0x40; -bar(); -$^P += 0x40; diff --git a/Master/tlpkg/tlperl/lib/Devel/DProf/test8_v b/Master/tlpkg/tlperl/lib/Devel/DProf/test8_v deleted file mode 100644 index d5de3087fea..00000000000 --- a/Master/tlpkg/tlperl/lib/Devel/DProf/test8_v +++ /dev/null @@ -1,11 +0,0 @@ -# perl - -use V; - -dprofpp( '-t' ); -$expected = -qq{main::foo (2x) -main::bar -}; - -report 20, sub { $expected eq $results }; diff --git a/Master/tlpkg/tlperl/lib/Devel/InnerPackage.pm b/Master/tlpkg/tlperl/lib/Devel/InnerPackage.pm index 614a59a85e5..69f8dcaa447 100644 --- a/Master/tlpkg/tlperl/lib/Devel/InnerPackage.pm +++ b/Master/tlpkg/tlperl/lib/Devel/InnerPackage.pm @@ -4,7 +4,7 @@ use strict; use base qw(Exporter); use vars qw($VERSION @EXPORT_OK); -$VERSION = '0.3'; +$VERSION = '0.4'; @EXPORT_OK = qw(list_packages); =pod @@ -83,12 +83,12 @@ sub list_packages { sub _loaded { my ($class, $name) = @_; - no strict 'refs'; + no strict 'refs'; # Handle by far the two most common cases # This is very fast and handles 99% of cases. return 1 if defined ${"${name}::VERSION"}; - return 1 if defined @{"${name}::ISA"}; + return 1 if @{"${name}::ISA"}; # Are there any symbol table entries other than other namespaces foreach ( keys %{"${name}::"} ) { diff --git a/Master/tlpkg/tlperl/lib/Devel/PPPort.pm b/Master/tlpkg/tlperl/lib/Devel/PPPort.pm index 5d786f12a50..3748c48b6db 100644 --- a/Master/tlpkg/tlperl/lib/Devel/PPPort.pm +++ b/Master/tlpkg/tlperl/lib/Devel/PPPort.pm @@ -12,13 +12,13 @@ # ################################################################################ # -# $Revision: 65 $ +# $Revision: 67 $ # $Author: mhx $ -# $Date: 2009/06/12 04:10:36 +0200 $ +# $Date: 2010/03/07 13:15:41 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2009, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2010, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # @@ -49,7 +49,7 @@ C contains a single function, called C. Its only purpose is to write the F C header file. This file contains a series of macros and, if explicitly requested, functions that allow XS modules to be built using older versions of Perl. Currently, -Perl versions from 5.003 to 5.10.0 are supported. +Perl versions from 5.003 to 5.11.5 are supported. This module is used by C to write the file F. @@ -103,7 +103,7 @@ Otherwise it returns a false value. =head1 COMPATIBILITY -F supports Perl versions from 5.003 to 5.10.0 +F supports Perl versions from 5.003 to 5.11.5 in threaded and non-threaded configurations. =head2 Provided Perl compatibility API @@ -165,6 +165,8 @@ in older Perl releases: G_METHOD get_av get_cv + get_cvn_flags + get_cvs get_hv get_sv grok_bin @@ -175,6 +177,7 @@ in older Perl releases: grok_oct gv_fetchpvn_flags gv_fetchpvs + gv_fetchsv gv_stashpvn gv_stashpvs GvSVn @@ -208,7 +211,9 @@ in older Perl releases: IVTYPE load_module memEQ + memEQs memNE + memNEs MoveD mPUSHi mPUSHn @@ -237,6 +242,7 @@ in older Perl releases: newSVpvn_utf8 newSVpvs newSVpvs_flags + newSVpvs_share newSVuv Newx Newxc @@ -585,34 +591,214 @@ Perl below which it is unsupported: =over 4 -=item perl 5.11.0 +=item perl 5.14.0 - HeUTF8 + BhkDISABLE + BhkENABLE + BhkENTRY_set MULTICALL PERL_SYS_TERM POP_MULTICALL PUSH_MULTICALL + XopDISABLE + XopENABLE + XopENTRY + XopENTRY_set + cophh_new_empty + my_lstat + my_stat + ref + stashpv_hvname_match + +=item perl 5.13.10 + + foldEQ_utf8_flags + is_utf8_xidcont + is_utf8_xidfirst + +=item perl 5.13.8 + + foldEQ_latin1 + mg_findext + parse_arithexpr + parse_fullexpr + parse_listexpr + parse_termexpr + sv_unmagicext + +=item perl 5.13.7 + + HvENAME + OP_CLASS + SvPV_nomg_nolen + XopFLAGS + amagic_deref_call + bytes_cmp_utf8 + cop_hints_2hv + cop_hints_fetch_pv + cop_hints_fetch_pvn + cop_hints_fetch_pvs + cop_hints_fetch_sv + cophh_2hv + cophh_copy + cophh_delete_pv + cophh_delete_pvn + cophh_delete_pvs + cophh_delete_sv + cophh_fetch_pv + cophh_fetch_pvn + cophh_fetch_pvs + cophh_fetch_sv + cophh_free + cophh_store_pv + cophh_store_pvn + cophh_store_pvs + cophh_store_sv + custom_op_register + custom_op_xop + newFOROP + newWHILEOP + op_lvalue + op_scope + parse_barestmt + parse_block + parse_label + +=item perl 5.13.6 + + LINKLIST + SvTRUE_nomg + ck_entersub_args_list + ck_entersub_args_proto + ck_entersub_args_proto_or_list + cv_get_call_checker + cv_set_call_checker + isWORDCHAR + lex_stuff_pv + mg_free_type + newSVpv_share + op_append_elem + op_append_list + op_contextualize + op_linklist + op_prepend_elem + parse_stmtseq + rv2cv_op_cv + savesharedpvs + savesharedsvpv + sv_2bool_flags + sv_catpv_flags + sv_catpv_nomg + sv_catpvs_flags + sv_catpvs_mg + sv_catpvs_nomg + sv_cmp_flags + sv_cmp_locale_flags + sv_collxfrm_flags + sv_eq_flags + sv_setpvs_mg + sv_setref_pvs + +=item perl 5.13.5 + + PL_rpeepp + caller_cx + isOCTAL + lex_stuff_pvs + parse_fullstmt + +=item perl 5.13.4 + + XS_APIVERSION_BOOTCHECK + +=item perl 5.13.3 + + blockhook_register + croak_no_modify + +=item perl 5.13.2 + + SvNV_nomg + find_rundefsv + foldEQ + foldEQ_locale + foldEQ_utf8 + hv_fill + sv_dec_nomg + sv_inc_nomg + +=item perl 5.13.1 + + croak_sv + die_sv + mess_sv + sv_2nv_flags + warn_sv + +=item perl 5.11.5 + + sv_pos_u2b_flags + +=item perl 5.11.4 + + prescan_version + +=item perl 5.11.2 + + PL_keyword_plugin + lex_bufutf8 + lex_discard_to + lex_grow_linestr + lex_next_chunk + lex_peek_unichar + lex_read_space + lex_read_to + lex_read_unichar + lex_stuff_pvn + lex_stuff_sv + lex_unstuff + pad_findmy + +=item perl 5.11.1 + + ck_warner + ck_warner_d + is_utf8_perl_space + is_utf8_perl_word + is_utf8_posix_digit + +=item perl 5.11.0 + + Gv_AMupdate + PL_opfreehook SvOOK_offset av_iter_p - croak_xs_usage fetch_cop_label + gv_add_by_type gv_fetchmethod_flags - hv_assert + is_ascii_string + pregfree2 + save_adelete + save_aelem_flags + save_hdelete + save_helem_flags + sv_utf8_upgrade_flags_grow + +=item perl 5.10.1 + + HeUTF8 + croak_xs_usage mro_get_from_name mro_get_private_data mro_register mro_set_mro mro_set_private_data - pad_sv - pregfree2 - ref - save_adelete - save_helem_flags + save_hints save_padsv_and_mortalize + save_pushi32ptr save_pushptr - stashpv_hvname_match + save_pushptrptr sv_insert_flags - sv_utf8_upgrade_flags_grow =item perl 5.10.0 @@ -625,13 +811,14 @@ Perl below which it is unsupported: =item perl 5.9.5 + PL_parser Perl_signbit SvRX SvRXOK av_create_and_push av_create_and_unshift_one - get_cvn_flags gv_fetchfile_flags + lex_start mro_get_linear_isa mro_method_changed_in my_dirfd @@ -659,6 +846,7 @@ Perl below which it is unsupported: PerlIO_context_layers gv_name_set + hv_copy_hints_hv my_vsnprintf newXS_flags regclass_swash @@ -685,9 +873,7 @@ Perl below which it is unsupported: is_utf8_string_loclen newGIVENOP newSVhek - newSVpvs_share newWHENOP - newWHILEOP savepvs sortsv_flags vverify @@ -696,7 +882,6 @@ Perl below which it is unsupported: SvPVbyte_force find_rundefsvoffset - gv_fetchsv op_refcnt_lock op_refcnt_unlock savesvpv @@ -748,6 +933,9 @@ Perl below which it is unsupported: =item perl 5.7.3 + OP_DESC + OP_NAME + PL_peepp PerlIO_clearerr PerlIO_close PerlIO_eof @@ -911,8 +1099,6 @@ Perl below which it is unsupported: init_i18nl14n is_uni_alnum is_uni_alnum_lc - is_uni_alnumc - is_uni_alnumc_lc is_uni_alpha is_uni_alpha_lc is_uni_ascii @@ -938,7 +1124,6 @@ Perl below which it is unsupported: is_uni_xdigit is_uni_xdigit_lc is_utf8_alnum - is_utf8_alnumc is_utf8_alpha is_utf8_ascii is_utf8_char @@ -1043,6 +1228,7 @@ Perl below which it is unsupported: runops_debug runops_standard save_iv + save_op screaminstr sv_iv sv_nv @@ -1155,7 +1341,7 @@ Version 3.x was ported back to CPAN by Marcus Holland-Moritz. =head1 COPYRIGHT -Version 3.x, Copyright (C) 2004-2009, Marcus Holland-Moritz. +Version 3.x, Copyright (C) 2004-2010, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. @@ -1175,7 +1361,7 @@ package Devel::PPPort; use strict; use vars qw($VERSION $data); -$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.19 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; +$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.20 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; sub _init_data { @@ -1262,7 +1448,7 @@ SKIP |>=head1 COMPATIBILITY |> |>This version of F is designed to support operation with Perl -|>installations back to 5.003, and has been tested up to 5.10.0. +|>installations back to 5.003, and has been tested up to 5.11.5. |> |>=head1 OPTIONS |> @@ -1564,7 +1750,7 @@ SKIP |> |>=head1 COPYRIGHT |> -|>Version 3.x, Copyright (c) 2004-2009, Marcus Holland-Moritz. +|>Version 3.x, Copyright (c) 2004-2010, Marcus Holland-Moritz. |> |>Version 2.x, Copyright (C) 2001, Paul Marquess. |> @@ -1653,6 +1839,12 @@ my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ : die "invalid spec: $_" } qw( AvFILLp|5.004050||p AvFILL||| +BhkDISABLE||5.014000| +BhkENABLE||5.014000| +BhkENTRY_set||5.014000| +BhkENTRY||| +BhkFLAGS||| +CALL_BLOCK_HOOKS||| CLASS|||n CPERLscope|5.005000||p CX_CURPAD_SAVE||| @@ -1673,7 +1865,7 @@ Copy||| CvPADLIST||| CvSTASH||| CvWEAKOUTSIDE||| -DEFSV_set|5.011000||p +DEFSV_set|5.010001||p DEFSV|5.004050||p END_EXTERN_C|5.005000||p ENTER||| @@ -1695,7 +1887,7 @@ G_VOID||5.004000| GetVars||| GvSVn|5.009003||p GvSV||| -Gv_AMupdate||| +Gv_AMupdate||5.011000| HEf_SVKEY||5.004000| HeHASH||5.004000| HeKEY||5.004000| @@ -1704,8 +1896,9 @@ HePV||5.004000| HeSVKEY_force||5.004000| HeSVKEY_set||5.004000| HeSVKEY||5.004000| -HeUTF8||5.011000| +HeUTF8||5.010001| HeVAL||5.004000| +HvENAME||5.013007| HvNAMELEN_get|5.009003||p HvNAME_get|5.009003||p HvNAME||| @@ -1724,9 +1917,10 @@ IVSIZE|5.006000||p IVTYPE|5.006000||p IVdf|5.006000||p LEAVE||| +LINKLIST||5.013006| LVRET||| MARK||| -MULTICALL||5.011000| +MULTICALL||5.014000| MY_CXT_CLONE|5.009002||p MY_CXT_INIT|5.007003||p MY_CXT|5.007003||p @@ -1746,6 +1940,9 @@ Nullch||| Nullcv||| Nullhv||| Nullsv||| +OP_CLASS||5.013007| +OP_DESC||5.007003| +OP_NAME||5.007003| ORIGMARK||| PAD_BASE_SV||| PAD_CLONE_VARS||| @@ -1767,7 +1964,7 @@ PAD_SV||| PERLIO_FUNCS_CAST|5.009003||p PERLIO_FUNCS_DECL|5.009003||p PERL_ABS|5.008001||p -PERL_BCDVERSION|5.011000||p +PERL_BCDVERSION|5.014000||p PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p PERL_HASH|5.004000||p PERL_INT_MAX|5.004000||p @@ -1785,10 +1982,10 @@ PERL_MAGIC_envelem|5.007002||p PERL_MAGIC_env|5.007002||p PERL_MAGIC_ext|5.007002||p PERL_MAGIC_fm|5.007002||p -PERL_MAGIC_glob|5.011000||p +PERL_MAGIC_glob|5.014000||p PERL_MAGIC_isaelem|5.007002||p PERL_MAGIC_isa|5.007002||p -PERL_MAGIC_mutex|5.011000||p +PERL_MAGIC_mutex|5.014000||p PERL_MAGIC_nkeys|5.007002||p PERL_MAGIC_overload_elem|5.007002||p PERL_MAGIC_overload_table|5.007002||p @@ -1840,7 +2037,7 @@ PERL_SIGNALS_UNSAFE_FLAG|5.008001||p PERL_SUBVERSION|5.006000||p PERL_SYS_INIT3||5.006000| PERL_SYS_INIT||| -PERL_SYS_TERM||5.011000| +PERL_SYS_TERM||5.014000| PERL_UCHAR_MAX|5.004000||p PERL_UCHAR_MIN|5.004000||p PERL_UINT_MAX|5.004000||p @@ -1862,10 +2059,10 @@ PL_DBsingle|||pn PL_DBsub|||pn PL_DBtrace|||pn PL_Sv|5.005000||p -PL_bufend|5.011000||p -PL_bufptr|5.011000||p +PL_bufend|5.014000||p +PL_bufptr|5.014000||p PL_compiling|5.004050||p -PL_copline|5.011000||p +PL_copline|5.014000||p PL_curcop|5.004050||p PL_curstash|5.004050||p PL_debstash|5.004050||p @@ -1874,27 +2071,31 @@ PL_diehook|5.004050||p PL_dirty|5.004050||p PL_dowarn|||pn PL_errgv|5.004050||p -PL_error_count|5.011000||p -PL_expect|5.011000||p +PL_error_count|5.014000||p +PL_expect|5.014000||p PL_hexdigit|5.005000||p PL_hints|5.005000||p -PL_in_my_stash|5.011000||p -PL_in_my|5.011000||p +PL_in_my_stash|5.014000||p +PL_in_my|5.014000||p +PL_keyword_plugin||5.011002| PL_last_in_gv|||n PL_laststatval|5.005000||p -PL_lex_state|5.011000||p -PL_lex_stuff|5.011000||p -PL_linestr|5.011000||p +PL_lex_state|5.014000||p +PL_lex_stuff|5.014000||p +PL_linestr|5.014000||p PL_modglobal||5.005000|n PL_na|5.004050||pn PL_no_modify|5.006000||p PL_ofsgv|||n -PL_parser|5.009005||p +PL_opfreehook||5.011000|n +PL_parser|5.009005|5.009005|p +PL_peepp||5.007003|n PL_perl_destruct_level|5.004050||p PL_perldb|5.004050||p PL_ppaddr|5.006000||p -PL_rsfp_filters|5.004050||p -PL_rsfp|5.004050||p +PL_rpeepp||5.013005|n +PL_rsfp_filters|5.014000||p +PL_rsfp|5.014000||p PL_rs|||n PL_signals|5.008001||p PL_stack_base|5.004050||p @@ -1907,8 +2108,8 @@ PL_sv_undef|5.004050||pn PL_sv_yes|5.004050||pn PL_tainted|5.004050||p PL_tainting|5.004050||p -PL_tokenbuf|5.011000||p -POP_MULTICALL||5.011000| +PL_tokenbuf|5.014000||p +POP_MULTICALL||5.014000| POPi|||n POPl|||n POPn|||n @@ -1923,7 +2124,7 @@ PTR2nat|5.009003||p PTR2ul|5.007001||p PTRV|5.006000||p PUSHMARK||| -PUSH_MULTICALL||5.011000| +PUSH_MULTICALL||5.014000| PUSHi||| PUSHmortal|5.009002||p PUSHn||| @@ -2034,6 +2235,7 @@ SvNOK_on||| SvNOKp||| SvNOK||| SvNVX||| +SvNV_nomg||5.013002| SvNV_set||| SvNVx||| SvNV||| @@ -2067,6 +2269,7 @@ SvPV_nolen_const|5.009003||p SvPV_nolen|5.006000||p SvPV_nomg_const_nolen|5.009003||p SvPV_nomg_const|5.009003||p +SvPV_nomg_nolen||5.013007| SvPV_nomg|5.007002||p SvPV_renew|5.009003||p SvPV_set||| @@ -2112,6 +2315,7 @@ SvTAINTED_off||5.004000| SvTAINTED_on||5.004000| SvTAINTED||5.004000| SvTAINT||| +SvTRUE_nomg||5.013006| SvTRUE||| SvTYPE||| SvUNLOCK||5.007003| @@ -2139,7 +2343,7 @@ UVuf|5.006000||p UVxf|5.006000||p WARN_ALL|5.006000||p WARN_AMBIGUOUS|5.006000||p -WARN_ASSERTIONS|5.011000||p +WARN_ASSERTIONS|5.014000||p WARN_BAREWORD|5.006000||p WARN_CLOSED|5.006000||p WARN_CLOSURE|5.006000||p @@ -2211,37 +2415,52 @@ XST_mPV||| XST_mUNDEF||| XST_mUV|5.008001||p XST_mYES||| +XS_APIVERSION_BOOTCHECK||5.013004| XS_VERSION_BOOTCHECK||| XS_VERSION||| XSprePUSH|5.006000||p XS||| +XopDISABLE||5.014000| +XopENABLE||5.014000| +XopENTRY_set||5.014000| +XopENTRY||5.014000| +XopFLAGS||5.013007| ZeroD|5.009002||p Zero||| _aMY_CXT|5.007003||p +_append_range_to_invlist||| +_new_invlist||| _pMY_CXT|5.007003||p +_swash_inversion_hash||| +_swash_to_invlist||| aMY_CXT_|5.007003||p aMY_CXT|5.007003||p -aTHXR_|5.011000||p -aTHXR|5.011000||p +aTHXR_|5.014000||p +aTHXR|5.014000||p aTHX_|5.006000||p aTHX|5.006000||p +add_alternate||| +add_cp_to_invlist||| add_data|||n +add_range_to_invlist||| +add_utf16_textfilter||| addmad||| allocmy||| amagic_call||| amagic_cmp_locale||| amagic_cmp||| +amagic_deref_call||5.013007| amagic_i_ncmp||| amagic_ncmp||| +anonymise_cv_maybe||| any_dup||| ao||| -append_elem||| -append_list||| append_madprops||| apply_attrs_my||| apply_attrs_string||5.006001| apply_attrs||| apply||| +assert_uft8_cache_coherent||| atfork_lock||5.007003|n atfork_unlock||5.007003|n av_arylen_p||5.009003| @@ -2269,10 +2488,12 @@ bind_match||| block_end||| block_gimme||5.004000| block_start||| +blockhook_register||5.013003| boolSV|5.004000||p boot_core_PerlIO||| boot_core_UNIVERSAL||| boot_core_mro||| +bytes_cmp_utf8||5.013007| bytes_from_utf8||5.007001| bytes_to_uni|||n bytes_to_utf8||5.006001| @@ -2282,6 +2503,7 @@ call_list||5.004000| call_method|5.006000||p call_pv|5.006000||p call_sv|5.006000||p +caller_cx||5.013005| calloc||5.007002|n cando||| cast_i32||5.006000| @@ -2290,76 +2512,73 @@ cast_ulong||5.006000| cast_uv||5.006000| check_type_and_open||| check_uni||| +check_utf8_print||| checkcomma||| checkposixcc||| ckWARN|5.006000||p -ck_anoncode||| -ck_bitop||| -ck_concat||| -ck_defined||| -ck_delete||| -ck_die||| -ck_each||| -ck_eof||| -ck_eval||| -ck_exec||| -ck_exists||| -ck_exit||| -ck_ftst||| -ck_fun||| -ck_glob||| -ck_grep||| -ck_index||| -ck_join||| -ck_lfun||| -ck_listiob||| -ck_match||| -ck_method||| -ck_null||| -ck_open||| -ck_readline||| -ck_repeat||| -ck_require||| -ck_return||| -ck_rfun||| -ck_rvconst||| -ck_sassign||| -ck_select||| -ck_shift||| -ck_sort||| -ck_spair||| -ck_split||| -ck_subr||| -ck_substr||| -ck_svconst||| -ck_trunc||| -ck_unpack||| +ck_entersub_args_list||5.013006| +ck_entersub_args_proto_or_list||5.013006| +ck_entersub_args_proto||5.013006| +ck_warner_d||5.011001|v +ck_warner||5.011001|v +ckwarn_common||| ckwarn_d||5.009003| ckwarn||5.009003| cl_and|||n cl_anything|||n -cl_init_zero|||n cl_init|||n cl_is_anything|||n cl_or|||n clear_placeholders||| +clone_params_del|||n +clone_params_new|||n closest_cop||| convert||| cop_free||| +cop_hints_2hv||5.013007| +cop_hints_fetch_pvn||5.013007| +cop_hints_fetch_pvs||5.013007| +cop_hints_fetch_pv||5.013007| +cop_hints_fetch_sv||5.013007| +cophh_2hv||5.013007| +cophh_copy||5.013007| +cophh_delete_pvn||5.013007| +cophh_delete_pvs||5.013007| +cophh_delete_pv||5.013007| +cophh_delete_sv||5.013007| +cophh_fetch_pvn||5.013007| +cophh_fetch_pvs||5.013007| +cophh_fetch_pv||5.013007| +cophh_fetch_sv||5.013007| +cophh_free||5.013007| +cophh_new_empty||5.014000| +cophh_store_pvn||5.013007| +cophh_store_pvs||5.013007| +cophh_store_pv||5.013007| +cophh_store_sv||5.013007| cr_textfilter||| create_eval_scope||| +croak_no_modify||5.013003| croak_nocontext|||vn -croak_xs_usage||5.011000| +croak_sv||5.013001| +croak_xs_usage||5.010001| croak|||v csighandler||5.009003|n curmad||| +curse||| custom_op_desc||5.007003| custom_op_name||5.007003| +custom_op_register||5.013007| +custom_op_xop||5.013007| cv_ckproto_len||| cv_clone||| cv_const_sv||5.004000| cv_dump||| +cv_get_call_checker||5.013006| +cv_set_call_checker||5.013006| cv_undef||| +cvgv_set||| +cvstash_set||| cx_dump||5.005000| cx_dup||| cxinc||| @@ -2374,7 +2593,7 @@ dNOOP|5.006000||p dORIGMARK||| dSP||| dTHR|5.004050||p -dTHXR|5.011000||p +dTHXR|5.014000||p dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p @@ -2397,13 +2616,13 @@ debug_start_match||| deb||5.007003|v del_sv||| delete_eval_scope||| -delimcpy||5.004000| -deprecate_old||| -deprecate||| +delimcpy||5.004000|n +deprecate_commaless_var_list||| despatch_signals||5.007001| destroy_matcher||| die_nocontext|||vn -die_where||| +die_sv||5.013001| +die_unwind||| die|||v dirp_dup||| div128||| @@ -2413,8 +2632,8 @@ do_aexec||| do_aspawn||| do_binmode||5.004050| do_chomp||| -do_chop||| do_close||| +do_delete_local||| do_dump_pad||| do_eof||| do_exec3||| @@ -2426,7 +2645,6 @@ do_hv_dump||5.006000| do_ipcctl||| do_ipcget||| do_join||| -do_kv||| do_magic_dump||5.006000| do_msgrcv||| do_msgsnd||| @@ -2478,6 +2696,7 @@ dopoptowhen||| doref||5.009003| dounwind||| dowantarray||| +dump_all_perl||| dump_all||5.006000| dump_eval||5.006000| dump_exec_pos||| @@ -2485,7 +2704,9 @@ dump_fds||| dump_form||5.006000| dump_indent||5.006000|v dump_mstats||| +dump_packsubs_perl||| dump_packsubs||5.006000| +dump_sub_perl||| dump_sub||5.006000| dump_sv_child||| dump_trie_interim_list||| @@ -2515,14 +2736,21 @@ find_hash_subscript||| find_in_my_stash||| find_runcv||5.008001| find_rundefsvoffset||5.009002| +find_rundefsv||5.013002| find_script||| find_uninit_var||| first_symbol|||n +foldEQ_latin1||5.013008|n +foldEQ_locale||5.013002|n +foldEQ_utf8_flags||5.013010| +foldEQ_utf8||5.013002| +foldEQ||5.013002|n fold_constants||| forbid_setid||| force_ident||| force_list||| force_next||| +force_strict_version||| force_version||| force_word||| forget_pmop||| @@ -2534,17 +2762,16 @@ free_global_struct||| free_tied_hv_pool||| free_tmps||| gen_constant_list||| -get_arena||| get_aux_mg||| get_av|5.006000||p get_context||5.006000|n -get_cvn_flags||5.009005| +get_cvn_flags|5.009005||p +get_cvs|5.011000||p get_cv|5.006000||p get_db_sub||| get_debug_opts||| get_hash_seed||| get_hv|5.006000||p -get_isa_hash||| get_mstats||| get_no_modify||| get_num||| @@ -2564,6 +2791,8 @@ gp_dup||| gp_free||| gp_ref||| grok_bin|5.007003||p +grok_bslash_c||| +grok_bslash_o||| grok_hex|5.007003||p grok_number|5.007002||p grok_numeric_radix|5.007002||p @@ -2573,6 +2802,7 @@ gv_AVadd||| gv_HVadd||| gv_IOadd||| gv_SVadd||| +gv_add_by_type||5.011000| gv_autoload4||5.004000| gv_check||| gv_const_sv||5.009003| @@ -2591,7 +2821,7 @@ gv_fetchmeth||| gv_fetchpvn_flags|5.009002||p gv_fetchpvs|5.009004||p gv_fetchpv||| -gv_fetchsv||5.009002| +gv_fetchsv|5.009002||p gv_fullname3||5.004000| gv_fullname4||5.006001| gv_fullname||| @@ -2599,34 +2829,40 @@ gv_get_super_pkg||| gv_handler||5.007001| gv_init_sv||| gv_init||| +gv_magicalize_isa||| +gv_magicalize_overload||| gv_name_set||5.009004| gv_stashpvn|5.004000||p gv_stashpvs|5.009003||p gv_stashpv||| gv_stashsv||| +gv_try_downgrade||| he_dup||| hek_dup||| hfreeentries||| hsplit||| -hv_assert||5.011000| +hv_assert||| hv_auxinit|||n hv_backreferences_p||| hv_clear_placeholders||5.009001| hv_clear||| hv_common_key_len||5.010000| hv_common||5.010000| -hv_copy_hints_hv||| +hv_copy_hints_hv||5.009004| hv_delayfree_ent||5.004000| hv_delete_common||| hv_delete_ent||5.004000| hv_delete||| hv_eiter_p||5.009003| hv_eiter_set||5.009003| +hv_ename_add||| +hv_ename_delete||| hv_exists_ent||5.004000| hv_exists||| hv_fetch_ent||5.004000| hv_fetchs|5.009003||p hv_fetch||| +hv_fill||5.013002| hv_free_ent||5.004000| hv_iterinit||| hv_iterkeysv||5.004000| @@ -2651,6 +2887,7 @@ hv_store_ent||5.004000| hv_store_flags||5.008000| hv_stores|5.009004||p hv_store||| +hv_undef_flags||| hv_undef||| ibcmp_locale||5.004000| ibcmp_utf8||5.007003| @@ -2661,6 +2898,7 @@ incpush_use_sep||| incpush||| ingroup||| init_argv_symbols||| +init_dbargs||| init_debugger||| init_global_struct||| init_i18nl10n||5.006000| @@ -2673,14 +2911,25 @@ init_postdump_symbols||| init_predump_symbols||| init_stacks||5.005000| init_tm||5.007002| -instr||| +instr|||n intro_my||| intuit_method||| intuit_more||| invert||| +invlist_array||| +invlist_destroy||| +invlist_extend||| +invlist_intersection||| +invlist_len||| +invlist_max||| +invlist_set_array||| +invlist_set_len||| +invlist_set_max||| +invlist_trim||| +invlist_union||| +invoke_exception_hook||| io_close||| isALNUMC|5.006000||p -isALNUM||| isALPHA||| isASCII|5.006000||p isBLANK|5.006001||p @@ -2689,20 +2938,22 @@ isDIGIT||| isGRAPH|5.006000||p isGV_with_GP|5.009004||p isLOWER||| +isOCTAL||5.013005| isPRINT|5.004000||p isPSXSPC|5.006001||p isPUNCT|5.006000||p isSPACE||| isUPPER||| +isWORDCHAR||5.013006| isXDIGIT|5.006000||p is_an_int||| +is_ascii_string||5.011000|n is_gv_magical_sv||| is_handle_constructor|||n +is_inplace_av||| is_list_assignment||| is_lvalue_sub||5.007001| is_uni_alnum_lc||5.006000| -is_uni_alnumc_lc||5.006000| -is_uni_alnumc||5.006000| is_uni_alnum||5.006000| is_uni_alpha_lc||5.006000| is_uni_alpha||5.006000| @@ -2728,12 +2979,21 @@ is_uni_upper_lc||5.006000| is_uni_upper||5.006000| is_uni_xdigit_lc||5.006000| is_uni_xdigit||5.006000| -is_utf8_alnumc||5.006000| +is_utf8_X_LVT||| +is_utf8_X_LV_LVT_V||| +is_utf8_X_LV||| +is_utf8_X_L||| +is_utf8_X_T||| +is_utf8_X_V||| +is_utf8_X_begin||| +is_utf8_X_extend||| +is_utf8_X_non_hangul||| +is_utf8_X_prepend||| is_utf8_alnum||5.006000| is_utf8_alpha||5.006000| is_utf8_ascii||5.006000| is_utf8_char_slow|||n -is_utf8_char||5.006000| +is_utf8_char||5.006000|n is_utf8_cntrl||5.006000| is_utf8_common||| is_utf8_digit||5.006000| @@ -2742,24 +3002,41 @@ is_utf8_idcont||5.008000| is_utf8_idfirst||5.006000| is_utf8_lower||5.006000| is_utf8_mark||5.006000| +is_utf8_perl_space||5.011001| +is_utf8_perl_word||5.011001| +is_utf8_posix_digit||5.011001| is_utf8_print||5.006000| is_utf8_punct||5.006000| is_utf8_space||5.006000| -is_utf8_string_loclen||5.009003| -is_utf8_string_loc||5.008001| -is_utf8_string||5.006001| +is_utf8_string_loclen||5.009003|n +is_utf8_string_loc||5.008001|n +is_utf8_string||5.006001|n is_utf8_upper||5.006000| is_utf8_xdigit||5.006000| +is_utf8_xidcont||5.013010| +is_utf8_xidfirst||5.013010| isa_lookup||| items|||n ix|||n jmaybe||| join_exact||| +keyword_plugin_standard||| keyword||| leave_scope||| -lex_end||| -lex_start||| -linklist||| +lex_bufutf8||5.011002| +lex_discard_to||5.011002| +lex_grow_linestr||5.011002| +lex_next_chunk||5.011002| +lex_peek_unichar||5.011002| +lex_read_space||5.011002| +lex_read_to||5.011002| +lex_read_unichar||5.011002| +lex_start||5.009005| +lex_stuff_pvn||5.011002| +lex_stuff_pvs||5.013005| +lex_stuff_pv||5.013006| +lex_stuff_sv||5.011002| +lex_unstuff||5.011002| listkids||| list||| load_module_nocontext|||vn @@ -2771,18 +3048,19 @@ lop||| mPUSHi|5.009002||p mPUSHn|5.009002||p mPUSHp|5.009002||p -mPUSHs|5.011000||p +mPUSHs|5.010001||p mPUSHu|5.009002||p mXPUSHi|5.009002||p mXPUSHn|5.009002||p mXPUSHp|5.009002||p -mXPUSHs|5.011000||p +mXPUSHs|5.010001||p mXPUSHu|5.009002||p mad_free||| madlex||| madparse||| magic_clear_all_env||| magic_clearenv||| +magic_clearhints||| magic_clearhint||| magic_clearisa||| magic_clearpack||| @@ -2804,7 +3082,8 @@ magic_getvec||| magic_get||| magic_killbackrefs||| magic_len||| -magic_methcall||| +magic_methcall1||| +magic_methcall|||v magic_methpack||| magic_nextpack||| magic_regdata_cnt||| @@ -2843,19 +3122,24 @@ malloc||5.007002|n markstack_grow||| matcher_matches_sv||| measure_struct||| +memEQs|5.009005||p memEQ|5.004000||p +memNEs|5.009005||p memNE|5.004000||p mem_collxfrm||| mem_log_common|||n mess_alloc||| mess_nocontext|||vn +mess_sv||5.013001| mess||5.006000|v method_common||| mfree||5.007002|n mg_clear||| mg_copy||| mg_dup||| +mg_findext||5.013008| mg_find||| +mg_free_type||5.013006| mg_free||| mg_get||| mg_length||5.005000| @@ -2871,19 +3155,23 @@ mod||| more_bodies||| more_sv||| moreswitches||| -mro_get_from_name||5.011000| +mro_clean_isarev||| +mro_gather_and_rename||| +mro_get_from_name||5.010001| mro_get_linear_isa_dfs||| mro_get_linear_isa||5.009005| -mro_get_private_data||5.011000| +mro_get_private_data||5.010001| mro_isa_changed_in||| mro_meta_dup||| mro_meta_init||| mro_method_changed_in||5.009005| -mro_register||5.011000| -mro_set_mro||5.011000| -mro_set_private_data||5.011000| +mro_package_moved||| +mro_register||5.010001| +mro_set_mro||5.010001| +mro_set_private_data||5.010001| mul128||| mulexp10|||n +munge_qwlist_to_paren_list||| my_atof2||5.007002| my_atof||5.006000| my_attrs||| @@ -2925,7 +3213,8 @@ my_letoh64|||n my_letohi|||n my_letohl|||n my_letohs|||n -my_lstat||| +my_lstat_flags||| +my_lstat||5.014000| my_memcmp||5.004000|n my_memset|||n my_ntohl||| @@ -2936,7 +3225,8 @@ my_setenv||| my_snprintf|5.009004||pvn my_socketpair||5.007003|n my_sprintf|5.009003||pvn -my_stat||| +my_stat_flags||| +my_stat||5.014000| my_strftime||5.007002| my_strlcat|5.009004||pn my_strlcpy|5.009004||pn @@ -2959,7 +3249,7 @@ newCONSTSUB|5.004050||p newCVREF||| newDEFSVOP||| newFORM||| -newFOROP||| +newFOROP||5.013007| newGIVENOP||5.009003| newGIVWHENOP||| newGP||| @@ -2996,14 +3286,15 @@ newSV_type|5.009005||p newSVhek||5.009003| newSViv||| newSVnv||| +newSVpv_share||5.013006| newSVpvf_nocontext|||vn newSVpvf||5.004000|v -newSVpvn_flags|5.011000||p +newSVpvn_flags|5.010001||p newSVpvn_share|5.007001||p -newSVpvn_utf8|5.011000||p +newSVpvn_utf8|5.010001||p newSVpvn|5.004050||p -newSVpvs_flags|5.011000||p -newSVpvs_share||5.009003| +newSVpvs_flags|5.010001||p +newSVpvs_share|5.009003||p newSVpvs|5.009003||p newSVpv||| newSVrv||| @@ -3013,7 +3304,7 @@ newSV||| newTOKEN||| newUNOP||| newWHENOP||5.009003| -newWHILEOP||5.009003| +newWHILEOP||5.013007| newXS_flags||5.009004| newXSproto||5.006000| newXS||5.006000| @@ -3029,7 +3320,7 @@ new_warnings_bitfield||| next_symbol||| nextargv||| nextchar||| -ninstr||| +ninstr|||n no_bareword_allowed||| no_fh_allowed||| no_op||| @@ -3037,22 +3328,29 @@ not_a_number||| nothreadhook||5.008000| nuke_stacks||| num_overflow|||n -offer_nice_chunk||| oopsAV||| oopsHV||| +op_append_elem||5.013006| +op_append_list||5.013006| op_clear||| op_const_sv||| +op_contextualize||5.013006| op_dump||5.006000| op_free||| op_getmad_weak||| op_getmad||| +op_linklist||5.013006| +op_lvalue||5.013007| op_null||5.007002| +op_prepend_elem||5.013006| op_refcnt_dec||| op_refcnt_inc||| op_refcnt_lock||5.009002| op_refcnt_unlock||5.009002| +op_scope||5.013007| op_xmldump||| open_script||| +opt_scalarhv||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p pTHX_|5.006000||p @@ -3060,16 +3358,18 @@ pTHX|5.006000||p packWARN|5.007003||p pack_cat||5.007003| pack_rec||| +package_version||| package||| packlist||5.008001| pad_add_anon||| +pad_add_name_sv||| pad_add_name||| pad_alloc||| pad_block_start||| pad_check_dup||| pad_compname_type||| pad_findlex||| -pad_findmy||| +pad_findmy||5.011002| pad_fixup_inner_anons||| pad_free||| pad_leavemy||| @@ -3078,11 +3378,20 @@ pad_peg|||n pad_push||| pad_reset||| pad_setsv||| -pad_sv||5.011000| +pad_sv||| pad_swipe||| pad_tidy||| -pad_undef||| +padlist_dup||| +parse_arithexpr||5.013008| +parse_barestmt||5.013007| +parse_block||5.013007| parse_body||| +parse_fullexpr||5.013008| +parse_fullstmt||5.013005| +parse_label||5.013007| +parse_listexpr||5.013008| +parse_stmtseq||5.013006| +parse_termexpr||5.013008| parse_unicode_opts||| parser_dup||| parser_free||| @@ -3100,18 +3409,18 @@ perl_parse||5.006000|n perl_run|||n pidgone||| pm_description||| -pmflag||| pmop_dump||5.006000| pmop_xmldump||| pmruntime||| pmtrans||| pop_scope||| +populate_isa|||v pregcomp||5.009005| pregexec||| pregfree2||5.011000| pregfree||| -prepend_elem||| prepend_madprops||| +prescan_version||5.011004| printbuf||| printf_nocontext|||vn process_special_blocks||| @@ -3143,14 +3452,20 @@ reentrant_retry|||vn reentrant_size||| ref_array_or_hash||| refcounted_he_chain_2hv||| -refcounted_he_fetch||| +refcounted_he_fetch_pvn||| +refcounted_he_fetch_pvs||| +refcounted_he_fetch_pv||| +refcounted_he_fetch_sv||| refcounted_he_free||| -refcounted_he_new_common||| -refcounted_he_new||| +refcounted_he_inc||| +refcounted_he_new_pvn||| +refcounted_he_new_pvs||| +refcounted_he_new_pv||| +refcounted_he_new_sv||| refcounted_he_value||| refkids||| refto||| -ref||5.011000| +ref||5.014000| reg_check_named_buff_matched||| reg_named_buff_all||5.009005| reg_named_buff_exists||5.009005| @@ -3177,7 +3492,7 @@ regclass_swash||5.009004| regclass||| regcppop||| regcppush||| -regcurly|||n +regcurly||| regdump_extflags||| regdump||5.005000| regdupe_internal||| @@ -3201,13 +3516,15 @@ regtry||| reguni||| regwhite|||n reg||| -repeatcpy||| +repeatcpy|||n report_evil_fh||| report_uninit||| +report_wrongway_fh||| require_pv||5.006000| require_tie_mod||| restore_magic||| -rninstr||| +rninstr|||n +rpeep||| rsignal_restore||| rsignal_save||| rsignal_state||5.004000| @@ -3216,6 +3533,7 @@ run_body||| run_user_filter||| runops_debug||5.005000| runops_standard||5.005000| +rv2cv_op_cv||5.013006| rvpv_dup||| rxres_free||| rxres_restore||| @@ -3229,6 +3547,7 @@ save_I16||5.004000| save_I32||| save_I8||5.006000| save_adelete||5.011000| +save_aelem_flags||5.011000| save_aelem||5.004050| save_alloc||5.006000| save_aptr||| @@ -3245,10 +3564,11 @@ save_generic_pvref||5.006001| save_generic_svref||5.005030| save_gp||5.004000| save_hash||| +save_hdelete||5.011000| save_hek_flags|||n save_helem_flags||5.011000| save_helem||5.004050| -save_hints||| +save_hints||5.010001| save_hptr||| save_int||| save_item||| @@ -3259,13 +3579,13 @@ save_long||| save_magic||| save_mortalizesv||5.007001| save_nogv||| -save_op||| -save_padsv_and_mortalize||5.011000| +save_op||5.005000| +save_padsv_and_mortalize||5.010001| save_pptr||| -save_pushi32ptr||| +save_pushi32ptr||5.010001| save_pushptri32ptr||| -save_pushptrptr||| -save_pushptr||5.011000| +save_pushptrptr||5.010001| +save_pushptr||5.010001| save_re_context||5.006000| save_scalar_at||| save_scalar||| @@ -3278,7 +3598,9 @@ savepvn||| savepvs||5.009003| savepv||| savesharedpvn||5.009005| +savesharedpvs||5.013006| savesharedpv||5.007003| +savesharedsvpv||5.013006| savestack_grow_cnt||5.008001| savestack_grow||| savesvpv||5.009002| @@ -3306,7 +3628,6 @@ scan_trans||| scan_version||5.009001| scan_vstring||5.009005| scan_word||| -scope||| screaminstr||5.005000| search_const||| seed||5.008001| @@ -3317,6 +3638,8 @@ set_context||5.006000|n set_numeric_local||5.006000| set_numeric_radix||5.006000| set_numeric_standard||5.006000| +set_regclass_bit_fold||| +set_regclass_bit||| setdefout||| share_hek_flags||| share_hek||5.004000| @@ -3339,7 +3662,7 @@ stack_grow||| start_force||| start_glob||| start_subparse||5.004000| -stashpv_hvname_match||5.011000| +stashpv_hvname_match||5.014000| stdize_locale||| store_cop_label||| strEQ||| @@ -3357,6 +3680,7 @@ sub_crush_depth||| sublex_done||| sublex_push||| sublex_start||| +sv_2bool_flags||5.013006| sv_2bool||| sv_2cv||| sv_2io||| @@ -3366,7 +3690,7 @@ sv_2iv_flags||5.009001| sv_2iv||| sv_2mortal||| sv_2num||| -sv_2nv||| +sv_2nv_flags||5.013001| sv_2pv_flags|5.007002||p sv_2pv_nolen|5.006000||p sv_2pvbyte_nolen|5.006000||p @@ -3381,7 +3705,9 @@ sv_add_backref||| sv_backoff||| sv_bless||| sv_cat_decode||5.008001| +sv_catpv_flags||5.013006| sv_catpv_mg|5.004050||p +sv_catpv_nomg||5.013006| sv_catpvf_mg_nocontext|||pvn sv_catpvf_mg|5.006000|5.004000|pv sv_catpvf_nocontext|||vn @@ -3390,6 +3716,9 @@ sv_catpvn_flags||5.007002| sv_catpvn_mg|5.004050||p sv_catpvn_nomg|5.007002||p sv_catpvn||| +sv_catpvs_flags||5.013006| +sv_catpvs_mg||5.013006| +sv_catpvs_nomg||5.013006| sv_catpvs|5.009003||p sv_catpv||| sv_catsv_flags||5.007002| @@ -3397,24 +3726,33 @@ sv_catsv_mg|5.004050||p sv_catsv_nomg|5.007002||p sv_catsv||| sv_catxmlpvn||| +sv_catxmlpv||| sv_catxmlsv||| sv_chop||| sv_clean_all||| sv_clean_objs||| sv_clear||| +sv_cmp_flags||5.013006| +sv_cmp_locale_flags||5.013006| sv_cmp_locale||5.004000| sv_cmp||| +sv_collxfrm_flags||5.013006| sv_collxfrm||| +sv_compile_2op_is_broken||| sv_compile_2op||5.008001| sv_copypv||5.007003| +sv_dec_nomg||5.013002| sv_dec||| sv_del_backref||| sv_derived_from||5.004000| sv_destroyable||5.010000| sv_does||5.009004| sv_dump||| +sv_dup_common||| sv_dup_inc_multiple||| +sv_dup_inc||| sv_dup||| +sv_eq_flags||5.013006| sv_eq||| sv_exp_grow||| sv_force_normal_flags||5.007001| @@ -3425,8 +3763,9 @@ sv_free||| sv_gets||5.004000| sv_grow||| sv_i_ncmp||| +sv_inc_nomg||5.013002| sv_inc||| -sv_insert_flags||5.011000| +sv_insert_flags||5.010001| sv_insert||| sv_isa||| sv_isobject||| @@ -3434,7 +3773,7 @@ sv_iv||5.005000| sv_kill_backrefs||| sv_len_utf8||5.006000| sv_len||| -sv_magic_portable|5.011000|5.004000|p +sv_magic_portable|5.014000|5.004000|p sv_magicext||5.007003| sv_magic||| sv_mortalcopy||| @@ -3449,6 +3788,7 @@ sv_peek||5.005000| sv_pos_b2u_midway||| sv_pos_b2u||5.006000| sv_pos_u2b_cached||| +sv_pos_u2b_flags||5.011005| sv_pos_u2b_forwards|||n sv_pos_u2b_midway|||n sv_pos_u2b||5.006000| @@ -3483,11 +3823,13 @@ sv_setpviv_mg||5.008001| sv_setpviv||5.008001| sv_setpvn_mg|5.004050||p sv_setpvn||| +sv_setpvs_mg||5.013006| sv_setpvs|5.009004||p sv_setpv||| sv_setref_iv||| sv_setref_nv||| sv_setref_pvn||| +sv_setref_pvs||5.013006| sv_setref_pv||| sv_setref_uv||5.007001| sv_setsv_cow||| @@ -3502,6 +3844,7 @@ sv_taint||5.004000| sv_true||5.005000| sv_unglob||| sv_uni_display||5.007003| +sv_unmagicext||5.013008| sv_unmagic||| sv_unref_flags||5.007001| sv_unref||| @@ -3527,7 +3870,6 @@ sv_vsetpvf|5.006000|5.004000|p sv_xmlpeek||| svtype||| swallow_bom||| -swap_match_buff||| swash_fetch||5.007002| swash_get||| swash_init||5.006000| @@ -3539,6 +3881,7 @@ sys_intern_init||| sys_term||5.010000|n taint_env||| taint_proper||| +tied_method|||v tmps_grow||5.006000| toLOWER||| toUPPER||| @@ -3563,11 +3906,14 @@ tokeq||| tokereport||| too_few_arguments||| too_many_arguments||| +try_amagic_bin||| +try_amagic_un||| uiv_2buf|||n unlnk||| unpack_rec||| unpack_str||5.007003| unpackstring||5.008001| +unreferenced_to_tmp_stack||| unshare_hek_or_pvn||| unshare_hek||| unsharepvn||5.004000| @@ -3575,11 +3921,13 @@ unwind_handler_stack||| update_debugger_info||| upg_version||5.009005| usage||| +utf16_textfilter||| utf16_to_utf8_reversed||5.006001| utf16_to_utf8||5.006001| utf8_distance||5.006000| utf8_hop||5.006000| utf8_length||5.007001| +utf8_mg_len_cache_update||| utf8_mg_pos_cache_update||| utf8_to_bytes||5.006001| utf8_to_uvchr||5.007001| @@ -3596,9 +3944,6 @@ varname||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| -vdie_common||| -vdie_croak_common||| -vdie||| vform||5.006000| visit||| vivify_defelem||| @@ -3614,24 +3959,32 @@ vwarner||5.006000| vwarn||5.006000| wait4pid||| warn_nocontext|||vn +warn_sv||5.013001| warner_nocontext|||vn warner|5.006000|5.004000|pv warn|||v watch||| whichsig||| +with_queued_errors||| write_no_mem||| write_to_stderr||| +xmldump_all_perl||| xmldump_all||| xmldump_attr||| xmldump_eval||| xmldump_form||| xmldump_indent|||v +xmldump_packsubs_perl||| xmldump_packsubs||| +xmldump_sub_perl||| xmldump_sub||| xmldump_vindent||| +xs_apiversion_bootcheck||| +xs_version_bootcheck||| yyerror||| yylex||| yyparse||| +yyunlex||| yywarn||| ); @@ -4864,6 +5217,14 @@ __DATA__ # define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) #endif +#endif +#ifndef memEQs +# define memEQs(s1, l, s2) \ + (sizeof(s2)-1 == l && memEQ(s1, (s2 ""), (sizeof(s2)-1))) +#endif + +#ifndef memNEs +# define memNEs(s1, l, s2) !memEQs(s1, l, s2) #endif #ifndef MoveD # define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) @@ -5233,11 +5594,11 @@ typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); #endif #ifndef isASCII -# define isASCII(c) ((c) <= 127) +# define isASCII(c) ((U8) (c) <= 127) #endif #ifndef isCNTRL -# define isCNTRL(c) ((c) < ' ' || (c) == 127) +# define isCNTRL(c) ((U8) (c) < ' ' || (c) == 127) #endif #ifndef isGRAPH @@ -6520,6 +6881,12 @@ DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) } STMT_END #endif +/* Hint: newSVpvn_share + * The SVs created by this function only mimic the behaviour of + * shared PVs without really being shared. Only use if you know + * what you're doing. + */ + #ifndef newSVpvn_share #if defined(NEED_newSVpvn_share) @@ -6572,6 +6939,17 @@ DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash) #ifndef isGV_with_GP # define isGV_with_GP(gv) isGV(gv) #endif + +#ifndef gv_fetchpvn_flags +# define gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt) +#endif + +#ifndef gv_fetchsv +# define gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt) +#endif +#ifndef get_cvn_flags +# define get_cvn_flags(name, namelen, flags) get_cv(name, flags) +#endif #ifndef WARN_ALL # define WARN_ALL 0 #endif @@ -6820,6 +7198,10 @@ DPPP_(my_warner)(U32 err, const char *pat, ...) # define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags) #endif +#ifndef newSVpvs_share +# define newSVpvs_share(str) newSVpvn_share(str "", sizeof(str) - 1, 0) +#endif + #ifndef sv_catpvs # define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) #endif @@ -6835,10 +7217,6 @@ DPPP_(my_warner)(U32 err, const char *pat, ...) #ifndef hv_stores # define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) #endif -#ifndef gv_fetchpvn_flags -# define gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt) -#endif - #ifndef gv_fetchpvs # define gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt) #endif @@ -6846,6 +7224,9 @@ DPPP_(my_warner)(U32 err, const char *pat, ...) #ifndef gv_stashpvs # define gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags) #endif +#ifndef get_cvs +# define get_cvs(name, flags) get_cvn_flags(name "", sizeof(name)-1, flags) +#endif #ifndef SvGETMAGIC # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END #endif diff --git a/Master/tlpkg/tlperl/lib/Devel/Peek.pm b/Master/tlpkg/tlperl/lib/Devel/Peek.pm index ab0d5eb7608..d066c9d8bc5 100644 --- a/Master/tlpkg/tlperl/lib/Devel/Peek.pm +++ b/Master/tlpkg/tlperl/lib/Devel/Peek.pm @@ -3,7 +3,7 @@ package Devel::Peek; -$VERSION = '1.07'; +$VERSION = '1.08'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @@ -139,7 +139,7 @@ When perl is compiled with support for memory footprint debugging Use mstat() function to emit a memory state statistic to the terminal. For more information on the format of output of mstat() see -L>. +L. Three additional functions allow access to this statistic from Perl. First, use C to get the information contained @@ -152,9 +152,10 @@ Two additional fields C, C contain array references which provide per-bucket count of free and used chunks. Two other fields C, C contain array references which provide the information about the allocated size and usable size of chunks in -each bucket. Again, see L> +each bucket. Again, see L for details. + Keep in mind that only the first several "odd-numbered" buckets are used, so the information on size of the "odd-numbered" buckets which are not used is probably meaningless. @@ -410,7 +411,7 @@ The output: IV = 42 This shows C<$a> is a reference pointing to an SV. That SV is a PVHV, a -hash. Fields RITER and EITER are used by C>. +hash. Fields RITER and EITER are used by C>. The "quality" of a hash is defined as the total number of comparisons needed to access every element once, relative to the expected number needed for a diff --git a/Master/tlpkg/tlperl/lib/Digest.pm b/Master/tlpkg/tlperl/lib/Digest.pm index 384dfc82668..c3355a8bd44 100644 --- a/Master/tlpkg/tlperl/lib/Digest.pm +++ b/Master/tlpkg/tlperl/lib/Digest.pm @@ -3,7 +3,7 @@ package Digest; use strict; use vars qw($VERSION %MMAP $AUTOLOAD); -$VERSION = "1.16"; +$VERSION = "1.17"; %MMAP = ( "SHA-1" => [["Digest::SHA", 1], "Digest::SHA1", ["Digest::SHA2", 1]], @@ -16,7 +16,7 @@ $VERSION = "1.16"; "CRC-16" => [["Digest::CRC", type => "crc16"]], "CRC-32" => [["Digest::CRC", type => "crc32"]], "CRC-CCITT" => [["Digest::CRC", type => "crcccitt"]], - "RIPEMD-160" => "Crypt::PIPEMD160", + "RIPEMD-160" => "Crypt::RIPEMD160", ); sub new @@ -24,24 +24,27 @@ sub new shift; # class ignored my $algorithm = shift; my $impl = $MMAP{$algorithm} || do { - $algorithm =~ s/\W+//; - "Digest::$algorithm"; + $algorithm =~ s/\W+//g; + "Digest::$algorithm"; }; $impl = [$impl] unless ref($impl); + local $@; # don't clobber it for our caller my $err; for (@$impl) { - my $class = $_; - my @args; - ($class, @args) = @$class if ref($class); - no strict 'refs'; - unless (exists ${"$class\::"}{"VERSION"}) { - eval "require $class"; - if ($@) { - $err ||= $@; - next; - } - } - return $class->new(@args, @_); + my $class = $_; + my @args; + ($class, @args) = @$class if ref($class); + no strict 'refs'; + unless (exists ${"$class\::"}{"VERSION"}) { + my $pm_file = $class . ".pm"; + $pm_file =~ s{::}{/}g; + eval { require $pm_file }; + if ($@) { + $err ||= $@; + next; + } + } + return $class->new(@args, @_); } die $err; } diff --git a/Master/tlpkg/tlperl/lib/Digest/SHA.pm b/Master/tlpkg/tlperl/lib/Digest/SHA.pm index f809ce3afbc..d8cc56136be 100644 --- a/Master/tlpkg/tlperl/lib/Digest/SHA.pm +++ b/Master/tlpkg/tlperl/lib/Digest/SHA.pm @@ -7,7 +7,7 @@ use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); use Fcntl; use integer; -$VERSION = '5.61'; +$VERSION = '5.71'; require Exporter; require DynaLoader; @@ -28,19 +28,16 @@ require DynaLoader; sha512224 sha512224_base64 sha512224_hex sha512256 sha512256_base64 sha512256_hex); -# If possible, inherit from Digest::base (which depends on MIME::Base64) - -*addfile = \&Addfile; +# If possible, inherit from Digest::base eval { - require MIME::Base64; require Digest::base; push(@ISA, 'Digest::base'); }; -if ($@) { - *hexdigest = \&Hexdigest; - *b64digest = \&B64digest; -} + +*addfile = \&Addfile; +*hexdigest = \&Hexdigest; +*b64digest = \&B64digest; # The following routines aren't time-critical, so they can be left in Perl @@ -84,6 +81,7 @@ sub add_bits { $nbits = length($data); $data = pack("B*", $data); } + $nbits = length($data) * 8 if $nbits > length($data) * 8; shawrite($data, $nbits, $$self); return($self); } @@ -91,8 +89,9 @@ sub add_bits { sub _bail { my $msg = shift; + $msg .= ": $!"; require Carp; - Carp::croak("$msg: $!"); + Carp::croak($msg); } sub _addfile { # this is "addfile" from Digest::base 1.00 @@ -115,7 +114,7 @@ sub Addfile { return(_addfile($self, $file)) unless ref(\$file) eq 'SCALAR'; $mode = defined($mode) ? $mode : ""; - my ($binary, $portable) = map { $_ eq $mode } ("b", "p"); + my ($binary, $portable, $BITS) = map { $_ eq $mode } ("b", "p", "0"); ## Always interpret "-" to mean STDIN; otherwise use ## sysopen to handle full range of POSIX file names @@ -123,8 +122,19 @@ sub Addfile { $file eq '-' and open(FH, '< -') or sysopen(FH, $file, O_RDONLY) or _bail('Open failed'); - binmode(FH) if $binary || $portable; + if ($BITS) { + my ($n, $buf) = (0, ""); + while (($n = read(FH, $buf, 4096))) { + $buf =~ s/[^01]//g; + $self->add_bits($buf); + } + _bail("Read failed") unless defined $n; + close(FH); + return($self); + } + + binmode(FH) if $binary || $portable; unless ($portable && -T $file) { $self->_addfile(*FH); close(FH); @@ -514,15 +524,20 @@ argument to one of the following values: "p" use portable mode -The "p" mode is handy since it ensures that the digest value of -I<$filename> will be the same when computed on different operating -systems. It accomplishes this by internally translating all newlines in -text files to UNIX format before calculating the digest. Binary files -are read in raw mode with no translation whatsoever. + "0" use BITS mode + +The "p" mode ensures that the digest value of I<$filename> will be the +same when computed on different operating systems. It accomplishes +this by internally translating all newlines in text files to UNIX format +before calculating the digest. Binary files are read in raw mode with +no translation whatsoever. -For a fuller discussion of newline formats, refer to CPAN module -L. Its "universal line separator" regex forms -the basis of I's portable mode processing. +The BITS mode ("0") interprets the contents of I<$filename> as a logical +stream of bits, where each ASCII '0' or '1' character represents a 0 or +1 bit, respectively. All other characters are ignored. This provides +a convenient way to calculate the digest values of partial-byte data by +using files, rather than having to write programs using the I +method. =item B @@ -672,6 +687,7 @@ The author is particularly grateful to Chris Carey Alexandr Ciornii Jim Doble + Thomas Drugeon Julius Duque Jeffrey Friedl Robert Gilmour @@ -691,7 +707,7 @@ darkness and moored it in so perfect a calm and in so brilliant a light" =head1 COPYRIGHT AND LICENSE -Copyright (C) 2003-2011 Mark Shelor +Copyright (C) 2003-2012 Mark Shelor This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/Dumpvalue.pm b/Master/tlpkg/tlperl/lib/Dumpvalue.pm index f3cde0b8960..ca40548ce56 100644 --- a/Master/tlpkg/tlperl/lib/Dumpvalue.pm +++ b/Master/tlpkg/tlperl/lib/Dumpvalue.pm @@ -1,7 +1,7 @@ use 5.006_001; # for (defined ref) and $#$v and our package Dumpvalue; use strict; -our $VERSION = '1.16'; +our $VERSION = '1.17'; our(%address, $stab, @stab, %stab, %subs); # documentation nits, handle complex data structures better by chromatic @@ -15,7 +15,7 @@ our(%address, $stab, @stab, %stab, %subs); # (IZ) changes for objectification: # c) quote() renamed to method set_quote(); # d) unctrlSet() renamed to method set_unctrl(); -# f) Compiles with `use strict', but in two places no strict refs is needed: +# f) Compiles with 'use strict', but in two places no strict refs is needed: # maybe more problems are waiting... my %defaults = ( @@ -299,7 +299,7 @@ sub set_unctrl { if ($in eq 'unctrl' or $in eq 'quote') { $self->{unctrl} = $in; } else { - print "Unknown value for `unctrl'.\n"; + print "Unknown value for 'unctrl'.\n"; } } $self->{unctrl}; diff --git a/Master/tlpkg/tlperl/lib/DynaLoader.pm b/Master/tlpkg/tlperl/lib/DynaLoader.pm index 44b1c1735f6..eb246992fad 100644 --- a/Master/tlpkg/tlperl/lib/DynaLoader.pm +++ b/Master/tlpkg/tlperl/lib/DynaLoader.pm @@ -16,7 +16,7 @@ package DynaLoader; # Tim.Bunce@ig.co.uk, August 1994 BEGIN { - $VERSION = '1.13'; + $VERSION = '1.14'; } use Config; diff --git a/Master/tlpkg/tlperl/lib/Encode.pm b/Master/tlpkg/tlperl/lib/Encode.pm index a8f06341d15..171b2da0568 100644 --- a/Master/tlpkg/tlperl/lib/Encode.pm +++ b/Master/tlpkg/tlperl/lib/Encode.pm @@ -1,11 +1,11 @@ # -# $Id: Encode.pm,v 2.42 2010/12/31 22:48:10 dankogai Exp $ +# $Id: Encode.pm,v 2.44 2011/08/09 07:49:44 dankogai Exp dankogai $ # package Encode; use strict; use warnings; -our $VERSION = sprintf "%d.%02d_01", q$Revision: 2.42 $ =~ /(\d+)/g; -sub DEBUG () { 0 } +our $VERSION = sprintf "%d.%02d", q$Revision: 2.44 $ =~ /(\d+)/g; +use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; use XSLoader (); XSLoader::load( __PACKAGE__, $VERSION ); @@ -68,7 +68,7 @@ sub encodings { } else { %enc = %Encoding; - for my $mod ( map { m/::/o ? $_ : "Encode::$_" } @_ ) { + for my $mod ( map { m/::/ ? $_ : "Encode::$_" } @_ ) { DEBUG and warn $mod; for my $enc ( keys %ExtModule ) { $ExtModule{$enc} eq $mod and $enc{$enc} = $mod; @@ -101,6 +101,8 @@ sub define_encoding { sub getEncoding { my ( $class, $name, $skip_external ) = @_; + $name =~ s/\s+//g; # https://rt.cpan.org/Ticket/Display.html?id=65796 + ref($name) && $name->can('renew') and return $name; exists $Encoding{$name} and return $Encoding{$name}; my $lc = lc $name; @@ -334,8 +336,8 @@ sub predefine_encodings { $Encode::Encoding{utf8} = bless { Name => "utf8" } => "Encode::utf8"; $Encode::Encoding{"utf-8-strict"} = - bless { Name => "utf-8-strict", strict_utf8 => 1 } => - "Encode::utf8"; + bless { Name => "utf-8-strict", strict_utf8 => 1 } + => "Encode::utf8"; } } @@ -345,7 +347,7 @@ __END__ =head1 NAME -Encode - character encodings +Encode - character encodings in Perl =head1 SYNOPSIS @@ -353,10 +355,10 @@ Encode - character encodings =head2 Table of Contents -Encode consists of a collection of modules whose details are too big -to fit in one document. This POD itself explains the top-level APIs +Encode consists of a collection of modules whose details are too extensive +to fit in one document. This one itself explains the top-level APIs and general topics at a glance. For other topics and more details, -see the PODs below: +see the documentation for these modules: Name Description -------------------------------------------------------- @@ -371,26 +373,26 @@ see the PODs below: =head1 DESCRIPTION -The C module provides the interfaces between Perl's strings +The C module provides the interface between Perl strings and the rest of the system. Perl strings are sequences of -B. +I. -The repertoire of characters that Perl can represent is at least that +The repertoire of characters that Perl can represent is a superset of those defined by the Unicode Consortium. On most platforms the ordinal -values of the characters (as returned by C) is the "Unicode -codepoint" for the character (the exceptions are those platforms where -the legacy encoding is some variant of EBCDIC rather than a super-set -of ASCII - see L). - -Traditionally, computer data has been moved around in 8-bit chunks -often called "bytes". These chunks are also known as "octets" in -networking standards. Perl is widely used to manipulate data of many -types - not only strings of characters representing human or computer -languages but also "binary" data being the machine's representation of -numbers, pixels in an image - or just about anything. +values of a character as returned by C)> is the I for that character. The exceptions are platforms where +the legacy encoding is some variant of EBCDIC rather than a superset +of ASCII; see L. + +During recent history, data is moved around a computer in 8-bit chunks, +often called "bytes" but also known as "octets" in standards documents. +Perl is widely used to manipulate data of many types: not only strings of +characters representing human or computer languages, but also "binary" +data, being the machine's representation of numbers, pixels in an image, or +just about anything. When Perl is processing "binary data", the programmer wants Perl to -process "sequences of bytes". This is not a problem for Perl - as a +process "sequences of bytes". This is not a problem for Perl: because a byte has 256 possible values, it easily fits in Perl's much larger "logical character". @@ -400,94 +402,95 @@ byte has 256 possible values, it easily fits in Perl's much larger =item * -I: a character in the range 0..(2**32-1) (or more). -(What Perl's strings are made of.) +I: a character in the range 0 .. 2**32-1 (or more); +what Perl's strings are made of. =item * -I: a character in the range 0..255 -(A special case of a Perl character.) +I: a character in the range 0..255; +A special case of a Perl character. =item * -I: 8 bits of data, with ordinal values 0..255 -(Term for bytes passed to or from a non-Perl context, e.g. a disk file.) +I: 8 bits of data, with ordinal values 0..255; +Term for bytes passed to or from a non-Perl context, such as a disk file. =back -=head1 PERL ENCODING API +=head1 THE PERL ENCODING API =over 2 -=item $octets = encode(ENCODING, $string [, CHECK]) +=item $octets = encode(ENCODING, STRING[, CHECK]) -Encodes a string from Perl's internal form into I and returns -a sequence of octets. ENCODING can be either a canonical name or -an alias. For encoding names and aliases, see L. -For CHECK, see L. +Encodes the scalar value I from Perl's internal form into +I and returns a sequence of octets. I can be either a +canonical name or an alias. For encoding names and aliases, see +L. For CHECK, see L. -For example, to convert a string from Perl's internal format to -iso-8859-1 (also known as Latin1), +For example, to convert a string from Perl's internal format into +ISO-8859-1, also known as Latin1: $octets = encode("iso-8859-1", $string); B: When you run C<$octets = encode("utf8", $string)>, then -$octets B $string. Though they both contain the -same data, the UTF8 flag for $octets is B off. When you -encode anything, UTF8 flag of the result is always off, even when it -contains completely valid utf8 string. See L below. +$octets I $string. Though both contain the +same data, the UTF8 flag for $octets is I off. When you +encode anything, the UTF8 flag on the result is always off, even when it +contains a completely valid utf8 string. See L below. -If the $string is C then C is returned. +If the $string is C, then C is returned. -=item $string = decode(ENCODING, $octets [, CHECK]) +=item $string = decode(ENCODING, OCTETS[, CHECK]) -Decodes a sequence of octets assumed to be in I into Perl's -internal form and returns the resulting string. As in encode(), -ENCODING can be either a canonical name or an alias. For encoding names -and aliases, see L. For CHECK, see -L. +This function returns the string that results from decoding the scalar +value I, assumed to be a sequence of octets in I, into +Perl's internal form. The returns the resulting string. As with encode(), +I can be either a canonical name or an alias. For encoding names +and aliases, see L; for I, see L. -For example, to convert ISO-8859-1 data to a string in Perl's internal format: +For example, to convert ISO-8859-1 data into a string in Perl's +internal format: $string = decode("iso-8859-1", $octets); B: When you run C<$string = decode("utf8", $octets)>, then $string -B $octets. Though they both contain the same data, -the UTF8 flag for $string is on unless $octets entirely consists of -ASCII data (or EBCDIC on EBCDIC machines). See L +I $octets. Though both contain the same data, the +UTF8 flag for $string is on unless $octets consists entirely of ASCII data +on ASCII machines or EBCDIC on EBCDIC machines. See L below. -If the $string is C then C is returned. +If the $string is C, then C is returned. =item [$obj =] find_encoding(ENCODING) -Returns the I corresponding to ENCODING. Returns -undef if no matching ENCODING is find. - -This object is what actually does the actual (en|de)coding. +Returns the I corresponding to I. Returns +C if no matching I is find. The returned object is +what does the actual encoding or decoding. $utf8 = decode($name, $bytes); is in fact - $utf8 = do{ - $obj = find_encoding($name); - croak qq(encoding "$name" not found) unless ref $obj; - $obj->decode($bytes) - }; + $utf8 = do { + $obj = find_encoding($name); + croak qq(encoding "$name" not found) unless ref $obj; + $obj->decode($bytes); + }; with more error checking. -Therefore you can save time by reusing this object as follows; +You can therefore save time by reusing this object as follows; - my $enc = find_encoding("iso-8859-1"); - while(<>){ - my $utf8 = $enc->decode($_); - # and do someting with $utf8; - } + my $enc = find_encoding("iso-8859-1"); + while(<>) { + my $utf8 = $enc->decode($_); + ... # now do something with $utf8; + } Besides C<< ->decode >> and C<< ->encode >>, other methods are -available as well. For instance, C<< -> name >> returns the canonical +available as well. For instance, C<< ->name >> returns the canonical name of the encoding object. find_encoding("latin1")->name; # iso-8859-1 @@ -496,9 +499,9 @@ See L for details. =item [$length =] from_to($octets, FROM_ENC, TO_ENC [, CHECK]) -Converts B data between two encodings. The data in $octets -must be encoded as octets and not as characters in Perl's internal -format. For example, to convert ISO-8859-1 data to Microsoft's CP1250 +Converts I data between two encodings. The data in $octets +must be encoded as octets and I as characters in Perl's internal +format. For example, to convert ISO-8859-1 data into Microsoft's CP1250 encoding: from_to($octets, "iso-8859-1", "cp1250"); @@ -507,54 +510,53 @@ and to convert it back: from_to($octets, "cp1250", "iso-8859-1"); -Note that because the conversion happens in place, the data to be -converted cannot be a string constant; it must be a scalar variable. +Because the conversion happens in place, the data to be +converted cannot be a string constant: it must be a scalar variable. -from_to() returns the length of the converted string in octets on -success, I on error. +from_to() returns the length of the converted string in octets on success, +and C on error. -B: The following operations look the same but are not quite so; +B: The following operations may look the same, but are not: from_to($data, "iso-8859-1", "utf8"); #1 $data = decode("iso-8859-1", $data); #2 -Both #1 and #2 make $data consist of a completely valid UTF-8 string -but only #2 turns UTF8 flag on. #1 is equivalent to +Both #1 and #2 make $data consist of a completely valid UTF-8 string, +but only #2 turns the UTF8 flag on. #1 is equivalent to: $data = encode("utf8", decode("iso-8859-1", $data)); See L below. -Also note that +Also note that: from_to($octets, $from, $to, $check); -is equivalent to +is equivalent t:o $octets = encode($to, decode($from, $octets), $check); -Yes, it does not respect the $check during decoding. It is -deliberately done that way. If you need minute control, C -then C as follows; +Yes, it does I respect the $check during decoding. It is +deliberately done that way. If you need minute control, use C +followed by C as follows: $octets = encode($to, decode($from, $octets, $check_from), $check_to); =item $octets = encode_utf8($string); -Equivalent to C<$octets = encode("utf8", $string);> The characters -that comprise $string are encoded in Perl's internal format and the -result is returned as a sequence of octets. All possible -characters have a UTF-8 representation so this function cannot fail. - +Equivalent to C<$octets = encode("utf8", $string)>. The characters in +$string are encoded in Perl's internal format, and the result is returned +as a sequence of octets. Because all possible characters in Perl have a +(loose, not strict) UTF-8 representation, this function cannot fail. =item $string = decode_utf8($octets [, CHECK]); -equivalent to C<$string = decode("utf8", $octets [, CHECK])>. -The sequence of octets represented by -$octets is decoded from UTF-8 into a sequence of logical -characters. Not all sequences of octets form valid UTF-8 encodings, so -it is possible for this call to fail. For CHECK, see -L. +Equivalent to C<$string = decode("utf8", $octets [, CHECK])>. +The sequence of octets represented by $octets is decoded +from UTF-8 into a sequence of logical characters. +Because not all sequences of octets are valid UTF-8, +it is quite possible for this function to fail. +For CHECK, see L. =back @@ -563,17 +565,17 @@ L. use Encode; @list = Encode->encodings(); -Returns a list of the canonical names of the available encodings that -are loaded. To get a list of all available encodings including the -ones that are not loaded yet, say +Returns a list of canonical names of available encodings that have already +been loaded. To get a list of all available encodings including those that +have not yet been loaded, say: @all_encodings = Encode->encodings(":all"); -Or you can give the name of a specific module. +Or you can give the name of a specific module: @with_jp = Encode->encodings("Encode::JP"); -When "::" is not in the name, "Encode::" is assumed. +When "C<::>" is not in the name, "C" is assumed. @ebcdic = Encode->encodings("EBCDIC"); @@ -586,36 +588,36 @@ To add a new alias to a given encoding, use: use Encode; use Encode::Alias; - define_alias(newName => ENCODING); + define_alias(NEWNAME => ENCODING); -After that, newName can be used as an alias for ENCODING. -ENCODING may be either the name of an encoding or an -I +After that, I can be used as an alias for I. + may be either the name of an encoding or an +I. -But before you do so, make sure the alias is nonexistent with +Before you do that, first make sure the alias is nonexistent using C, which returns the canonical name thereof. -i.e. +For example: Encode::resolve_alias("latin1") eq "iso-8859-1" # true Encode::resolve_alias("iso-8859-12") # false; nonexistent Encode::resolve_alias($name) eq $name # true if $name is canonical resolve_alias() does not need C; it can be -exported via C. +imported via C. See L for details. =head2 Finding IANA Character Set Registry names The canonical name of a given encoding does not necessarily agree with -IANA IANA Character Set Registry, commonly seen as C<< Content-Type: -text/plain; charset=I >>. For most cases canonical names -work but sometimes it does not (notably 'utf-8-strict'). +IANA Character Set Registry, commonly seen as C<< Content-Type: +text/plain; charset=I >>. For most cases, the canonical name +works, but sometimes it does not, most notably with "utf-8-strict". -Therefore as of Encode version 2.21, a new method C is added. +As of C version 2.21, a new method C is thereforeadded. use Encode; - my $enc = find_encoding('UTF-8'); + my $enc = find_encoding("UTF-8"); warn $enc->name; # utf-8-strict warn $enc->mime_name; # UTF-8 @@ -623,44 +625,60 @@ See also: L =head1 Encoding via PerlIO -If your perl supports I (which is the default), you can use a -PerlIO layer to decode and encode directly via a filehandle. The -following two examples are totally identical in their functionality. - - # via PerlIO - open my $in, "<:encoding(shiftjis)", $infile or die; - open my $out, ">:encoding(euc-jp)", $outfile or die; - while(<$in>){ print $out $_; } +If your perl supports C (which is the default), you can use a +C layer to decode and encode directly via a filehandle. The +following two examples are fully identical in functionality: + + ### Version 1 via PerlIO + open(INPUT, "< :encoding(shiftjis)", $infile) + || die "Can't open < $infile for reading: $!"; + open(OUTPUT, "> :encoding(euc-jp)", $outfile) + || die "Can't open > $output for writing: $!"; + while () { # auto decodes $_ + print OUTPUT; # auto encodes $_ + } + close(INPUT) || die "can't close $infile: $!"; + close(OUTPUT) || die "can't close $outfile: $!"; + + ### Version 2 via from_to() + open(INPUT, "< :raw", $infile) + || die "Can't open < $infile for reading: $!"; + open(OUTPUT, "> :raw", $outfile) + || die "Can't open > $output for writing: $!"; + + while () { + from_to($_, "shiftjis", "euc-jp", 1); # switch encoding + print OUTPUT; # emit raw (but properly encoded) data + } + close(INPUT) || die "can't close $infile: $!"; + close(OUTPUT) || die "can't close $outfile: $!"; - # via from_to - open my $in, "<", $infile or die; - open my $out, ">", $outfile or die; - while(<$in>){ - from_to($_, "shiftjis", "euc-jp", 1); - print $out $_; - } +In the first version above, you let the appropriate encoding layer +handle the conversion. In the second, you explicitly translate +from one encoding to the other. -Unfortunately, it may be that encodings are PerlIO-savvy. You can check -if your encoding is supported by PerlIO by calling the C -method. +Unfortunately, it may be that encodings are C-savvy. You can check +to see whether your encoding is supported by C by invoking the +C method on it: - Encode::perlio_ok("hz"); # False - find_encoding("euc-cn")->perlio_ok; # True where PerlIO is available + Encode::perlio_ok("hz"); # false + find_encoding("euc-cn")->perlio_ok; # true wherever PerlIO is available - use Encode qw(perlio_ok); # exported upon request + use Encode qw(perlio_ok); # imported upon request perlio_ok("euc-jp") -Fortunately, all encodings that come with Encode core are PerlIO-savvy -except for hz and ISO-2022-kr. For gory details, see +Fortunately, all encodings that come with C core are C-savvy +except for "hz" and "ISO-2022-kr". For the gory details, see L and L. =head1 Handling Malformed Data -The optional I argument tells Encode what to do when it -encounters malformed data. Without CHECK, Encode::FB_DEFAULT ( == 0 ) -is assumed. +The optional I argument tells C what to do when +encountering malformed data. Without I, C +(== 0) is assumed. -As of version 2.12 Encode supports coderef values for CHECK. See below. +As of version 2.12, C supports coderef values for C; +see below. =over 2 @@ -677,39 +695,39 @@ Now here is the list of I values available =item I = Encode::FB_DEFAULT ( == 0) -If I is 0, (en|de)code will put a I in -place of a malformed character. When you encode, EsubcharE -will be used. When you decode the code point C<0xFFFD> is used. If -the data is supposed to be UTF-8, an optional lexical warning -(category utf8) is given. +If I is 0, encoding and decoding replace any malformed character +with a I. When you encode, I is used. +When you decode, the Unicode REPLACEMENT CHARACTER, code point U+FFFD, is +used. If the data is supposed to be UTF-8, an optional lexical warning of +warning category C<"utf8"> is given. =item I = Encode::FB_CROAK ( == 1) -If I is 1, methods will die on error immediately with an error -message. Therefore, when I is set to 1, you should trap the -error with eval{} unless you really want to let it die. +If I is 1, methods immediately die with an error +message. Therefore, when I is 1, you should trap +exceptions with C, unless you really want to let it C. =item I = Encode::FB_QUIET -If I is set to Encode::FB_QUIET, (en|de)code will immediately +If I is set to C, encoding and decoding immediately return the portion of the data that has been processed so far when an -error occurs. The data argument will be overwritten with everything -after that point (that is, the unprocessed part of data). This is -handy when you have to call decode repeatedly in the case where your +error occurs. The data argument is overwritten with everything +after that point; that is, the unprocessed portion of the data. This is +handy when you have to call C repeatedly in the case where your source data may contain partial multi-byte character sequences, -(i.e. you are reading with a fixed-width buffer). Here is a sample -code that does exactly this: +(that is, you are reading with a fixed-width buffer). Here's some sample +code to do exactly that: - my $buffer = ''; my $string = ''; - while(read $fh, $buffer, 256, length($buffer)){ - $string .= decode($encoding, $buffer, Encode::FB_QUIET); - # $buffer now contains the unprocessed partial character - } + my($buffer, $string) = ("", ""); + while (read($fh, $buffer, 256, length($buffer))) { + $string .= decode($encoding, $buffer, Encode::FB_QUIET); + # $buffer now contains the unprocessed partial character + } =item I = Encode::FB_WARN -This is the same as above, except that it warns on error. Handy when -you are debugging the mode above. +This is the same as C above, except that instead of being silent +on errors, it issues a warning. This is handy for when you are debugging. =item perlqq mode (I = Encode::FB_PERLQQ) @@ -717,26 +735,26 @@ you are debugging the mode above. =item XML charref mode (I = Encode::FB_XMLCREF) -For encodings that are implemented by Encode::XS, CHECK == -Encode::FB_PERLQQ turns (en|de)code into C fallback mode. +For encodings that are implemented by the C module, C C<==> +C puts C and C into C fallback mode. -When you decode, C<\xI> will be inserted for a malformed character, -where I is the hex representation of the octet that could not be -decoded to utf8. And when you encode, C<\x{I}> will be inserted, -where I is the Unicode ID of the character that cannot be found -in the character repertoire of the encoding. +When you decode, C<\xI> is inserted for a malformed character, where +I is the hex representation of the octet that could not be decoded to +utf8. When you encode, C<\x{I}> will be inserted, where I is +the Unicode code point (in any number of hex digits) of the character that +cannot be found in the character repertoire of the encoding. -HTML/XML character reference modes are about the same, in place of -C<\x{I}>, HTML uses C<&#I;> where I is a decimal number and +The HTML/XML character reference modes are about the same. In place of +C<\x{I}>, HTML uses C<&#I;> where I is a decimal number, and XML uses C<&#xI;> where I is the hexadecimal number. -In Encode 2.10 or later, C is also implied. +In C 2.10 or later, C is also implied. =item The bitmask -These modes are actually set via a bitmask. Here is how the FB_XX -constants are laid out. You can import the FB_XX constants via -C; you can import the generic bitmask +These modes are all actually set via a bitmask. Here is how the C> +constants are laid out. You can import the C> constants via +C, and you can import the generic bitmask constants via C. FB_DEFAULT FB_CROAK FB_QUIET FB_WARN FB_PERLQQ @@ -754,44 +772,43 @@ constants via C. =item Encode::LEAVE_SRC -If the C bit is not set, but I is, then the second -argument to C or C may be assigned to by the functions. If -you're not interested in this, then bitwise-or the bitmask with it. +If the C bit is I set but I is set, then the +second argument to encode() or decode() will be overwritten in place. +If you're not interested in this, then bitwise-OR it with the bitmask. =back =head2 coderef for CHECK -As of Encode 2.12 CHECK can also be a code reference which takes the -ord value of unmapped caharacter as an argument and returns a string -that represents the fallback character. For instance, +As of C 2.12, C can also be a code reference which takes the +ordinal value of the unmapped caharacter as an argument and returns a string +that represents the fallback character. For instance: $ascii = encode("ascii", $utf8, sub{ sprintf "", shift }); -Acts like FB_PERLQQ but EU+IE is used instead of -\x{I}. +Acts like C but U+I is used instead of C<\x{I}>. =head1 Defining Encodings To define a new encoding, use: use Encode qw(define_encoding); - define_encoding($object, 'canonicalName' [, alias...]); + define_encoding($object, CANONICAL_NAME [, alias...]); -I will be associated with I<$object>. The object +I will be associated with I<$object>. The object should provide the interface described in L. -If more than two arguments are provided then additional -arguments are taken as aliases for I<$object>. +If more than two arguments are provided, additional +arguments are considered aliases for I<$object>. -See L for more details. +See L for details. =head1 The UTF8 flag -Before the introduction of Unicode support in perl, The C operator +Before the introduction of Unicode support in Perl, The C operator just compared the strings represented by two scalars. Beginning with -perl 5.8, C compares two strings with simultaneous consideration of -I. To explain why we made it so, I will quote page 402 of -C +Perl 5.8, C compares two strings with simultaneous consideration of +I. To explain why we made it so, I quote from page 402 of +I =over 2 @@ -817,28 +834,27 @@ byte-oriented Perl and a character-oriented Perl. =back -Back when C was written, not even Perl 5.6.0 -was born and many features documented in the book remained -unimplemented for a long time. Perl 5.8 corrected this and the introduction -of the UTF8 flag is one of them. You can think of this perl notion as of a -byte-oriented mode (UTF8 flag off) and a character-oriented mode (UTF8 -flag on). +When I was written, not even Perl 5.6.0 had been +born yet, many features documented in the book remained unimplemented for a +long time. Perl 5.8 corrected much of this, and the introduction of the +UTF8 flag is one of them. You can think of there being two fundamentally +different kinds of strings and string-operations in Perl: one a +byte-oriented mode for when the internal UTF8 flag is off, and the other a +character-oriented mode for when the internal UTF8 flag is on. -Here is how Encode takes care of the UTF8 flag. +Here is how C handles the UTF8 flag. =over 2 =item * -When you encode, the resulting UTF8 flag is always off. +When you I, the resulting UTF8 flag is always B. =item * -When you decode, the resulting UTF8 flag is on unless you can -unambiguously represent data. Here is the definition of -dis-ambiguity. - -After C<$utf8 = decode('foo', $octet);>, +When you I, the resulting UTF8 flag is B--I you can +unambiguously represent data. Here is what we mean by "unambiguously". +After C<$utf8 = decode("foo", $octet)>, When $octet is... The UTF8 flag in $utf8 is --------------------------------------------- @@ -847,50 +863,53 @@ After C<$utf8 = decode('foo', $octet);>, In any other Encoding ON --------------------------------------------- -As you see, there is one exception, In ASCII. That way you can assume -Goal #1. And with Encode Goal #2 is assumed but you still have to be -careful in such cases mentioned in B paragraphs. +As you see, there is one exception: in ASCII. That way you can assume +Goal #1. And with C, Goal #2 is assumed but you still have to be +careful in the cases mentioned in the B paragraphs above. -This UTF8 flag is not visible in perl scripts, exactly for the same -reason you cannot (or you I) see if a scalar contains a -string, integer, or floating point number. But you can still peek -and poke these if you will. See the section below. +This UTF8 flag is not visible in Perl scripts, exactly for the same reason +you cannot (or rather, you I) see whether a scalar contains +a string, an integer, or a floating-point number. But you can still peek +and poke these if you will. See the next section. =back =head2 Messing with Perl's Internals The following API uses parts of Perl's internals in the current -implementation. As such, they are efficient but may change. +implementation. As such, they are efficient but may change in a future +release. =over 2 =item is_utf8(STRING [, CHECK]) -[INTERNAL] Tests whether the UTF8 flag is turned on in the STRING. -If CHECK is true, also checks the data in STRING for being well-formed +[INTERNAL] Tests whether the UTF8 flag is turned on in the I. +If I is true, also checks whether I contains well-formed UTF-8. Returns true if successful, false otherwise. -As of perl 5.8.1, L also has utf8::is_utf8(). +As of Perl 5.8.1, L also has the C function. =item _utf8_on(STRING) -[INTERNAL] Turns on the UTF8 flag in STRING. The data in STRING is -B checked for being well-formed UTF-8. Do not use unless you -B that the STRING is well-formed UTF-8. Returns the previous -state of the UTF8 flag (so please don't treat the return value as -indicating success or failure), or C if STRING is not a string. +[INTERNAL] Turns the I's internal UTF8 flag B. The I +is I checked for containing only well-formed UTF-8. Do not use this +unless you I that the STRING holds only +well-formed UTF-8. Returns the previous state of the UTF8 flag (so please +don't treat the return value as indicating success or failure), or C +if I is not a string. -This function does not work on tainted values. +B: For security reasons, this function does not work on tainted values. =item _utf8_off(STRING) -[INTERNAL] Turns off the UTF8 flag in STRING. Do not use frivolously. -Returns the previous state of the UTF8 flag (so please don't treat the -return value as indicating success or failure), or C if STRING is -not a string. +[INTERNAL] Turns the I's internal UTF8 flag B. Do not use +frivolously. Returns the previous state of the UTF8 flag, or C if +I is not a string. Do not treat the return value as indicative of +success or failure, because that isn't what it means: it is only the +previous setting. -This function does not work on tainted values. +B: For security reasons, this function does not work on tainted values. =back @@ -900,49 +919,57 @@ This function does not work on tainted values. of numbers in the range 0 .. 2**32-1 (or in the case of 64-bit computers, 0 .. 2**64-1) -- Programming Perl, 3rd ed. -That has been the perl's notion of UTF-8 but official UTF-8 is more -strict; Its ranges is much narrower (0 .. 10FFFF), some sequences are -not allowed (i.e. Those used in the surrogate pair, 0xFFFE, et al). +That has historically been Perl's notion of UTF-8, as that is how UTF-8 was +first conceived by Ken Thompson when he invented it. However, thanks to +later revisions to the applicable standards, official UTF-8 is now rather +stricter than that. For example, its range is much narrower (0 .. 0x10_FFFF +to cover only 21 bits instead of 32 or 64 bits) and some sequences +are not allowed, like those used in surrogate pairs, the 31 non-character +code points 0xFDD0 .. 0xFDEF, the last two code points in I plane +(0xI_FFFE and 0xI_FFFF), all non-shortest encodings, etc. -Now that is overruled by Larry Wall himself. +The former default in which Perl would always use a loose interpretation of +UTF-8 has now been overruled: From: Larry Wall Date: December 04, 2004 11:51:58 JST To: perl-unicode@perl.org Subject: Re: Make Encode.pm support the real UTF-8 Message-Id: <20041204025158.GA28754@wall.org> - + On Fri, Dec 03, 2004 at 10:12:12PM +0000, Tim Bunce wrote: : I've no problem with 'utf8' being perl's unrestricted uft8 encoding, : but "UTF-8" is the name of the standard and should give the : corresponding behaviour. - + For what it's worth, that's how I've always kept them straight in my head. - + Also for what it's worth, Perl 6 will mostly default to strict but make it easy to switch back to lax. - + Larry -Do you copy? As of Perl 5.8.7, B means strict, official UTF-8 -while B means liberal, lax, version thereof. And Encode version -2.10 or later thus groks the difference between C and C"utf8". +Got that? As of Perl 5.8.7, B<"UTF-8"> means UTF-8 in its current +sense, which is conservative and strict and security-conscious, whereas +B<"utf8"> means UTF-8 in its former sense, which was liberal and loose and +lax. C version 2.10 or later thus groks this subtle but critically +important distinction between C<"UTF-8"> and C<"utf8">. encode("utf8", "\x{FFFF_FFFF}", 1); # okay encode("UTF-8", "\x{FFFF_FFFF}", 1); # croaks -C in Encode is actually a canonical name for C. -Yes, the hyphen between "UTF" and "8" is important. Without it Encode -goes "liberal" +In the C module, C<"UTF-8"> is actually a canonical name for +C<"utf-8-strict">. That hyphen between the C<"UTF"> and the C<"8"> is +critical; without it, C goes "liberal" and (perhaps overly-)permissive: find_encoding("UTF-8")->name # is 'utf-8-strict' find_encoding("utf-8")->name # ditto. names are case insensitive - find_encoding("utf_8")->name # ditto. "_" are treated as "-" + find_encoding("utf_8")->name # ditto. "_" are treated as "-" find_encoding("UTF8")->name # is 'utf8'. -The UTF8 flag is internally called UTF8, without a hyphen. It indicates -whether a string is internally encoded as utf8, also without a hypen. +Perl's internal UTF8 flag is called "UTF8", without a hyphen. It indicates +whether a string is internally encoded as "utf8", also without a hyphen. =head1 SEE ALSO @@ -958,18 +985,18 @@ the Perl Unicode Mailing List Eperl-unicode@perl.orgE =head1 MAINTAINER -This project was originated by Nick Ing-Simmons and later maintained -by Dan Kogai Edankogai@dan.co.jpE. See AUTHORS for a full -list of people involved. For any questions, use -Eperl-unicode@perl.orgE so we can all share. +This project was originated by the late Nick Ing-Simmons and later +maintained by Dan Kogai I<< >>. See AUTHORS +for a full list of people involved. For any questions, send mail to +I<< >> so that we can all share. -While Dan Kogai retains the copyright as a maintainer, the credit -should go to all those involoved. See AUTHORS for those submitted -codes. +While Dan Kogai retains the copyright as a maintainer, credit +should go to all those involved. See AUTHORS for a list of those +who submitted code to the project. =head1 COPYRIGHT -Copyright 2002-2006 Dan Kogai Edankogai@dan.co.jpE +Copyright 2002-2011 Dan Kogai I<< >>. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/Encode/Alias.pm b/Master/tlpkg/tlperl/lib/Encode/Alias.pm index f517a5a75a8..d744cc5e933 100644 --- a/Master/tlpkg/tlperl/lib/Encode/Alias.pm +++ b/Master/tlpkg/tlperl/lib/Encode/Alias.pm @@ -2,8 +2,8 @@ package Encode::Alias; use strict; use warnings; no warnings 'redefine'; -our $VERSION = do { my @r = ( q$Revision: 2.13 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; -sub DEBUG () { 0 } +our $VERSION = do { my @r = ( q$Revision: 2.15 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; +use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; use base qw(Exporter); @@ -206,7 +206,7 @@ sub init_aliases { # Mac Mappings # predefined in *.ucm; unneeded # define_alias( qr/\bmacIcelandic$/i => '"macIceland"'); - define_alias( qr/^mac_(.*)$/i => '"mac$1"' ); + define_alias( qr/^(?:x[_-])?mac[_-](.*)$/i => '"mac$1"' ); # http://rt.cpan.org/Ticket/Display.html?id=36326 define_alias( qr/^macintosh$/i => '"MacRoman"' ); diff --git a/Master/tlpkg/tlperl/lib/Encode/Encoder.pm b/Master/tlpkg/tlperl/lib/Encode/Encoder.pm index f7194f81ac4..9a46d367436 100644 --- a/Master/tlpkg/tlperl/lib/Encode/Encoder.pm +++ b/Master/tlpkg/tlperl/lib/Encode/Encoder.pm @@ -1,17 +1,17 @@ # -# $Id: Encoder.pm,v 2.1 2006/05/03 18:24:10 dankogai Exp $ +# $Id: Encoder.pm,v 2.2 2011/08/09 07:49:44 dankogai Exp dankogai $ # package Encode::Encoder; use strict; use warnings; -our $VERSION = do { my @r = ( q$Revision: 2.1 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; +our $VERSION = do { my @r = ( q$Revision: 2.2 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw ( encoder ); our $AUTOLOAD; -sub DEBUG () { 0 } +use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; use Encode qw(encode decode find_encoding from_to); use Carp; diff --git a/Master/tlpkg/tlperl/lib/Encode/Guess.pm b/Master/tlpkg/tlperl/lib/Encode/Guess.pm index 9636a8ad8a5..31ec58f4fca 100644 --- a/Master/tlpkg/tlperl/lib/Encode/Guess.pm +++ b/Master/tlpkg/tlperl/lib/Encode/Guess.pm @@ -2,10 +2,10 @@ package Encode::Guess; use strict; use warnings; use Encode qw(:fallbacks find_encoding); -our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; +our $VERSION = do { my @r = ( q$Revision: 2.5 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; my $Canon = 'Guess'; -sub DEBUG () { 0 } +use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; our %DEF_SUSPECTS = map { $_ => find_encoding($_) } qw(ascii utf8); $Encode::Encoding{$Canon} = bless { Name => $Canon, diff --git a/Master/tlpkg/tlperl/lib/English.pm b/Master/tlpkg/tlperl/lib/English.pm index c11fbed9eba..1f1e85d47fd 100644 --- a/Master/tlpkg/tlperl/lib/English.pm +++ b/Master/tlpkg/tlperl/lib/English.pm @@ -1,6 +1,6 @@ package English; -our $VERSION = '1.04'; +our $VERSION = '1.05'; require Exporter; @ISA = qw(Exporter); @@ -139,7 +139,7 @@ sub import { @COMPLETE_EXPORT = ( @MINIMAL_EXPORT, @MATCH_EXPORT ) ; -# The ground of all being. @ARG is deprecated (5.005 makes @_ lexical) +# The ground of all being. *ARG = *_ ; diff --git a/Master/tlpkg/tlperl/lib/Env.pm b/Master/tlpkg/tlperl/lib/Env.pm index d770533bd2d..bb1f0b381fd 100644 --- a/Master/tlpkg/tlperl/lib/Env.pm +++ b/Master/tlpkg/tlperl/lib/Env.pm @@ -1,6 +1,6 @@ package Env; -our $VERSION = '1.02'; +our $VERSION = '1.03'; =head1 NAME diff --git a/Master/tlpkg/tlperl/lib/Errno.pm b/Master/tlpkg/tlperl/lib/Errno.pm index ce583674850..e55c1d92b02 100644 --- a/Master/tlpkg/tlperl/lib/Errno.pm +++ b/Master/tlpkg/tlperl/lib/Errno.pm @@ -12,7 +12,7 @@ use strict; "MSWin32-x86-multi-thread-5.1" or die "Errno architecture (MSWin32-x86-multi-thread-5.1) does not match executable architecture ($Config{'archname'}-$Config{'osvers'})"; -our $VERSION = "1.13"; +our $VERSION = "1.15"; $VERSION = eval $VERSION; our @ISA = 'Exporter'; diff --git a/Master/tlpkg/tlperl/lib/Exporter.pm b/Master/tlpkg/tlperl/lib/Exporter.pm index a371714e764..40af2206158 100644 --- a/Master/tlpkg/tlperl/lib/Exporter.pm +++ b/Master/tlpkg/tlperl/lib/Exporter.pm @@ -9,7 +9,7 @@ require 5.006; our $Debug = 0; our $ExportLevel = 0; our $Verbose ||= 0; -our $VERSION = '5.64_03'; +our $VERSION = '5.66'; our (%Cache); sub as_heavy { @@ -44,7 +44,6 @@ sub import { my $export_cache = ($Cache{$pkg} ||= {}); my $args = @_ or @_ = @$exports; - local $_; if ($args and not %$export_cache) { s/^&//, $export_cache->{$_} = 1 foreach (@$exports, @{"$pkg\::EXPORT_OK"}); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder.pm index 969b3596832..aff607d7ee1 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder.pm @@ -6,7 +6,7 @@ use File::Basename (); use Perl::OSType qw/os_type/; use vars qw($VERSION @ISA); -$VERSION = '0.280203'; +$VERSION = '0.280206'; $VERSION = eval $VERSION; # We only use this once - don't waste a symbol table entry on it. @@ -265,10 +265,23 @@ other platform-specific issues. Ilya Zakharevich has contributed fixes for OS/2; John E. Malmberg and Peter Prymmer have done likewise for VMS. +=head1 SUPPORT + +ExtUtils::CBuilder is maintained as part of the Perl 5 core. Please +submit any bug reports via the F tool included with Perl 5. +Bug reports will be included in the Perl 5 ticket system at +L. + +The Perl 5 source code is available at +and ExtUtils-CBuilder may be found in the F directory +of the repository. + =head1 AUTHOR Ken Williams, kwilliams@cpan.org +Additional contributions by The Perl 5 Porters. + =head1 COPYRIGHT Copyright (c) 2003-2005 Ken Williams. All rights reserved. diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Base.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Base.pm index b57231272a6..6d983cd2f48 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Base.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Base.pm @@ -12,7 +12,7 @@ use IPC::Cmd qw(can_run); use File::Temp qw(tempfile); use vars qw($VERSION); -$VERSION = '0.280203'; +$VERSION = '0.280206'; # More details about C/C++ compilers: # http://developers.sun.com/sunstudio/documentation/product/compiler.jsp @@ -40,11 +40,13 @@ sub new { $self->{config}{$k} = $v unless exists $self->{config}{$k}; } $self->{config}{cc} = $ENV{CC} if defined $ENV{CC}; - $self->{config}{ccflags} = $ENV{CFLAGS} if defined $ENV{CFLAGS}; + $self->{config}{ccflags} = join(" ", $self->{config}{ccflags}, $ENV{CFLAGS}) + if defined $ENV{CFLAGS}; $self->{config}{cxx} = $ENV{CXX} if defined $ENV{CXX}; $self->{config}{cxxflags} = $ENV{CXXFLAGS} if defined $ENV{CXXFLAGS}; $self->{config}{ld} = $ENV{LD} if defined $ENV{LD}; - $self->{config}{ldflags} = $ENV{LDFLAGS} if defined $ENV{LDFLAGS}; + $self->{config}{ldflags} = join(" ", $self->{config}{ldflags}, $ENV{LDFLAGS}) + if defined $ENV{LDFLAGS}; unless ( exists $self->{config}{cxx} ) { my ($ccpath, $ccbase, $ccsfx ) = fileparse($self->{config}{cc}, qr/\.[^.]*/); @@ -64,7 +66,7 @@ sub new { } unless ( exists $self->{config}{cxx} ) { $self->{config}{cxx} = $self->{config}{cc}; - my $cflags = $self->{config}{cflags}; + my $cflags = $self->{config}{ccflags}; $self->{config}{cxxflags} = '-x c++'; $self->{config}{cxxflags} .= " $cflags" if defined $cflags; } diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Unix.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Unix.pm index c8610b3841c..4bc71939f6e 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Unix.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Unix.pm @@ -4,7 +4,7 @@ use strict; use ExtUtils::CBuilder::Base; use vars qw($VERSION @ISA); -$VERSION = '0.280203'; +$VERSION = '0.280206'; @ISA = qw(ExtUtils::CBuilder::Base); sub link_executable { diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/VMS.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/VMS.pm index 7e3120dc008..47238e8b025 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/VMS.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/VMS.pm @@ -4,7 +4,7 @@ use strict; use ExtUtils::CBuilder::Base; use vars qw($VERSION @ISA); -$VERSION = '0.280203'; +$VERSION = '0.280206'; @ISA = qw(ExtUtils::CBuilder::Base); use File::Spec::Functions qw(catfile catdir); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows.pm index 6e7d52384e5..080f2b4be71 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows.pm @@ -10,7 +10,7 @@ use ExtUtils::CBuilder::Base; use IO::File; use vars qw($VERSION @ISA); -$VERSION = '0.280203'; +$VERSION = '0.280206'; @ISA = qw(ExtUtils::CBuilder::Base); =begin comment diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm index 46938661253..01acec5d530 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm @@ -1,7 +1,7 @@ package ExtUtils::CBuilder::Platform::Windows::BCC; use vars qw($VERSION); -$VERSION = '0.280203'; +$VERSION = '0.280206'; sub format_compiler_cmd { my ($self, %spec) = @_; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm index afeeb7cd838..ccc575fb58f 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm @@ -1,7 +1,7 @@ package ExtUtils::CBuilder::Platform::Windows::GCC; use vars qw($VERSION); -$VERSION = '0.280203'; +$VERSION = '0.280206'; sub format_compiler_cmd { my ($self, %spec) = @_; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm index ad0695b5ae0..a847699ea64 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm @@ -1,7 +1,7 @@ package ExtUtils::CBuilder::Platform::Windows::MSVC; use vars qw($VERSION); -$VERSION = '0.280203'; +$VERSION = '0.280206'; sub arg_exec_file { my ($self, $file) = @_; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/aix.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/aix.pm index 358cf8516f8..2ed318b8854 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/aix.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/aix.pm @@ -5,7 +5,7 @@ use ExtUtils::CBuilder::Platform::Unix; use File::Spec; use vars qw($VERSION @ISA); -$VERSION = '0.280203'; +$VERSION = '0.280206'; @ISA = qw(ExtUtils::CBuilder::Platform::Unix); sub need_prelink { 1 } diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/cygwin.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/cygwin.pm index b1069296213..b30497ec8d6 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/cygwin.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/cygwin.pm @@ -5,7 +5,7 @@ use File::Spec; use ExtUtils::CBuilder::Platform::Unix; use vars qw($VERSION @ISA); -$VERSION = '0.280203'; +$VERSION = '0.280206'; @ISA = qw(ExtUtils::CBuilder::Platform::Unix); # TODO: If a specific exe_file name is requested, if the exe created diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/darwin.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/darwin.pm index 3a30e6f333b..62eddd7b014 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/darwin.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/darwin.pm @@ -4,7 +4,7 @@ use strict; use ExtUtils::CBuilder::Platform::Unix; use vars qw($VERSION @ISA); -$VERSION = '0.280203'; +$VERSION = '0.280206'; @ISA = qw(ExtUtils::CBuilder::Platform::Unix); sub compile { diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/dec_osf.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/dec_osf.pm index 5d0a7fd5020..587dbbd097f 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/dec_osf.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/dec_osf.pm @@ -6,7 +6,7 @@ use File::Spec; use vars qw($VERSION @ISA); @ISA = qw(ExtUtils::CBuilder::Platform::Unix); -$VERSION = '0.280203'; +$VERSION = '0.280206'; sub link_executable { my $self = shift; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/os2.pm b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/os2.pm index 828a9571682..531a812e358 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/os2.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/CBuilder/Platform/os2.pm @@ -4,7 +4,7 @@ use strict; use ExtUtils::CBuilder::Platform::Unix; use vars qw($VERSION @ISA); -$VERSION = '0.280203'; +$VERSION = '0.280206'; @ISA = qw(ExtUtils::CBuilder::Platform::Unix); sub need_prelink { 1 } @@ -57,9 +57,9 @@ sub extra_link_args_after_prelink { my ($self, %args) = @_; my @DEF = grep /\.def$/i, @{$args{prelink_res}}; - die "More than one .def files created by `prelink' stage" if @DEF > 1; + die "More than one .def files created by 'prelink' stage" if @DEF > 1; # XXXX No "$how" argument here, so how to test for dynamic link? - die "No .def file created by `prelink' stage" + die "No .def file created by 'prelink' stage" unless @DEF or not @{$args{prelink_res}}; my @after_libs = ($OS2::is_aout ? () diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Command/MM.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Command/MM.pm index 40bf780deab..8d82ee49b12 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Command/MM.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Command/MM.pm @@ -8,9 +8,9 @@ use warnings; require Exporter; our @ISA = qw(Exporter); -our @EXPORT = qw(test_harness pod2man perllocal_install uninstall +our @EXPORT = qw(test_harness pod2man perllocal_install uninstall warn_if_old_packlist); -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; my $Is_VMS = $^O eq 'VMS'; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Install.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Install.pm index 3b030a511af..7e4cd7fade0 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Install.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Install.pm @@ -38,11 +38,11 @@ ExtUtils::Install - install files from here to there =head1 VERSION -1.55 +1.58 =cut -$VERSION = '1.56'; # <---- dont forget to update the POD section just above this line! +$VERSION = '1.58'; # <---- dont forget to update the POD section just above this line! $VERSION = eval $VERSION; =pod @@ -73,10 +73,10 @@ has occured. If this value is defined but false then such an operation has ocurred, but should not impact later operations. -=begin _private - =over +=begin _private + =item _chmod($$;$) Wrapper to chmod() for debugging and error trapping. diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Installed.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Installed.pm index 9cb1fc10d75..b4b7f7580fa 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Installed.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Installed.pm @@ -17,7 +17,7 @@ my $DOSISH = ($^O =~ /^(MSWin\d\d|os2|dos|mint)$/); require VMS::Filespec if $Is_VMS; use vars qw($VERSION); -$VERSION = '1.999_001'; +$VERSION = '1.999002'; $VERSION = eval $VERSION; sub _is_prefix { @@ -162,7 +162,9 @@ sub new { } { my %dupe; - @{$self->{':private:'}{LIBDIRS}} = grep { -e $_ && !$dupe{$_}++ } + @{$self->{':private:'}{LIBDIRS}} = + grep { $_ ne '.' || ! $args{skip_cwd} } + grep { -e $_ && !$dupe{$_}++ } @{$self->{':private:'}{EXTRA}}, @{$self->{':private:'}{INC}}; } @@ -327,7 +329,7 @@ ExtUtils::Installed - Inventory management of installed modules =head1 SYNOPSIS use ExtUtils::Installed; - my ($inst) = ExtUtils::Installed->new(); + my ($inst) = ExtUtils::Installed->new( skip_cwd => 1 ); my (@modules) = $inst->modules(); my (@missing) = $inst->validate("DBI"); my $all_files = $inst->files("DBI"); @@ -369,6 +371,11 @@ information from C<%Config::Config> and the default module search paths C<@INC>. The packlists are read using the L module. +If the named parameter C is true, the current directory C<.> will +be stripped from C<@INC> before searching for .packlists. This keeps +ExtUtils::Installed from finding modules installed in other perls that +happen to be located below the current directory. + If the named parameter C is specified, it should be a reference to a hash which contains all information usually found in C<%Config::Config>. For example, you can obtain @@ -376,7 +383,8 @@ the configuration information for a separate perl installation and pass that in. my $yoda_cfg = get_fake_config('yoda'); - my $yoda_inst = ExtUtils::Installed->new(config_override=>$yoda_cfg); + my $yoda_inst = + ExtUtils::Installed->new(config_override=>$yoda_cfg); Similarly, the parameter C may be a reference to an array which is used in place of the default module search paths @@ -389,10 +397,11 @@ from C<@INC>. B: You probably do not want to use these options alone, almost always you will want to set both together. -The parameter c can be used to specify B paths to +The parameter C can be used to specify B paths to search for installed modules. For instance - my $installed = ExtUtils::Installed->new(extra_libs=>["/my/lib/path"]); + my $installed = + ExtUtils::Installed->new(extra_libs=>["/my/lib/path"]); This should only be necessary if C is not in PERL5LIB. diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Liblist.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Liblist.pm index 2184c4a6d7d..a2ef4268d1d 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Liblist.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Liblist.pm @@ -2,7 +2,7 @@ package ExtUtils::Liblist; use strict; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; use File::Spec; require ExtUtils::Liblist::Kid; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Liblist/Kid.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Liblist/Kid.pm index cf4826fe36f..eddcc72c749 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Liblist/Kid.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Liblist/Kid.pm @@ -6,214 +6,241 @@ package ExtUtils::Liblist::Kid; # $self is not a Makemaker. use 5.006; + # Broken out of MakeMaker from version 4.11 use strict; -our $VERSION = 6.57_05; +use warnings; +our $VERSION = '6.63_02'; -use Config; +use ExtUtils::MakeMaker::Config; use Cwd 'cwd'; use File::Basename; use File::Spec; sub ext { - if ($^O eq 'VMS') { return &_vms_ext; } - elsif($^O eq 'MSWin32') { return &_win32_ext; } - else { return &_unix_os2_ext; } + if ( $^O eq 'VMS' ) { return &_vms_ext; } + elsif ( $^O eq 'MSWin32' ) { return &_win32_ext; } + else { return &_unix_os2_ext; } } sub _unix_os2_ext { - my($self,$potential_libs, $verbose, $give_libs) = @_; + my ( $self, $potential_libs, $verbose, $give_libs ) = @_; $verbose ||= 0; - if ($^O =~ 'os2' and $Config{perllibs}) { - # Dynamic libraries are not transitive, so we may need including - # the libraries linked against perl.dll again. + if ( $^O =~ 'os2' and $Config{perllibs} ) { + + # Dynamic libraries are not transitive, so we may need including + # the libraries linked against perl.dll again. - $potential_libs .= " " if $potential_libs; - $potential_libs .= $Config{perllibs}; + $potential_libs .= " " if $potential_libs; + $potential_libs .= $Config{perllibs}; } - return ("", "", "", "", ($give_libs ? [] : ())) unless $potential_libs; + return ( "", "", "", "", ( $give_libs ? [] : () ) ) unless $potential_libs; warn "Potential libraries are '$potential_libs':\n" if $verbose; - my($so) = $Config{so}; - my($libs) = defined $Config{perllibs} ? $Config{perllibs} : $Config{libs}; + my ( $so ) = $Config{so}; + my ( $libs ) = defined $Config{perllibs} ? $Config{perllibs} : $Config{libs}; my $Config_libext = $Config{lib_ext} || ".a"; my $Config_dlext = $Config{dlext}; - # compute $extralibs, $bsloadlibs and $ldloadlibs from # $potential_libs # this is a rewrite of Andy Dougherty's extliblist in perl - my(@searchpath); # from "-L/path" entries in $potential_libs - my(@libpath) = split " ", $Config{'libpth'}; - my(@ldloadlibs, @bsloadlibs, @extralibs, @ld_run_path, %ld_run_path_seen); - my(@libs, %libs_seen); - my($fullname, @fullname); - my($pwd) = cwd(); # from Cwd.pm - my($found) = 0; - - foreach my $thislib (split ' ', $potential_libs) { - - # Handle possible linker path arguments. - if ($thislib =~ s/^(-[LR]|-Wl,-R)//){ # save path flag type - my($ptype) = $1; - unless (-d $thislib){ - warn "$ptype$thislib ignored, directory does not exist\n" - if $verbose; - next; - } - my($rtype) = $ptype; - if (($ptype eq '-R') or ($ptype eq '-Wl,-R')) { - if ($Config{'lddlflags'} =~ /-Wl,-R/) { - $rtype = '-Wl,-R'; - } elsif ($Config{'lddlflags'} =~ /-R/) { - $rtype = '-R'; - } - } - unless (File::Spec->file_name_is_absolute($thislib)) { - warn "Warning: $ptype$thislib changed to $ptype$pwd/$thislib\n"; - $thislib = $self->catdir($pwd,$thislib); - } - push(@searchpath, $thislib); - push(@extralibs, "$ptype$thislib"); - push(@ldloadlibs, "$rtype$thislib"); - next; - } - - # Handle possible library arguments. - unless ($thislib =~ s/^-l//){ - warn "Unrecognized argument in LIBS ignored: '$thislib'\n"; - next; - } - - my($found_lib)=0; - foreach my $thispth (@searchpath, @libpath) { - - # Try to find the full name of the library. We need this to - # determine whether it's a dynamically-loadable library or not. - # This tends to be subject to various os-specific quirks. - # For gcc-2.6.2 on linux (March 1995), DLD can not load - # .sa libraries, with the exception of libm.sa, so we - # deliberately skip them. - if (@fullname = - $self->lsdir($thispth,"^\Qlib$thislib.$so.\E[0-9]+")){ - # Take care that libfoo.so.10 wins against libfoo.so.9. - # Compare two libraries to find the most recent version - # number. E.g. if you have libfoo.so.9.0.7 and - # libfoo.so.10.1, first convert all digits into two - # decimal places. Then we'll add ".00" to the shorter - # strings so that we're comparing strings of equal length - # Thus we'll compare libfoo.so.09.07.00 with - # libfoo.so.10.01.00. Some libraries might have letters - # in the version. We don't know what they mean, but will - # try to skip them gracefully -- we'll set any letter to - # '0'. Finally, sort in reverse so we can take the - # first element. - - #TODO: iterate through the directory instead of sorting - - $fullname = "$thispth/" . - (sort { my($ma) = $a; - my($mb) = $b; - $ma =~ tr/A-Za-z/0/s; - $ma =~ s/\b(\d)\b/0$1/g; - $mb =~ tr/A-Za-z/0/s; - $mb =~ s/\b(\d)\b/0$1/g; - while (length($ma) < length($mb)) { $ma .= ".00"; } - while (length($mb) < length($ma)) { $mb .= ".00"; } - # Comparison deliberately backwards - $mb cmp $ma;} @fullname)[0]; - } elsif (-f ($fullname="$thispth/lib$thislib.$so") - && (($Config{'dlsrc'} ne "dl_dld.xs") || ($thislib eq "m"))){ - } elsif (-f ($fullname="$thispth/lib${thislib}_s$Config_libext") - && ($Config{'archname'} !~ /RM\d\d\d-svr4/) - && ($thislib .= "_s") ){ # we must explicitly use _s version - } elsif (-f ($fullname="$thispth/lib$thislib$Config_libext")){ - } elsif (defined($Config_dlext) - && -f ($fullname="$thispth/lib$thislib.$Config_dlext")){ - } elsif (-f ($fullname="$thispth/$thislib$Config_libext")){ - } elsif (-f ($fullname="$thispth/lib$thislib.dll$Config_libext")){ - } elsif (-f ($fullname="$thispth/Slib$thislib$Config_libext")){ - } elsif ($^O eq 'dgux' - && -l ($fullname="$thispth/lib$thislib$Config_libext") - && readlink($fullname) =~ /^elink:/s) { - # Some of DG's libraries look like misconnected symbolic - # links, but development tools can follow them. (They - # look like this: - # - # libm.a -> elink:${SDE_PATH:-/usr}/sde/\ - # ${TARGET_BINARY_INTERFACE:-m88kdgux}/usr/lib/libm.a - # - # , the compilation tools expand the environment variables.) - } else { - warn "$thislib not found in $thispth\n" if $verbose; - next; - } - warn "'-l$thislib' found at $fullname\n" if $verbose; - push @libs, $fullname unless $libs_seen{$fullname}++; - $found++; - $found_lib++; - - # Now update library lists - - # what do we know about this library... - my $is_dyna = ($fullname !~ /\Q$Config_libext\E\z/); - my $in_perl = ($libs =~ /\B-l\Q${thislib}\E\b/s); + my ( @searchpath ); # from "-L/path" entries in $potential_libs + my ( @libpath ) = split " ", $Config{'libpth'}; + my ( @ldloadlibs, @bsloadlibs, @extralibs, @ld_run_path, %ld_run_path_seen ); + my ( @libs, %libs_seen ); + my ( $fullname, @fullname ); + my ( $pwd ) = cwd(); # from Cwd.pm + my ( $found ) = 0; + + foreach my $thislib ( split ' ', $potential_libs ) { + + # Handle possible linker path arguments. + if ( $thislib =~ s/^(-[LR]|-Wl,-R)// ) { # save path flag type + my ( $ptype ) = $1; + unless ( -d $thislib ) { + warn "$ptype$thislib ignored, directory does not exist\n" + if $verbose; + next; + } + my ( $rtype ) = $ptype; + if ( ( $ptype eq '-R' ) or ( $ptype eq '-Wl,-R' ) ) { + if ( $Config{'lddlflags'} =~ /-Wl,-R/ ) { + $rtype = '-Wl,-R'; + } + elsif ( $Config{'lddlflags'} =~ /-R/ ) { + $rtype = '-R'; + } + } + unless ( File::Spec->file_name_is_absolute( $thislib ) ) { + warn "Warning: $ptype$thislib changed to $ptype$pwd/$thislib\n"; + $thislib = $self->catdir( $pwd, $thislib ); + } + push( @searchpath, $thislib ); + push( @extralibs, "$ptype$thislib" ); + push( @ldloadlibs, "$rtype$thislib" ); + next; + } + + # Handle possible library arguments. + unless ( $thislib =~ s/^-l// ) { + warn "Unrecognized argument in LIBS ignored: '$thislib'\n"; + next; + } + + my ( $found_lib ) = 0; + foreach my $thispth ( @searchpath, @libpath ) { + + # Try to find the full name of the library. We need this to + # determine whether it's a dynamically-loadable library or not. + # This tends to be subject to various os-specific quirks. + # For gcc-2.6.2 on linux (March 1995), DLD can not load + # .sa libraries, with the exception of libm.sa, so we + # deliberately skip them. + if ( @fullname = $self->lsdir( $thispth, "^\Qlib$thislib.$so.\E[0-9]+" ) ) { + + # Take care that libfoo.so.10 wins against libfoo.so.9. + # Compare two libraries to find the most recent version + # number. E.g. if you have libfoo.so.9.0.7 and + # libfoo.so.10.1, first convert all digits into two + # decimal places. Then we'll add ".00" to the shorter + # strings so that we're comparing strings of equal length + # Thus we'll compare libfoo.so.09.07.00 with + # libfoo.so.10.01.00. Some libraries might have letters + # in the version. We don't know what they mean, but will + # try to skip them gracefully -- we'll set any letter to + # '0'. Finally, sort in reverse so we can take the + # first element. + + #TODO: iterate through the directory instead of sorting + + $fullname = "$thispth/" . ( + sort { + my ( $ma ) = $a; + my ( $mb ) = $b; + $ma =~ tr/A-Za-z/0/s; + $ma =~ s/\b(\d)\b/0$1/g; + $mb =~ tr/A-Za-z/0/s; + $mb =~ s/\b(\d)\b/0$1/g; + while ( length( $ma ) < length( $mb ) ) { $ma .= ".00"; } + while ( length( $mb ) < length( $ma ) ) { $mb .= ".00"; } + + # Comparison deliberately backwards + $mb cmp $ma; + } @fullname + )[0]; + } + elsif ( -f ( $fullname = "$thispth/lib$thislib.$so" ) + && ( ( $Config{'dlsrc'} ne "dl_dld.xs" ) || ( $thislib eq "m" ) ) ) + { + } + elsif (-f ( $fullname = "$thispth/lib${thislib}_s$Config_libext" ) + && ( $Config{'archname'} !~ /RM\d\d\d-svr4/ ) + && ( $thislib .= "_s" ) ) + { # we must explicitly use _s version + } + elsif ( -f ( $fullname = "$thispth/lib$thislib$Config_libext" ) ) { + } + elsif ( defined( $Config_dlext ) + && -f ( $fullname = "$thispth/lib$thislib.$Config_dlext" ) ) + { + } + elsif ( -f ( $fullname = "$thispth/$thislib$Config_libext" ) ) { + } + elsif ( -f ( $fullname = "$thispth/lib$thislib.dll$Config_libext" ) ) { + } + elsif ( -f ( $fullname = "$thispth/Slib$thislib$Config_libext" ) ) { + } + elsif ($^O eq 'dgux' + && -l ( $fullname = "$thispth/lib$thislib$Config_libext" ) + && readlink( $fullname ) =~ /^elink:/s ) + { + + # Some of DG's libraries look like misconnected symbolic + # links, but development tools can follow them. (They + # look like this: + # + # libm.a -> elink:${SDE_PATH:-/usr}/sde/\ + # ${TARGET_BINARY_INTERFACE:-m88kdgux}/usr/lib/libm.a + # + # , the compilation tools expand the environment variables.) + } + else { + warn "$thislib not found in $thispth\n" if $verbose; + next; + } + warn "'-l$thislib' found at $fullname\n" if $verbose; + push @libs, $fullname unless $libs_seen{$fullname}++; + $found++; + $found_lib++; + + # Now update library lists + + # what do we know about this library... + my $is_dyna = ( $fullname !~ /\Q$Config_libext\E\z/ ); + my $in_perl = ( $libs =~ /\B-l\Q${thislib}\E\b/s ); # include the path to the lib once in the dynamic linker path # but only if it is a dynamic lib and not in Perl itself - my($fullnamedir) = dirname($fullname); + my ( $fullnamedir ) = dirname( $fullname ); push @ld_run_path, $fullnamedir - if $is_dyna && !$in_perl && - !$ld_run_path_seen{$fullnamedir}++; - - # Do not add it into the list if it is already linked in - # with the main perl executable. - # We have to special-case the NeXT, because math and ndbm - # are both in libsys_s - unless ($in_perl || - ($Config{'osname'} eq 'next' && - ($thislib eq 'm' || $thislib eq 'ndbm')) ){ - push(@extralibs, "-l$thislib"); - } - - # We might be able to load this archive file dynamically - if ( ($Config{'dlsrc'} =~ /dl_next/ && $Config{'osvers'} lt '4_0') - || ($Config{'dlsrc'} =~ /dl_dld/) ) - { - # We push -l$thislib instead of $fullname because - # it avoids hardwiring a fixed path into the .bs file. - # Mkbootstrap will automatically add dl_findfile() to - # the .bs file if it sees a name in the -l format. - # USE THIS, when dl_findfile() is fixed: - # push(@bsloadlibs, "-l$thislib"); - # OLD USE WAS while checking results against old_extliblist - push(@bsloadlibs, "$fullname"); - } else { - if ($is_dyna){ + if $is_dyna + && !$in_perl + && !$ld_run_path_seen{$fullnamedir}++; + + # Do not add it into the list if it is already linked in + # with the main perl executable. + # We have to special-case the NeXT, because math and ndbm + # are both in libsys_s + unless ( + $in_perl + || ( $Config{'osname'} eq 'next' + && ( $thislib eq 'm' || $thislib eq 'ndbm' ) ) + ) + { + push( @extralibs, "-l$thislib" ); + } + + # We might be able to load this archive file dynamically + if ( ( $Config{'dlsrc'} =~ /dl_next/ && $Config{'osvers'} lt '4_0' ) + || ( $Config{'dlsrc'} =~ /dl_dld/ ) ) + { + + # We push -l$thislib instead of $fullname because + # it avoids hardwiring a fixed path into the .bs file. + # Mkbootstrap will automatically add dl_findfile() to + # the .bs file if it sees a name in the -l format. + # USE THIS, when dl_findfile() is fixed: + # push(@bsloadlibs, "-l$thislib"); + # OLD USE WAS while checking results against old_extliblist + push( @bsloadlibs, "$fullname" ); + } + else { + if ( $is_dyna ) { + # For SunOS4, do not add in this shared library if # it is already linked in the main perl executable - push(@ldloadlibs, "-l$thislib") - unless ($in_perl and $^O eq 'sunos'); - } else { - push(@ldloadlibs, "-l$thislib"); - } - } - last; # found one here so don't bother looking further - } - warn "Note (probably harmless): " - ."No library found for -l$thislib\n" - unless $found_lib>0; + push( @ldloadlibs, "-l$thislib" ) + unless ( $in_perl and $^O eq 'sunos' ); + } + else { + push( @ldloadlibs, "-l$thislib" ); + } + } + last; # found one here so don't bother looking further + } + warn "Note (probably harmless): " . "No library found for -l$thislib\n" + unless $found_lib > 0; } - unless( $found ) { - return ('','','','', ($give_libs ? \@libs : ())); + unless ( $found ) { + return ( '', '', '', '', ( $give_libs ? \@libs : () ) ); } else { - return ("@extralibs", "@bsloadlibs", "@ldloadlibs", - join(":",@ld_run_path), ($give_libs ? \@libs : ())); + return ( "@extralibs", "@bsloadlibs", "@ldloadlibs", join( ":", @ld_run_path ), ( $give_libs ? \@libs : () ) ); } } @@ -221,329 +248,378 @@ sub _win32_ext { require Text::ParseWords; - my($self, $potential_libs, $verbose, $give_libs) = @_; + my ( $self, $potential_libs, $verbose, $give_libs ) = @_; $verbose ||= 0; # If user did not supply a list, we punt. # (caller should probably use the list in $Config{libs}) - return ("", "", "", "", ($give_libs ? [] : ())) unless $potential_libs; - - my $cc = $Config{cc}; - my $VC = $cc =~ /^cl/i; - my $BC = $cc =~ /^bcc/i; - my $GC = $cc =~ /^gcc/i; - my $so = $Config{'so'}; - my $libs = $Config{'perllibs'}; - my $libpth = $Config{'libpth'}; - my $libext = $Config{'lib_ext'} || ".lib"; - my(@libs, %libs_seen); - - if ($libs and $potential_libs !~ /:nodefault/i) { - # If Config.pm defines a set of default libs, we always - # tack them on to the user-supplied list, unless the user - # specified :nodefault - - $potential_libs .= " " if $potential_libs; - $potential_libs .= $libs; - } - warn "Potential libraries are '$potential_libs':\n" if $verbose; + return ( "", "", "", "", ( $give_libs ? [] : () ) ) unless $potential_libs; - # normalize to forward slashes - $libpth =~ s,\\,/,g; - $potential_libs =~ s,\\,/,g; + # TODO: make this use MM_Win32.pm's compiler detection + my %libs_seen; + my @extralibs; + my $cc = $Config{cc} || ''; + my $VC = $cc =~ /\bcl\b/i; + my $GC = $cc =~ /\bgcc\b/i; - # compute $extralibs from $potential_libs + my $libext = _win32_lib_extensions(); + my @searchpath = ( '' ); # from "-L/path" entries in $potential_libs + my @libpath = _win32_default_search_paths( $VC, $GC ); + my $pwd = cwd(); # from Cwd.pm + my $search = 1; - my @searchpath; # from "-L/path" in $potential_libs - my @libpath = Text::ParseWords::quotewords('\s+', 0, $libpth); - my @extralibs; - my $pwd = cwd(); # from Cwd.pm - my $lib = ''; - my $found = 0; - my $search = 1; - my($fullname); + # compute @extralibs from $potential_libs + my @lib_search_list = _win32_make_lib_search_list( $potential_libs, $verbose ); + for ( @lib_search_list ) { - # add "$Config{installarchlib}/CORE" to default search path - push @libpath, "$Config{installarchlib}/CORE"; + my $thislib = $_; - if ($VC and exists $ENV{LIB} and $ENV{LIB}) { - push @libpath, split /;/, $ENV{LIB}; - } + # see if entry is a flag + if ( /^:\w+$/ ) { + $search = 0 if lc eq ':nosearch'; + $search = 1 if lc eq ':search'; + _debug( "Ignoring unknown flag '$thislib'\n", $verbose ) if !/^:(no)?(search|default)$/i; + next; + } + + # if searching is disabled, do compiler-specific translations + unless ( $search ) { + s/^-l(.+)$/$1.lib/ unless $GC; + s/^-L/-libpath:/ if $VC; + push( @extralibs, $_ ); + next; + } - foreach (Text::ParseWords::quotewords('\s+', 0, $potential_libs)){ + # handle possible linker path arguments + if ( s/^-L// and not -d ) { + _debug( "$thislib ignored, directory does not exist\n", $verbose ); + next; + } + elsif ( -d ) { + unless ( File::Spec->file_name_is_absolute( $_ ) ) { + warn "Warning: '$thislib' changed to '-L$pwd/$_'\n"; + $_ = $self->catdir( $pwd, $_ ); + } + push( @searchpath, $_ ); + next; + } - my $thislib = $_; + my @paths = ( @searchpath, @libpath ); + my ( $fullname, $path ) = _win32_search_file( $thislib, $libext, \@paths, $verbose, $GC ); - # see if entry is a flag - if (/^:\w+$/) { - $search = 0 if lc eq ':nosearch'; - $search = 1 if lc eq ':search'; - warn "Ignoring unknown flag '$thislib'\n" - if $verbose and !/^:(no)?(search|default)$/i; - next; - } - - # if searching is disabled, do compiler-specific translations - unless ($search) { - s/^-l(.+)$/$1.lib/ unless $GC; - s/^-L/-libpath:/ if $VC; - push(@extralibs, $_); - $found++; - next; - } - - # handle possible linker path arguments - if (s/^-L// and not -d) { - warn "$thislib ignored, directory does not exist\n" - if $verbose; - next; - } - elsif (-d) { - unless (File::Spec->file_name_is_absolute($_)) { - warn "Warning: '$thislib' changed to '-L$pwd/$_'\n"; - $_ = $self->catdir($pwd,$_); - } - push(@searchpath, $_); - next; - } - - # handle possible library arguments - if (s/^-l// and $GC and !/^lib/i) { - $_ = "lib$_"; - } - $_ .= $libext if !/\Q$libext\E$/i; - - my $secondpass = 0; - LOOKAGAIN: - - # look for the file itself - if (-f) { - warn "'$thislib' found as '$_'\n" if $verbose; - $found++; - push(@extralibs, $_); - next; - } - - my $found_lib = 0; - foreach my $thispth (@searchpath, @libpath){ - unless (-f ($fullname="$thispth\\$_")) { - warn "'$thislib' not found as '$fullname'\n" if $verbose; - next; - } - warn "'$thislib' found as '$fullname'\n" if $verbose; - $found++; - $found_lib++; - push(@extralibs, $fullname); - push @libs, $fullname unless $libs_seen{$fullname}++; - last; - } - - # do another pass with (or without) leading 'lib' if they used -l - if (!$found_lib and $thislib =~ /^-l/ and !$secondpass++) { - if ($GC) { - goto LOOKAGAIN if s/^lib//i; - } - elsif (!/^lib/i) { - $_ = "lib$_"; - goto LOOKAGAIN; - } - } - - # give up - warn "Note (probably harmless): " - ."No library found for $thislib\n" - unless $found_lib>0; + if ( !$fullname ) { + warn "Note (probably harmless): No library found for $thislib\n"; + next; + } + _debug( "'$thislib' found as '$fullname'\n", $verbose ); + push( @extralibs, $fullname ); + $libs_seen{$fullname} = 1 if $path; # why is this a special case? } - return ('','','','', ($give_libs ? \@libs : ())) unless $found; + my @libs = keys %libs_seen; + + return ( '', '', '', '', ( $give_libs ? \@libs : () ) ) unless @extralibs; # make sure paths with spaces are properly quoted - @extralibs = map { (/\s/ && !/^".*"$/) ? qq["$_"] : $_ } @extralibs; - @libs = map { (/\s/ && !/^".*"$/) ? qq["$_"] : $_ } @libs; - $lib = join(' ',@extralibs); + @extralibs = map { /\s/ ? qq["$_"] : $_ } @extralibs; + @libs = map { /\s/ ? qq["$_"] : $_ } @libs; + + my $lib = join( ' ', @extralibs ); # normalize back to backward slashes (to help braindead tools) # XXX this may break equally braindead GNU tools that don't understand # backslashes, either. Seems like one can't win here. Cursed be CP/M. $lib =~ s,/,\\,g; - warn "Result: $lib\n" if $verbose; - wantarray ? ($lib, '', $lib, '', ($give_libs ? \@libs : ())) : $lib; + _debug( "Result: $lib\n", $verbose ); + wantarray ? ( $lib, '', $lib, '', ( $give_libs ? \@libs : () ) ) : $lib; } +sub _win32_make_lib_search_list { + my ( $potential_libs, $verbose ) = @_; -sub _vms_ext { - my($self, $potential_libs, $verbose, $give_libs) = @_; - $verbose ||= 0; - - my(@crtls,$crtlstr); - @crtls = ( ($Config{'ldflags'} =~ m-/Debug-i ? $Config{'dbgprefix'} : '') - . 'PerlShr/Share' ); - push(@crtls, grep { not /\(/ } split /\s+/, $Config{'perllibs'}); - push(@crtls, grep { not /\(/ } split /\s+/, $Config{'libc'}); - # In general, we pass through the basic libraries from %Config unchanged. - # The one exception is that if we're building in the Perl source tree, and - # a library spec could be resolved via a logical name, we go to some trouble - # to insure that the copy in the local tree is used, rather than one to - # which a system-wide logical may point. - if ($self->{PERL_SRC}) { - my($locspec,$type); - foreach my $lib (@crtls) { - if (($locspec,$type) = $lib =~ m{^([\w\$-]+)(/\w+)?} and $locspec =~ /perl/i) { - if (lc $type eq '/share') { $locspec .= $Config{'exe_ext'}; } - elsif (lc $type eq '/library') { $locspec .= $Config{'lib_ext'}; } - else { $locspec .= $Config{'obj_ext'}; } - $locspec = $self->catfile($self->{PERL_SRC},$locspec); - $lib = "$locspec$type" if -e $locspec; - } - } - } - $crtlstr = @crtls ? join(' ',@crtls) : ''; - - unless ($potential_libs) { - warn "Result:\n\tEXTRALIBS: \n\tLDLOADLIBS: $crtlstr\n" if $verbose; - return ('', '', $crtlstr, '', ($give_libs ? [] : ())); - } - - my(%found,@fndlibs,$ldlib); - my $cwd = cwd(); - my($so,$lib_ext,$obj_ext) = @Config{'so','lib_ext','obj_ext'}; - # List of common Unix library names and their VMS equivalents - # (VMS equivalent of '' indicates that the library is automatically - # searched by the linker, and should be skipped here.) - my(@flibs, %libs_seen); - my %libmap = ( 'm' => '', 'f77' => '', 'F77' => '', 'V77' => '', 'c' => '', - 'malloc' => '', 'crypt' => '', 'resolv' => '', 'c_s' => '', - 'socket' => '', 'X11' => 'DECW$XLIBSHR', - 'Xt' => 'DECW$XTSHR', 'Xm' => 'DECW$XMLIBSHR', - 'Xmu' => 'DECW$XMULIBSHR'); - if ($Config{'vms_cc_type'} ne 'decc') { $libmap{'curses'} = 'VAXCCURSE'; } - - warn "Potential libraries are '$potential_libs'\n" if $verbose; - - # First, sort out directories and library names in the input - my(@dirs, @libs); - foreach my $lib (split ' ',$potential_libs) { - push(@dirs,$1), next if $lib =~ /^-L(.*)/; - push(@dirs,$lib), next if $lib =~ /[:>\]]$/; - push(@dirs,$lib), next if -d $lib; - push(@libs,$1), next if $lib =~ /^-l(.*)/; - push(@libs,$lib); - } - push(@dirs,split(' ',$Config{'libpth'})); - - # Now make sure we've got VMS-syntax absolute directory specs - # (We don't, however, check whether someone's hidden a relative - # path in a logical name.) - foreach my $dir (@dirs) { - unless (-d $dir) { - warn "Skipping nonexistent Directory $dir\n" if $verbose > 1; - $dir = ''; - next; - } - warn "Resolving directory $dir\n" if $verbose; - if (File::Spec->file_name_is_absolute($dir)) { - $dir = $self->fixpath($dir,1); - } - else { - $dir = $self->catdir($cwd,$dir); + # If Config.pm defines a set of default libs, we always + # tack them on to the user-supplied list, unless the user + # specified :nodefault + my $libs = $Config{'perllibs'}; + $potential_libs = join( ' ', $potential_libs, $libs ) if $libs and $potential_libs !~ /:nodefault/i; + _debug( "Potential libraries are '$potential_libs':\n", $verbose ); + + $potential_libs =~ s,\\,/,g; # normalize to forward slashes + + my @list = Text::ParseWords::quotewords( '\s+', 0, $potential_libs ); + + return @list; +} + +sub _win32_default_search_paths { + my ( $VC, $GC ) = @_; + + my $libpth = $Config{'libpth'} || ''; + $libpth =~ s,\\,/,g; # normalize to forward slashes + + my @libpath = Text::ParseWords::quotewords( '\s+', 0, $libpth ); + push @libpath, "$Config{installarchlib}/CORE"; # add "$Config{installarchlib}/CORE" to default search path + + push @libpath, split /;/, $ENV{LIB} if $VC and $ENV{LIB}; + push @libpath, split /;/, $ENV{LIBRARY_PATH} if $GC and $ENV{LIBRARY_PATH}; + + return @libpath; +} + +sub _win32_search_file { + my ( $thislib, $libext, $paths, $verbose, $GC ) = @_; + + my @file_list = _win32_build_file_list( $thislib, $GC, $libext ); + + for my $lib_file ( @file_list ) { + for my $path ( @{$paths} ) { + my $fullname = $lib_file; + $fullname = "$path\\$fullname" if $path; + + return ( $fullname, $path ) if -f $fullname; + + _debug( "'$thislib' not found as '$fullname'\n", $verbose ); + } } - } - @dirs = grep { length($_) } @dirs; - unshift(@dirs,''); # Check each $lib without additions first - - LIB: foreach my $lib (@libs) { - if (exists $libmap{$lib}) { - next unless length $libmap{$lib}; - $lib = $libmap{$lib}; + + return; +} + +sub _win32_build_file_list { + my ( $lib, $GC, $extensions ) = @_; + + my @pre_fixed = _win32_build_prefixed_list( $lib, $GC ); + return map _win32_attach_extensions( $_, $extensions ), @pre_fixed; +} + +sub _win32_build_prefixed_list { + my ( $lib, $GC ) = @_; + + return $lib if $lib !~ s/^-l//; + return $lib if $lib =~ /^lib/ and !$GC; + + ( my $no_prefix = $lib ) =~ s/^lib//i; + $lib = "lib$lib" if $no_prefix eq $lib; + + return ( $lib, $no_prefix ) if $GC; + return ( $no_prefix, $lib ); +} + +sub _win32_attach_extensions { + my ( $lib, $extensions ) = @_; + return map _win32_try_attach_extension( $lib, $_ ), @{$extensions}; +} + +sub _win32_try_attach_extension { + my ( $lib, $extension ) = @_; + + return $lib if $lib =~ /\Q$extension\E$/i; + return "$lib$extension"; +} + +sub _win32_lib_extensions { + my %extensions; + $extensions{ $Config{'lib_ext'} } = 1 if $Config{'lib_ext'}; + $extensions{".lib"} = 1; + return [ keys %extensions ]; +} + +sub _debug { + my ( $message, $verbose ) = @_; + return if !$verbose; + warn $message; + return; +} + +sub _vms_ext { + my ( $self, $potential_libs, $verbose, $give_libs ) = @_; + $verbose ||= 0; + + my ( @crtls, $crtlstr ); + @crtls = ( ( $Config{'ldflags'} =~ m-/Debug-i ? $Config{'dbgprefix'} : '' ) . 'PerlShr/Share' ); + push( @crtls, grep { not /\(/ } split /\s+/, $Config{'perllibs'} ); + push( @crtls, grep { not /\(/ } split /\s+/, $Config{'libc'} ); + + # In general, we pass through the basic libraries from %Config unchanged. + # The one exception is that if we're building in the Perl source tree, and + # a library spec could be resolved via a logical name, we go to some trouble + # to insure that the copy in the local tree is used, rather than one to + # which a system-wide logical may point. + if ( $self->{PERL_SRC} ) { + my ( $locspec, $type ); + foreach my $lib ( @crtls ) { + if ( ( $locspec, $type ) = $lib =~ m{^([\w\$-]+)(/\w+)?} and $locspec =~ /perl/i ) { + if ( lc $type eq '/share' ) { $locspec .= $Config{'exe_ext'}; } + elsif ( lc $type eq '/library' ) { $locspec .= $Config{'lib_ext'}; } + else { $locspec .= $Config{'obj_ext'}; } + $locspec = $self->catfile( $self->{PERL_SRC}, $locspec ); + $lib = "$locspec$type" if -e $locspec; + } + } } + $crtlstr = @crtls ? join( ' ', @crtls ) : ''; - my(@variants,$cand); - my($ctype) = ''; + unless ( $potential_libs ) { + warn "Result:\n\tEXTRALIBS: \n\tLDLOADLIBS: $crtlstr\n" if $verbose; + return ( '', '', $crtlstr, '', ( $give_libs ? [] : () ) ); + } - # If we don't have a file type, consider it a possibly abbreviated name and - # check for common variants. We try these first to grab libraries before - # a like-named executable image (e.g. -lperl resolves to perlshr.exe - # before perl.exe). - if ($lib !~ /\.[^:>\]]*$/) { - push(@variants,"${lib}shr","${lib}rtl","${lib}lib"); - push(@variants,"lib$lib") if $lib !~ /[:>\]]/; + my ( %found, @fndlibs, $ldlib ); + my $cwd = cwd(); + my ( $so, $lib_ext, $obj_ext ) = @Config{ 'so', 'lib_ext', 'obj_ext' }; + + # List of common Unix library names and their VMS equivalents + # (VMS equivalent of '' indicates that the library is automatically + # searched by the linker, and should be skipped here.) + my ( @flibs, %libs_seen ); + my %libmap = ( + 'm' => '', + 'f77' => '', + 'F77' => '', + 'V77' => '', + 'c' => '', + 'malloc' => '', + 'crypt' => '', + 'resolv' => '', + 'c_s' => '', + 'socket' => '', + 'X11' => 'DECW$XLIBSHR', + 'Xt' => 'DECW$XTSHR', + 'Xm' => 'DECW$XMLIBSHR', + 'Xmu' => 'DECW$XMULIBSHR' + ); + if ( $Config{'vms_cc_type'} ne 'decc' ) { $libmap{'curses'} = 'VAXCCURSE'; } + + warn "Potential libraries are '$potential_libs'\n" if $verbose; + + # First, sort out directories and library names in the input + my ( @dirs, @libs ); + foreach my $lib ( split ' ', $potential_libs ) { + push( @dirs, $1 ), next if $lib =~ /^-L(.*)/; + push( @dirs, $lib ), next if $lib =~ /[:>\]]$/; + push( @dirs, $lib ), next if -d $lib; + push( @libs, $1 ), next if $lib =~ /^-l(.*)/; + push( @libs, $lib ); } - push(@variants,$lib); - warn "Looking for $lib\n" if $verbose; - foreach my $variant (@variants) { - my($fullname, $name); - - foreach my $dir (@dirs) { - my($type); - - $name = "$dir$variant"; - warn "\tChecking $name\n" if $verbose > 2; - $fullname = VMS::Filespec::rmsexpand($name); - if (defined $fullname and -f $fullname) { - # It's got its own suffix, so we'll have to figure out the type - if ($fullname =~ /(?:$so|exe)$/i) { $type = 'SHR'; } - elsif ($fullname =~ /(?:$lib_ext|olb)$/i) { $type = 'OLB'; } - elsif ($fullname =~ /(?:$obj_ext|obj)$/i) { - warn "Note (probably harmless): " - ."Plain object file $fullname found in library list\n"; - $type = 'OBJ'; - } - else { - warn "Note (probably harmless): " - ."Unknown library type for $fullname; assuming shared\n"; - $type = 'SHR'; - } + push( @dirs, split( ' ', $Config{'libpth'} ) ); + + # Now make sure we've got VMS-syntax absolute directory specs + # (We don't, however, check whether someone's hidden a relative + # path in a logical name.) + foreach my $dir ( @dirs ) { + unless ( -d $dir ) { + warn "Skipping nonexistent Directory $dir\n" if $verbose > 1; + $dir = ''; + next; } - elsif (-f ($fullname = VMS::Filespec::rmsexpand($name,$so)) or - -f ($fullname = VMS::Filespec::rmsexpand($name,'.exe'))) { - $type = 'SHR'; - $name = $fullname unless $fullname =~ /exe;?\d*$/i; + warn "Resolving directory $dir\n" if $verbose; + if ( File::Spec->file_name_is_absolute( $dir ) ) { + $dir = $self->fixpath( $dir, 1 ); } - elsif (not length($ctype) and # If we've got a lib already, - # don't bother - ( -f ($fullname = VMS::Filespec::rmsexpand($name,$lib_ext)) or - -f ($fullname = VMS::Filespec::rmsexpand($name,'.olb')))) { - $type = 'OLB'; - $name = $fullname unless $fullname =~ /olb;?\d*$/i; + else { + $dir = $self->catdir( $cwd, $dir ); } - elsif (not length($ctype) and # If we've got a lib already, - # don't bother - ( -f ($fullname = VMS::Filespec::rmsexpand($name,$obj_ext)) or - -f ($fullname = VMS::Filespec::rmsexpand($name,'.obj')))) { - warn "Note (probably harmless): " - ."Plain object file $fullname found in library list\n"; - $type = 'OBJ'; - $name = $fullname unless $fullname =~ /obj;?\d*$/i; + } + @dirs = grep { length( $_ ) } @dirs; + unshift( @dirs, '' ); # Check each $lib without additions first + + LIB: foreach my $lib ( @libs ) { + if ( exists $libmap{$lib} ) { + next unless length $libmap{$lib}; + $lib = $libmap{$lib}; } - if (defined $type) { - $ctype = $type; $cand = $name; - last if $ctype eq 'SHR'; + + my ( @variants, $cand ); + my ( $ctype ) = ''; + + # If we don't have a file type, consider it a possibly abbreviated name and + # check for common variants. We try these first to grab libraries before + # a like-named executable image (e.g. -lperl resolves to perlshr.exe + # before perl.exe). + if ( $lib !~ /\.[^:>\]]*$/ ) { + push( @variants, "${lib}shr", "${lib}rtl", "${lib}lib" ); + push( @variants, "lib$lib" ) if $lib !~ /[:>\]]/; + } + push( @variants, $lib ); + warn "Looking for $lib\n" if $verbose; + foreach my $variant ( @variants ) { + my ( $fullname, $name ); + + foreach my $dir ( @dirs ) { + my ( $type ); + + $name = "$dir$variant"; + warn "\tChecking $name\n" if $verbose > 2; + $fullname = VMS::Filespec::rmsexpand( $name ); + if ( defined $fullname and -f $fullname ) { + + # It's got its own suffix, so we'll have to figure out the type + if ( $fullname =~ /(?:$so|exe)$/i ) { $type = 'SHR'; } + elsif ( $fullname =~ /(?:$lib_ext|olb)$/i ) { $type = 'OLB'; } + elsif ( $fullname =~ /(?:$obj_ext|obj)$/i ) { + warn "Note (probably harmless): " . "Plain object file $fullname found in library list\n"; + $type = 'OBJ'; + } + else { + warn "Note (probably harmless): " . "Unknown library type for $fullname; assuming shared\n"; + $type = 'SHR'; + } + } + elsif (-f ( $fullname = VMS::Filespec::rmsexpand( $name, $so ) ) + or -f ( $fullname = VMS::Filespec::rmsexpand( $name, '.exe' ) ) ) + { + $type = 'SHR'; + $name = $fullname unless $fullname =~ /exe;?\d*$/i; + } + elsif ( + not length( $ctype ) and # If we've got a lib already, + # don't bother + ( -f ( $fullname = VMS::Filespec::rmsexpand( $name, $lib_ext ) ) or -f ( $fullname = VMS::Filespec::rmsexpand( $name, '.olb' ) ) ) + ) + { + $type = 'OLB'; + $name = $fullname unless $fullname =~ /olb;?\d*$/i; + } + elsif ( + not length( $ctype ) and # If we've got a lib already, + # don't bother + ( -f ( $fullname = VMS::Filespec::rmsexpand( $name, $obj_ext ) ) or -f ( $fullname = VMS::Filespec::rmsexpand( $name, '.obj' ) ) ) + ) + { + warn "Note (probably harmless): " . "Plain object file $fullname found in library list\n"; + $type = 'OBJ'; + $name = $fullname unless $fullname =~ /obj;?\d*$/i; + } + if ( defined $type ) { + $ctype = $type; + $cand = $name; + last if $ctype eq 'SHR'; + } + } + if ( $ctype ) { + + # This has to precede any other CRTLs, so just make it first + if ( $cand eq 'VAXCCURSE' ) { unshift @{ $found{$ctype} }, $cand; } + else { push @{ $found{$ctype} }, $cand; } + warn "\tFound as $cand (really $fullname), type $ctype\n" + if $verbose > 1; + push @flibs, $name unless $libs_seen{$fullname}++; + next LIB; + } } - } - if ($ctype) { - # This has to precede any other CRTLs, so just make it first - if ($cand eq 'VAXCCURSE') { unshift @{$found{$ctype}}, $cand; } - else { push @{$found{$ctype}}, $cand; } - warn "\tFound as $cand (really $fullname), type $ctype\n" - if $verbose > 1; - push @flibs, $name unless $libs_seen{$fullname}++; - next LIB; - } + warn "Note (probably harmless): " . "No library found for $lib\n"; } - warn "Note (probably harmless): " - ."No library found for $lib\n"; - } - - push @fndlibs, @{$found{OBJ}} if exists $found{OBJ}; - push @fndlibs, map { "$_/Library" } @{$found{OLB}} if exists $found{OLB}; - push @fndlibs, map { "$_/Share" } @{$found{SHR}} if exists $found{SHR}; - my $lib = join(' ',@fndlibs); - - $ldlib = $crtlstr ? "$lib $crtlstr" : $lib; - warn "Result:\n\tEXTRALIBS: $lib\n\tLDLOADLIBS: $ldlib\n" if $verbose; - wantarray ? ($lib, '', $ldlib, '', ($give_libs ? \@flibs : ())) : $lib; + + push @fndlibs, @{ $found{OBJ} } if exists $found{OBJ}; + push @fndlibs, map { "$_/Library" } @{ $found{OLB} } if exists $found{OLB}; + push @fndlibs, map { "$_/Share" } @{ $found{SHR} } if exists $found{SHR}; + my $lib = join( ' ', @fndlibs ); + + $ldlib = $crtlstr ? "$lib $crtlstr" : $lib; + warn "Result:\n\tEXTRALIBS: $lib\n\tLDLOADLIBS: $ldlib\n" if $verbose; + wantarray ? ( $lib, '', $ldlib, '', ( $give_libs ? \@flibs : () ) ) : $lib; } 1; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM.pm index 945f24513b7..418eb190dd1 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM.pm @@ -3,7 +3,7 @@ package ExtUtils::MM; use strict; use ExtUtils::MakeMaker::Config; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; require ExtUtils::Liblist; require ExtUtils::MakeMaker; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_AIX.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_AIX.pm index 021238523e1..0b0547ff521 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_AIX.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_AIX.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_AIX; use strict; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; require ExtUtils::MM_Unix; our @ISA = qw(ExtUtils::MM_Unix); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Any.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Any.pm index a38f2740f7f..fd856129af3 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Any.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Any.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_Any; use strict; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; use Carp; use File::Spec; @@ -206,25 +206,40 @@ sub _expand_macros { my @commands = $MM->echo($text); my @commands = $MM->echo($text, $file); - my @commands = $MM->echo($text, $file, $appending); + my @commands = $MM->echo($text, $file, \%opts); Generates a set of @commands which print the $text to a $file. If $file is not given, output goes to STDOUT. -If $appending is true the $file will be appended to rather than -overwritten. +If $opts{append} is true the $file will be appended to rather than +overwritten. Default is to overwrite. + +If $opts{allow_variables} is true, make variables of the form +C<$(...)> will not be escaped. Other C<$> will. Default is to escape +all C<$>. + +Example of use: + + my $make = map "\t$_\n", $MM->echo($text, $file); =cut sub echo { - my($self, $text, $file, $appending) = @_; - $appending ||= 0; + my($self, $text, $file, $opts) = @_; - my @cmds = map { '$(NOECHO) $(ECHO) '.$self->quote_literal($_) } + # Compatibility with old options + if( !ref $opts ) { + my $append = $opts; + $opts = { append => $append || 0 }; + } + $opts->{allow_variables} = 0 unless defined $opts->{allow_variables}; + + my $ql_opts = { allow_variables => $opts->{allow_variables} }; + my @cmds = map { '$(NOECHO) $(ECHO) '.$self->quote_literal($_, $ql_opts) } split /\n/, $text; if( $file ) { - my $redirect = $appending ? '>>' : '>'; + my $redirect = $opts->{append} ? '>>' : '>'; $cmds[0] .= " $redirect $file"; $_ .= " >> $file" foreach @cmds[1..$#cmds]; } @@ -334,12 +349,54 @@ to include more flexible code and switches. =head3 quote_literal I my $safe_text = $MM->quote_literal($text); + my $safe_text = $MM->quote_literal($text, \%options); This will quote $text so it is interpreted literally in the shell. For example, on Unix this would escape any single-quotes in $text and put single-quotes around the whole thing. +If $options{allow_variables} is true it will leave C<'$(FOO)'> make +variables untouched. If false they will be escaped like any other +C<$>. Defaults to true. + +=head3 escape_dollarsigns + + my $escaped_text = $MM->escape_dollarsigns($text); + +Escapes stray C<$> so they are not interpreted as make variables. + +It lets by C<$(...)>. + +=cut + +sub escape_dollarsigns { + my($self, $text) = @_; + + # Escape dollar signs which are not starting a variable + $text =~ s{\$ (?!\() }{\$\$}gx; + + return $text; +} + + +=head3 escape_all_dollarsigns + + my $escaped_text = $MM->escape_all_dollarsigns($text); + +Escapes all C<$> so they are not interpreted as make variables. + +=cut + +sub escape_all_dollarsigns { + my($self, $text) = @_; + + # Escape dollar signs + $text =~ s{\$}{\$\$}gx; + + return $text; +} + =head3 escape_newlines I @@ -486,8 +543,8 @@ clean :: clean_subdirs split /\s+/, $attribs{FILES} ; } - push(@files, qw[$(MAKE_APERL_FILE) - MYMETA.yml perlmain.c tmon.out mon.out so_locations + push(@files, qw[$(MAKE_APERL_FILE) + MYMETA.json MYMETA.yml perlmain.c tmon.out mon.out so_locations blibdirs.ts pm_to_blib pm_to_blib.ts *$(OBJ_EXT) *$(LIB_EXT) perl.exe perl perl$(EXE_EXT) $(BOOTSTRAP) $(BASEEXT).bso @@ -728,6 +785,13 @@ CMD return $manify; } +sub _has_cpan_meta { + return eval { + require CPAN::Meta; + CPAN::Meta->VERSION(2.112150); + 1; + }; +} =head3 metafile_target @@ -743,28 +807,111 @@ possible. sub metafile_target { my $self = shift; - - return <<'MAKE_FRAG' if $self->{NO_META}; + return <<'MAKE_FRAG' if $self->{NO_META} or ! _has_cpan_meta(); metafile : $(NOECHO) $(NOOP) MAKE_FRAG - my @metadata = $self->metafile_data( + my %metadata = $self->metafile_data( $self->{META_ADD} || {}, $self->{META_MERGE} || {}, ); - my $meta = $self->metafile_file(@metadata); - my @write_meta = $self->echo($meta, 'META_new.yml'); + + _fix_metadata_before_conversion( \%metadata ); + + # paper over validation issues, but still complain, necessary because + # there's no guarantee that the above will fix ALL errors + my $meta = eval { CPAN::Meta->create( \%metadata, { lazy_validation => 1 } ) }; + warn $@ if $@ and + $@ !~ /encountered CODE.*, but JSON can only represent references to arrays or hashes/; + + # use the original metadata straight if the conversion failed + # or if it can't be stringified. + if( !$meta || + !eval { $meta->as_string( { version => "1.4" } ) } || + !eval { $meta->as_string } + ) + { + $meta = bless \%metadata, 'CPAN::Meta'; + } - return sprintf <<'MAKE_FRAG', join("\n\t", @write_meta); + my @write_metayml = $self->echo( + $meta->as_string({version => "1.4"}), 'META_new.yml' + ); + my @write_metajson = $self->echo( + $meta->as_string(), 'META_new.json' + ); + + my $metayml = join("\n\t", @write_metayml); + my $metajson = join("\n\t", @write_metajson); + return sprintf <<'MAKE_FRAG', $metayml, $metajson; metafile : create_distdir $(NOECHO) $(ECHO) Generating META.yml %s -$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml + $(NOECHO) $(ECHO) Generating META.json + %s + -$(NOECHO) $(MV) META_new.json $(DISTVNAME)/META.json MAKE_FRAG } +=begin private + +=head3 _fix_metadata_before_conversion + + _fix_metadata_before_conversion( \%metadata ); + +Fixes errors in the metadata before it's handed off to CPAN::Meta for +conversion. This hopefully results in something that can be used further +on, no guarantee is made though. + +=end private + +=cut + +sub _fix_metadata_before_conversion { + my ( $metadata ) = @_; + + # we should never be called unless this already passed but + # prefer to be defensive in case somebody else calls this + + return unless _has_cpan_meta; + + my $bad_version = $metadata->{version} && + !CPAN::Meta::Validator->new->version( 'version', $metadata->{version} ); + + # just delete all invalid versions + if( $bad_version ) { + warn "Can't parse version '$metadata->{version}'\n"; + $metadata->{version} = ''; + } + + my $validator = CPAN::Meta::Validator->new( $metadata ); + return if $validator->is_valid; + + # fix non-camelcase custom resource keys (only other trick we know) + for my $error ( $validator->errors ) { + my ( $key ) = ( $error =~ /Custom resource '(.*)' must be in CamelCase./ ); + next if !$key; + + # first try to remove all non-alphabetic chars + ( my $new_key = $key ) =~ s/[^_a-zA-Z]//g; + + # if that doesn't work, uppercase first one + $new_key = ucfirst $new_key if !$validator->custom_1( $new_key ); + + # copy to new key if that worked + $metadata->{resources}{$new_key} = $metadata->{resources}{$key} + if $validator->custom_1( $new_key ); + + # and delete old one in any case + delete $metadata->{resources}{$key}; + } + + return; +} + =begin private @@ -816,57 +963,16 @@ sub metafile_data { my $self = shift; my($meta_add, $meta_merge) = @_; - # The order in which standard meta keys should be written. - my @meta_order = qw( - name - version - abstract - author - license - distribution_type - - configure_requires - build_requires - requires - - resources - - provides - no_index - - generated_by - meta-spec - ); - - # Check the original args so we can tell between the user setting it - # to an empty hash and it just being initialized. - my $configure_requires; - if( $self->{ARGS}{CONFIGURE_REQUIRES} ) { - $configure_requires = $self->{CONFIGURE_REQUIRES}; - } else { - $configure_requires = { - 'ExtUtils::MakeMaker' => 0, - }; - } - my $build_requires; - if( $self->{ARGS}{BUILD_REQUIRES} ) { - $build_requires = $self->{BUILD_REQUIRES}; - } else { - $build_requires = { - 'ExtUtils::MakeMaker' => 0, - }; - } - my %meta = ( + # required name => $self->{DISTNAME}, - version => $self->{VERSION}, - abstract => $self->{ABSTRACT}, + version => _normalize_version($self->{VERSION}), + abstract => $self->{ABSTRACT} || 'unknown', license => $self->{LICENSE} || 'unknown', - distribution_type => $self->{PM} ? 'module' : 'script', + dynamic_config => 1, - configure_requires => $configure_requires, - - build_requires => $build_requires, + # optional + distribution_type => $self->{PM} ? 'module' : 'script', no_index => { directory => [qw(t inc)] @@ -882,8 +988,18 @@ sub metafile_data { # The author key is required and it takes a list. $meta{author} = defined $self->{AUTHOR} ? $self->{AUTHOR} : []; - $meta{requires} = $self->{PREREQ_PM} if defined $self->{PREREQ_PM}; - $meta{requires}{perl} = $self->{MIN_PERL_VERSION} if $self->{MIN_PERL_VERSION}; + # Check the original args so we can tell between the user setting it + # to an empty hash and it just being initialized. + if( $self->{ARGS}{CONFIGURE_REQUIRES} ) { + $meta{configure_requires} + = _normalize_prereqs($self->{CONFIGURE_REQUIRES}); + } else { + $meta{configure_requires} = { + 'ExtUtils::MakeMaker' => 0, + }; + } + + %meta = $self->_add_requirements_to_meta( %meta ); while( my($key, $val) = each %$meta_add ) { $meta{$key} = $val; @@ -893,24 +1009,62 @@ sub metafile_data { $self->_hash_merge(\%meta, $key, $val); } - my @meta_pairs; + return %meta; +} - # Put the standard keys first in the proper order. - for my $key (@meta_order) { - next unless exists $meta{$key}; - push @meta_pairs, $key, delete $meta{$key}; - } +=begin private + +=cut + +sub _add_requirements_to_meta { + my ( $self, %meta ) = @_; - # Then tack everything else onto the end, alpha sorted. - for my $key (sort {lc $a cmp lc $b} keys %meta) { - push @meta_pairs, $key, $meta{$key}; + # Check the original args so we can tell between the user setting it + # to an empty hash and it just being initialized. + + if( $self->{ARGS}{BUILD_REQUIRES} ) { + $meta{build_requires} = _normalize_prereqs($self->{BUILD_REQUIRES}); + } else { + $meta{build_requires} = { + 'ExtUtils::MakeMaker' => 0, + }; } - return @meta_pairs + $meta{requires} = _normalize_prereqs($self->{PREREQ_PM}) + if defined $self->{PREREQ_PM}; + $meta{requires}{perl} = _normalize_version($self->{MIN_PERL_VERSION}) + if $self->{MIN_PERL_VERSION}; + + return %meta; } -=begin private +sub _normalize_prereqs { + my ($hash) = @_; + my %prereqs; + while ( my ($k,$v) = each %$hash ) { + $prereqs{$k} = _normalize_version($v); + } + return \%prereqs; +} + +# Adapted from Module::Build::Base +sub _normalize_version { + my ($version) = @_; + $version = 0 unless defined $version; + + if ( ref $version eq 'version' ) { # version objects + $version = $version->is_qv ? $version->normal : $version->stringify; + } + elsif ( $version =~ /^[^v][^.]*\.[^.]+\./ ) { # no leading v, multiple dots + # normalize string tuples without "v": "1.2.3" -> "v1.2.3" + $version = "v$version"; + } + else { + # leave alone + } + return $version; +} =head3 _dump_hash @@ -1069,16 +1223,25 @@ distdir. sub distmeta_target { my $self = shift; - my $add_meta = $self->oneliner(<<'CODE', ['-MExtUtils::Manifest=maniadd']); -eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } + my @add_meta = ( + $self->oneliner(<<'CODE', ['-MExtUtils::Manifest=maniadd']), +exit unless -e q{META.yml}; +eval { maniadd({q{META.yml} => q{Module YAML meta-data (added by MakeMaker)}}) } or print "Could not add META.yml to MANIFEST: $${'@'}\n" CODE + $self->oneliner(<<'CODE', ['-MExtUtils::Manifest=maniadd']) +exit unless -f q{META.json}; +eval { maniadd({q{META.json} => q{Module JSON meta-data (added by MakeMaker)}}) } + or print "Could not add META.json to MANIFEST: $${'@'}\n" +CODE + ); - my $add_meta_to_distdir = $self->cd('$(DISTVNAME)', $add_meta); + my @add_meta_to_distdir = map { $self->cd('$(DISTVNAME)', $_) } @add_meta; - return sprintf <<'MAKE', $add_meta_to_distdir; + return sprintf <<'MAKE', @add_meta_to_distdir; distmeta : create_distdir metafile $(NOECHO) %s + $(NOECHO) %s MAKE @@ -1096,12 +1259,9 @@ or from internal data. sub mymeta { my $self = shift; + my $file = shift || ''; # for testing - my $mymeta; - - if ( -e 'META.yml' ) { - $mymeta = $self->_mymeta_from_meta(); - } + my $mymeta = $self->_mymeta_from_meta($file); unless ( $mymeta ) { my @metadata = $self->metafile_data( @@ -1111,6 +1271,10 @@ sub mymeta { $mymeta = {@metadata}; } + # Overwrite the non-configure dependency hashes + + $mymeta = { $self->_add_requirements_to_meta( %$mymeta ) }; + $mymeta->{dynamic_config} = 0; return $mymeta; @@ -1119,14 +1283,20 @@ sub mymeta { sub _mymeta_from_meta { my $self = shift; + my $metafile = shift || ''; # for testing + + return unless _has_cpan_meta(); my $meta; - eval { - my @yaml = ExtUtils::MakeMaker::YAML::LoadFile('META.yml'); - $meta = $yaml[0]; - }; + for my $file ( $metafile, "META.json", "META.yml" ) { + next unless -e $file; + eval { + $meta = CPAN::Meta->load_file($file)->as_struct( {version => "1.4"} ); + }; + last if $meta; + } return undef unless $meta; - + # META.yml before 6.25_01 cannot be trusted. META.yml lived in the source directory. # There was a good chance the author accidentally uploaded a stale META.yml if they # rolled their own tarball rather than using "make dist". @@ -1138,20 +1308,9 @@ sub _mymeta_from_meta { } } - # Overwrite the non-configure dependency hashs - delete $meta->{requires}; - delete $meta->{build_requires}; - delete $meta->{recommends}; - if ( exists $self->{PREREQ_PM} ) { - $meta->{requires} = $self->{PREREQ_PM} || {}; - } - if ( exists $self->{BUILD_REQUIRES} ) { - $meta->{build_requires} = $self->{BUILD_REQUIRES} || {}; - } return $meta; } - =head3 write_mymeta $self->write_mymeta( $mymeta ); @@ -1166,18 +1325,19 @@ sub write_mymeta { my $self = shift; my $mymeta = shift; - require ExtUtils::MakeMaker::YAML; - my $mymeta_content = ExtUtils::MakeMaker::YAML::Dump($mymeta); + return unless _has_cpan_meta(); - open(my $myfh, ">", "MYMETA.yml") - or die "Unable to open MYMETA.yml: $!"; - print $myfh $mymeta_content; - close $myfh; - - return; + _fix_metadata_before_conversion( $mymeta ); + + # this can still blow up + # not sure if i should just eval this and skip file creation if it + # blows up + my $meta_obj = CPAN::Meta->new( $mymeta, { lazy_validation => 1 } ); + $meta_obj->save( 'MYMETA.json' ); + $meta_obj->save( 'MYMETA.yml', { version => "1.4" } ); + return 1; } - =head3 realclean (o) Defines the realclean target. @@ -1193,7 +1353,7 @@ sub realclean { # Special exception for the perl core where INST_* is not in blib. # This cleans up the files built from the ext/ directory (all XS). if( $self->{PERL_CORE} ) { - push @dirs, qw($(INST_AUTODIR) $(INST_ARCHAUTODIR)); + push @dirs, qw($(INST_AUTODIR) $(INST_ARCHAUTODIR)); push @files, values %{$self->{PM}}; } @@ -1398,7 +1558,7 @@ sub init_INST { # perl has been built and installed. Setting INST_LIB allows # you to build directly into, say $Config{privlibexp}. unless ($self->{INST_LIB}){ - if ($self->{PERL_CORE}) { + if ($self->{PERL_CORE}) { if (defined $Cross::platform) { $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->catdir($self->{PERL_LIB},"..","xlib", @@ -1407,9 +1567,9 @@ sub init_INST { else { $self->{INST_LIB} = $self->{INST_ARCHLIB} = $self->{PERL_LIB}; } - } else { - $self->{INST_LIB} = $self->catdir($Curdir,"blib","lib"); - } + } else { + $self->{INST_LIB} = $self->catdir($Curdir,"blib","lib"); + } } my @parentdir = split(/::/, $self->{PARENT_NAME}); @@ -1790,15 +1950,14 @@ sub init_VERSION { } -=head3 init_others - - $MM->init_others(); +=head3 init_tools -Initializes the macro definitions used by tools_other() and places them -in the $MM object. + $MM->init_tools(); -If there is no description, its the same as the parameter to -WriteMakefile() documented in ExtUtils::MakeMaker. +Initializes the simple macro definitions used by tools_other() and +places them in the $MM object. These use conservative cross platform +versions and should be overridden with platform specific versions for +performance. Defines at least these macros. @@ -1807,11 +1966,6 @@ Defines at least these macros. NOOP Do nothing NOECHO Tell make not to display the command itself - MAKEFILE - FIRST_MAKEFILE - MAKEFILE_OLD - MAKE_APERL_FILE File used by MAKE_APERL - SHELL Program used to run shell commands ECHO Print text adding a newline on the end @@ -1830,7 +1984,7 @@ Defines at least these macros. =cut -sub init_others { +sub init_tools { my $self = shift; $self->{ECHO} ||= $self->oneliner('print qq{@ARGV}', ['-l']); @@ -1863,6 +2017,18 @@ CODE $self->{UNINST} ||= 0; $self->{VERBINST} ||= 0; + $self->{SHELL} ||= $Config{sh}; + + # UMASK_NULL is not used by MakeMaker but some CPAN modules + # make use of it. + $self->{UMASK_NULL} ||= "umask 0"; + + # Not the greatest default, but its something. + $self->{DEV_NULL} ||= "> /dev/null 2>&1"; + + $self->{NOOP} ||= '$(TRUE)'; + $self->{NOECHO} = '@' unless defined $self->{NOECHO}; + $self->{FIRST_MAKEFILE} ||= $self->{MAKEFILE} || 'Makefile'; $self->{MAKEFILE} ||= $self->{FIRST_MAKEFILE}; $self->{MAKEFILE_OLD} ||= $self->{MAKEFILE}.'.old'; @@ -1876,17 +2042,24 @@ CODE $self->{MACROSTART} ||= ''; $self->{MACROEND} ||= ''; - $self->{SHELL} ||= $Config{sh}; + return; +} - # UMASK_NULL is not used by MakeMaker but some CPAN modules - # make use of it. - $self->{UMASK_NULL} ||= "umask 0"; - # Not the greatest default, but its something. - $self->{DEV_NULL} ||= "> /dev/null 2>&1"; +=head3 init_others - $self->{NOOP} ||= '$(TRUE)'; - $self->{NOECHO} = '@' unless defined $self->{NOECHO}; + $MM->init_others(); + +Initializes the macro definitions having to do with compiling and +linking used by tools_other() and places them in the $MM object. + +If there is no description, its the same as the parameter to +WriteMakefile() documented in ExtUtils::MakeMaker. + +=cut + +sub init_others { + my $self = shift; $self->{LD_RUN_PATH} = ""; @@ -1927,7 +2100,7 @@ CODE : ($Config{usedl} ? 'dynamic' : 'static'); } - return 1; + return; } diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_BeOS.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_BeOS.pm index 0eeb795e485..a31cf2320c3 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_BeOS.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_BeOS.pm @@ -26,7 +26,7 @@ require ExtUtils::MM_Any; require ExtUtils::MM_Unix; our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix ); -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; =item os_flavor diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Cygwin.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Cygwin.pm index d6ce3a7d68c..de6f13085ee 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Cygwin.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Cygwin.pm @@ -9,7 +9,7 @@ require ExtUtils::MM_Unix; require ExtUtils::MM_Win32; our @ISA = qw( ExtUtils::MM_Unix ); -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; =head1 NAME diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_DOS.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_DOS.pm index 68612a80acd..d902038412b 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_DOS.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_DOS.pm @@ -2,7 +2,7 @@ package ExtUtils::MM_DOS; use strict; -our $VERSION = 6.57_05; +our $VERSION = '6.63_02'; require ExtUtils::MM_Any; require ExtUtils::MM_Unix; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Darwin.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Darwin.pm index 20aeb791642..6d78157fe5f 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Darwin.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Darwin.pm @@ -7,7 +7,7 @@ BEGIN { our @ISA = qw( ExtUtils::MM_Unix ); } -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; =head1 NAME diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_MacOS.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_MacOS.pm index 4dcb6e55ec0..17bcde790e4 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_MacOS.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_MacOS.pm @@ -2,7 +2,7 @@ package ExtUtils::MM_MacOS; use strict; -our $VERSION = 6.57_05; +our $VERSION = '6.63_02'; sub new { die <<'UNSUPPORTED'; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_NW5.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_NW5.pm index 2089e8f88c2..be1e1555576 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_NW5.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_NW5.pm @@ -22,7 +22,7 @@ use strict; use ExtUtils::MakeMaker::Config; use File::Basename; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; require ExtUtils::MM_Win32; our @ISA = qw(ExtUtils::MM_Win32); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_OS2.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_OS2.pm index 46d57be2933..f4ebd1e738e 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_OS2.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_OS2.pm @@ -5,7 +5,7 @@ use strict; use ExtUtils::MakeMaker qw(neatvalue); use File::Spec; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; require ExtUtils::MM_Any; require ExtUtils::MM_Unix; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_QNX.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_QNX.pm index 5efd3771f39..9d1f29223d0 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_QNX.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_QNX.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_QNX; use strict; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; require ExtUtils::MM_Unix; our @ISA = qw(ExtUtils::MM_Unix); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_UWIN.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_UWIN.pm index 032bf35b84b..d4b9370bd1a 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_UWIN.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_UWIN.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_UWIN; use strict; -our $VERSION = 6.57_05; +our $VERSION = '6.63_02'; require ExtUtils::MM_Unix; our @ISA = qw(ExtUtils::MM_Unix); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Unix.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Unix.pm index 6964eea0883..b537393d3e1 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Unix.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Unix.pm @@ -15,7 +15,8 @@ use ExtUtils::MakeMaker qw($Verbose neatvalue); # If we make $VERSION an our variable parse_version() breaks use vars qw($VERSION); -$VERSION = '6.57_05'; +$VERSION = '6.63_02'; +$VERSION = eval $VERSION; require ExtUtils::MM_Any; our @ISA = qw(ExtUtils::MM_Any); @@ -1738,17 +1739,14 @@ EOP $self->{NAME} eq "ExtUtils::MakeMaker"; } -=item init_others +=item init_tools -Initializes EXTRALIBS, BSLOADLIBS, LDLOADLIBS, LIBS, LD_RUN_PATH, LD, -OBJECT, BOOTDEP, PERLMAINCC, LDFROM, LINKTYPE, SHELL, NOOP, -FIRST_MAKEFILE, MAKEFILE_OLD, NOECHO, RM_F, RM_RF, TEST_F, -TOUCH, CP, MV, CHMOD, UMASK_NULL, ECHO, ECHO_N +Initializes tools to use their common (and faster) Unix commands. =cut -sub init_others { # --- Initialize Other Attributes - my($self) = shift; +sub init_tools { + my $self = shift; $self->{ECHO} ||= 'echo'; $self->{ECHO_N} ||= 'echo -n'; @@ -1764,13 +1762,13 @@ sub init_others { # --- Initialize Other Attributes $self->{LD} ||= 'ld'; - $self->SUPER::init_others(@_); + return $self->SUPER::init_tools(@_); - # After SUPER::init_others so $Config{shell} has a + # After SUPER::init_tools so $Config{shell} has a # chance to get set. $self->{SHELL} ||= '/bin/sh'; - return 1; + return; } @@ -2894,8 +2892,13 @@ sub ppd { $author =~ s//>/g; - my $ppd_xml = sprintf <<'PPD_HTML', $self->{VERSION}, $abstract, $author; - + my $ppd_file = '$(DISTNAME).ppd'; + + my @ppd_cmds = $self->echo(<<'PPD_HTML', $ppd_file, { append => 0, allow_variables => 1 }); + +PPD_HTML + + my $ppd_xml = sprintf <<'PPD_HTML', $abstract, $author; %s %s PPD_HTML @@ -2957,7 +2960,7 @@ PPD_OUT PPD_XML - my @ppd_cmds = $self->echo($ppd_xml, '$(DISTNAME).ppd'); + push @ppd_cmds, $self->echo($ppd_xml, $ppd_file, { append => 1 }); return sprintf <<'PPD_OUT', join "\n\t", @ppd_cmds; # Creates a PPD (Perl Package Description) for a binary distribution. @@ -3148,12 +3151,15 @@ sub oneliner { =cut sub quote_literal { - my($self, $text) = @_; + my($self, $text, $opts) = @_; + $opts->{allow_variables} = 1 unless defined $opts->{allow_variables}; - # I think all we have to quote is single quotes and I think - # this is a safe way to do it. + # Quote single quotes $text =~ s{'}{'\\''}g; + $text = $opts->{allow_variables} + ? $self->escape_dollarsigns($text) : $self->escape_all_dollarsigns($text); + return "'$text'"; } diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_VMS.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_VMS.pm index d6b63eba63f..c204abcb2d1 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_VMS.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_VMS.pm @@ -15,7 +15,7 @@ BEGIN { use File::Basename; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; require ExtUtils::MM_Any; require ExtUtils::MM_Unix; @@ -447,21 +447,20 @@ sub init_main { } } -=item init_others (override) +=item init_tools (override) -Provide VMS-specific forms of various utility commands, then hand -off to the default MM_Unix method. +Provide VMS-specific forms of various utility commands. -DEV_NULL should probably be overriden with something. +Sets DEV_NULL to nothing because I don't know how to do it on VMS. -Also changes EQUALIZE_TIMESTAMP to set revision date of target file to +Changes EQUALIZE_TIMESTAMP to set revision date of target file to one second later than source file, since MMK interprets precisely equal revision dates for a source and target file as a sign that the target needs to be updated. =cut -sub init_others { +sub init_tools { my($self) = @_; $self->{NOOP} = 'Continue'; @@ -493,17 +492,34 @@ sub init_others { install([ from_to => {split(' ', )}, verbose => '$(VERBINST)', uninstall_shadows => '$(UNINST)', dir_mode => '$(PERM_DIR)' ]); CODE - $self->SUPER::init_others; + $self->{UMASK_NULL} = '! '; - $self->{SHELL} ||= 'Posix'; + $self->SUPER::init_tools; - $self->{UMASK_NULL} = '! '; + # Use the default shell + $self->{SHELL} ||= 'Posix'; # Redirection on VMS goes before the command, not after as on Unix. # $(DEV_NULL) is used once and its not worth going nuts over making # it work. However, Unix's DEV_NULL is quite wrong for VMS. $self->{DEV_NULL} = ''; + return; +} + + +=item init_others (override) + +Provide VMS-specific forms of various compile and link commands + +=cut + +sub init_others { + my $self = shift; + + # Must come first as we're modifying and deriving from the defaults. + $self->SUPER::init_others; + if ($self->{OBJECT} =~ /\s/) { $self->{OBJECT} =~ s/(\\)?\n+\s+/ /g; $self->{OBJECT} = $self->wraplist( @@ -514,6 +530,8 @@ CODE $self->{LDFROM} = $self->wraplist( map $self->fixpath($_,0), split /,?\s+/, $self->{LDFROM} ); + + return; } @@ -1753,13 +1771,21 @@ native Write command instead. Besides, its faster. =cut sub echo { - my($self, $text, $file, $appending) = @_; - $appending ||= 0; + my($self, $text, $file, $opts) = @_; + + # Compatibility with old options + if( !ref $opts ) { + my $append = $opts; + $opts = { append => $append || 0 }; + } + my $opencmd = $opts->{append} ? 'Open/Append' : 'Open/Write'; + + $opts->{allow_variables} = 0 unless defined $opts->{allow_variables}; - my $opencmd = $appending ? 'Open/Append' : 'Open/Write'; + my $ql_opts = { allow_variables => $opts->{allow_variables} }; my @cmds = ("\$(NOECHO) $opencmd MMECHOFILE $file "); - push @cmds, map { '$(NOECHO) Write MMECHOFILE '.$self->quote_literal($_) } + push @cmds, map { '$(NOECHO) Write MMECHOFILE '.$self->quote_literal($_, $ql_opts) } split /\n/, $text; push @cmds, '$(NOECHO) Close MMECHOFILE'; return @cmds; @@ -1771,14 +1797,49 @@ sub echo { =cut sub quote_literal { - my($self, $text) = @_; + my($self, $text, $opts) = @_; + $opts->{allow_variables} = 1 unless defined $opts->{allow_variables}; # I believe this is all we should need. $text =~ s{"}{""}g; + $text = $opts->{allow_variables} + ? $self->escape_dollarsigns($text) : $self->escape_all_dollarsigns($text); + return qq{"$text"}; } +=item escape_dollarsigns + +Quote, don't escape. + +=cut + +sub escape_dollarsigns { + my($self, $text) = @_; + + # Quote dollar signs which are not starting a variable + $text =~ s{\$ (?!\() }{"\$"}gx; + + return $text; +} + + +=item escape_all_dollarsigns + +Quote, don't escape. + +=cut + +sub escape_all_dollarsigns { + my($self, $text) = @_; + + # Quote dollar signs + $text =~ s{\$}{"\$\"}gx; + + return $text; +} + =item escape_newlines =cut diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_VOS.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_VOS.pm index e5b60d78e38..cdc6659b7f5 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_VOS.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_VOS.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_VOS; use strict; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; require ExtUtils::MM_Unix; our @ISA = qw(ExtUtils::MM_Unix); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win32.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win32.pm index faaf219ecba..43ae9a4dd5f 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win32.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win32.pm @@ -27,13 +27,21 @@ use ExtUtils::MakeMaker qw( neatvalue ); require ExtUtils::MM_Any; require ExtUtils::MM_Unix; our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix ); -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; $ENV{EMXSHELL} = 'sh'; # to run `commands` -my $BORLAND = $Config{'cc'} =~ /^bcc/i ? 1 : 0; -my $GCC = $Config{'cc'} =~ /\bgcc$/i ? 1 : 0; -my $DLLTOOL = $Config{'dlltool'} || 'dlltool'; +my ( $BORLAND, $GCC, $DLLTOOL ) = _identify_compiler_environment( \%Config ); + +sub _identify_compiler_environment { + my ( $config ) = @_; + + my $BORLAND = $config->{cc} =~ /^bcc/i ? 1 : 0; + my $GCC = $config->{cc} =~ /\bgcc\b/i ? 1 : 0; + my $DLLTOOL = $config->{dlltool} || 'dlltool'; + + return ( $BORLAND, $GCC, $DLLTOOL ); +} =head2 Overridden methods @@ -133,21 +141,13 @@ sub init_DIRFILESEP { : '\\'; } -=item B +=item init_tools -Override some of the Unix specific commands with portable -ExtUtils::Command ones. - -Also provide defaults for LD and AR in case the %Config values aren't -set. - -LDLOADLIBS's default is changed to $Config{libs}. - -Adjustments are made for Borland's quirks needing -L to come first. +Override some of the slower, portable commands with Windows specific ones. =cut -sub init_others { +sub init_tools { my ($self) = @_; $self->{NOOP} ||= 'rem'; @@ -157,14 +157,33 @@ sub init_others { "\$(PERLRUN) $self->{PERL_SRC}/win32/bin/pl2bat.pl" : 'pl2bat.bat'; + $self->SUPER::init_tools; + + # Setting SHELL from $Config{sh} can break dmake. Its ok without it. + delete $self->{SHELL}; + + return; +} + + +=item init_others + +Override the default link and compile tools. + +LDLOADLIBS's default is changed to $Config{libs}. + +Adjustments are made for Borland's quirks needing -L to come first. + +=cut + +sub init_others { + my $self = shift; + $self->{LD} ||= 'link'; $self->{AR} ||= 'lib'; $self->SUPER::init_others; - # Setting SHELL from $Config{sh} can break dmake. Its ok without it. - delete $self->{SHELL}; - $self->{LDLOADLIBS} ||= $Config{libs}; # -Lfoo must come first for Borland, so we put it in LDDLFLAGS if ($BORLAND) { @@ -179,7 +198,7 @@ sub init_others { $self->{LDDLFLAGS} .= " $libpath"; } - return 1; + return; } @@ -195,6 +214,8 @@ sub init_platform { my($self) = shift; $self->{MM_Win32_VERSION} = $VERSION; + + return; } sub platform_constants { @@ -211,6 +232,36 @@ sub platform_constants { } +=item constants + +Add MAXLINELENGTH for dmake before all the constants are output. + +=cut + +sub constants { + my $self = shift; + + my $make_text = $self->SUPER::constants; + return $make_text unless $self->is_make_type('dmake'); + + # dmake won't read any single "line" (even those with escaped newlines) + # larger than a certain size which can be as small as 8k. PM_TO_BLIB + # on large modules like DateTime::TimeZone can create lines over 32k. + # So we'll crank it up to a WHOPPING 64k. + # + # This has to come here before all the constants and not in + # platform_constants which is after constants. + my $size = $self->{MAXLINELENGTH} || 64 * 1024; + my $prefix = qq{ +# Get dmake to read long commands like PM_TO_BLIB +MAXLINELENGTH = $size + +}; + + return $prefix . $make_text; +} + + =item special_targets Add .USESHELL target for dmake. @@ -445,22 +496,34 @@ sub oneliner { sub quote_literal { - my($self, $text) = @_; - - # I don't know if this is correct, but it seems to work on - # Win98's command.com - $text =~ s{"}{\\"}g; - - # dmake eats '{' inside double quotes and leaves alone { outside double - # quotes; however it transforms {{ into { either inside and outside double - # quotes. It also translates }} into }. The escaping below is not - # 100% correct. + my($self, $text, $opts) = @_; + $opts->{allow_variables} = 1 unless defined $opts->{allow_variables}; + + # See: http://www.autohotkey.net/~deleyd/parameters/parameters.htm#CPP + + # Apply the Microsoft C/C++ parsing rules + $text =~ s{\\\\"}{\\\\\\\\\\"}g; # \\" -> \\\\\" + $text =~ s{(? \\\" + $text =~ s{(? \" + $text = qq{"$text"} if $text =~ /[ \t]/; + + # Apply the Command Prompt parsing rules (cmd.exe) + my @text = split /("[^"]*")/, $text; + # We should also escape parentheses, but it breaks one-liners containing + # $(MACRO)s in makefiles. + s{([<>|&^@!])}{^$1}g foreach grep { !/^"[^"]*"$/ } @text; + $text = join('', @text); + + # dmake expands {{ to { and }} to }. if( $self->is_make_type('dmake') ) { $text =~ s/{/{{/g; - $text =~ s/}}/}}}/g; + $text =~ s/}/}}/g; } - return qq{"$text"}; + $text = $opts->{allow_variables} + ? $self->escape_dollarsigns($text) : $self->escape_all_dollarsigns($text); + + return $text; } diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win95.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win95.pm index 19f5c7d61ed..694655c1baf 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win95.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MM_Win95.pm @@ -2,7 +2,7 @@ package ExtUtils::MM_Win95; use strict; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; require ExtUtils::MM_Win32; our @ISA = qw(ExtUtils::MM_Win32); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MY.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MY.pm index 464f814f0f7..92d4da0a4b9 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MY.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MY.pm @@ -3,7 +3,7 @@ package ExtUtils::MY; use strict; require ExtUtils::MM; -our $VERSION = 6.57_05; +our $VERSION = '6.63_02'; our @ISA = qw(ExtUtils::MM); { diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker.pm index be9624e389e..3885ab00f1b 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker.pm @@ -7,7 +7,7 @@ BEGIN {require 5.006;} require Exporter; use ExtUtils::MakeMaker::Config; -use Carp (); +use Carp; use File::Path; our $Verbose = 0; # exported @@ -18,7 +18,8 @@ our @Overridable; my @Prepend_parent; my %Recognized_Att_Keys; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; +$VERSION = eval $VERSION; # Emulate something resembling CVS $Revision$ (our $Revision = $VERSION) =~ s{_}{}; @@ -47,13 +48,13 @@ require ExtUtils::MY; # XXX pre-5.8 versions of ExtUtils::Embed expect sub WriteMakefile { - Carp::croak "WriteMakefile: Need even number of args" if @_ % 2; + croak "WriteMakefile: Need even number of args" if @_ % 2; require ExtUtils::MY; my %att = @_; _convert_compat_attrs(\%att); - + _verify_att(\%att); my $mm = MM->new(\%att); @@ -114,7 +115,7 @@ my %Special_Sigs = ( @Att_Sigs{keys %Recognized_Att_Keys} = ('') x keys %Recognized_Att_Keys; @Att_Sigs{keys %Special_Sigs} = values %Special_Sigs; -sub _convert_compat_attrs { +sub _convert_compat_attrs { #result of running several times should be same my($att) = @_; if (exists $att->{AUTHOR}) { if ($att->{AUTHOR}) { @@ -176,7 +177,7 @@ sub _format_att { sub prompt ($;$) { ## no critic my($mess, $def) = @_; - Carp::confess("prompt function called without an argument") + confess("prompt function called without an argument") unless defined $mess; my $isa_tty = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ; @@ -224,7 +225,7 @@ sub eval_in_subdirs { sub eval_in_x { my($self,$dir) = @_; - chdir $dir or Carp::carp("Couldn't change to directory $dir: $!"); + chdir $dir or carp("Couldn't change to directory $dir: $!"); { package main; @@ -401,6 +402,8 @@ sub new { my($class,$self) = @_; my($key); + _convert_compat_attrs($self) if defined $self && $self; + # Store the original args passed to WriteMakefile() foreach my $k (keys %$self) { $self->{ARGS}{$k} = $self->{$k}; @@ -408,13 +411,17 @@ sub new { $self = {} unless defined $self; - $self->{PREREQ_PM} ||= {}; - $self->{BUILD_REQUIRES} ||= {}; - # Temporarily bless it into MM so it can be used as an # object. It will be blessed into a temp package later. bless $self, "MM"; + # Cleanup all the module requirement bits + for my $key (qw(PREREQ_PM BUILD_REQUIRES CONFIGURE_REQUIRES)) { + $self->{$key} ||= {}; + $self->clean_versions( $key ); + } + + if ("@ARGV" =~ /\bPREREQ_PRINT\b/) { $self->_PREREQ_PRINT; } @@ -446,7 +453,7 @@ sub new { }; if (!$perl_version_ok) { if (!defined $perl_version_ok) { - warn <<'END'; + die <<'END'; Warning: MIN_PERL_VERSION is not in a recognized format. Recommended is a quoted numerical value like '5.005' or '5.008001'. END @@ -515,13 +522,13 @@ END _convert_compat_attrs(\%configure_att); $self = { %$self, %configure_att }; } else { - Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n"; + croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n"; } } # This is for old Makefiles written pre 5.00, will go away if ( Carp::longmess("") =~ /runsubdirpl/s ){ - Carp::carp("WARNING: Please rerun 'perl Makefile.PL' to regenerate your Makefiles\n"); + carp("WARNING: Please rerun 'perl Makefile.PL' to regenerate your Makefiles\n"); } my $newclass = ++$PACKNAME; @@ -606,6 +613,7 @@ END $self->catfile($Config{'archlibexp'}, "Config.pm") ); + $self->init_tools(); $self->init_others(); $self->init_platform(); $self->init_PERM(); @@ -692,11 +700,11 @@ END } sub WriteEmptyMakefile { - Carp::croak "WriteEmptyMakefile: Need an even number of args" if @_ % 2; + croak "WriteEmptyMakefile: Need an even number of args" if @_ % 2; my %att = @_; my $self = MM->new(\%att); - + my $new = $self->{MAKEFILE}; my $old = $self->{MAKEFILE_OLD}; if (-f $old) { @@ -1029,9 +1037,10 @@ sub flush { unless ($self->{NO_MYMETA}) { # Write MYMETA.yml to communicate metadata up to the CPAN clients - print STDOUT "Writing MYMETA.yml\n"; + if ( $self->write_mymeta( $self->mymeta ) ) {; + print STDOUT "Writing MYMETA.yml and MYMETA.json\n"; + } - $self->write_mymeta( $self->mymeta ); } my %keep = map { ($_ => 1) } qw(NEEDS_LINKING HAS_LINK_CODE); if ($self->{PARENT} && !$self->{_KEEP_AFTER_FLUSH}) { @@ -1103,6 +1112,22 @@ sub neatvalue { return "{ ".join(', ',@m)." }"; } +# Look for weird version numbers, warn about them and set them to 0 +# before CPAN::Meta chokes. +sub clean_versions { + my($self, $key) = @_; + + my $reqs = $self->{$key}; + for my $module (keys %$reqs) { + my $version = $reqs->{$module}; + + if( !defined $version or $version !~ /^[\d_\.]+$/ ) { + carp "Unparsable version '$version' for prerequisite $module"; + $reqs->{$module} = 0; + } + } +} + sub selfdocument { my($self) = @_; my(@m); @@ -1491,8 +1516,8 @@ the first line in the "=head1 NAME" section. $2 becomes the abstract. =item AUTHOR Array of strings containing name (and email address) of package author(s). -Is used in META.yml and PPD (Perl Package Description) files for PPM (Perl -Package Manager). +Is used in CPAN Meta files (META.yml or META.json) and PPD +(Perl Package Description) files for PPM (Perl Package Manager). =item BINARY_LOCATION @@ -1509,7 +1534,8 @@ located in the C directory relative to the PPD itself. A hash of modules that are needed to build your module but not run it. -This will go into the C field of your F. +This will go into the C field of your CPAN Meta file. +(F or F). The format is the same as PREREQ_PM. @@ -1556,7 +1582,8 @@ be determined by some evaluation method. A hash of modules that are required to run Makefile.PL itself, but not to run your distribution. -This will go into the C field of your F. +This will go into the C field of your CPAN Meta file +(F or F) Defaults to C<<< { "ExtUtils::MakeMaker" => 0 } >>> @@ -1963,7 +1990,8 @@ may hold a name for that binary. Defaults to perl =item META_MERGE -A hashrefs of items to add to the F. +A hashrefs of items to add to the CPAN Meta file (F or +F). They differ in how they behave if they have the same key as the default metadata. META_ADD will override the default value with its @@ -2012,14 +2040,14 @@ Boolean. Attribute to inhibit descending into subdirectories. =item NO_META When true, suppresses the generation and addition to the MANIFEST of -the META.yml module meta-data file during 'make distdir'. +the META.yml and META.json module meta-data files during 'make distdir'. Defaults to false. =item NO_MYMETA -When true, suppresses the generation of MYMETA.yml module meta-data file -during 'perl Makefile.PL'. +When true, suppresses the generation of MYMETA.yml and MYMETA.json module +meta-data files during 'perl Makefile.PL'. Defaults to false. @@ -2276,7 +2304,8 @@ A hash of modules that are needed to run your module. The keys are the module names ie. Test::More, and the minimum version is the value. If the required version number is 0 any version will do. -This will go into the C field of your F. +This will go into the C field of your CPAN Meta file +(F or F). PREREQ_PM => { # Require Test::More at least 0.47 @@ -2641,8 +2670,8 @@ Copies all the files that are in the MANIFEST file to a newly created directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory exists, it will be removed first. -Additionally, it will create a META.yml module meta-data file in the -distdir and add this to the distdir's MANIFEST. You can shut this +Additionally, it will create META.yml and META.json module meta-data file +in the distdir and add this to the distdir's MANIFEST. You can shut this behavior off with the NO_META flag. =item make disttest @@ -2716,26 +2745,37 @@ An example: ); -=head2 Module Meta-Data +=head2 Module Meta-Data (META and MYMETA) Long plaguing users of MakeMaker based modules has been the problem of getting basic information about the module out of the sources I running the F and doing a bunch of messy -heuristics on the resulting F. To this end a simple module -meta-data file has been introduced, F. - -F is a YAML document (see http://www.yaml.org) containing -basic information about the module (name, version, prerequisites...) -in an easy to read format. The format is developed and defined by the -Module::Build developers (see -http://module-build.sourceforge.net/META-spec.html) - -MakeMaker will automatically generate a F file for you and -add it to your F as part of the 'distdir' target (and thus -the 'dist' target). This is intended to seamlessly and rapidly -populate CPAN with module meta-data. If you wish to shut this feature -off, set the C C flag to true. - +heuristics on the resulting F. Over the years, it has become +standard to keep this information in one or more CPAN Meta files +distributed with each distribution. + +The original format of CPAN Meta files was L and the corresponding +file was called F. In 2010, version 2 of the L +was released, which mandates JSON format for the metadata in order to +overcome certain compatibility issues between YAML serializers and to +avoid breaking older clients unable to handle a new version of the spec. +The L library is now standard for accessing old and new-style +Meta files. + +If L is installed, MakeMaker will automatically generate +F and F files for you and add them to your F as +part of the 'distdir' target (and thus the 'dist' target). This is intended to +seamlessly and rapidly populate CPAN with module meta-data. If you wish to +shut this feature off, set the C C flag to true. + +At the 2008 QA Hackathon in Oslo, Perl module toolchain maintainers agrees +to use the CPAN Meta format to communicate post-configuration requirements +between toolchain components. These files, F and F, +are generated when F generates a F (if L +is installed). Clients like L or L will read this +files to see what prerequisites must be fulfilled before building or testing +the distribution. If you with to shut this feature off, set the C +C flag to true. =head2 Disabling an extension @@ -2812,6 +2852,8 @@ not normally available. L and L are both modules to help you setup your distribution. +L and L explain CPAN Meta files in detail. + =head1 AUTHORS Andy Dougherty C, Andreas KEnig @@ -2828,7 +2870,7 @@ generated Makefile along with your report. For more up-to-date information, see L. -Repository available at L. +Repository available at L. =head1 LICENSE diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Config.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Config.pm index a7ac47d94a6..872f8c181cf 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Config.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Config.pm @@ -2,7 +2,7 @@ package ExtUtils::MakeMaker::Config; use strict; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; use Config (); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/FAQ.pod b/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/FAQ.pod index f3354231d1e..675c95fc11e 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/FAQ.pod +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/FAQ.pod @@ -1,6 +1,6 @@ package ExtUtils::MakeMaker::FAQ; -our $VERSION = '6.57_01'; +our $VERSION = '6.63_02'; 1; __END__ diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Tutorial.pod b/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Tutorial.pod index d5ff9086c36..5120271979f 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Tutorial.pod +++ b/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/Tutorial.pod @@ -1,6 +1,6 @@ package ExtUtils::MakeMaker::Tutorial; -our $VERSION = 6.57_01; +our $VERSION = 6.63_02; =head1 NAME diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/YAML.pm b/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/YAML.pm deleted file mode 100644 index 7582c5781f2..00000000000 --- a/Master/tlpkg/tlperl/lib/ExtUtils/MakeMaker/YAML.pm +++ /dev/null @@ -1,658 +0,0 @@ -package ExtUtils::MakeMaker::YAML; - -use strict; - -# UTF Support? -sub HAVE_UTF8 () { $] >= 5.007003 } -BEGIN { - if ( HAVE_UTF8 ) { - # The string eval helps hide this from Test::MinimumVersion - eval "require utf8;"; - die "Failed to load UTF-8 support" if $@; - } - - # Class structure - require 5.004; - require Exporter; - require Carp; - $ExtUtils::MakeMaker::YAML::VERSION = '1.44'; - @ExtUtils::MakeMaker::YAML::ISA = qw{ Exporter }; - @ExtUtils::MakeMaker::YAML::EXPORT = qw{ Load Dump }; - @ExtUtils::MakeMaker::YAML::EXPORT_OK = qw{ LoadFile DumpFile freeze thaw }; - - # Error storage - $ExtUtils::MakeMaker::YAML::errstr = ''; -} - -# The character class of all characters we need to escape -# NOTE: Inlined, since it's only used once -# my $RE_ESCAPE = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f\"\n]'; - -# Printed form of the unprintable characters in the lowest range -# of ASCII characters, listed by ASCII ordinal position. -my @UNPRINTABLE = qw( - z x01 x02 x03 x04 x05 x06 a - x08 t n v f r x0e x0f - x10 x11 x12 x13 x14 x15 x16 x17 - x18 x19 x1a e x1c x1d x1e x1f -); - -# Printable characters for escapes -my %UNESCAPES = ( - z => "\x00", a => "\x07", t => "\x09", - n => "\x0a", v => "\x0b", f => "\x0c", - r => "\x0d", e => "\x1b", '\\' => '\\', -); - -# Special magic boolean words -my %QUOTE = map { $_ => 1 } qw{ - null Null NULL - y Y yes Yes YES n N no No NO - true True TRUE false False FALSE - on On ON off Off OFF -}; - - - - - -##################################################################### -# Implementation - -# Create an empty ExtUtils::MakeMaker::YAML object -sub new { - my $class = shift; - bless [ @_ ], $class; -} - -# Create an object from a file -sub read { - my $class = ref $_[0] ? ref shift : shift; - - # Check the file - my $file = shift or return $class->_error( 'You did not specify a file name' ); - return $class->_error( "File '$file' does not exist" ) unless -e $file; - return $class->_error( "'$file' is a directory, not a file" ) unless -f _; - return $class->_error( "Insufficient permissions to read '$file'" ) unless -r _; - - # Slurp in the file - local $/ = undef; - local *CFG; - unless ( open(CFG, $file) ) { - return $class->_error("Failed to open file '$file': $!"); - } - my $contents = ; - unless ( close(CFG) ) { - return $class->_error("Failed to close file '$file': $!"); - } - - $class->read_string( $contents ); -} - -# Create an object from a string -sub read_string { - my $class = ref $_[0] ? ref shift : shift; - my $self = bless [], $class; - my $string = $_[0]; - unless ( defined $string ) { - return $self->_error("Did not provide a string to load"); - } - - # Byte order marks - # NOTE: Keeping this here to educate maintainers - # my %BOM = ( - # "\357\273\277" => 'UTF-8', - # "\376\377" => 'UTF-16BE', - # "\377\376" => 'UTF-16LE', - # "\377\376\0\0" => 'UTF-32LE' - # "\0\0\376\377" => 'UTF-32BE', - # ); - if ( $string =~ /^(?:\376\377|\377\376|\377\376\0\0|\0\0\376\377)/ ) { - return $self->_error("Stream has a non UTF-8 BOM"); - } else { - # Strip UTF-8 bom if found, we'll just ignore it - $string =~ s/^\357\273\277//; - } - - # Try to decode as utf8 - utf8::decode($string) if HAVE_UTF8; - - # Check for some special cases - return $self unless length $string; - unless ( $string =~ /[\012\015]+\z/ ) { - return $self->_error("Stream does not end with newline character"); - } - - # Split the file into lines - my @lines = grep { ! /^\s*(?:\#.*)?\z/ } - split /(?:\015{1,2}\012|\015|\012)/, $string; - - # Strip the initial YAML header - @lines and $lines[0] =~ /^\%YAML[: ][\d\.]+.*\z/ and shift @lines; - - # A nibbling parser - while ( @lines ) { - # Do we have a document header? - if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?\z/ ) { - # Handle scalar documents - shift @lines; - if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML[: ][\d\.]+)\z/ ) { - push @$self, $self->_read_scalar( "$1", [ undef ], \@lines ); - next; - } - } - - if ( ! @lines or $lines[0] =~ /^(?:---|\.\.\.)/ ) { - # A naked document - push @$self, undef; - while ( @lines and $lines[0] !~ /^---/ ) { - shift @lines; - } - - } elsif ( $lines[0] =~ /^\s*\-/ ) { - # An array at the root - my $document = [ ]; - push @$self, $document; - $self->_read_array( $document, [ 0 ], \@lines ); - - } elsif ( $lines[0] =~ /^(\s*)\S/ ) { - # A hash at the root - my $document = { }; - push @$self, $document; - $self->_read_hash( $document, [ length($1) ], \@lines ); - - } else { - Carp::croak("ExtUtils::MakeMaker::YAML failed to classify the line '$lines[0]'"); - } - } - - $self; -} - -# Deparse a scalar string to the actual scalar -sub _read_scalar { - my ($self, $string, $indent, $lines) = @_; - - # Trim trailing whitespace - $string =~ s/\s*\z//; - - # Explitic null/undef - return undef if $string eq '~'; - - # Single quote - if ( $string =~ /^\'(.*?)\'\z/ ) { - return '' unless defined $1; - $string = $1; - $string =~ s/\'\'/\'/g; - return $string; - } - - # Double quote. - # The commented out form is simpler, but overloaded the Perl regex - # engine due to recursion and backtracking problems on strings - # larger than 32,000ish characters. Keep it for reference purposes. - # if ( $string =~ /^\"((?:\\.|[^\"])*)\"\z/ ) { - if ( $string =~ /^\"([^\\"]*(?:\\.[^\\"]*)*)\"\z/ ) { - # Reusing the variable is a little ugly, - # but avoids a new variable and a string copy. - $string = $1; - $string =~ s/\\"/"/g; - $string =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex; - return $string; - } - - # Special cases - if ( $string =~ /^[\'\"!&]/ ) { - Carp::croak("ExtUtils::MakeMaker::YAML does not support a feature in line '$lines->[0]'"); - } - return {} if $string eq '{}'; - return [] if $string eq '[]'; - - # Regular unquoted string - return $string unless $string =~ /^[>|]/; - - # Error - Carp::croak("ExtUtils::MakeMaker::YAML failed to find multi-line scalar content") unless @$lines; - - # Check the indent depth - $lines->[0] =~ /^(\s*)/; - $indent->[-1] = length("$1"); - if ( defined $indent->[-2] and $indent->[-1] <= $indent->[-2] ) { - Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'"); - } - - # Pull the lines - my @multiline = (); - while ( @$lines ) { - $lines->[0] =~ /^(\s*)/; - last unless length($1) >= $indent->[-1]; - push @multiline, substr(shift(@$lines), length($1)); - } - - my $j = (substr($string, 0, 1) eq '>') ? ' ' : "\n"; - my $t = (substr($string, 1, 1) eq '-') ? '' : "\n"; - return join( $j, @multiline ) . $t; -} - -# Parse an array -sub _read_array { - my ($self, $array, $indent, $lines) = @_; - - while ( @$lines ) { - # Check for a new document - if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { - while ( @$lines and $lines->[0] !~ /^---/ ) { - shift @$lines; - } - return 1; - } - - # Check the indent level - $lines->[0] =~ /^(\s*)/; - if ( length($1) < $indent->[-1] ) { - return 1; - } elsif ( length($1) > $indent->[-1] ) { - Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'"); - } - - if ( $lines->[0] =~ /^(\s*\-\s+)[^\'\"]\S*\s*:(?:\s+|$)/ ) { - # Inline nested hash - my $indent2 = length("$1"); - $lines->[0] =~ s/-/ /; - push @$array, { }; - $self->_read_hash( $array->[-1], [ @$indent, $indent2 ], $lines ); - - } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*\z/ ) { - # Array entry with a value - shift @$lines; - push @$array, $self->_read_scalar( "$2", [ @$indent, undef ], $lines ); - - } elsif ( $lines->[0] =~ /^\s*\-\s*\z/ ) { - shift @$lines; - unless ( @$lines ) { - push @$array, undef; - return 1; - } - if ( $lines->[0] =~ /^(\s*)\-/ ) { - my $indent2 = length("$1"); - if ( $indent->[-1] == $indent2 ) { - # Null array entry - push @$array, undef; - } else { - # Naked indenter - push @$array, [ ]; - $self->_read_array( $array->[-1], [ @$indent, $indent2 ], $lines ); - } - - } elsif ( $lines->[0] =~ /^(\s*)\S/ ) { - push @$array, { }; - $self->_read_hash( $array->[-1], [ @$indent, length("$1") ], $lines ); - - } else { - Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'"); - } - - } elsif ( defined $indent->[-2] and $indent->[-1] == $indent->[-2] ) { - # This is probably a structure like the following... - # --- - # foo: - # - list - # bar: value - # - # ... so lets return and let the hash parser handle it - return 1; - - } else { - Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'"); - } - } - - return 1; -} - -# Parse an array -sub _read_hash { - my ($self, $hash, $indent, $lines) = @_; - - while ( @$lines ) { - # Check for a new document - if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { - while ( @$lines and $lines->[0] !~ /^---/ ) { - shift @$lines; - } - return 1; - } - - # Check the indent level - $lines->[0] =~ /^(\s*)/; - if ( length($1) < $indent->[-1] ) { - return 1; - } elsif ( length($1) > $indent->[-1] ) { - Carp::croak("ExtUtils::MakeMaker::YAML found bad indenting in line '$lines->[0]'"); - } - - # Get the key - unless ( $lines->[0] =~ s/^\s*([^\'\" ][^\n]*?)\s*:(\s+|$)// ) { - if ( $lines->[0] =~ /^\s*[?\'\"]/ ) { - Carp::croak("ExtUtils::MakeMaker::YAML does not support a feature in line '$lines->[0]'"); - } - Carp::croak("ExtUtils::MakeMaker::YAML failed to classify line '$lines->[0]'"); - } - my $key = $1; - - # Do we have a value? - if ( length $lines->[0] ) { - # Yes - $hash->{$key} = $self->_read_scalar( shift(@$lines), [ @$indent, undef ], $lines ); - } else { - # An indent - shift @$lines; - unless ( @$lines ) { - $hash->{$key} = undef; - return 1; - } - if ( $lines->[0] =~ /^(\s*)-/ ) { - $hash->{$key} = []; - $self->_read_array( $hash->{$key}, [ @$indent, length($1) ], $lines ); - } elsif ( $lines->[0] =~ /^(\s*)./ ) { - my $indent2 = length("$1"); - if ( $indent->[-1] >= $indent2 ) { - # Null hash entry - $hash->{$key} = undef; - } else { - $hash->{$key} = {}; - $self->_read_hash( $hash->{$key}, [ @$indent, length($1) ], $lines ); - } - } - } - } - - return 1; -} - -# Save an object to a file -sub write { - my $self = shift; - my $file = shift or return $self->_error('No file name provided'); - - # Write it to the file - open( CFG, '>' . $file ) or return $self->_error( - "Failed to open file '$file' for writing: $!" - ); - print CFG $self->write_string; - close CFG; - - return 1; -} - -# Save an object to a string -sub write_string { - my $self = shift; - return '' unless @$self; - - # Iterate over the documents - my $indent = 0; - my @lines = (); - foreach my $cursor ( @$self ) { - push @lines, '---'; - - # An empty document - if ( ! defined $cursor ) { - # Do nothing - - # A scalar document - } elsif ( ! ref $cursor ) { - $lines[-1] .= ' ' . $self->_write_scalar( $cursor, $indent ); - - # version object - } elsif ( ref $cursor eq 'version' ) { - $lines[-1] .= ' ' . $self->_write_scalar( $cursor->stringify, $indent ); - - # A list at the root - } elsif ( ref $cursor eq 'ARRAY' ) { - unless ( @$cursor ) { - $lines[-1] .= ' []'; - next; - } - push @lines, $self->_write_array( $cursor, $indent, {} ); - - # A hash at the root - } elsif ( ref $cursor eq 'HASH' ) { - unless ( %$cursor ) { - $lines[-1] .= ' {}'; - next; - } - push @lines, $self->_write_hash( $cursor, $indent, {} ); - - } else { - Carp::croak("Cannot serialize " . ref($cursor)); - } - } - - join '', map { "$_\n" } @lines; -} - -sub _write_scalar { - my $string = $_[1]; - return '~' unless defined $string; - return "''" unless length $string; - if ( $string =~ /[\x00-\x08\x0b-\x0d\x0e-\x1f\"\'\n]/ ) { - $string =~ s/\\/\\\\/g; - $string =~ s/"/\\"/g; - $string =~ s/\n/\\n/g; - $string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g; - return qq|"$string"|; - } - if ( $string =~ /(?:^\W|\s)/ or $QUOTE{$string} ) { - return "'$string'"; - } - return $string; -} - -sub _write_array { - my ($self, $array, $indent, $seen) = @_; - if ( $seen->{refaddr($array)}++ ) { - die "ExtUtils::MakeMaker::YAML does not support circular references"; - } - my @lines = (); - foreach my $el ( @$array ) { - my $line = (' ' x $indent) . '-'; - my $type = ref $el; - if ( ! $type ) { - $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); - push @lines, $line; - - # version object - } elsif ( $type eq 'version' ) { - $line .= ' ' . $self->_write_scalar( $el->stringify, $indent + 1 ); - push @lines, $line; - - } elsif ( $type eq 'ARRAY' ) { - if ( @$el ) { - push @lines, $line; - push @lines, $self->_write_array( $el, $indent + 1, $seen ); - } else { - $line .= ' []'; - push @lines, $line; - } - - } elsif ( $type eq 'HASH' ) { - if ( keys %$el ) { - push @lines, $line; - push @lines, $self->_write_hash( $el, $indent + 1, $seen ); - } else { - $line .= ' {}'; - push @lines, $line; - } - - } else { - die "ExtUtils::MakeMaker::YAML does not support $type references"; - } - } - - @lines; -} - -sub _write_hash { - my ($self, $hash, $indent, $seen) = @_; - if ( $seen->{refaddr($hash)}++ ) { - die "ExtUtils::MakeMaker::YAML does not support circular references"; - } - my @lines = (); - foreach my $name ( sort keys %$hash ) { - my $el = $hash->{$name}; - my $line = (' ' x $indent) . "$name:"; - my $type = ref $el; - if ( ! $type ) { - $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); - push @lines, $line; - - # version object - } elsif ( $type eq 'version' ) { - $line .= ' ' . $self->_write_scalar( $el->stringify, $indent + 1 ); - push @lines, $line; - - } elsif ( $type eq 'ARRAY' ) { - if ( @$el ) { - push @lines, $line; - push @lines, $self->_write_array( $el, $indent + 1, $seen ); - } else { - $line .= ' []'; - push @lines, $line; - } - - } elsif ( $type eq 'HASH' ) { - if ( keys %$el ) { - push @lines, $line; - push @lines, $self->_write_hash( $el, $indent + 1, $seen ); - } else { - $line .= ' {}'; - push @lines, $line; - } - - } else { - die "ExtUtils::MakeMaker::YAML does not support $type references"; - } - } - - @lines; -} - -# Set error -sub _error { - $ExtUtils::MakeMaker::YAML::errstr = $_[1]; - undef; -} - -# Retrieve error -sub errstr { - $ExtUtils::MakeMaker::YAML::errstr; -} - - - - - -##################################################################### -# YAML Compatibility - -sub Dump { - ExtUtils::MakeMaker::YAML->new(@_)->write_string; -} - -sub Load { - my $self = ExtUtils::MakeMaker::YAML->read_string(@_); - unless ( $self ) { - Carp::croak("Failed to load YAML document from string"); - } - if ( wantarray ) { - return @$self; - } else { - # To match YAML.pm, return the last document - return $self->[-1]; - } -} - -BEGIN { - *freeze = *Dump; - *thaw = *Load; -} - -sub DumpFile { - my $file = shift; - ExtUtils::MakeMaker::YAML->new(@_)->write($file); -} - -sub LoadFile { - my $self = ExtUtils::MakeMaker::YAML->read($_[0]); - unless ( $self ) { - Carp::croak("Failed to load YAML document from '" . ($_[0] || '') . "'"); - } - if ( wantarray ) { - return @$self; - } else { - # Return only the last document to match YAML.pm, - return $self->[-1]; - } -} - - - - - -##################################################################### -# Use Scalar::Util if possible, otherwise emulate it - -BEGIN { - eval { - require Scalar::Util; - *refaddr = *Scalar::Util::refaddr; - }; - eval <<'END_PERL' if $@; -# Failed to load Scalar::Util -sub refaddr { - my $pkg = ref($_[0]) or return undef; - if (!!UNIVERSAL::can($_[0], 'can')) { - bless $_[0], 'Scalar::Util::Fake'; - } else { - $pkg = undef; - } - "$_[0]" =~ /0x(\w+)/; - my $i = do { local $^W; hex $1 }; - bless $_[0], $pkg if defined $pkg; - $i; -} -END_PERL - -} - -1; - -__END__ - -=pod - -=head1 NAME - -ExtUtils::MakeMaker::YAML - clone of YAML::Tiny - -=head1 SYNOPSIS - -See L - -=head1 AUTHOR - -Adam Kennedy Eadamk@cpan.orgE - -=head1 SEE ALSO - -L, L - -=head1 COPYRIGHT - -Copyright 2006 - 2010 Adam Kennedy. - -This program is free software; you can redistribute -it and/or modify it under the same terms as Perl itself. - -=cut diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Manifest.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Manifest.pm index ce4314c419d..b1e61200187 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Manifest.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Manifest.pm @@ -13,7 +13,7 @@ use vars qw($VERSION @ISA @EXPORT_OK $Is_MacOS $Is_VMS $Is_VMS_mode $Is_VMS_lc $Is_VMS_nodot $Debug $Verbose $Quiet $MANIFEST $DEFAULT_MSKIP); -$VERSION = '1.58'; +$VERSION = '1.61'; @ISA=('Exporter'); @EXPORT_OK = qw(mkmanifest manicheck filecheck fullcheck skipcheck @@ -706,21 +706,36 @@ sub maniadd { } -# Sometimes MANIFESTs are missing a trailing newline. Fix this. +# Make sure this MANIFEST is consistently written with native +# newlines and has a terminal newline. sub _fix_manifest { my $manifest_file = shift; open MANIFEST, $MANIFEST or die "Could not open $MANIFEST: $!"; - - # Yes, we should be using seek(), but I'd like to avoid loading POSIX - # to get SEEK_* - my @manifest = ; + local $/; + my @manifest = split /(\015\012|\012|\015)/, , -1; close MANIFEST; + my $must_rewrite = ""; + if ($manifest[-1] eq ""){ + # sane case: last line had a terminal newline + pop @manifest; + for (my $i=1; $i<=$#manifest; $i+=2) { + unless ($manifest[$i] eq "\n") { + $must_rewrite = "not a newline at pos $i"; + last; + } + } + } else { + $must_rewrite = "last line without newline"; + } - unless( $manifest[-1] =~ /\n\z/ ) { - open MANIFEST, ">>$MANIFEST" or die "Could not open $MANIFEST: $!"; - print MANIFEST "\n"; - close MANIFEST; + if ( $must_rewrite ) { + 1 while unlink $MANIFEST; # avoid multiple versions on VMS + open MANIFEST, ">", $MANIFEST or die "(must_rewrite=$must_rewrite) Could not open >$MANIFEST: $!"; + for (my $i=0; $i<=$#manifest; $i+=2) { + print MANIFEST "$manifest[$i]\n"; + } + close MANIFEST or die "could not write $MANIFEST: $!"; } } diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Miniperl.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Miniperl.pm index 379eb118ed5..0a2cb627abe 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Miniperl.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Miniperl.pm @@ -94,7 +94,7 @@ main(int argc, char **argv, char **env) PERL_UNUSED_ARG(env); #endif #ifndef PERL_USE_SAFE_PUTENV - PL_use_safe_putenv = 0; + PL_use_safe_putenv = FALSE; #endif /* PERL_USE_SAFE_PUTENV */ /* if user wants control of gprof profiling off by default */ diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Mkbootstrap.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Mkbootstrap.pm index fbf24156c6a..b5f19ea95ce 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Mkbootstrap.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Mkbootstrap.pm @@ -3,7 +3,7 @@ package ExtUtils::Mkbootstrap; # There's just too much Dynaloader incest here to turn on strict vars. use strict 'refs'; -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; require Exporter; our @ISA = ('Exporter'); diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Mksymlists.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Mksymlists.pm index 9aac3fd74a4..f0860855923 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Mksymlists.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Mksymlists.pm @@ -10,7 +10,7 @@ use Config; our @ISA = qw(Exporter); our @EXPORT = qw(&Mksymlists); -our $VERSION = '6.57_05'; +our $VERSION = '6.63_02'; sub Mksymlists { my(%spec) = @_; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Packlist.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Packlist.pm index b77a556be50..a268e300d3c 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/Packlist.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Packlist.pm @@ -5,7 +5,7 @@ use strict; use Carp qw(); use Config; use vars qw($VERSION $Relocations); -$VERSION = '1.44'; +$VERSION = '1.46'; $VERSION = eval $VERSION; # Used for generating filehandle globs. IO::File might not be available! @@ -24,6 +24,7 @@ Make a filehandle. Same kind of idea as Symbol::gensym(). sub mkfh() { no strict; +local $^W; my $fh = \*{$fhname++}; use strict; return($fh); @@ -34,10 +35,10 @@ return($fh); Works out what absolute paths in the configuration have been located at run time relative to $^X, and generates a regexp that matches them -=end _undocumented - =back +=end _undocumented + =cut sub __find_relocations diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pm b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pm index 79b39688492..883d9059311 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pm @@ -1,109 +1,117 @@ package ExtUtils::ParseXS; +use strict; -use 5.006; # We use /??{}/ in regexes +use 5.006001; use Cwd; use Config; +use Exporter; use File::Basename; use File::Spec; use Symbol; -require Exporter; - -@ISA = qw(Exporter); -@EXPORT_OK = qw(process_file); - -# use strict; # One of these days... - -my(@XSStack); # Stack of conditionals and INCLUDEs -my($XSS_work_idx, $cpp_next_tmp); - -use vars qw($VERSION); -$VERSION = '2.2210'; +our $VERSION; +BEGIN { + $VERSION = '3.16'; +} +use ExtUtils::ParseXS::Constants $VERSION; +use ExtUtils::ParseXS::CountLines $VERSION; +use ExtUtils::ParseXS::Utilities $VERSION; $VERSION = eval $VERSION if $VERSION =~ /_/; -use vars qw(%input_expr %output_expr $ProtoUsed @InitFileCode $FH $proto_re $Overload $errors $Fallback - $cplusplus $hiertype $WantPrototypes $WantVersionChk $except $WantLineNumbers - $WantOptimize $process_inout $process_argtypes @tm - $dir $filename $filepathname %IncludedFiles - %type_kind %proto_letter - %targetable $BLOCK_re $lastline $lastline_no - $Package $Prefix @line @BootCode %args_match %defaults %var_types %arg_list @proto_arg - $processing_arg_with_types %argtype_seen @outlist %in_out %lengthof - $proto_in_this_xsub $scope_in_this_xsub $interface $prepush_done $interface_macro $interface_macro_set - $ProtoThisXSUB $ScopeThisXSUB $xsreturn - @line_no $ret_type $func_header $orig_args - ); # Add these just to get compilation to happen. - +use ExtUtils::ParseXS::Utilities qw( + standard_typemap_locations + trim_whitespace + tidy_type + C_string + valid_proto_string + process_typemaps + make_targetable + map_type + standard_XS_defs + assign_func_args + analyze_preprocessor_statements + set_cond + Warn + current_line_number + blurt + death + check_conditional_preprocessor_statements + escape_file_for_line_directive + report_typemap_failure +); + +our @ISA = qw(Exporter); +our @EXPORT_OK = qw( + process_file + report_error_count +); + +# The scalars in the line below remain as 'our' variables because pulling +# them into $self led to build problems. In most cases, strings being +# 'eval'-ed contain the variables' names hard-coded. +our ( + $Package, $func_name, $Full_func_name, $pname, $ALIAS, +); + +our $self = bless {} => __PACKAGE__; sub process_file { - + # Allow for $package->process_file(%hash) in the future - my ($pkg, %args) = @_ % 2 ? @_ : (__PACKAGE__, @_); - - $ProtoUsed = exists $args{prototypes}; - + my ($pkg, %options) = @_ % 2 ? @_ : (__PACKAGE__, @_); + + $self->{ProtoUsed} = exists $options{prototypes}; + # Set defaults. - %args = ( - # 'C++' => 0, # Doesn't seem to *do* anything... - hiertype => 0, - except => 0, - prototypes => 0, - versioncheck => 1, - linenumbers => 1, - optimize => 1, - prototypes => 0, - inout => 1, - argtypes => 1, - typemap => [], - output => \*STDOUT, - csuffix => '.c', - %args, - ); + my %args = ( + argtypes => 1, + csuffix => '.c', + except => 0, + hiertype => 0, + inout => 1, + linenumbers => 1, + optimize => 1, + output => \*STDOUT, + prototypes => 0, + typemap => [], + versioncheck => 1, + FH => Symbol::gensym(), + %options, + ); + $args{except} = $args{except} ? ' TRY' : ''; # Global Constants - + my ($Is_VMS, $SymSet); if ($^O eq 'VMS') { $Is_VMS = 1; # Establish set of global symbols with max length 28, since xsubpp # will later add the 'XS_' prefix. require ExtUtils::XSSymSet; - $SymSet = new ExtUtils::XSSymSet 28; + $SymSet = ExtUtils::XSSymSet->new(28); } - @XSStack = ({type => 'none'}); - ($XSS_work_idx, $cpp_next_tmp) = (0, "XSubPPtmpAAAA"); - @InitFileCode = (); - $FH = Symbol::gensym(); - $proto_re = "[" . quotemeta('\$%&*@;[]_') . "]" ; - $Overload = 0; - $errors = 0; - $Fallback = '&PL_sv_undef'; + @{ $self->{XSStack} } = ({type => 'none'}); + $self->{InitFileCode} = [ @ExtUtils::ParseXS::Constants::InitFileCode ]; + $self->{Overload} = 0; + $self->{errors} = 0; + $self->{Fallback} = '&PL_sv_undef'; # Most of the 1500 lines below uses these globals. We'll have to # clean this up sometime, probably. For now, we just pull them out # of %args. -Ken - - $cplusplus = $args{'C++'}; - $hiertype = $args{hiertype}; - $WantPrototypes = $args{prototypes}; - $WantVersionChk = $args{versioncheck}; - $except = $args{except} ? ' TRY' : ''; - $WantLineNumbers = $args{linenumbers}; - $WantOptimize = $args{optimize}; - $process_inout = $args{inout}; - $process_argtypes = $args{argtypes}; - @tm = ref $args{typemap} ? @{$args{typemap}} : ($args{typemap}); - - for ($args{filename}) { - die "Missing required parameter 'filename'" unless $_; - $filepathname = $_; - ($dir, $filename) = (dirname($_), basename($_)); - $filepathname =~ s/\\/\\\\/g; - $IncludedFiles{$_}++; - } - - # Open the input file - open($FH, $args{filename}) or die "cannot open $args{filename}: $!\n"; + + $self->{hiertype} = $args{hiertype}; + $self->{WantPrototypes} = $args{prototypes}; + $self->{WantVersionChk} = $args{versioncheck}; + $self->{WantLineNumbers} = $args{linenumbers}; + $self->{IncludedFiles} = {}; + + die "Missing required parameter 'filename'" unless $args{filename}; + $self->{filepathname} = $args{filename}; + ($self->{dir}, $self->{filename}) = + (dirname($args{filename}), basename($args{filename})); + $self->{filepathname} =~ s/\\/\\\\/g; + $self->{IncludedFiles}->{$args{filename}}++; # Open the output file if given as a string. If they provide some # other kind of reference, trust them that we can print to it. @@ -114,194 +122,121 @@ sub process_file { } # Really, we shouldn't have to chdir() or select() in the first - # place. For now, just save & restore. + # place. For now, just save and restore. my $orig_cwd = cwd(); my $orig_fh = select(); - - chdir($dir); + + chdir($self->{dir}); my $pwd = cwd(); my $csuffix = $args{csuffix}; - - if ($WantLineNumbers) { + + if ($self->{WantLineNumbers}) { my $cfile; if ( $args{outfile} ) { $cfile = $args{outfile}; - } else { + } + else { $cfile = $args{filename}; $cfile =~ s/\.xs$/$csuffix/i or $cfile .= $csuffix; } tie(*PSEUDO_STDOUT, 'ExtUtils::ParseXS::CountLines', $cfile, $args{output}); select PSEUDO_STDOUT; - } else { - select $args{output}; - } - - foreach my $typemap (@tm) { - die "Can't find $typemap in $pwd\n" unless -r $typemap; } - - push @tm, standard_typemap_locations(); - - foreach my $typemap (@tm) { - next unless -f $typemap ; - # skip directories, binary files etc. - warn("Warning: ignoring non-text typemap file '$typemap'\n"), next - unless -T $typemap ; - open(TYPEMAP, $typemap) - or warn ("Warning: could not open typemap file '$typemap': $!\n"), next; - my $mode = 'Typemap'; - my $junk = "" ; - my $current = \$junk; - while () { - next if /^\s* #/; - my $line_no = $. + 1; - if (/^INPUT\s*$/) { - $mode = 'Input'; $current = \$junk; next; - } - if (/^OUTPUT\s*$/) { - $mode = 'Output'; $current = \$junk; next; - } - if (/^TYPEMAP\s*$/) { - $mode = 'Typemap'; $current = \$junk; next; - } - if ($mode eq 'Typemap') { - chomp; - my $line = $_ ; - TrimWhitespace($_) ; - # skip blank lines and comment lines - next if /^$/ or /^#/ ; - my($type,$kind, $proto) = /^\s*(.*?\S)\s+(\S+)\s*($proto_re*)\s*$/ or - warn("Warning: File '$typemap' Line $. '$line' TYPEMAP entry needs 2 or 3 columns\n"), next; - $type = TidyType($type) ; - $type_kind{$type} = $kind ; - # prototype defaults to '$' - $proto = "\$" unless $proto ; - warn("Warning: File '$typemap' Line $. '$line' Invalid prototype '$proto'\n") - unless ValidProtoString($proto) ; - $proto_letter{$type} = C_string($proto) ; - } elsif (/^\s/) { - $$current .= $_; - } elsif ($mode eq 'Input') { - s/\s+$//; - $input_expr{$_} = ''; - $current = \$input_expr{$_}; - } else { - s/\s+$//; - $output_expr{$_} = ''; - $current = \$output_expr{$_}; - } - } - close(TYPEMAP); - } - - foreach my $value (values %input_expr) { - $value =~ s/;*\s+\z//; - # Move C pre-processor instructions to column 1 to be strictly ANSI - # conformant. Some pre-processors are fussy about this. - $value =~ s/^\s+#/#/mg; - } - foreach my $value (values %output_expr) { - # And again. - $value =~ s/^\s+#/#/mg; + else { + select $args{output}; } - my ($cast, $size); - our $bal = qr[(?:(?>[^()]+)|\((??{ $bal })\))*]; # ()-balanced - $cast = qr[(?:\(\s*SV\s*\*\s*\)\s*)?]; # Optional (SV*) cast - $size = qr[,\s* (??{ $bal }) ]x; # Third arg (to setpvn) - - foreach my $key (keys %output_expr) { - # We can still bootstrap compile 're', because in code re.pm is - # available to miniperl, and does not attempt to load the XS code. - use re 'eval'; - - my ($t, $with_size, $arg, $sarg) = - ($output_expr{$key} =~ - m[^ \s+ sv_set ( [iunp] ) v (n)? # Type, is_setpvn - \s* \( \s* $cast \$arg \s* , - \s* ( (??{ $bal }) ) # Set from - ( (??{ $size }) )? # Possible sizeof set-from - \) \s* ; \s* $ - ]x); - $targetable{$key} = [$t, $with_size, $arg, $sarg] if $t; - } + $self->{typemap} = process_typemaps( $args{typemap}, $pwd ); - my $END = "!End!\n\n"; # "impossible" keyword (multiple newline) + my $END = "!End!\n\n"; # "impossible" keyword (multiple newline) # Match an XS keyword - $BLOCK_re= '\s*(' . join('|', qw( - REQUIRE BOOT CASE PREINIT INPUT INIT CODE PPCODE - OUTPUT CLEANUP ALIAS ATTRS PROTOTYPES PROTOTYPE - VERSIONCHECK INCLUDE INCLUDE_COMMAND SCOPE INTERFACE - INTERFACE_MACRO C_ARGS POSTCALL OVERLOAD FALLBACK - )) . "|$END)\\s*:"; - - + $self->{BLOCK_re} = '\s*(' . + join('|' => @ExtUtils::ParseXS::Constants::XSKeywords) . + "|$END)\\s*:"; + our ($C_group_rex, $C_arg); # Group in C (no support for comments or literals) $C_group_rex = qr/ [({\[] - (?: (?> [^()\[\]{}]+ ) | (??{ $C_group_rex }) )* - [)}\]] /x ; + (?: (?> [^()\[\]{}]+ ) | (??{ $C_group_rex }) )* + [)}\]] /x; # Chunk in C without comma at toplevel (no comments): $C_arg = qr/ (?: (?> [^()\[\]{},"']+ ) - | (??{ $C_group_rex }) - | " (?: (?> [^\\"]+ ) - | \\. - )* " # String literal - | ' (?: (?> [^\\']+ ) | \\. )* ' # Char literal - )* /xs; - + | (??{ $C_group_rex }) + | " (?: (?> [^\\"]+ ) + | \\. + )* " # String literal + | ' (?: (?> [^\\']+ ) | \\. )* ' # Char literal + )* /xs; + + # Since at this point we're ready to begin printing to the output file and + # reading from the input file, I want to get as much data as possible into + # the proto-object $self. That means assigning to $self and elements of + # %args referenced below this point. + # HOWEVER: This resulted in an error when I tried: + # $args{'s'} ---> $self->{s}. + # Use of uninitialized value in quotemeta at + # .../blib/lib/ExtUtils/ParseXS.pm line 733 + + foreach my $datum ( qw| argtypes except inout optimize | ) { + $self->{$datum} = $args{$datum}; + } + # Identify the version of xsubpp used - print <{filename}. Do not edit this file, edit $self->{filename} instead. * - * ANY CHANGES MADE HERE WILL BE LOST! + * ANY CHANGES MADE HERE WILL BE LOST! * */ EOM - print("#line 1 \"$filepathname\"\n") - if $WantLineNumbers; + print("#line 1 \"" . escape_file_for_line_directive($self->{filepathname}) . "\"\n") + if $self->{WantLineNumbers}; + + # Open the input file (using $self->{filename} which + # is a basename'd $args{filename} due to chdir above) + open($self->{FH}, '<', $self->{filename}) or die "cannot open $self->{filename}: $!\n"; firstmodule: - while (<$FH>) { + while (readline($self->{FH})) { if (/^=/) { my $podstartline = $.; do { - if (/^=cut\s*$/) { - # We can't just write out a /* */ comment, as our embedded - # POD might itself be in a comment. We can't put a /**/ - # comment inside #if 0, as the C standard says that the source - # file is decomposed into preprocessing characters in the stage - # before preprocessing commands are executed. - # I don't want to leave the text as barewords, because the spec - # isn't clear whether macros are expanded before or after - # preprocessing commands are executed, and someone pathological - # may just have defined one of the 3 words as a macro that does - # something strange. Multiline strings are illegal in C, so - # the "" we write must be a string literal. And they aren't - # concatenated until 2 steps later, so we are safe. - # - Nicholas Clark - print("#if 0\n \"Skipped embedded POD.\"\n#endif\n"); - printf("#line %d \"$filepathname\"\n", $. + 1) - if $WantLineNumbers; - next firstmodule - } - - } while (<$FH>); + if (/^=cut\s*$/) { + # We can't just write out a /* */ comment, as our embedded + # POD might itself be in a comment. We can't put a /**/ + # comment inside #if 0, as the C standard says that the source + # file is decomposed into preprocessing characters in the stage + # before preprocessing commands are executed. + # I don't want to leave the text as barewords, because the spec + # isn't clear whether macros are expanded before or after + # preprocessing commands are executed, and someone pathological + # may just have defined one of the 3 words as a macro that does + # something strange. Multiline strings are illegal in C, so + # the "" we write must be a string literal. And they aren't + # concatenated until 2 steps later, so we are safe. + # - Nicholas Clark + print("#if 0\n \"Skipped embedded POD.\"\n#endif\n"); + printf("#line %d \"%s\"\n", $. + 1, escape_file_for_line_directive($self->{filepathname})) + if $self->{WantLineNumbers}; + next firstmodule + } + + } while (readline($self->{FH})); # At this point $. is at end of file so die won't state the start # of the problem, and as we haven't yet read any lines &death won't # show the correct line in the message either. - die ("Error: Unterminated pod in $filename, line $podstartline\n") - unless $lastline; + die ("Error: Unterminated pod in $self->{filename}, line $podstartline\n") + unless $self->{lastline}; } - last if ($Package, $Prefix) = + last if ($Package, $self->{Prefix}) = /^MODULE\s*=\s*[\w:]+(?:\s+PACKAGE\s*=\s*([\w:]+))?(?:\s+PREFIX\s*=\s*(\S+))?\s*$/; - + print $_; } unless (defined $_) { @@ -309,313 +244,259 @@ EOM exit 0; # Not a fatal error for the caller process } - print 'ExtUtils::ParseXS::CountLines'->end_marker, "\n" if $WantLineNumbers; - - print <<"EOF"; -#ifndef PERL_UNUSED_VAR -# define PERL_UNUSED_VAR(var) if (0) var = var -#endif - -EOF - - print <<"EOF"; -#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE -#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params) - -/* prototype to pass -Wmissing-prototypes */ -STATIC void -S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params); - -STATIC void -S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params) -{ - const GV *const gv = CvGV(cv); - - PERL_ARGS_ASSERT_CROAK_XS_USAGE; - - if (gv) { - const char *const gvname = GvNAME(gv); - const HV *const stash = GvSTASH(gv); - const char *const hvname = stash ? HvNAME(stash) : NULL; - - if (hvname) - Perl_croak(aTHX_ "Usage: %s::%s(%s)", hvname, gvname, params); - else - Perl_croak(aTHX_ "Usage: %s(%s)", gvname, params); - } else { - /* Pants. I don't think that it should be possible to get here. */ - Perl_croak(aTHX_ "Usage: CODE(0x%"UVxf")(%s)", PTR2UV(cv), params); - } -} -#undef PERL_ARGS_ASSERT_CROAK_XS_USAGE - -#ifdef PERL_IMPLICIT_CONTEXT -#define croak_xs_usage(a,b) S_croak_xs_usage(aTHX_ a,b) -#else -#define croak_xs_usage S_croak_xs_usage -#endif - -#endif - -/* NOTE: the prototype of newXSproto() is different in versions of perls, - * so we define a portable version of newXSproto() - */ -#ifdef newXS_flags -#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0) -#else -#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv) -#endif /* !defined(newXS_flags) */ + print 'ExtUtils::ParseXS::CountLines'->end_marker, "\n" if $self->{WantLineNumbers}; -EOF + standard_XS_defs(); - print 'ExtUtils::ParseXS::CountLines'->end_marker, "\n" if $WantLineNumbers; + print 'ExtUtils::ParseXS::CountLines'->end_marker, "\n" if $self->{WantLineNumbers}; - $lastline = $_; - $lastline_no = $.; + $self->{lastline} = $_; + $self->{lastline_no} = $.; + my $BootCode_ref = []; + my $XSS_work_idx = 0; + my $cpp_next_tmp = 'XSubPPtmpAAAA'; PARAGRAPH: - while (fetch_para()) { + while ($self->fetch_para()) { + my $outlist_ref = []; # Print initial preprocessor statements and blank lines - while (@line && $line[0] !~ /^[^\#]/) { - my $line = shift(@line); - print $line, "\n"; - next unless $line =~ /^\#\s*((if)(?:n?def)?|elsif|else|endif)\b/; + while (@{ $self->{line} } && $self->{line}->[0] !~ /^[^\#]/) { + my $ln = shift(@{ $self->{line} }); + print $ln, "\n"; + next unless $ln =~ /^\#\s*((if)(?:n?def)?|elsif|else|endif)\b/; my $statement = $+; - if ($statement eq 'if') { - $XSS_work_idx = @XSStack; - push(@XSStack, {type => 'if'}); - } else { - death ("Error: `$statement' with no matching `if'") - if $XSStack[-1]{type} ne 'if'; - if ($XSStack[-1]{varname}) { - push(@InitFileCode, "#endif\n"); - push(@BootCode, "#endif"); - } - - my(@fns) = keys %{$XSStack[-1]{functions}}; - if ($statement ne 'endif') { - # Hide the functions defined in other #if branches, and reset. - @{$XSStack[-1]{other_functions}}{@fns} = (1) x @fns; - @{$XSStack[-1]}{qw(varname functions)} = ('', {}); - } else { - my($tmp) = pop(@XSStack); - 0 while (--$XSS_work_idx - && $XSStack[$XSS_work_idx]{type} ne 'if'); - # Keep all new defined functions - push(@fns, keys %{$tmp->{other_functions}}); - @{$XSStack[$XSS_work_idx]{functions}}{@fns} = (1) x @fns; - } - } + ( $self, $XSS_work_idx, $BootCode_ref ) = + analyze_preprocessor_statements( + $self, $statement, $XSS_work_idx, $BootCode_ref + ); } - - next PARAGRAPH unless @line; - - if ($XSS_work_idx && !$XSStack[$XSS_work_idx]{varname}) { + + next PARAGRAPH unless @{ $self->{line} }; + + if ($XSS_work_idx && !$self->{XSStack}->[$XSS_work_idx]{varname}) { # We are inside an #if, but have not yet #defined its xsubpp variable. print "#define $cpp_next_tmp 1\n\n"; - push(@InitFileCode, "#if $cpp_next_tmp\n"); - push(@BootCode, "#if $cpp_next_tmp"); - $XSStack[$XSS_work_idx]{varname} = $cpp_next_tmp++; + push(@{ $self->{InitFileCode} }, "#if $cpp_next_tmp\n"); + push(@{ $BootCode_ref }, "#if $cpp_next_tmp"); + $self->{XSStack}->[$XSS_work_idx]{varname} = $cpp_next_tmp++; } - death ("Code is not inside a function" - ." (maybe last function was ended by a blank line " - ." followed by a statement on column one?)") - if $line[0] =~ /^\s/; - - my ($class, $externC, $static, $ellipsis, $wantRETVAL, $RETVAL_no_return); - my (@fake_INPUT_pre); # For length(s) generated variables - my (@fake_INPUT); - + $self->death( + "Code is not inside a function" + ." (maybe last function was ended by a blank line " + ." followed by a statement on column one?)") + if $self->{line}->[0] =~ /^\s/; + # initialize info arrays - undef(%args_match); - undef(%var_types); - undef(%defaults); - undef(%arg_list) ; - undef(@proto_arg) ; - undef($processing_arg_with_types) ; - undef(%argtype_seen) ; - undef(@outlist) ; - undef(%in_out) ; - undef(%lengthof) ; - undef($proto_in_this_xsub) ; - undef($scope_in_this_xsub) ; - undef($interface); - undef($prepush_done); - $interface_macro = 'XSINTERFACE_FUNC' ; - $interface_macro_set = 'XSINTERFACE_FUNC_SET' ; - $ProtoThisXSUB = $WantPrototypes ; - $ScopeThisXSUB = 0; - $xsreturn = 0; - - $_ = shift(@line); - while (my $kwd = check_keyword("REQUIRE|PROTOTYPES|FALLBACK|VERSIONCHECK|INCLUDE(?:_COMMAND)?|SCOPE")) { - &{"${kwd}_handler"}() ; - next PARAGRAPH unless @line ; - $_ = shift(@line); + foreach my $member (qw(args_match var_types defaults arg_list + argtype_seen in_out lengthof)) + { + $self->{$member} = {}; } - - if (check_keyword("BOOT")) { - &check_cpp; - push (@BootCode, "#line $line_no[@line_no - @line] \"$filepathname\"") - if $WantLineNumbers && $line[0] !~ /^\s*#\s*line\b/; - push (@BootCode, @line, "") ; - next PARAGRAPH ; + $self->{proto_arg} = []; + $self->{processing_arg_with_types} = undef; + $self->{proto_in_this_xsub} = undef; + $self->{scope_in_this_xsub} = undef; + $self->{interface} = undef; + $self->{interface_macro} = 'XSINTERFACE_FUNC'; + $self->{interface_macro_set} = 'XSINTERFACE_FUNC_SET'; + $self->{ProtoThisXSUB} = $self->{WantPrototypes}; + $self->{ScopeThisXSUB} = 0; + + my $xsreturn = 0; + + $_ = shift(@{ $self->{line} }); + while (my $kwd = $self->check_keyword("REQUIRE|PROTOTYPES|EXPORT_XSUB_SYMBOLS|FALLBACK|VERSIONCHECK|INCLUDE(?:_COMMAND)?|SCOPE")) { + my $method = $kwd . "_handler"; + $self->$method($_); + next PARAGRAPH unless @{ $self->{line} }; + $_ = shift(@{ $self->{line} }); } + if ($self->check_keyword("BOOT")) { + check_conditional_preprocessor_statements($self); + push (@{ $BootCode_ref }, "#line $self->{line_no}->[@{ $self->{line_no} } - @{ $self->{line} }] \"" + . escape_file_for_line_directive($self->{filepathname}) . "\"") + if $self->{WantLineNumbers} && $self->{line}->[0] !~ /^\s*#\s*line\b/; + push (@{ $BootCode_ref }, @{ $self->{line} }, ""); + next PARAGRAPH; + } # extract return type, function name and arguments - ($ret_type) = TidyType($_); - $RETVAL_no_return = 1 if $ret_type =~ s/^NO_OUTPUT\s+//; + ($self->{ret_type}) = tidy_type($_); + my $RETVAL_no_return = 1 if $self->{ret_type} =~ s/^NO_OUTPUT\s+//; # Allow one-line ANSI-like declaration - unshift @line, $2 - if $process_argtypes - and $ret_type =~ s/^(.*?\w.*?)\s*\b(\w+\s*\(.*)/$1/s; + unshift @{ $self->{line} }, $2 + if $self->{argtypes} + and $self->{ret_type} =~ s/^(.*?\w.*?)\s*\b(\w+\s*\(.*)/$1/s; # a function definition needs at least 2 lines - blurt ("Error: Function definition too short '$ret_type'"), next PARAGRAPH - unless @line ; + $self->blurt("Error: Function definition too short '$self->{ret_type}'"), next PARAGRAPH + unless @{ $self->{line} }; - $externC = 1 if $ret_type =~ s/^extern "C"\s+//; - $static = 1 if $ret_type =~ s/^static\s+//; + my $externC = 1 if $self->{ret_type} =~ s/^extern "C"\s+//; + my $static = 1 if $self->{ret_type} =~ s/^static\s+//; - $func_header = shift(@line); - blurt ("Error: Cannot parse function definition from '$func_header'"), next PARAGRAPH + my $func_header = shift(@{ $self->{line} }); + $self->blurt("Error: Cannot parse function definition from '$func_header'"), next PARAGRAPH unless $func_header =~ /^(?:([\w:]*)::)?(\w+)\s*\(\s*(.*?)\s*\)\s*(const)?\s*(;\s*)?$/s; - ($class, $func_name, $orig_args) = ($1, $2, $3) ; + my ($class, $orig_args); + ($class, $func_name, $orig_args) = ($1, $2, $3); $class = "$4 $class" if $4; - ($pname = $func_name) =~ s/^($Prefix)?/$Packprefix/; - ($clean_func_name = $func_name) =~ s/^$Prefix//; - $Full_func_name = "${Packid}_$clean_func_name"; + ($pname = $func_name) =~ s/^($self->{Prefix})?/$self->{Packprefix}/; + my $clean_func_name; + ($clean_func_name = $func_name) =~ s/^$self->{Prefix}//; + $Full_func_name = "$self->{Packid}_$clean_func_name"; if ($Is_VMS) { $Full_func_name = $SymSet->addsym($Full_func_name); } # Check for duplicate function definition - for my $tmp (@XSStack) { + for my $tmp (@{ $self->{XSStack} }) { next unless defined $tmp->{functions}{$Full_func_name}; - Warn("Warning: duplicate function definition '$clean_func_name' detected"); + Warn( $self, "Warning: duplicate function definition '$clean_func_name' detected"); last; } - $XSStack[$XSS_work_idx]{functions}{$Full_func_name} ++ ; - %XsubAliases = %XsubAliasValues = %Interfaces = @Attributes = (); - $DoSetMagic = 1; - - $orig_args =~ s/\\\s*/ /g; # process line continuations + $self->{XSStack}->[$XSS_work_idx]{functions}{$Full_func_name}++; + %{ $self->{XsubAliases} } = (); + %{ $self->{XsubAliasValues} } = (); + %{ $self->{Interfaces} } = (); + @{ $self->{Attributes} } = (); + $self->{DoSetMagic} = 1; + + $orig_args =~ s/\\\s*/ /g; # process line continuations my @args; - my %only_C_inlist; # Not in the signature of Perl function - if ($process_argtypes and $orig_args =~ /\S/) { + my (@fake_INPUT_pre); # For length(s) generated variables + my (@fake_INPUT); + my $only_C_inlist_ref = {}; # Not in the signature of Perl function + if ($self->{argtypes} and $orig_args =~ /\S/) { my $args = "$orig_args ,"; if ($args =~ /^( (??{ $C_arg }) , )* $ /x) { - @args = ($args =~ /\G ( (??{ $C_arg }) ) , /xg); - for ( @args ) { - s/^\s+//; - s/\s+$//; - my ($arg, $default) = / ( [^=]* ) ( (?: = .* )? ) /x; - my ($pre, $name) = ($arg =~ /(.*?) \s* - \b ( \w+ | length\( \s*\w+\s* \) ) - \s* $ /x); - next unless defined($pre) && length($pre); - my $out_type = ''; - my $inout_var; - if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\b\s*//) { - my $type = $1; - $out_type = $type if $type ne 'IN'; - $arg =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\b\s*//; - $pre =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\b\s*//; - } - my $islength; - if ($name =~ /^length\( \s* (\w+) \s* \)\z/x) { - $name = "XSauto_length_of_$1"; - $islength = 1; - die "Default value on length() argument: `$_'" - if length $default; - } - if (length $pre or $islength) { # Has a type - if ($islength) { - push @fake_INPUT_pre, $arg; - } else { - push @fake_INPUT, $arg; - } - # warn "pushing '$arg'\n"; - $argtype_seen{$name}++; - $_ = "$name$default"; # Assigns to @args - } - $only_C_inlist{$_} = 1 if $out_type eq "OUTLIST" or $islength; - push @outlist, $name if $out_type =~ /OUTLIST$/; - $in_out{$name} = $out_type if $out_type; - } - } else { - @args = split(/\s*,\s*/, $orig_args); - Warn("Warning: cannot parse argument list '$orig_args', fallback to split"); + @args = ($args =~ /\G ( (??{ $C_arg }) ) , /xg); + for ( @args ) { + s/^\s+//; + s/\s+$//; + my ($arg, $default) = ($_ =~ m/ ( [^=]* ) ( (?: = .* )? ) /x); + my ($pre, $len_name) = ($arg =~ /(.*?) \s* + \b ( \w+ | length\( \s*\w+\s* \) ) + \s* $ /x); + next unless defined($pre) && length($pre); + my $out_type = ''; + my $inout_var; + if ($self->{inout} and s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\b\s*//) { + my $type = $1; + $out_type = $type if $type ne 'IN'; + $arg =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\b\s*//; + $pre =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\b\s*//; + } + my $islength; + if ($len_name =~ /^length\( \s* (\w+) \s* \)\z/x) { + $len_name = "XSauto_length_of_$1"; + $islength = 1; + die "Default value on length() argument: '$_'" + if length $default; + } + if (length $pre or $islength) { # Has a type + if ($islength) { + push @fake_INPUT_pre, $arg; + } + else { + push @fake_INPUT, $arg; + } + # warn "pushing '$arg'\n"; + $self->{argtype_seen}->{$len_name}++; + $_ = "$len_name$default"; # Assigns to @args + } + $only_C_inlist_ref->{$_} = 1 if $out_type eq "OUTLIST" or $islength; + push @{ $outlist_ref }, $len_name if $out_type =~ /OUTLIST$/; + $self->{in_out}->{$len_name} = $out_type if $out_type; + } + } + else { + @args = split(/\s*,\s*/, $orig_args); + Warn( $self, "Warning: cannot parse argument list '$orig_args', fallback to split"); } - } else { + } + else { @args = split(/\s*,\s*/, $orig_args); for (@args) { - if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|IN_OUT|OUT)\b\s*//) { - my $out_type = $1; - next if $out_type eq 'IN'; - $only_C_inlist{$_} = 1 if $out_type eq "OUTLIST"; - push @outlist, $name if $out_type =~ /OUTLIST$/; - $in_out{$_} = $out_type; - } + if ($self->{inout} and s/^(IN|IN_OUTLIST|OUTLIST|IN_OUT|OUT)\b\s*//) { + my $out_type = $1; + next if $out_type eq 'IN'; + $only_C_inlist_ref->{$_} = 1 if $out_type eq "OUTLIST"; + if ($out_type =~ /OUTLIST$/) { + push @{ $outlist_ref }, undef; + } + $self->{in_out}->{$_} = $out_type; + } } } if (defined($class)) { my $arg0 = ((defined($static) or $func_name eq 'new') - ? "CLASS" : "THIS"); + ? "CLASS" : "THIS"); unshift(@args, $arg0); } my $extra_args = 0; - @args_num = (); - $num_args = 0; + my @args_num = (); + my $num_args = 0; my $report_args = ''; + my $ellipsis; foreach my $i (0 .. $#args) { if ($args[$i] =~ s/\.\.\.//) { - $ellipsis = 1; - if ($args[$i] eq '' && $i == $#args) { - $report_args .= ", ..."; - pop(@args); - last; - } + $ellipsis = 1; + if ($args[$i] eq '' && $i == $#args) { + $report_args .= ", ..."; + pop(@args); + last; + } + } + if ($only_C_inlist_ref->{$args[$i]}) { + push @args_num, undef; } - if ($only_C_inlist{$args[$i]}) { - push @args_num, undef; - } else { - push @args_num, ++$num_args; - $report_args .= ", $args[$i]"; + else { + push @args_num, ++$num_args; + $report_args .= ", $args[$i]"; } if ($args[$i] =~ /^([^=]*[^\s=])\s*=\s*(.*)/s) { - $extra_args++; - $args[$i] = $1; - $defaults{$args[$i]} = $2; - $defaults{$args[$i]} =~ s/"/\\"/g; + $extra_args++; + $args[$i] = $1; + $self->{defaults}->{$args[$i]} = $2; + $self->{defaults}->{$args[$i]} =~ s/"/\\"/g; } - $proto_arg[$i+1] = '$' ; + $self->{proto_arg}->[$i+1] = '$'; } - $min_args = $num_args - $extra_args; + my $min_args = $num_args - $extra_args; $report_args =~ s/"/\\"/g; $report_args =~ s/^,\s+//; - my @func_args = @args; - shift @func_args if defined($class); - - for (@func_args) { - s/^/&/ if $in_out{$_}; - } - $func_args = join(", ", @func_args); - @args_match{@args} = @args_num; + $self->{func_args} = assign_func_args($self, \@args, $class); + @{ $self->{args_match} }{@args} = @args_num; - $PPCODE = grep(/^\s*PPCODE\s*:/, @line); - $CODE = grep(/^\s*CODE\s*:/, @line); + my $PPCODE = grep(/^\s*PPCODE\s*:/, @{ $self->{line} }); + my $CODE = grep(/^\s*CODE\s*:/, @{ $self->{line} }); # Detect CODE: blocks which use ST(n)= or XST_m*(n,v) - # to set explicit return values. - $EXPLICIT_RETURN = ($CODE && - ("@line" =~ /(\bST\s*\([^;]*=) | (\bXST_m\w+\s*\()/x )); - $ALIAS = grep(/^\s*ALIAS\s*:/, @line); - $INTERFACE = grep(/^\s*INTERFACE\s*:/, @line); + # to set explicit return values. + my $EXPLICIT_RETURN = ($CODE && + ("@{ $self->{line} }" =~ /(\bST\s*\([^;]*=) | (\bXST_m\w+\s*\()/x )); + + # The $ALIAS which follows is only explicitly called within the scope of + # process_file(). In principle, it ought to be a lexical, i.e., 'my + # $ALIAS' like the other nearby variables. However, implementing that + # change produced a slight difference in the resulting .c output in at + # least two distributions: B/BD/BDFOY/Crypt-Rijndael and + # G/GF/GFUJI/Hash-FieldHash. The difference is, arguably, an improvement + # in the resulting C code. Example: + # 388c388 + # < GvNAME(CvGV(cv)), + # --- + # > "Crypt::Rijndael::encrypt", + # But at this point we're committed to generating the *same* C code that + # the current version of ParseXS.pm does. So we're declaring it as 'our'. + $ALIAS = grep(/^\s*ALIAS\s*:/, @{ $self->{line} }); + + my $INTERFACE = grep(/^\s*INTERFACE\s*:/, @{ $self->{line} }); $xsreturn = 1 if $EXPLICIT_RETURN; @@ -624,40 +505,32 @@ EOF # print function header print Q(<<"EOF"); #$externC -#XS(XS_${Full_func_name}); /* prototype to pass -Wmissing-prototypes */ -#XS(XS_${Full_func_name}) +#XS_EUPXS(XS_${Full_func_name}); /* prototype to pass -Wmissing-prototypes */ +#XS_EUPXS(XS_${Full_func_name}) #[[ -##ifdef dVAR # dVAR; dXSARGS; -##else -# dXSARGS; -##endif EOF - print Q(<<"EOF") if $ALIAS ; + print Q(<<"EOF") if $ALIAS; # dXSI32; EOF - print Q(<<"EOF") if $INTERFACE ; -# dXSFUNCTION($ret_type); + print Q(<<"EOF") if $INTERFACE; +# dXSFUNCTION($self->{ret_type}); EOF - if ($ellipsis) { - $cond = ($min_args ? qq(items < $min_args) : 0); - } elsif ($min_args == $num_args) { - $cond = qq(items != $min_args); - } else { - $cond = qq(items < $min_args || items > $num_args); - } - print Q(<<"EOF") if $except; + $self->{cond} = set_cond($ellipsis, $min_args, $num_args); + + print Q(<<"EOF") if $self->{except}; # char errbuf[1024]; -# *errbuf = '\0'; +# *errbuf = '\\0'; EOF - if($cond) { - print Q(<<"EOF"); -# if ($cond) + if($self->{cond}) { + print Q(<<"EOF"); +# if ($self->{cond}) # croak_xs_usage(cv, "$report_args"); EOF - } else { + } + else { # cv likely to be unused print Q(<<"EOF"); # PERL_UNUSED_VAR(cv); /* -W */ @@ -666,7 +539,7 @@ EOF #gcc -Wall: if an xsub has PPCODE is used #it is possible none of ST, XSRETURN or XSprePUSH macros are used - #hence `ax' (setup by dXSARGS) is unused + #hence 'ax' (setup by dXSARGS) is unused #XXX: could breakup the dXSARGS; into dSP;dMARK;dITEMS #but such a move could break third-party extensions print Q(<<"EOF") if $PPCODE; @@ -679,199 +552,258 @@ EOF # Now do a block of some sort. - $condnum = 0; - $cond = ''; # last CASE: conditional - push(@line, "$END:"); - push(@line_no, $line_no[-1]); + $self->{condnum} = 0; + $self->{cond} = ''; # last CASE: conditional + push(@{ $self->{line} }, "$END:"); + push(@{ $self->{line_no} }, $self->{line_no}->[-1]); $_ = ''; - &check_cpp; - while (@line) { - &CASE_handler if check_keyword("CASE"); + check_conditional_preprocessor_statements(); + while (@{ $self->{line} }) { + + $self->CASE_handler($_) if $self->check_keyword("CASE"); print Q(<<"EOF"); -# $except [[ +# $self->{except} [[ EOF # do initialization of input variables - $thisdone = 0; - $retvaldone = 0; - $deferred = ""; - %arg_list = () ; - $gotRETVAL = 0; - - INPUT_handler() ; - process_keyword("INPUT|PREINIT|INTERFACE_MACRO|C_ARGS|ALIAS|ATTRS|PROTOTYPE|SCOPE|OVERLOAD") ; - - print Q(<<"EOF") if $ScopeThisXSUB; + $self->{thisdone} = 0; + $self->{retvaldone} = 0; + $self->{deferred} = ""; + %{ $self->{arg_list} } = (); + $self->{gotRETVAL} = 0; + $self->INPUT_handler($_); + $self->process_keyword("INPUT|PREINIT|INTERFACE_MACRO|C_ARGS|ALIAS|ATTRS|PROTOTYPE|SCOPE|OVERLOAD"); + + print Q(<<"EOF") if $self->{ScopeThisXSUB}; # ENTER; # [[ EOF - - if (!$thisdone && defined($class)) { - if (defined($static) or $func_name eq 'new') { - print "\tchar *"; - $var_types{"CLASS"} = "char *"; - &generate_init("char *", 1, "CLASS"); - } - else { - print "\t$class *"; - $var_types{"THIS"} = "$class *"; - &generate_init("$class *", 1, "THIS"); - } + + if (!$self->{thisdone} && defined($class)) { + if (defined($static) or $func_name eq 'new') { + print "\tchar *"; + $self->{var_types}->{"CLASS"} = "char *"; + generate_init( { + type => "char *", + num => 1, + var => "CLASS", + printed_name => undef, + } ); + } + else { + print "\t$class *"; + $self->{var_types}->{"THIS"} = "$class *"; + generate_init( { + type => "$class *", + num => 1, + var => "THIS", + printed_name => undef, + } ); + } } - + + # These are set if OUTPUT is found and/or CODE using RETVAL + $self->{have_OUTPUT} = $self->{have_CODE_with_RETVAL} = 0; + + my ($wantRETVAL); # do code if (/^\s*NOT_IMPLEMENTED_YET/) { - print "\n\tPerl_croak(aTHX_ \"$pname: not implemented yet\");\n"; - $_ = '' ; - } else { - if ($ret_type ne "void") { - print "\t" . &map_type($ret_type, 'RETVAL') . ";\n" - if !$retvaldone; - $args_match{"RETVAL"} = 0; - $var_types{"RETVAL"} = $ret_type; - print "\tdXSTARG;\n" - if $WantOptimize and $targetable{$type_kind{$ret_type}}; - } - - if (@fake_INPUT or @fake_INPUT_pre) { - unshift @line, @fake_INPUT_pre, @fake_INPUT, $_; - $_ = ""; - $processing_arg_with_types = 1; - INPUT_handler() ; - } - print $deferred; - - process_keyword("INIT|ALIAS|ATTRS|PROTOTYPE|INTERFACE_MACRO|INTERFACE|C_ARGS|OVERLOAD") ; - - if (check_keyword("PPCODE")) { - print_section(); - death ("PPCODE must be last thing") if @line; - print "\tLEAVE;\n" if $ScopeThisXSUB; - print "\tPUTBACK;\n\treturn;\n"; - } elsif (check_keyword("CODE")) { - print_section() ; - } elsif (defined($class) and $func_name eq "DESTROY") { - print "\n\t"; - print "delete THIS;\n"; - } else { - print "\n\t"; - if ($ret_type ne "void") { - print "RETVAL = "; - $wantRETVAL = 1; - } - if (defined($static)) { - if ($func_name eq 'new') { - $func_name = "$class"; - } else { - print "${class}::"; - } - } elsif (defined($class)) { - if ($func_name eq 'new') { - $func_name .= " $class"; - } else { - print "THIS->"; - } - } - $func_name =~ s/^\Q$args{'s'}// - if exists $args{'s'}; - $func_name = 'XSFUNCTION' if $interface; - print "$func_name($func_args);\n"; - } + print "\n\tPerl_croak(aTHX_ \"$pname: not implemented yet\");\n"; + $_ = ''; } - + else { + if ($self->{ret_type} ne "void") { + print "\t" . map_type($self, $self->{ret_type}, 'RETVAL') . ";\n" + if !$self->{retvaldone}; + $self->{args_match}->{"RETVAL"} = 0; + $self->{var_types}->{"RETVAL"} = $self->{ret_type}; + my $outputmap = $self->{typemap}->get_outputmap( ctype => $self->{ret_type} ); + print "\tdXSTARG;\n" + if $self->{optimize} and $outputmap and $outputmap->targetable; + } + + if (@fake_INPUT or @fake_INPUT_pre) { + unshift @{ $self->{line} }, @fake_INPUT_pre, @fake_INPUT, $_; + $_ = ""; + $self->{processing_arg_with_types} = 1; + $self->INPUT_handler($_); + } + print $self->{deferred}; + + $self->process_keyword("INIT|ALIAS|ATTRS|PROTOTYPE|INTERFACE_MACRO|INTERFACE|C_ARGS|OVERLOAD"); + + if ($self->check_keyword("PPCODE")) { + $self->print_section(); + $self->death("PPCODE must be last thing") if @{ $self->{line} }; + print "\tLEAVE;\n" if $self->{ScopeThisXSUB}; + print "\tPUTBACK;\n\treturn;\n"; + } + elsif ($self->check_keyword("CODE")) { + my $consumed_code = $self->print_section(); + if ($consumed_code =~ /\bRETVAL\b/) { + $self->{have_CODE_with_RETVAL} = 1; + } + } + elsif (defined($class) and $func_name eq "DESTROY") { + print "\n\t"; + print "delete THIS;\n"; + } + else { + print "\n\t"; + if ($self->{ret_type} ne "void") { + print "RETVAL = "; + $wantRETVAL = 1; + } + if (defined($static)) { + if ($func_name eq 'new') { + $func_name = "$class"; + } + else { + print "${class}::"; + } + } + elsif (defined($class)) { + if ($func_name eq 'new') { + $func_name .= " $class"; + } + else { + print "THIS->"; + } + } + $func_name =~ s/^\Q$args{'s'}// + if exists $args{'s'}; + $func_name = 'XSFUNCTION' if $self->{interface}; + print "$func_name($self->{func_args});\n"; + } + } + # do output variables - $gotRETVAL = 0; # 1 if RETVAL seen in OUTPUT section; - undef $RETVAL_code ; # code to set RETVAL (from OUTPUT section); + $self->{gotRETVAL} = 0; # 1 if RETVAL seen in OUTPUT section; + undef $self->{RETVAL_code} ; # code to set RETVAL (from OUTPUT section); # $wantRETVAL set if 'RETVAL =' autogenerated - ($wantRETVAL, $ret_type) = (0, 'void') if $RETVAL_no_return; - undef %outargs ; - process_keyword("POSTCALL|OUTPUT|ALIAS|ATTRS|PROTOTYPE|OVERLOAD"); - - &generate_output($var_types{$_}, $args_match{$_}, $_, $DoSetMagic) - for grep $in_out{$_} =~ /OUT$/, keys %in_out; - + ($wantRETVAL, $self->{ret_type}) = (0, 'void') if $RETVAL_no_return; + undef %{ $self->{outargs} }; + + $self->process_keyword("POSTCALL|OUTPUT|ALIAS|ATTRS|PROTOTYPE|OVERLOAD"); + + # A CODE section with RETVAL, but no OUTPUT? FAIL! + if ($self->{have_CODE_with_RETVAL} and not $self->{have_OUTPUT} and $self->{ret_type} ne 'void') { + $self->Warn("Warning: Found a 'CODE' section which seems to be using 'RETVAL' but no 'OUTPUT' section."); + } + + generate_output( { + type => $self->{var_types}->{$_}, + num => $self->{args_match}->{$_}, + var => $_, + do_setmagic => $self->{DoSetMagic}, + do_push => undef, + } ) for grep $self->{in_out}->{$_} =~ /OUT$/, keys %{ $self->{in_out} }; + + my $prepush_done; # all OUTPUT done, so now push the return value on the stack - if ($gotRETVAL && $RETVAL_code) { - print "\t$RETVAL_code\n"; - } elsif ($gotRETVAL || $wantRETVAL) { - my $t = $WantOptimize && $targetable{$type_kind{$ret_type}}; - my $var = 'RETVAL'; - my $type = $ret_type; - - # 0: type, 1: with_size, 2: how, 3: how_size - if ($t and not $t->[1] and $t->[0] eq 'p') { - # PUSHp corresponds to setpvn. Treat setpv directly - my $what = eval qq("$t->[2]"); - warn $@ if $@; - - print "\tsv_setpv(TARG, $what); XSprePUSH; PUSHTARG;\n"; - $prepush_done = 1; - } - elsif ($t) { - my $what = eval qq("$t->[2]"); - warn $@ if $@; - - my $size = $t->[3]; - $size = '' unless defined $size; - $size = eval qq("$size"); - warn $@ if $@; - print "\tXSprePUSH; PUSH$t->[0]($what$size);\n"; - $prepush_done = 1; - } - else { - # RETVAL almost never needs SvSETMAGIC() - &generate_output($ret_type, 0, 'RETVAL', 0); - } + if ($self->{gotRETVAL} && $self->{RETVAL_code}) { + print "\t$self->{RETVAL_code}\n"; + } + elsif ($self->{gotRETVAL} || $wantRETVAL) { + my $outputmap = $self->{typemap}->get_outputmap( ctype => $self->{ret_type} ); + my $t = $self->{optimize} && $outputmap && $outputmap->targetable; + # Although the '$var' declared in the next line is never explicitly + # used within this 'elsif' block, commenting it out leads to + # disaster, starting with the first 'eval qq' inside the 'elsif' block + # below. + # It appears that this is related to the fact that at this point the + # value of $t is a reference to an array whose [2] element includes + # '$var' as a substring: + # <> <(IV)$var> + my $var = 'RETVAL'; + my $type = $self->{ret_type}; + + if ($t and not $t->{with_size} and $t->{type} eq 'p') { + # PUSHp corresponds to setpvn. Treat setpv directly + my $what = eval qq("$t->{what}"); + warn $@ if $@; + + print "\tsv_setpv(TARG, $what); XSprePUSH; PUSHTARG;\n"; + $prepush_done = 1; + } + elsif ($t) { + my $what = eval qq("$t->{what}"); + warn $@ if $@; + + my $tsize = $t->{what_size}; + $tsize = '' unless defined $tsize; + $tsize = eval qq("$tsize"); + warn $@ if $@; + print "\tXSprePUSH; PUSH$t->{type}($what$tsize);\n"; + $prepush_done = 1; + } + else { + # RETVAL almost never needs SvSETMAGIC() + generate_output( { + type => $self->{ret_type}, + num => 0, + var => 'RETVAL', + do_setmagic => 0, + do_push => undef, + } ); + } } - - $xsreturn = 1 if $ret_type ne "void"; + + $xsreturn = 1 if $self->{ret_type} ne "void"; my $num = $xsreturn; - my $c = @outlist; + my $c = @{ $outlist_ref }; print "\tXSprePUSH;" if $c and not $prepush_done; print "\tEXTEND(SP,$c);\n" if $c; $xsreturn += $c; - generate_output($var_types{$_}, $num++, $_, 0, 1) for @outlist; - + generate_output( { + type => $self->{var_types}->{$_}, + num => $num++, + var => $_, + do_setmagic => 0, + do_push => 1, + } ) for @{ $outlist_ref }; + # do cleanup - process_keyword("CLEANUP|ALIAS|ATTRS|PROTOTYPE|OVERLOAD") ; - - print Q(<<"EOF") if $ScopeThisXSUB; + $self->process_keyword("CLEANUP|ALIAS|ATTRS|PROTOTYPE|OVERLOAD"); + + print Q(<<"EOF") if $self->{ScopeThisXSUB}; # ]] EOF - print Q(<<"EOF") if $ScopeThisXSUB and not $PPCODE; + print Q(<<"EOF") if $self->{ScopeThisXSUB} and not $PPCODE; # LEAVE; EOF - + # print function trailer print Q(<<"EOF"); # ]] EOF - print Q(<<"EOF") if $except; + print Q(<<"EOF") if $self->{except}; # BEGHANDLERS # CATCHALL -# sprintf(errbuf, "%s: %s\\tpropagated", Xname, Xreason); +# sprintf(errbuf, "%s: %s\\tpropagated", Xname, Xreason); # ENDHANDLERS EOF - if (check_keyword("CASE")) { - blurt ("Error: No `CASE:' at top of function") - unless $condnum; - $_ = "CASE: $_"; # Restore CASE: label - next; + if ($self->check_keyword("CASE")) { + $self->blurt("Error: No 'CASE:' at top of function") + unless $self->{condnum}; + $_ = "CASE: $_"; # Restore CASE: label + next; } last if $_ eq "$END:"; - death(/^$BLOCK_re/o ? "Misplaced `$1:'" : "Junk at end of function ($_)"); + $self->death(/^$self->{BLOCK_re}/o ? "Misplaced '$1:'" : "Junk at end of function ($_)"); } - - print Q(<<"EOF") if $except; + + print Q(<<"EOF") if $self->{except}; # if (errbuf[0]) -# Perl_croak(aTHX_ errbuf); +# Perl_croak(aTHX_ errbuf); EOF - + if ($xsreturn) { print Q(<<"EOF") unless $PPCODE; # XSRETURN($xsreturn); EOF - } else { + } + else { print Q(<<"EOF") unless $PPCODE; # XSRETURN_EMPTY; EOF @@ -882,85 +814,84 @@ EOF # EOF - our $newXS = "newXS" ; - our $proto = "" ; - + $self->{newXS} = "newXS"; + $self->{proto} = ""; + # Build the prototype string for the xsub - if ($ProtoThisXSUB) { - $newXS = "newXSproto_portable"; - - if ($ProtoThisXSUB eq 2) { - # User has specified empty prototype + if ($self->{ProtoThisXSUB}) { + $self->{newXS} = "newXSproto_portable"; + + if ($self->{ProtoThisXSUB} eq 2) { + # User has specified empty prototype } - elsif ($ProtoThisXSUB eq 1) { - my $s = ';'; - if ($min_args < $num_args) { - $s = ''; - $proto_arg[$min_args] .= ";" ; - } - push @proto_arg, "$s\@" - if $ellipsis ; - - $proto = join ("", grep defined, @proto_arg); + elsif ($self->{ProtoThisXSUB} eq 1) { + my $s = ';'; + if ($min_args < $num_args) { + $s = ''; + $self->{proto_arg}->[$min_args] .= ";"; + } + push @{ $self->{proto_arg} }, "$s\@" + if $ellipsis; + + $self->{proto} = join ("", grep defined, @{ $self->{proto_arg} } ); } else { - # User has specified a prototype - $proto = $ProtoThisXSUB; + # User has specified a prototype + $self->{proto} = $self->{ProtoThisXSUB}; } - $proto = qq{, "$proto"}; + $self->{proto} = qq{, "$self->{proto}"}; } - if (%XsubAliases) { - $XsubAliases{$pname} = 0 - unless defined $XsubAliases{$pname} ; - while ( ($name, $value) = each %XsubAliases) { - push(@InitFileCode, Q(<<"EOF")); -# cv = ${newXS}(\"$name\", XS_$Full_func_name, file$proto); -# XSANY.any_i32 = $value ; + if (%{ $self->{XsubAliases} }) { + $self->{XsubAliases}->{$pname} = 0 + unless defined $self->{XsubAliases}->{$pname}; + while ( my ($xname, $value) = each %{ $self->{XsubAliases} }) { + push(@{ $self->{InitFileCode} }, Q(<<"EOF")); +# cv = $self->{newXS}(\"$xname\", XS_$Full_func_name, file$self->{proto}); +# XSANY.any_i32 = $value; EOF } } - elsif (@Attributes) { - push(@InitFileCode, Q(<<"EOF")); -# cv = ${newXS}(\"$pname\", XS_$Full_func_name, file$proto); -# apply_attrs_string("$Package", cv, "@Attributes", 0); + elsif (@{ $self->{Attributes} }) { + push(@{ $self->{InitFileCode} }, Q(<<"EOF")); +# cv = $self->{newXS}(\"$pname\", XS_$Full_func_name, file$self->{proto}); +# apply_attrs_string("$Package", cv, "@{ $self->{Attributes} }", 0); EOF } - elsif ($interface) { - while ( ($name, $value) = each %Interfaces) { - $name = "$Package\::$name" unless $name =~ /::/; - push(@InitFileCode, Q(<<"EOF")); -# cv = ${newXS}(\"$name\", XS_$Full_func_name, file$proto); -# $interface_macro_set(cv,$value) ; + elsif ($self->{interface}) { + while ( my ($yname, $value) = each %{ $self->{Interfaces} }) { + $yname = "$Package\::$yname" unless $yname =~ /::/; + push(@{ $self->{InitFileCode} }, Q(<<"EOF")); +# cv = $self->{newXS}(\"$yname\", XS_$Full_func_name, file$self->{proto}); +# $self->{interface_macro_set}(cv,$value); EOF } } - elsif($newXS eq 'newXS'){ # work around P5NCI's empty newXS macro - push(@InitFileCode, - " ${newXS}(\"$pname\", XS_$Full_func_name, file$proto);\n"); + elsif($self->{newXS} eq 'newXS'){ # work around P5NCI's empty newXS macro + push(@{ $self->{InitFileCode} }, + " $self->{newXS}(\"$pname\", XS_$Full_func_name, file$self->{proto});\n"); } else { - push(@InitFileCode, - " (void)${newXS}(\"$pname\", XS_$Full_func_name, file$proto);\n"); + push(@{ $self->{InitFileCode} }, + " (void)$self->{newXS}(\"$pname\", XS_$Full_func_name, file$self->{proto});\n"); } - } + } # END 'PARAGRAPH' 'while' loop - if ($Overload) # make it findable with fetchmethod - { + if ($self->{Overload}) { # make it findable with fetchmethod print Q(<<"EOF"); -#XS(XS_${Packid}_nil); /* prototype to pass -Wmissing-prototypes */ -#XS(XS_${Packid}_nil) +#XS_EUPXS(XS_$self->{Packid}_nil); /* prototype to pass -Wmissing-prototypes */ +#XS_EUPXS(XS_$self->{Packid}_nil) #{ # dXSARGS; # XSRETURN_EMPTY; #} # EOF - unshift(@InitFileCode, <<"MAKE_FETCHMETHOD_WORK"); + unshift(@{ $self->{InitFileCode} }, <<"MAKE_FETCHMETHOD_WORK"); /* Making a sub named "${Package}::()" allows the package */ /* to be findable via fetchmethod(), and causes */ /* overload::Overloaded("${Package}") to return true. */ - (void)${newXS}("${Package}::()", XS_${Packid}_nil, file$proto); + (void)$self->{newXS}("${Package}::()", XS_$self->{Packid}_nil, file$self->{proto}); MAKE_FETCHMETHOD_WORK } @@ -973,24 +904,20 @@ MAKE_FETCHMETHOD_WORK EOF print Q(<<"EOF"); -#XS(boot_$Module_cname); /* prototype to pass -Wmissing-prototypes */ -#XS(boot_$Module_cname) +#XS_EXTERNAL(boot_$self->{Module_cname}); /* prototype to pass -Wmissing-prototypes */ +#XS_EXTERNAL(boot_$self->{Module_cname}) EOF print Q(<<"EOF"); #[[ -##ifdef dVAR # dVAR; dXSARGS; -##else -# dXSARGS; -##endif EOF #Under 5.8.x and lower, newXS is declared in proto.h as expecting a non-const #file name argument. If the wrong qualifier is used, it causes breakage with #C++ compilers and warnings with recent gcc. #-Wall: if there is no $Full_func_name there are no xsubs in this .xs - #so `file' is unused + #so 'file' is unused print Q(<<"EOF") if $Full_func_name; ##if (PERL_REVISION == 5 && PERL_VERSION < 9) # char* file = __FILE__; @@ -1009,18 +936,18 @@ EOF ##endif EOF - print Q(<<"EOF") if $WantVersionChk ; -# XS_VERSION_BOOTCHECK ; + print Q(<<"EOF") if $self->{WantVersionChk}; +# XS_VERSION_BOOTCHECK; # EOF - print Q(<<"EOF") if defined $XsubAliases or defined $Interfaces ; + print Q(<<"EOF") if defined $self->{xsubaliases} or defined $self->{interfaces}; # { -# CV * cv ; +# CV * cv; # EOF - print Q(<<"EOF") if ($Overload); + print Q(<<"EOF") if ($self->{Overload}); # /* register the overloading (type 'A') magic */ # PL_amagic_generation++; # /* The magic for overload gets a GV* via gv_fetchmeth as */ @@ -1028,22 +955,21 @@ EOF # /* the "fallback" status. */ # sv_setsv( # get_sv( "${Package}::()", TRUE ), -# $Fallback +# $self->{Fallback} # ); EOF - print @InitFileCode; + print @{ $self->{InitFileCode} }; - print Q(<<"EOF") if defined $XsubAliases or defined $Interfaces ; + print Q(<<"EOF") if defined $self->{xsubaliases} or defined $self->{interfaces}; # } EOF - if (@BootCode) - { - print "\n /* Initialisation Section */\n\n" ; - @line = @BootCode; - print_section(); - print "\n /* End of Initialisation Section */\n\n" ; + if (@{ $BootCode_ref }) { + print "\n /* Initialisation Section */\n\n"; + @{ $self->{line} } = @{ $BootCode_ref }; + $self->print_section(); + print "\n /* End of Initialisation Section */\n\n"; } print Q(<<'EOF'); @@ -1059,654 +985,682 @@ EOF # EOF - warn("Please specify prototyping behavior for $filename (see perlxs manual)\n") - unless $ProtoUsed ; + warn("Please specify prototyping behavior for $self->{filename} (see perlxs manual)\n") + unless $self->{ProtoUsed}; chdir($orig_cwd); select($orig_fh); untie *PSEUDO_STDOUT if tied *PSEUDO_STDOUT; - close $FH; + close $self->{FH}; return 1; } -sub errors { $errors } - -sub standard_typemap_locations { - # Add all the default typemap locations to the search path - my @tm = qw(typemap); - - my $updir = File::Spec->updir; - foreach my $dir (File::Spec->catdir(($updir) x 1), File::Spec->catdir(($updir) x 2), - File::Spec->catdir(($updir) x 3), File::Spec->catdir(($updir) x 4)) { - - unshift @tm, File::Spec->catfile($dir, 'typemap'); - unshift @tm, File::Spec->catfile($dir, lib => ExtUtils => 'typemap'); - } - foreach my $dir (@INC) { - my $file = File::Spec->catfile($dir, ExtUtils => 'typemap'); - unshift @tm, $file if -e $file; - } - return @tm; -} - -sub TrimWhitespace -{ - $_[0] =~ s/^\s+|\s+$//go ; -} - -sub TidyType - { - local ($_) = @_ ; - - # rationalise any '*' by joining them into bunches and removing whitespace - s#\s*(\*+)\s*#$1#g; - s#(\*+)# $1 #g ; - - # change multiple whitespace into a single space - s/\s+/ /g ; +sub report_error_count { $self->{errors} } - # trim leading & trailing whitespace - TrimWhitespace($_) ; - - $_ ; -} - -# Input: ($_, @line) == unparsed input. -# Output: ($_, @line) == (rest of line, following lines). +# Input: ($self, $_, @{ $self->{line} }) == unparsed input. +# Output: ($_, @{ $self->{line} }) == (rest of line, following lines). # Return: the matched keyword if found, otherwise 0 sub check_keyword { - $_ = shift(@line) while !/\S/ && @line; - s/^(\s*)($_[0])\s*:\s*(?:#.*)?/$1/s && $2; + my $self = shift; + $_ = shift(@{ $self->{line} }) while !/\S/ && @{ $self->{line} }; + s/^(\s*)($_[0])\s*:\s*(?:#.*)?/$1/s && $2; } sub print_section { - # the "do" is required for right semantics - do { $_ = shift(@line) } while !/\S/ && @line; + my $self = shift; - print("#line ", $line_no[@line_no - @line -1], " \"$filepathname\"\n") - if $WantLineNumbers && !/^\s*#\s*line\b/ && !/^#if XSubPPtmp/; - for (; defined($_) && !/^$BLOCK_re/o; $_ = shift(@line)) { - print "$_\n"; - } - print 'ExtUtils::ParseXS::CountLines'->end_marker, "\n" if $WantLineNumbers; + # the "do" is required for right semantics + do { $_ = shift(@{ $self->{line} }) } while !/\S/ && @{ $self->{line} }; + + my $consumed_code = ''; + + print("#line ", $self->{line_no}->[@{ $self->{line_no} } - @{ $self->{line} } -1], " \"", + escape_file_for_line_directive($self->{filepathname}), "\"\n") + if $self->{WantLineNumbers} && !/^\s*#\s*line\b/ && !/^#if XSubPPtmp/; + for (; defined($_) && !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { + print "$_\n"; + $consumed_code .= "$_\n"; + } + print 'ExtUtils::ParseXS::CountLines'->end_marker, "\n" if $self->{WantLineNumbers}; + + return $consumed_code; } sub merge_section { - my $in = ''; + my $self = shift; + my $in = ''; - while (!/\S/ && @line) { - $_ = shift(@line); - } + while (!/\S/ && @{ $self->{line} }) { + $_ = shift(@{ $self->{line} }); + } - for (; defined($_) && !/^$BLOCK_re/o; $_ = shift(@line)) { - $in .= "$_\n"; - } - chomp $in; - return $in; + for (; defined($_) && !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { + $in .= "$_\n"; } + chomp $in; + return $in; +} -sub process_keyword($) - { - my($pattern) = @_ ; - my $kwd ; +sub process_keyword { + my($self, $pattern) = @_; - &{"${kwd}_handler"}() - while $kwd = check_keyword($pattern) ; + while (my $kwd = $self->check_keyword($pattern)) { + my $method = $kwd . "_handler"; + $self->$method($_); } +} sub CASE_handler { - blurt ("Error: `CASE:' after unconditional `CASE:'") - if $condnum && $cond eq ''; - $cond = $_; - TrimWhitespace($cond); - print " ", ($condnum++ ? " else" : ""), ($cond ? " if ($cond)\n" : "\n"); - $_ = '' ; + my $self = shift; + $_ = shift; + $self->blurt("Error: 'CASE:' after unconditional 'CASE:'") + if $self->{condnum} && $self->{cond} eq ''; + $self->{cond} = $_; + trim_whitespace($self->{cond}); + print " ", ($self->{condnum}++ ? " else" : ""), ($self->{cond} ? " if ($self->{cond})\n" : "\n"); + $_ = ''; } sub INPUT_handler { - for (; !/^$BLOCK_re/o; $_ = shift(@line)) { + my $self = shift; + $_ = shift; + for (; !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { last if /^\s*NOT_IMPLEMENTED_YET/; - next unless /\S/; # skip blank lines + next unless /\S/; # skip blank lines - TrimWhitespace($_) ; - my $line = $_ ; + trim_whitespace($_); + my $ln = $_; # remove trailing semicolon if no initialisation - s/\s*;$//g unless /[=;+].*\S/ ; + s/\s*;$//g unless /[=;+].*\S/; # Process the length(foo) declarations if (s/^([^=]*)\blength\(\s*(\w+)\s*\)\s*$/$1 XSauto_length_of_$2=NO_INIT/x) { print "\tSTRLEN\tSTRLEN_length_of_$2;\n"; - $lengthof{$2} = $name; - # $islengthof{$name} = $1; - $deferred .= "\n\tXSauto_length_of_$2 = STRLEN_length_of_$2;\n"; + $self->{lengthof}->{$2} = undef; + $self->{deferred} .= "\n\tXSauto_length_of_$2 = STRLEN_length_of_$2;\n"; } # check for optional initialisation code - my $var_init = '' ; - $var_init = $1 if s/\s*([=;+].*)$//s ; + my $var_init = ''; + $var_init = $1 if s/\s*([=;+].*)$//s; $var_init =~ s/"/\\"/g; + # *sigh* It's valid to supply explicit input typemaps in the argument list... + my $is_overridden_typemap = $var_init =~ /ST\s*\(|\$arg\b/; s/\s+/ /g; my ($var_type, $var_addr, $var_name) = /^(.*?[^&\s])\s*(\&?)\s*\b(\w+)$/s - or blurt("Error: invalid argument declaration '$line'"), next; + or $self->blurt("Error: invalid argument declaration '$ln'"), next; # Check for duplicate definitions - blurt ("Error: duplicate definition of argument '$var_name' ignored"), next - if $arg_list{$var_name}++ - or defined $argtype_seen{$var_name} and not $processing_arg_with_types; + $self->blurt("Error: duplicate definition of argument '$var_name' ignored"), next + if $self->{arg_list}->{$var_name}++ + or defined $self->{argtype_seen}->{$var_name} and not $self->{processing_arg_with_types}; - $thisdone |= $var_name eq "THIS"; - $retvaldone |= $var_name eq "RETVAL"; - $var_types{$var_name} = $var_type; + $self->{thisdone} |= $var_name eq "THIS"; + $self->{retvaldone} |= $var_name eq "RETVAL"; + $self->{var_types}->{$var_name} = $var_type; # XXXX This check is a safeguard against the unfinished conversion of # generate_init(). When generate_init() is fixed, # one can use 2-args map_type() unconditionally. + my $printed_name; if ($var_type =~ / \( \s* \* \s* \) /x) { - # Function pointers are not yet supported with &output_init! - print "\t" . &map_type($var_type, $var_name); - $name_printed = 1; - } else { - print "\t" . &map_type($var_type); - $name_printed = 0; + # Function pointers are not yet supported with output_init()! + print "\t" . map_type($self, $var_type, $var_name); + $printed_name = 1; } - $var_num = $args_match{$var_name}; + else { + print "\t" . map_type($self, $var_type, undef); + $printed_name = 0; + } + $self->{var_num} = $self->{args_match}->{$var_name}; - $proto_arg[$var_num] = ProtoString($var_type) - if $var_num ; - $func_args =~ s/\b($var_name)\b/&$1/ if $var_addr; + if ($self->{var_num}) { + my $typemap = $self->{typemap}->get_typemap(ctype => $var_type); + $self->report_typemap_failure($self->{typemap}, $var_type, "death") + if not $typemap and not $is_overridden_typemap; + $self->{proto_arg}->[$self->{var_num}] = ($typemap && $typemap->proto) || "\$"; + } + $self->{func_args} =~ s/\b($var_name)\b/&$1/ if $var_addr; if ($var_init =~ /^[=;]\s*NO_INIT\s*;?\s*$/ - or $in_out{$var_name} and $in_out{$var_name} =~ /^OUT/ - and $var_init !~ /\S/) { - if ($name_printed) { - print ";\n"; - } else { - print "\t$var_name;\n"; + or $self->{in_out}->{$var_name} and $self->{in_out}->{$var_name} =~ /^OUT/ + and $var_init !~ /\S/) { + if ($printed_name) { + print ";\n"; } - } elsif ($var_init =~ /\S/) { - &output_init($var_type, $var_num, $var_name, $var_init, $name_printed); - } elsif ($var_num) { - # generate initialization code - &generate_init($var_type, $var_num, $var_name, $name_printed); - } else { + else { + print "\t$var_name;\n"; + } + } + elsif ($var_init =~ /\S/) { + output_init( { + type => $var_type, + num => $self->{var_num}, + var => $var_name, + init => $var_init, + printed_name => $printed_name, + } ); + } + elsif ($self->{var_num}) { + generate_init( { + type => $var_type, + num => $self->{var_num}, + var => $var_name, + printed_name => $printed_name, + } ); + } + else { print ";\n"; } } } sub OUTPUT_handler { - for (; !/^$BLOCK_re/o; $_ = shift(@line)) { + my $self = shift; + $self->{have_OUTPUT} = 1; + + $_ = shift; + for (; !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { next unless /\S/; if (/^\s*SETMAGIC\s*:\s*(ENABLE|DISABLE)\s*/) { - $DoSetMagic = ($1 eq "ENABLE" ? 1 : 0); + $self->{DoSetMagic} = ($1 eq "ENABLE" ? 1 : 0); next; } - my ($outarg, $outcode) = /^\s*(\S+)\s*(.*?)\s*$/s ; - blurt ("Error: duplicate OUTPUT argument '$outarg' ignored"), next - if $outargs{$outarg} ++ ; - if (!$gotRETVAL and $outarg eq 'RETVAL') { + my ($outarg, $outcode) = /^\s*(\S+)\s*(.*?)\s*$/s; + $self->blurt("Error: duplicate OUTPUT argument '$outarg' ignored"), next + if $self->{outargs}->{$outarg}++; + if (!$self->{gotRETVAL} and $outarg eq 'RETVAL') { # deal with RETVAL last - $RETVAL_code = $outcode ; - $gotRETVAL = 1 ; - next ; + $self->{RETVAL_code} = $outcode; + $self->{gotRETVAL} = 1; + next; } - blurt ("Error: OUTPUT $outarg not an argument"), next - unless defined($args_match{$outarg}); - blurt("Error: No input definition for OUTPUT argument '$outarg' - ignored"), next - unless defined $var_types{$outarg} ; - $var_num = $args_match{$outarg}; + $self->blurt("Error: OUTPUT $outarg not an argument"), next + unless defined($self->{args_match}->{$outarg}); + $self->blurt("Error: No input definition for OUTPUT argument '$outarg' - ignored"), next + unless defined $self->{var_types}->{$outarg}; + $self->{var_num} = $self->{args_match}->{$outarg}; if ($outcode) { print "\t$outcode\n"; - print "\tSvSETMAGIC(ST(" , $var_num-1 , "));\n" if $DoSetMagic; - } else { - &generate_output($var_types{$outarg}, $var_num, $outarg, $DoSetMagic); + print "\tSvSETMAGIC(ST(" , $self->{var_num} - 1 , "));\n" if $self->{DoSetMagic}; } - delete $in_out{$outarg} # No need to auto-OUTPUT - if exists $in_out{$outarg} and $in_out{$outarg} =~ /OUT$/; + else { + generate_output( { + type => $self->{var_types}->{$outarg}, + num => $self->{var_num}, + var => $outarg, + do_setmagic => $self->{DoSetMagic}, + do_push => undef, + } ); + } + delete $self->{in_out}->{$outarg} # No need to auto-OUTPUT + if exists $self->{in_out}->{$outarg} and $self->{in_out}->{$outarg} =~ /OUT$/; } } -sub C_ARGS_handler() { - my $in = merge_section(); +sub C_ARGS_handler { + my $self = shift; + $_ = shift; + my $in = $self->merge_section(); - TrimWhitespace($in); - $func_args = $in; + trim_whitespace($in); + $self->{func_args} = $in; } -sub INTERFACE_MACRO_handler() { - my $in = merge_section(); +sub INTERFACE_MACRO_handler { + my $self = shift; + $_ = shift; + my $in = $self->merge_section(); - TrimWhitespace($in); - if ($in =~ /\s/) { # two - ($interface_macro, $interface_macro_set) = split ' ', $in; - } else { - $interface_macro = $in; - $interface_macro_set = 'UNKNOWN_CVT'; # catch later + trim_whitespace($in); + if ($in =~ /\s/) { # two + ($self->{interface_macro}, $self->{interface_macro_set}) = split ' ', $in; + } + else { + $self->{interface_macro} = $in; + $self->{interface_macro_set} = 'UNKNOWN_CVT'; # catch later } - $interface = 1; # local - $Interfaces = 1; # global + $self->{interface} = 1; # local + $self->{interfaces} = 1; # global } -sub INTERFACE_handler() { - my $in = merge_section(); +sub INTERFACE_handler { + my $self = shift; + $_ = shift; + my $in = $self->merge_section(); - TrimWhitespace($in); + trim_whitespace($in); foreach (split /[\s,]+/, $in) { - my $name = $_; - $name =~ s/^$Prefix//; - $Interfaces{$name} = $_; + my $iface_name = $_; + $iface_name =~ s/^$self->{Prefix}//; + $self->{Interfaces}->{$iface_name} = $_; } print Q(<<"EOF"); -# XSFUNCTION = $interface_macro($ret_type,cv,XSANY.any_dptr); +# XSFUNCTION = $self->{interface_macro}($self->{ret_type},cv,XSANY.any_dptr); EOF - $interface = 1; # local - $Interfaces = 1; # global + $self->{interface} = 1; # local + $self->{interfaces} = 1; # global +} + +sub CLEANUP_handler { + my $self = shift; + $self->print_section(); } -sub CLEANUP_handler() { print_section() } -sub PREINIT_handler() { print_section() } -sub POSTCALL_handler() { print_section() } -sub INIT_handler() { print_section() } +sub PREINIT_handler { + my $self = shift; + $self->print_section(); +} -sub GetAliases - { - my ($line) = @_ ; - my ($orig) = $line ; - my ($alias) ; - my ($value) ; +sub POSTCALL_handler { + my $self = shift; + $self->print_section(); +} - # Parse alias definitions - # format is - # alias = value alias = value ... +sub INIT_handler { + my $self = shift; + $self->print_section(); +} - while ($line =~ s/^\s*([\w:]+)\s*=\s*(\w+)\s*//) { - $alias = $1 ; - $orig_alias = $alias ; - $value = $2 ; +sub get_aliases { + my $self = shift; + my ($line) = @_; + my ($orig) = $line; - # check for optional package definition in the alias - $alias = $Packprefix . $alias if $alias !~ /::/ ; + # Parse alias definitions + # format is + # alias = value alias = value ... - # check for duplicate alias name & duplicate value - Warn("Warning: Ignoring duplicate alias '$orig_alias'") - if defined $XsubAliases{$alias} ; + while ($line =~ s/^\s*([\w:]+)\s*=\s*(\w+)\s*//) { + my ($alias, $value) = ($1, $2); + my $orig_alias = $alias; - Warn("Warning: Aliases '$orig_alias' and '$XsubAliasValues{$value}' have identical values") - if $XsubAliasValues{$value} ; + # check for optional package definition in the alias + $alias = $self->{Packprefix} . $alias if $alias !~ /::/; - $XsubAliases = 1; - $XsubAliases{$alias} = $value ; - $XsubAliasValues{$value} = $orig_alias ; - } + # check for duplicate alias name & duplicate value + Warn( $self, "Warning: Ignoring duplicate alias '$orig_alias'") + if defined $self->{XsubAliases}->{$alias}; - blurt("Error: Cannot parse ALIAS definitions from '$orig'") - if $line ; + Warn( $self, "Warning: Aliases '$orig_alias' and '$self->{XsubAliasValues}->{$value}' have identical values") + if $self->{XsubAliasValues}->{$value}; + + $self->{xsubaliases} = 1; + $self->{XsubAliases}->{$alias} = $value; + $self->{XsubAliasValues}->{$value} = $orig_alias; } -sub ATTRS_handler () - { - for (; !/^$BLOCK_re/o; $_ = shift(@line)) { - next unless /\S/; - TrimWhitespace($_) ; - push @Attributes, $_; - } + blurt( $self, "Error: Cannot parse ALIAS definitions from '$orig'") + if $line; +} + +sub ATTRS_handler { + my $self = shift; + $_ = shift; + + for (; !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { + next unless /\S/; + trim_whitespace($_); + push @{ $self->{Attributes} }, $_; } +} -sub ALIAS_handler () - { - for (; !/^$BLOCK_re/o; $_ = shift(@line)) { - next unless /\S/; - TrimWhitespace($_) ; - GetAliases($_) if $_ ; - } +sub ALIAS_handler { + my $self = shift; + $_ = shift; + + for (; !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { + next unless /\S/; + trim_whitespace($_); + $self->get_aliases($_) if $_; } +} + +sub OVERLOAD_handler { + my $self = shift; + $_ = shift; -sub OVERLOAD_handler() -{ - for (; !/^$BLOCK_re/o; $_ = shift(@line)) { + for (; !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { next unless /\S/; - TrimWhitespace($_) ; + trim_whitespace($_); while ( s/^\s*([\w:"\\)\+\-\*\/\%\<\>\.\&\|\^\!\~\{\}\=]+)\s*//) { - $Overload = 1 unless $Overload; - my $overload = "$Package\::(".$1 ; - push(@InitFileCode, - " (void)${newXS}(\"$overload\", XS_$Full_func_name, file$proto);\n"); + $self->{Overload} = 1 unless $self->{Overload}; + my $overload = "$Package\::(".$1; + push(@{ $self->{InitFileCode} }, + " (void)$self->{newXS}(\"$overload\", XS_$Full_func_name, file$self->{proto});\n"); } - } + } } -sub FALLBACK_handler() -{ - # the rest of the current line should contain either TRUE, +sub FALLBACK_handler { + my $self = shift; + $_ = shift; + + # the rest of the current line should contain either TRUE, # FALSE or UNDEF - - TrimWhitespace($_) ; + + trim_whitespace($_); my %map = ( - TRUE => "&PL_sv_yes", 1 => "&PL_sv_yes", - FALSE => "&PL_sv_no", 0 => "&PL_sv_no", - UNDEF => "&PL_sv_undef", - ) ; - + TRUE => "&PL_sv_yes", 1 => "&PL_sv_yes", + FALSE => "&PL_sv_no", 0 => "&PL_sv_no", + UNDEF => "&PL_sv_undef", + ); + # check for valid FALLBACK value - death ("Error: FALLBACK: TRUE/FALSE/UNDEF") unless exists $map{uc $_} ; - - $Fallback = $map{uc $_} ; + $self->death("Error: FALLBACK: TRUE/FALSE/UNDEF") unless exists $map{uc $_}; + + $self->{Fallback} = $map{uc $_}; } -sub REQUIRE_handler () - { - # the rest of the current line should contain a version number - my ($Ver) = $_ ; +sub REQUIRE_handler { + my $self = shift; + # the rest of the current line should contain a version number + my $Ver = shift; - TrimWhitespace($Ver) ; + trim_whitespace($Ver); - death ("Error: REQUIRE expects a version number") - unless $Ver ; + $self->death("Error: REQUIRE expects a version number") + unless $Ver; - # check that the version number is of the form n.n - death ("Error: REQUIRE: expected a number, got '$Ver'") - unless $Ver =~ /^\d+(\.\d*)?/ ; + # check that the version number is of the form n.n + $self->death("Error: REQUIRE: expected a number, got '$Ver'") + unless $Ver =~ /^\d+(\.\d*)?/; - death ("Error: xsubpp $Ver (or better) required--this is only $VERSION.") - unless $VERSION >= $Ver ; - } + $self->death("Error: xsubpp $Ver (or better) required--this is only $VERSION.") + unless $VERSION >= $Ver; +} -sub VERSIONCHECK_handler () - { - # the rest of the current line should contain either ENABLE or - # DISABLE +sub VERSIONCHECK_handler { + my $self = shift; + $_ = shift; - TrimWhitespace($_) ; + # the rest of the current line should contain either ENABLE or + # DISABLE - # check for ENABLE/DISABLE - death ("Error: VERSIONCHECK: ENABLE/DISABLE") - unless /^(ENABLE|DISABLE)/i ; + trim_whitespace($_); - $WantVersionChk = 1 if $1 eq 'ENABLE' ; - $WantVersionChk = 0 if $1 eq 'DISABLE' ; + # check for ENABLE/DISABLE + $self->death("Error: VERSIONCHECK: ENABLE/DISABLE") + unless /^(ENABLE|DISABLE)/i; - } + $self->{WantVersionChk} = 1 if $1 eq 'ENABLE'; + $self->{WantVersionChk} = 0 if $1 eq 'DISABLE'; -sub PROTOTYPE_handler () - { - my $specified ; - - death("Error: Only 1 PROTOTYPE definition allowed per xsub") - if $proto_in_this_xsub ++ ; - - for (; !/^$BLOCK_re/o; $_ = shift(@line)) { - next unless /\S/; - $specified = 1 ; - TrimWhitespace($_) ; - if ($_ eq 'DISABLE') { - $ProtoThisXSUB = 0 - } elsif ($_ eq 'ENABLE') { - $ProtoThisXSUB = 1 - } else { - # remove any whitespace - s/\s+//g ; - death("Error: Invalid prototype '$_'") - unless ValidProtoString($_) ; - $ProtoThisXSUB = C_string($_) ; - } - } +} - # If no prototype specified, then assume empty prototype "" - $ProtoThisXSUB = 2 unless $specified ; +sub PROTOTYPE_handler { + my $self = shift; + $_ = shift; + + my $specified; - $ProtoUsed = 1 ; + $self->death("Error: Only 1 PROTOTYPE definition allowed per xsub") + if $self->{proto_in_this_xsub}++; + for (; !/^$self->{BLOCK_re}/o; $_ = shift(@{ $self->{line} })) { + next unless /\S/; + $specified = 1; + trim_whitespace($_); + if ($_ eq 'DISABLE') { + $self->{ProtoThisXSUB} = 0; + } + elsif ($_ eq 'ENABLE') { + $self->{ProtoThisXSUB} = 1; + } + else { + # remove any whitespace + s/\s+//g; + $self->death("Error: Invalid prototype '$_'") + unless valid_proto_string($_); + $self->{ProtoThisXSUB} = C_string($_); + } } -sub SCOPE_handler () - { - death("Error: Only 1 SCOPE declaration allowed per xsub") - if $scope_in_this_xsub ++ ; + # If no prototype specified, then assume empty prototype "" + $self->{ProtoThisXSUB} = 2 unless $specified; - TrimWhitespace($_); - death ("Error: SCOPE: ENABLE/DISABLE") - unless /^(ENABLE|DISABLE)\b/i; - $ScopeThisXSUB = ( uc($1) eq 'ENABLE' ); - } + $self->{ProtoUsed} = 1; +} -sub PROTOTYPES_handler () - { - # the rest of the current line should contain either ENABLE or - # DISABLE +sub SCOPE_handler { + my $self = shift; + $_ = shift; - TrimWhitespace($_) ; + $self->death("Error: Only 1 SCOPE declaration allowed per xsub") + if $self->{scope_in_this_xsub}++; - # check for ENABLE/DISABLE - death ("Error: PROTOTYPES: ENABLE/DISABLE") - unless /^(ENABLE|DISABLE)/i ; + trim_whitespace($_); + $self->death("Error: SCOPE: ENABLE/DISABLE") + unless /^(ENABLE|DISABLE)\b/i; + $self->{ScopeThisXSUB} = ( uc($1) eq 'ENABLE' ); +} - $WantPrototypes = 1 if $1 eq 'ENABLE' ; - $WantPrototypes = 0 if $1 eq 'DISABLE' ; - $ProtoUsed = 1 ; +sub PROTOTYPES_handler { + my $self = shift; + $_ = shift; - } + # the rest of the current line should contain either ENABLE or + # DISABLE -sub PushXSStack - { - my %args = @_; - # Save the current file context. - push(@XSStack, { - type => 'file', - LastLine => $lastline, - LastLineNo => $lastline_no, - Line => \@line, - LineNo => \@line_no, - Filename => $filename, - Filepathname => $filepathname, - Handle => $FH, - IsPipe => scalar($filename =~ /\|\s*$/), - %args, - }) ; + trim_whitespace($_); - } + # check for ENABLE/DISABLE + $self->death("Error: PROTOTYPES: ENABLE/DISABLE") + unless /^(ENABLE|DISABLE)/i; -sub INCLUDE_handler () - { - # the rest of the current line should contain a valid filename + $self->{WantPrototypes} = 1 if $1 eq 'ENABLE'; + $self->{WantPrototypes} = 0 if $1 eq 'DISABLE'; + $self->{ProtoUsed} = 1; +} - TrimWhitespace($_) ; +sub EXPORT_XSUB_SYMBOLS_handler { + my $self = shift; + $_ = shift; - death("INCLUDE: filename missing") - unless $_ ; + # the rest of the current line should contain either ENABLE or + # DISABLE - death("INCLUDE: output pipe is illegal") - if /^\s*\|/ ; + trim_whitespace($_); - # simple minded recursion detector - death("INCLUDE loop detected") - if $IncludedFiles{$_} ; + # check for ENABLE/DISABLE + $self->death("Error: EXPORT_XSUB_SYMBOLS: ENABLE/DISABLE") + unless /^(ENABLE|DISABLE)/i; - ++ $IncludedFiles{$_} unless /\|\s*$/ ; + my $xs_impl = $1 eq 'ENABLE' ? 'XS_EXTERNAL' : 'XS_INTERNAL'; + + print Q(<<"EOF"); +##undef XS_EUPXS +##if defined(PERL_EUPXS_ALWAYS_EXPORT) +## define XS_EUPXS(name) XS_EXTERNAL(name) +##elif defined(PERL_EUPXS_NEVER_EXPORT) +## define XS_EUPXS(name) XS_INTERNAL(name) +##else +## define XS_EUPXS(name) $xs_impl(name) +##endif +EOF +} - if (/\|\s*$/ && /^\s*perl\s/) { - Warn("The INCLUDE directive with a command is discouraged." . - " Use INCLUDE_COMMAND instead! In particular using 'perl'" . - " in an 'INCLUDE: ... |' directive is not guaranteed to pick" . - " up the correct perl. The INCLUDE_COMMAND directive allows" . - " the use of \$^X as the currently running perl, see" . - " 'perldoc perlxs' for details."); - } - PushXSStack(); +sub PushXSStack { + my $self = shift; + my %args = @_; + # Save the current file context. + push(@{ $self->{XSStack} }, { + type => 'file', + LastLine => $self->{lastline}, + LastLineNo => $self->{lastline_no}, + Line => $self->{line}, + LineNo => $self->{line_no}, + Filename => $self->{filename}, + Filepathname => $self->{filepathname}, + Handle => $self->{FH}, + IsPipe => scalar($self->{filename} =~ /\|\s*$/), + %args, + }); + +} - $FH = Symbol::gensym(); +sub INCLUDE_handler { + my $self = shift; + $_ = shift; + # the rest of the current line should contain a valid filename - # open the new file - open ($FH, "$_") or death("Cannot open '$_': $!") ; + trim_whitespace($_); - print Q(<<"EOF"); + $self->death("INCLUDE: filename missing") + unless $_; + + $self->death("INCLUDE: output pipe is illegal") + if /^\s*\|/; + + # simple minded recursion detector + $self->death("INCLUDE loop detected") + if $self->{IncludedFiles}->{$_}; + + ++$self->{IncludedFiles}->{$_} unless /\|\s*$/; + + if (/\|\s*$/ && /^\s*perl\s/) { + Warn( $self, "The INCLUDE directive with a command is discouraged." . + " Use INCLUDE_COMMAND instead! In particular using 'perl'" . + " in an 'INCLUDE: ... |' directive is not guaranteed to pick" . + " up the correct perl. The INCLUDE_COMMAND directive allows" . + " the use of \$^X as the currently running perl, see" . + " 'perldoc perlxs' for details."); + } + + $self->PushXSStack(); + + $self->{FH} = Symbol::gensym(); + + # open the new file + open($self->{FH}, $_) or $self->death("Cannot open '$_': $!"); + + print Q(<<"EOF"); # -#/* INCLUDE: Including '$_' from '$filename' */ +#/* INCLUDE: Including '$_' from '$self->{filename}' */ # EOF - $filename = $_ ; - $filepathname = File::Spec->catfile($dir, $filename); + $self->{filename} = $_; + $self->{filepathname} = ( $^O =~ /^mswin/i ) + ? qq($self->{dir}/$self->{filename}) # See CPAN RT #61908: gcc doesn't like backslashes on win32? + : File::Spec->catfile($self->{dir}, $self->{filename}); - # Prime the pump by reading the first - # non-blank line + # Prime the pump by reading the first + # non-blank line - # skip leading blank lines - while (<$FH>) { - last unless /^\s*$/ ; - } - - $lastline = $_ ; - $lastline_no = $. ; + # skip leading blank lines + while (readline($self->{FH})) { + last unless /^\s*$/; } + $self->{lastline} = $_; + $self->{lastline_no} = $.; +} + sub QuoteArgs { - my $cmd = shift; - my @args = split /\s+/, $cmd; - $cmd = shift @args; - for (@args) { - $_ = q(").$_.q(") if !/^\"/ && length($_) > 0; - } - return join (' ', ($cmd, @args)); + my $cmd = shift; + my @args = split /\s+/, $cmd; + $cmd = shift @args; + for (@args) { + $_ = q(").$_.q(") if !/^\"/ && length($_) > 0; } + return join (' ', ($cmd, @args)); +} -sub INCLUDE_COMMAND_handler () - { - # the rest of the current line should contain a valid command +sub INCLUDE_COMMAND_handler { + my $self = shift; + $_ = shift; + # the rest of the current line should contain a valid command - TrimWhitespace($_) ; + trim_whitespace($_); - $_ = QuoteArgs($_) if $^O eq 'VMS'; + $_ = QuoteArgs($_) if $^O eq 'VMS'; - death("INCLUDE_COMMAND: command missing") - unless $_ ; + $self->death("INCLUDE_COMMAND: command missing") + unless $_; - death("INCLUDE_COMMAND: pipes are illegal") - if /^\s*\|/ or /\|\s*$/ ; + $self->death("INCLUDE_COMMAND: pipes are illegal") + if /^\s*\|/ or /\|\s*$/; - PushXSStack( IsPipe => 1 ); + $self->PushXSStack( IsPipe => 1 ); - $FH = Symbol::gensym(); + $self->{FH} = Symbol::gensym(); - # If $^X is used in INCLUDE_COMMAND, we know it's supposed to be - # the same perl interpreter as we're currently running - s/^\s*\$\^X/$^X/; + # If $^X is used in INCLUDE_COMMAND, we know it's supposed to be + # the same perl interpreter as we're currently running + s/^\s*\$\^X/$^X/; - # open the new file - open ($FH, "-|", "$_") - or death("Cannot run command '$_' to include its output: $!") ; + # open the new file + open ($self->{FH}, "-|", $_) + or $self->death( $self, "Cannot run command '$_' to include its output: $!"); - print Q(<<"EOF"); + print Q(<<"EOF"); # -#/* INCLUDE_COMMAND: Including output of '$_' from '$filename' */ +#/* INCLUDE_COMMAND: Including output of '$_' from '$self->{filename}' */ # EOF - $filename = $_ ; - $filepathname = $filename; - $filepathname =~ s/\"/\\"/g; + $self->{filename} = $_; + $self->{filepathname} = $self->{filename}; + #$self->{filepathname} =~ s/\"/\\"/g; # Fails? See CPAN RT #53938: MinGW Broken after 2.21 + $self->{filepathname} =~ s/\\/\\\\/g; # Works according to reporter of #53938 - # Prime the pump by reading the first - # non-blank line + # Prime the pump by reading the first + # non-blank line - # skip leading blank lines - while (<$FH>) { - last unless /^\s*$/ ; - } - - $lastline = $_ ; - $lastline_no = $. ; + # skip leading blank lines + while (readline($self->{FH})) { + last unless /^\s*$/; } -sub PopFile() - { - return 0 unless $XSStack[-1]{type} eq 'file' ; - - my $data = pop @XSStack ; - my $ThisFile = $filename ; - my $isPipe = $data->{IsPipe}; - - -- $IncludedFiles{$filename} - unless $isPipe ; - - close $FH ; - - $FH = $data->{Handle} ; - # $filename is the leafname, which for some reason isused for diagnostic - # messages, whereas $filepathname is the full pathname, and is used for - # #line directives. - $filename = $data->{Filename} ; - $filepathname = $data->{Filepathname} ; - $lastline = $data->{LastLine} ; - $lastline_no = $data->{LastLineNo} ; - @line = @{ $data->{Line} } ; - @line_no = @{ $data->{LineNo} } ; - - if ($isPipe and $? ) { - -- $lastline_no ; - print STDERR "Error reading from pipe '$ThisFile': $! in $filename, line $lastline_no\n" ; - exit 1 ; - } + $self->{lastline} = $_; + $self->{lastline_no} = $.; +} - print Q(<<"EOF"); -# -#/* INCLUDE: Returning to '$filename' from '$ThisFile' */ -# -EOF +sub PopFile { + my $self = shift; - return 1 ; - } + return 0 unless $self->{XSStack}->[-1]{type} eq 'file'; -sub ValidProtoString ($) - { - my($string) = @_ ; + my $data = pop @{ $self->{XSStack} }; + my $ThisFile = $self->{filename}; + my $isPipe = $data->{IsPipe}; - if ( $string =~ /^$proto_re+$/ ) { - return $string ; - } + --$self->{IncludedFiles}->{$self->{filename}} + unless $isPipe; - return 0 ; - } + close $self->{FH}; -sub C_string ($) - { - my($string) = @_ ; + $self->{FH} = $data->{Handle}; + # $filename is the leafname, which for some reason isused for diagnostic + # messages, whereas $filepathname is the full pathname, and is used for + # #line directives. + $self->{filename} = $data->{Filename}; + $self->{filepathname} = $data->{Filepathname}; + $self->{lastline} = $data->{LastLine}; + $self->{lastline_no} = $data->{LastLineNo}; + @{ $self->{line} } = @{ $data->{Line} }; + @{ $self->{line_no} } = @{ $data->{LineNo} }; - $string =~ s[\\][\\\\]g ; - $string ; + if ($isPipe and $? ) { + --$self->{lastline_no}; + print STDERR "Error reading from pipe '$ThisFile': $! in $self->{filename}, line $self->{lastline_no}\n" ; + exit 1; } -sub ProtoString ($) - { - my ($type) = @_ ; - - $proto_letter{$type} or "\$" ; - } + print Q(<<"EOF"); +# +#/* INCLUDE: Returning to '$self->{filename}' from '$ThisFile' */ +# +EOF -sub check_cpp { - my @cpp = grep(/^\#\s*(?:if|e\w+)/, @line); - if (@cpp) { - my ($cpp, $cpplevel); - for $cpp (@cpp) { - if ($cpp =~ /^\#\s*if/) { - $cpplevel++; - } elsif (!$cpplevel) { - Warn("Warning: #else/elif/endif without #if in this function"); - print STDERR " (precede it with a blank line if the matching #if is outside the function)\n" - if $XSStack[-1]{type} eq 'if'; - return; - } elsif ($cpp =~ /^\#\s*endif/) { - $cpplevel--; - } - } - Warn("Warning: #if without #endif in this function") if $cpplevel; - } + return 1; } - sub Q { my($text) = @_; $text =~ s/^#//gm; @@ -1715,480 +1669,325 @@ sub Q { $text; } -# Read next xsub into @line from ($lastline, <$FH>). +# Read next xsub into @{ $self->{line} } from ($lastline, readline($self->{FH})). sub fetch_para { + my $self = shift; + # parse paragraph - death ("Error: Unterminated `#if/#ifdef/#ifndef'") - if !defined $lastline && $XSStack[-1]{type} eq 'if'; - @line = (); - @line_no = () ; - return PopFile() if !defined $lastline; + $self->death("Error: Unterminated '#if/#ifdef/#ifndef'") + if !defined $self->{lastline} && $self->{XSStack}->[-1]{type} eq 'if'; + @{ $self->{line} } = (); + @{ $self->{line_no} } = (); + return $self->PopFile() if !defined $self->{lastline}; - if ($lastline =~ + if ($self->{lastline} =~ /^MODULE\s*=\s*([\w:]+)(?:\s+PACKAGE\s*=\s*([\w:]+))?(?:\s+PREFIX\s*=\s*(\S+))?\s*$/) { - $Module = $1; + my $Module = $1; $Package = defined($2) ? $2 : ''; # keep -w happy - $Prefix = defined($3) ? $3 : ''; # keep -w happy - $Prefix = quotemeta $Prefix ; - ($Module_cname = $Module) =~ s/\W/_/g; - ($Packid = $Package) =~ tr/:/_/; - $Packprefix = $Package; - $Packprefix .= "::" if $Packprefix ne ""; - $lastline = ""; + $self->{Prefix} = defined($3) ? $3 : ''; # keep -w happy + $self->{Prefix} = quotemeta $self->{Prefix}; + ($self->{Module_cname} = $Module) =~ s/\W/_/g; + ($self->{Packid} = $Package) =~ tr/:/_/; + $self->{Packprefix} = $Package; + $self->{Packprefix} .= "::" if $self->{Packprefix} ne ""; + $self->{lastline} = ""; } for (;;) { # Skip embedded PODs - while ($lastline =~ /^=/) { - while ($lastline = <$FH>) { - last if ($lastline =~ /^=cut\s*$/); + while ($self->{lastline} =~ /^=/) { + while ($self->{lastline} = readline($self->{FH})) { + last if ($self->{lastline} =~ /^=cut\s*$/); } - death ("Error: Unterminated pod") unless $lastline; - $lastline = <$FH>; - chomp $lastline; - $lastline =~ s/^\s+$//; + $self->death("Error: Unterminated pod") unless $self->{lastline}; + $self->{lastline} = readline($self->{FH}); + chomp $self->{lastline}; + $self->{lastline} =~ s/^\s+$//; } - if ($lastline !~ /^\s*#/ || - # CPP directives: - # ANSI: if ifdef ifndef elif else endif define undef - # line error pragma - # gcc: warning include_next - # obj-c: import - # others: ident (gcc notes that some cpps have this one) - $lastline =~ /^#[ \t]*(?:(?:if|ifn?def|elif|else|endif|define|undef|pragma|error|warning|line\s+\d+|ident)\b|(?:include(?:_next)?|import)\s*["<].*[>"])/) { - last if $lastline =~ /^\S/ && @line && $line[-1] eq ""; - push(@line, $lastline); - push(@line_no, $lastline_no) ; + + # This chunk of code strips out (and parses) embedded TYPEMAP blocks + # which support a HEREdoc-alike block syntax. + # This is special cased from the usual paragraph-handler logic + # due to the HEREdoc-ish syntax. + if ($self->{lastline} =~ /^TYPEMAP\s*:\s*<<\s*(?:(["'])(.+?)\1|([^\s'"]+))\s*;?\s*$/) { + my $end_marker = quotemeta(defined($1) ? $2 : $3); + my @tmaplines; + while (1) { + $self->{lastline} = readline($self->{FH}); + $self->death("Error: Unterminated typemap") if not defined $self->{lastline}; + last if $self->{lastline} =~ /^$end_marker\s*$/; + push @tmaplines, $self->{lastline}; + } + + my $tmapcode = join "", @tmaplines; + my $tmap = ExtUtils::Typemaps->new( + string => $tmapcode, + lineno_offset => ($self->current_line_number()||0)+1, + fake_filename => $self->{filename}, + ); + $self->{typemap}->merge(typemap => $tmap, replace => 1); + + $self->{lastline} = ""; + } + + if ($self->{lastline} !~ /^\s*#/ || + # CPP directives: + # ANSI: if ifdef ifndef elif else endif define undef + # line error pragma + # gcc: warning include_next + # obj-c: import + # others: ident (gcc notes that some cpps have this one) + $self->{lastline} =~ /^#[ \t]*(?:(?:if|ifn?def|elif|else|endif|define|undef|pragma|error|warning|line\s+\d+|ident)\b|(?:include(?:_next)?|import)\s*["<].*[>"])/) { + last if $self->{lastline} =~ /^\S/ && @{ $self->{line} } && $self->{line}->[-1] eq ""; + push(@{ $self->{line} }, $self->{lastline}); + push(@{ $self->{line_no} }, $self->{lastline_no}); } # Read next line and continuation lines - last unless defined($lastline = <$FH>); - $lastline_no = $.; + last unless defined($self->{lastline} = readline($self->{FH})); + $self->{lastline_no} = $.; my $tmp_line; - $lastline .= $tmp_line - while ($lastline =~ /\\$/ && defined($tmp_line = <$FH>)); + $self->{lastline} .= $tmp_line + while ($self->{lastline} =~ /\\$/ && defined($tmp_line = readline($self->{FH}))); - chomp $lastline; - $lastline =~ s/^\s+$//; + chomp $self->{lastline}; + $self->{lastline} =~ s/^\s+$//; } - pop(@line), pop(@line_no) while @line && $line[-1] eq ""; + pop(@{ $self->{line} }), pop(@{ $self->{line_no} }) while @{ $self->{line} } && $self->{line}->[-1] eq ""; 1; } sub output_init { - local($type, $num, $var, $init, $name_printed) = @_; - local($arg) = "ST(" . ($num - 1) . ")"; + my $argsref = shift; + my ($type, $num, $var, $init, $printed_name) = ( + $argsref->{type}, + $argsref->{num}, + $argsref->{var}, + $argsref->{init}, + $argsref->{printed_name} + ); + my $arg = "ST(" . ($num - 1) . ")"; if ( $init =~ /^=/ ) { - if ($name_printed) { + if ($printed_name) { eval qq/print " $init\\n"/; - } else { + } + else { eval qq/print "\\t$var $init\\n"/; } - warn $@ if $@; - } else { + warn $@ if $@; + } + else { if ( $init =~ s/^\+// && $num ) { - &generate_init($type, $num, $var, $name_printed); - } elsif ($name_printed) { + generate_init( { + type => $type, + num => $num, + var => $var, + printed_name => $printed_name, + } ); + } + elsif ($printed_name) { print ";\n"; $init =~ s/^;//; - } else { + } + else { eval qq/print "\\t$var;\\n"/; - warn $@ if $@; + warn $@ if $@; $init =~ s/^;//; } - $deferred .= eval qq/"\\n\\t$init\\n"/; - warn $@ if $@; + $self->{deferred} .= eval qq/"\\n\\t$init\\n"/; + warn $@ if $@; } } -sub Warn - { - # work out the line number - my $line_no = $line_no[@line_no - @line -1] ; - - print STDERR "@_ in $filename, line $line_no\n" ; - } - -sub blurt - { - Warn @_ ; - $errors ++ - } - -sub death - { - Warn @_ ; - exit 1 ; - } - sub generate_init { - local($type, $num, $var) = @_; - local($arg) = "ST(" . ($num - 1) . ")"; - local($argoff) = $num - 1; - local($ntype); - local($tk); - - $type = TidyType($type) ; - blurt("Error: '$type' not in typemap"), return - unless defined($type_kind{$type}); + my $argsref = shift; + my ($type, $num, $var, $printed_name) = ( + $argsref->{type}, + $argsref->{num}, + $argsref->{var}, + $argsref->{printed_name}, + ); + my $arg = "ST(" . ($num - 1) . ")"; + my ($argoff, $ntype); + $argoff = $num - 1; + + my $typemaps = $self->{typemap}; + + $type = tidy_type($type); + $self->report_typemap_failure($typemaps, $type), return + unless $typemaps->get_typemap(ctype => $type); ($ntype = $type) =~ s/\s*\*/Ptr/g; + my $subtype; ($subtype = $ntype) =~ s/(?:Array)?(?:Ptr)?$//; - $tk = $type_kind{$type}; - $tk =~ s/OBJ$/REF/ if $func_name =~ /DESTROY$/; - if ($tk eq 'T_PV' and exists $lengthof{$var}) { - print "\t$var" unless $name_printed; + my $typem = $typemaps->get_typemap(ctype => $type); + my $xstype = $typem->xstype; + $xstype =~ s/OBJ$/REF/ if $func_name =~ /DESTROY$/; + if ($xstype eq 'T_PV' and exists $self->{lengthof}->{$var}) { + print "\t$var" unless $printed_name; print " = ($type)SvPV($arg, STRLEN_length_of_$var);\n"; die "default value not supported with length(NAME) supplied" - if defined $defaults{$var}; + if defined $self->{defaults}->{$var}; return; } - $type =~ tr/:/_/ unless $hiertype; - blurt("Error: No INPUT definition for type '$type', typekind '$type_kind{$type}' found"), return - unless defined $input_expr{$tk} ; - $expr = $input_expr{$tk}; + $type =~ tr/:/_/ unless $self->{hiertype}; + + my $inputmap = $typemaps->get_inputmap(xstype => $xstype); + $self->blurt("Error: No INPUT definition for type '$type', typekind '" . $type->xstype . "' found"), return + unless defined $inputmap; + + my $expr = $inputmap->cleaned_code; + # Note: This gruesome bit either needs heavy rethinking or documentation. I vote for the former. --Steffen if ($expr =~ /DO_ARRAY_ELEM/) { - blurt("Error: '$subtype' not in typemap"), return - unless defined($type_kind{$subtype}); - blurt("Error: No INPUT definition for type '$subtype', typekind '$type_kind{$subtype}' found"), return - unless defined $input_expr{$type_kind{$subtype}} ; - $subexpr = $input_expr{$type_kind{$subtype}}; + my $subtypemap = $typemaps->get_typemap(ctype => $subtype); + $self->report_typemap_failure($typemaps, $subtype), return + if not $subtypemap; + my $subinputmap = $typemaps->get_inputmap(xstype => $subtypemap->xstype); + $self->blurt("Error: No INPUT definition for type '$subtype', typekind '" . $subtypemap->xstype . "' found"), return + unless $subinputmap; + my $subexpr = $subinputmap->cleaned_code; $subexpr =~ s/\$type/\$subtype/g; $subexpr =~ s/ntype/subtype/g; $subexpr =~ s/\$arg/ST(ix_$var)/g; $subexpr =~ s/\n\t/\n\t\t/g; $subexpr =~ s/is not of (.*\")/[arg %d] is not of $1, ix_$var + 1/g; - $subexpr =~ s/\$var/${var}[ix_$var - $argoff]/; + $subexpr =~ s/\$var/${var}\[ix_$var - $argoff]/; $expr =~ s/DO_ARRAY_ELEM/$subexpr/; } if ($expr =~ m#/\*.*scope.*\*/#i) { # "scope" in C comments - $ScopeThisXSUB = 1; + $self->{ScopeThisXSUB} = 1; } - if (defined($defaults{$var})) { + if (defined($self->{defaults}->{$var})) { $expr =~ s/(\t+)/$1 /g; $expr =~ s/ /\t/g; - if ($name_printed) { + if ($printed_name) { print ";\n"; - } else { + } + else { eval qq/print "\\t$var;\\n"/; - warn $@ if $@; + warn $@ if $@; } - if ($defaults{$var} eq 'NO_INIT') { - $deferred .= eval qq/"\\n\\tif (items >= $num) {\\n$expr;\\n\\t}\\n"/; - } else { - $deferred .= eval qq/"\\n\\tif (items < $num)\\n\\t $var = $defaults{$var};\\n\\telse {\\n$expr;\\n\\t}\\n"/; + if ($self->{defaults}->{$var} eq 'NO_INIT') { + $self->{deferred} .= eval qq/"\\n\\tif (items >= $num) {\\n$expr;\\n\\t}\\n"/; } - warn $@ if $@; - } elsif ($ScopeThisXSUB or $expr !~ /^\s*\$var =/) { - if ($name_printed) { + else { + $self->{deferred} .= eval qq/"\\n\\tif (items < $num)\\n\\t $var = $self->{defaults}->{$var};\\n\\telse {\\n$expr;\\n\\t}\\n"/; + } + warn $@ if $@; + } + elsif ($self->{ScopeThisXSUB} or $expr !~ /^\s*\$var =/) { + if ($printed_name) { print ";\n"; - } else { + } + else { eval qq/print "\\t$var;\\n"/; - warn $@ if $@; + warn $@ if $@; } - $deferred .= eval qq/"\\n$expr;\\n"/; - warn $@ if $@; - } else { + $self->{deferred} .= eval qq/"\\n$expr;\\n"/; + warn $@ if $@; + } + else { die "panic: do not know how to handle this branch for function pointers" - if $name_printed; + if $printed_name; eval qq/print "$expr;\\n"/; - warn $@ if $@; + warn $@ if $@; } } sub generate_output { - local($type, $num, $var, $do_setmagic, $do_push) = @_; - local($arg) = "ST(" . ($num - ($num != 0)) . ")"; - local($argoff) = $num - 1; - local($ntype); - - $type = TidyType($type) ; + my $argsref = shift; + my ($type, $num, $var, $do_setmagic, $do_push) = ( + $argsref->{type}, + $argsref->{num}, + $argsref->{var}, + $argsref->{do_setmagic}, + $argsref->{do_push} + ); + my $arg = "ST(" . ($num - ($num != 0)) . ")"; + my $ntype; + + my $typemaps = $self->{typemap}; + + $type = tidy_type($type); if ($type =~ /^array\(([^,]*),(.*)\)/) { print "\t$arg = sv_newmortal();\n"; print "\tsv_setpvn($arg, (char *)$var, $2 * sizeof($1));\n"; print "\tSvSETMAGIC($arg);\n" if $do_setmagic; - } else { - blurt("Error: '$type' not in typemap"), return - unless defined($type_kind{$type}); - blurt("Error: No OUTPUT definition for type '$type', typekind '$type_kind{$type}' found"), return - unless defined $output_expr{$type_kind{$type}} ; + } + else { + my $typemap = $typemaps->get_typemap(ctype => $type); + $self->report_typemap_failure($typemaps, $type), return + if not $typemap; + my $outputmap = $typemaps->get_outputmap(xstype => $typemap->xstype); + $self->blurt("Error: No OUTPUT definition for type '$type', typekind '" . $typemap->xstype . "' found"), return + unless $outputmap; ($ntype = $type) =~ s/\s*\*/Ptr/g; $ntype =~ s/\(\)//g; + my $subtype; ($subtype = $ntype) =~ s/(?:Array)?(?:Ptr)?$//; - $expr = $output_expr{$type_kind{$type}}; + + my $expr = $outputmap->cleaned_code; if ($expr =~ /DO_ARRAY_ELEM/) { - blurt("Error: '$subtype' not in typemap"), return - unless defined($type_kind{$subtype}); - blurt("Error: No OUTPUT definition for type '$subtype', typekind '$type_kind{$subtype}' found"), return - unless defined $output_expr{$type_kind{$subtype}} ; - $subexpr = $output_expr{$type_kind{$subtype}}; + my $subtypemap = $typemaps->get_typemap(ctype => $subtype); + $self->report_typemap_failure($typemaps, $subtype), return + if not $subtypemap; + my $suboutputmap = $typemaps->get_outputmap(xstype => $subtypemap->xstype); + $self->blurt("Error: No OUTPUT definition for type '$subtype', typekind '" . $subtypemap->xstype . "' found"), return + unless $suboutputmap; + my $subexpr = $suboutputmap->cleaned_code; $subexpr =~ s/ntype/subtype/g; $subexpr =~ s/\$arg/ST(ix_$var)/g; - $subexpr =~ s/\$var/${var}[ix_$var]/g; + $subexpr =~ s/\$var/${var}\[ix_$var]/g; $subexpr =~ s/\n\t/\n\t\t/g; $expr =~ s/DO_ARRAY_ELEM\n/$subexpr/; eval "print qq\a$expr\a"; - warn $@ if $@; + warn $@ if $@; print "\t\tSvSETMAGIC(ST(ix_$var));\n" if $do_setmagic; - } elsif ($var eq 'RETVAL') { + } + elsif ($var eq 'RETVAL') { if ($expr =~ /^\t\$arg = new/) { - # We expect that $arg has refcnt 1, so we need to - # mortalize it. - eval "print qq\a$expr\a"; - warn $@ if $@; - print "\tsv_2mortal(ST($num));\n"; - print "\tSvSETMAGIC(ST($num));\n" if $do_setmagic; - } elsif ($expr =~ /^\s*\$arg\s*=/) { - # We expect that $arg has refcnt >=1, so we need - # to mortalize it! - eval "print qq\a$expr\a"; - warn $@ if $@; - print "\tsv_2mortal(ST(0));\n"; - print "\tSvSETMAGIC(ST(0));\n" if $do_setmagic; - } else { - # Just hope that the entry would safely write it - # over an already mortalized value. By - # coincidence, something like $arg = &sv_undef - # works too. - print "\tST(0) = sv_newmortal();\n"; - eval "print qq\a$expr\a"; - warn $@ if $@; - # new mortals don't have set magic + # We expect that $arg has refcnt 1, so we need to + # mortalize it. + eval "print qq\a$expr\a"; + warn $@ if $@; + print "\tsv_2mortal(ST($num));\n"; + print "\tSvSETMAGIC(ST($num));\n" if $do_setmagic; + } + elsif ($expr =~ /^\s*\$arg\s*=/) { + # We expect that $arg has refcnt >=1, so we need + # to mortalize it! + eval "print qq\a$expr\a"; + warn $@ if $@; + print "\tsv_2mortal(ST(0));\n"; + print "\tSvSETMAGIC(ST(0));\n" if $do_setmagic; + } + else { + # Just hope that the entry would safely write it + # over an already mortalized value. By + # coincidence, something like $arg = &sv_undef + # works too. + print "\tST(0) = sv_newmortal();\n"; + eval "print qq\a$expr\a"; + warn $@ if $@; + # new mortals don't have set magic } - } elsif ($do_push) { + } + elsif ($do_push) { print "\tPUSHs(sv_newmortal());\n"; $arg = "ST($num)"; eval "print qq\a$expr\a"; - warn $@ if $@; + warn $@ if $@; print "\tSvSETMAGIC($arg);\n" if $do_setmagic; - } elsif ($arg =~ /^ST\(\d+\)$/) { + } + elsif ($arg =~ /^ST\(\d+\)$/) { eval "print qq\a$expr\a"; - warn $@ if $@; + warn $@ if $@; print "\tSvSETMAGIC($arg);\n" if $do_setmagic; } } } -sub map_type { - my($type, $varname) = @_; - - # C++ has :: in types too so skip this - $type =~ tr/:/_/ unless $hiertype; - $type =~ s/^array\(([^,]*),(.*)\).*/$1 */s; - if ($varname) { - if ($varname && $type =~ / \( \s* \* (?= \s* \) ) /xg) { - (substr $type, pos $type, 0) = " $varname "; - } else { - $type .= "\t$varname"; - } - } - $type; -} - - -######################################################### -package - ExtUtils::ParseXS::CountLines; -use strict; -use vars qw($SECTION_END_MARKER); - -sub TIEHANDLE { - my ($class, $cfile, $fh) = @_; - $cfile =~ s/\\/\\\\/g; - $SECTION_END_MARKER = qq{#line --- "$cfile"}; - - return bless {buffer => '', - fh => $fh, - line_no => 1, - }, $class; -} - -sub PRINT { - my $self = shift; - for (@_) { - $self->{buffer} .= $_; - while ($self->{buffer} =~ s/^([^\n]*\n)//) { - my $line = $1; - ++ $self->{line_no}; - $line =~ s|^\#line\s+---(?=\s)|#line $self->{line_no}|; - print {$self->{fh}} $line; - } - } -} - -sub PRINTF { - my $self = shift; - my $fmt = shift; - $self->PRINT(sprintf($fmt, @_)); -} - -sub DESTROY { - # Not necessary if we're careful to end with a "\n" - my $self = shift; - print {$self->{fh}} $self->{buffer}; -} - -sub UNTIE { - # This sub does nothing, but is necessary for references to be released. -} - -sub end_marker { - return $SECTION_END_MARKER; -} - - 1; -__END__ - -=head1 NAME - -ExtUtils::ParseXS - converts Perl XS code into C code - -=head1 SYNOPSIS - - use ExtUtils::ParseXS qw(process_file); - - process_file( filename => 'foo.xs' ); - - process_file( filename => 'foo.xs', - output => 'bar.c', - 'C++' => 1, - typemap => 'path/to/typemap', - hiertype => 1, - except => 1, - prototypes => 1, - versioncheck => 1, - linenumbers => 1, - optimize => 1, - prototypes => 1, - ); -=head1 DESCRIPTION - -C will compile XS code into C code by embedding the constructs -necessary to let C functions manipulate Perl values and creates the glue -necessary to let Perl access those functions. The compiler uses typemaps to -determine how to map C function parameters and variables to Perl values. - -The compiler will search for typemap files called I. It will use -the following search path to find default typemaps, with the rightmost -typemap taking precedence. - - ../../../typemap:../../typemap:../typemap:typemap - -=head1 EXPORT - -None by default. C may be exported upon request. - - -=head1 FUNCTIONS - -=over 4 - -=item process_xs() - -This function processes an XS file and sends output to a C file. -Named parameters control how the processing is done. The following -parameters are accepted: - -=over 4 - -=item B - -Adds C to the C code. Default is false. - -=item B - -Retains C<::> in type names so that C++ hierarchical types can be -mapped. Default is false. - -=item B - -Adds exception handling stubs to the C code. Default is false. - -=item B - -Indicates that a user-supplied typemap should take precedence over the -default typemaps. A single typemap may be specified as a string, or -multiple typemaps can be specified in an array reference, with the -last typemap having the highest precedence. - -=item B - -Generates prototype code for all xsubs. Default is false. - -=item B - -Makes sure at run time that the object file (derived from the C<.xs> -file) and the C<.pm> files have the same version number. Default is -true. - -=item B - -Adds C<#line> directives to the C output so error messages will look -like they came from the original XS file. Default is true. - -=item B - -Enables certain optimizations. The only optimization that is currently -affected is the use of Is by the output C code (see L). -Not optimizing may significantly slow down the generated code, but this is the way -B of 5.005 and earlier operated. Default is to optimize. - -=item B - -Enable recognition of C, C and C -declarations. Default is true. - -=item B - -Enable recognition of ANSI-like descriptions of function signature. -Default is true. - -=item B - -I have no clue what this does. Strips function prefixes? - -=back - -=item errors() - -This function returns the number of [a certain kind of] errors -encountered during processing of the XS file. - -=back - -=head1 AUTHOR - -Based on xsubpp code, written by Larry Wall. - -Maintained by: - -=over 4 - -=item * - -Ken Williams, - -=item * - -David Golden, - -=back - -=head1 COPYRIGHT - -Copyright 2002-2009 by Ken Williams, David Golden and other contributors. All -rights reserved. - -This library is free software; you can redistribute it and/or -modify it under the same terms as Perl itself. - -Based on the ExtUtils::xsubpp code by Larry Wall and the Perl 5 -Porters, which was released under the same license terms. - -=head1 SEE ALSO - -L, ExtUtils::xsubpp, ExtUtils::MakeMaker, L, L. -=cut +# vim: ts=2 sw=2 et: diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pod b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pod new file mode 100644 index 00000000000..e0d1511e4a9 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS.pod @@ -0,0 +1,161 @@ +=head1 NAME + +ExtUtils::ParseXS - converts Perl XS code into C code + +=head1 SYNOPSIS + + use ExtUtils::ParseXS qw(process_file); + + process_file( filename => 'foo.xs' ); + + process_file( filename => 'foo.xs', + output => 'bar.c', + 'C++' => 1, + typemap => 'path/to/typemap', + hiertype => 1, + except => 1, + prototypes => 1, + versioncheck => 1, + linenumbers => 1, + optimize => 1, + prototypes => 1, + ); + +=head1 DESCRIPTION + +C will compile XS code into C code by embedding the constructs +necessary to let C functions manipulate Perl values and creates the glue +necessary to let Perl access those functions. The compiler uses typemaps to +determine how to map C function parameters and variables to Perl values. + +The compiler will search for typemap files called I. It will use +the following search path to find default typemaps, with the rightmost +typemap taking precedence. + + ../../../typemap:../../typemap:../typemap:typemap + +=head1 EXPORT + +None by default. C may be exported upon request. + +=head1 FUNCTIONS + +=over 4 + +=item process_file() + +This function processes an XS file and sends output to a C file. +Named parameters control how the processing is done. The following +parameters are accepted: + +=over 4 + +=item B + +Adds C to the C code. Default is false. + +=item B + +Retains C<::> in type names so that C++ hierarchical types can be +mapped. Default is false. + +=item B + +Adds exception handling stubs to the C code. Default is false. + +=item B + +Indicates that a user-supplied typemap should take precedence over the +default typemaps. A single typemap may be specified as a string, or +multiple typemaps can be specified in an array reference, with the +last typemap having the highest precedence. + +=item B + +Generates prototype code for all xsubs. Default is false. + +=item B + +Makes sure at run time that the object file (derived from the C<.xs> +file) and the C<.pm> files have the same version number. Default is +true. + +=item B + +Adds C<#line> directives to the C output so error messages will look +like they came from the original XS file. Default is true. + +=item B + +Enables certain optimizations. The only optimization that is currently +affected is the use of Is by the output C code (see L). +Not optimizing may significantly slow down the generated code, but this is the way +B of 5.005 and earlier operated. Default is to optimize. + +=item B + +Enable recognition of C, C and C +declarations. Default is true. + +=item B + +Enable recognition of ANSI-like descriptions of function signature. +Default is true. + +=item B + +I I have no clue what this does. Strips function prefixes? + +=back + +=item errors() + +This function returns the number of [a certain kind of] errors +encountered during processing of the XS file. + +=back + +=head1 AUTHOR + +Based on xsubpp code, written by Larry Wall. + +Maintained by: + +=over 4 + +=item * + +Ken Williams, + +=item * + +David Golden, + +=item * + +James Keenan, + +=item * + +Steffen Mueller, + +=back + +=head1 COPYRIGHT + +Copyright 2002-2012 by Ken Williams, David Golden and other contributors. All +rights reserved. + +This library is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +Based on the C code by Larry Wall and the Perl 5 +Porters, which was released under the same license terms. + +=head1 SEE ALSO + +L, ExtUtils::xsubpp, ExtUtils::MakeMaker, L, L. + +=cut + + diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Constants.pm b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Constants.pm new file mode 100644 index 00000000000..2f822dacbe9 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Constants.pm @@ -0,0 +1,42 @@ +package ExtUtils::ParseXS::Constants; +use strict; +use warnings; +use Symbol; + +our $VERSION = '3.16'; + +=head1 NAME + +ExtUtils::ParseXS::Constants - Initialization values for some globals + +=head1 SYNOPSIS + + use ExtUtils::ParseXS::Constants (); + + $PrototypeRegexp = $ExtUtils::ParseXS::Constants::PrototypeRegexp; + +=head1 DESCRIPTION + +Initialization of certain non-subroutine variables in ExtUtils::ParseXS and some of its +supporting packages has been moved into this package so that those values can +be defined exactly once and then re-used in any package. + +Nothing is exported. Use fully qualified variable names. + +=cut + +# FIXME: THESE ARE NOT CONSTANTS! +our @InitFileCode; + +# Note that to reduce maintenance, $PrototypeRegexp is used +# by ExtUtils::Typemaps, too! +our $PrototypeRegexp = "[" . quotemeta('\$%&*@;[]_') . "]"; +our @XSKeywords = qw( + REQUIRE BOOT CASE PREINIT INPUT INIT CODE PPCODE + OUTPUT CLEANUP ALIAS ATTRS PROTOTYPES PROTOTYPE + VERSIONCHECK INCLUDE INCLUDE_COMMAND SCOPE INTERFACE + INTERFACE_MACRO C_ARGS POSTCALL OVERLOAD FALLBACK + EXPORT_XSUB_SYMBOLS +); + +1; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/CountLines.pm b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/CountLines.pm new file mode 100644 index 00000000000..66944cd629d --- /dev/null +++ b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/CountLines.pm @@ -0,0 +1,54 @@ +package ExtUtils::ParseXS::CountLines; +use strict; + +our $VERSION = '3.16'; + +our $SECTION_END_MARKER; + +sub TIEHANDLE { + my ($class, $cfile, $fh) = @_; + $cfile =~ s/\\/\\\\/g; + $cfile =~ s/"/\\"/g; + $SECTION_END_MARKER = qq{#line --- "$cfile"}; + + return bless { + buffer => '', + fh => $fh, + line_no => 1, + }, $class; +} + +sub PRINT { + my $self = shift; + for (@_) { + $self->{buffer} .= $_; + while ($self->{buffer} =~ s/^([^\n]*\n)//) { + my $line = $1; + ++$self->{line_no}; + $line =~ s|^\#line\s+---(?=\s)|#line $self->{line_no}|; + print {$self->{fh}} $line; + } + } +} + +sub PRINTF { + my $self = shift; + my $fmt = shift; + $self->PRINT(sprintf($fmt, @_)); +} + +sub DESTROY { + # Not necessary if we're careful to end with a "\n" + my $self = shift; + print {$self->{fh}} $self->{buffer}; +} + +sub UNTIE { + # This sub does nothing, but is necessary for references to be released. +} + +sub end_marker { + return $SECTION_END_MARKER; +} + +1; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Utilities.pm b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Utilities.pm new file mode 100644 index 00000000000..c4172d017ee --- /dev/null +++ b/Master/tlpkg/tlperl/lib/ExtUtils/ParseXS/Utilities.pm @@ -0,0 +1,924 @@ +package ExtUtils::ParseXS::Utilities; +use strict; +use warnings; +use Exporter; +use File::Spec; +use lib qw( lib ); +use ExtUtils::ParseXS::Constants (); + +our $VERSION = '3.16'; + +our (@ISA, @EXPORT_OK); +@ISA = qw(Exporter); +@EXPORT_OK = qw( + standard_typemap_locations + trim_whitespace + tidy_type + C_string + valid_proto_string + process_typemaps + make_targetable + map_type + standard_XS_defs + assign_func_args + analyze_preprocessor_statements + set_cond + Warn + current_line_number + blurt + death + check_conditional_preprocessor_statements + escape_file_for_line_directive + report_typemap_failure +); + +=head1 NAME + +ExtUtils::ParseXS::Utilities - Subroutines used with ExtUtils::ParseXS + +=head1 SYNOPSIS + + use ExtUtils::ParseXS::Utilities qw( + standard_typemap_locations + trim_whitespace + tidy_type + C_string + valid_proto_string + process_typemaps + make_targetable + map_type + standard_XS_defs + assign_func_args + analyze_preprocessor_statements + set_cond + Warn + blurt + death + check_conditional_preprocessor_statements + escape_file_for_line_directive + report_typemap_failure + ); + +=head1 SUBROUTINES + +The following functions are not considered to be part of the public interface. +They are documented here for the benefit of future maintainers of this module. + +=head2 C + +=over 4 + +=item * Purpose + +Provide a list of filepaths where F files may be found. The +filepaths -- relative paths to files (not just directory paths) -- appear in this list in lowest-to-highest priority. + +The highest priority is to look in the current directory. + + 'typemap' + +The second and third highest priorities are to look in the parent of the +current directory and a directory called F underneath the parent +directory. + + '../typemap', + '../lib/ExtUtils/typemap', + +The fourth through ninth highest priorities are to look in the corresponding +grandparent, great-grandparent and great-great-grandparent directories. + + '../../typemap', + '../../lib/ExtUtils/typemap', + '../../../typemap', + '../../../lib/ExtUtils/typemap', + '../../../../typemap', + '../../../../lib/ExtUtils/typemap', + +The tenth and subsequent priorities are to look in directories named +F which are subdirectories of directories found in C<@INC> -- +I a file named F actually exists in such a directory. +Example: + + '/usr/local/lib/perl5/5.10.1/ExtUtils/typemap', + +However, these filepaths appear in the list returned by +C in reverse order, I, lowest-to-highest. + + '/usr/local/lib/perl5/5.10.1/ExtUtils/typemap', + '../../../../lib/ExtUtils/typemap', + '../../../../typemap', + '../../../lib/ExtUtils/typemap', + '../../../typemap', + '../../lib/ExtUtils/typemap', + '../../typemap', + '../lib/ExtUtils/typemap', + '../typemap', + 'typemap' + +=item * Arguments + + my @stl = standard_typemap_locations( \@INC ); + +Reference to C<@INC>. + +=item * Return Value + +Array holding list of directories to be searched for F files. + +=back + +=cut + +sub standard_typemap_locations { + my $include_ref = shift; + my @tm = qw(typemap); + + my $updir = File::Spec->updir(); + foreach my $dir ( + File::Spec->catdir(($updir) x 1), + File::Spec->catdir(($updir) x 2), + File::Spec->catdir(($updir) x 3), + File::Spec->catdir(($updir) x 4), + ) { + unshift @tm, File::Spec->catfile($dir, 'typemap'); + unshift @tm, File::Spec->catfile($dir, lib => ExtUtils => 'typemap'); + } + foreach my $dir (@{ $include_ref}) { + my $file = File::Spec->catfile($dir, ExtUtils => 'typemap'); + unshift @tm, $file if -e $file; + } + return @tm; +} + +=head2 C + +=over 4 + +=item * Purpose + +Perform an in-place trimming of leading and trailing whitespace from the +first argument provided to the function. + +=item * Argument + + trim_whitespace($arg); + +=item * Return Value + +None. Remember: this is an I modification of the argument. + +=back + +=cut + +sub trim_whitespace { + $_[0] =~ s/^\s+|\s+$//go; +} + +=head2 C + +=over 4 + +=item * Purpose + +Rationalize any asterisks (C<*>) by joining them into bunches, removing +interior whitespace, then trimming leading and trailing whitespace. + +=item * Arguments + + ($ret_type) = tidy_type($_); + +String to be cleaned up. + +=item * Return Value + +String cleaned up. + +=back + +=cut + +sub tidy_type { + local ($_) = @_; + + # rationalise any '*' by joining them into bunches and removing whitespace + s#\s*(\*+)\s*#$1#g; + s#(\*+)# $1 #g; + + # change multiple whitespace into a single space + s/\s+/ /g; + + # trim leading & trailing whitespace + trim_whitespace($_); + + $_; +} + +=head2 C + +=over 4 + +=item * Purpose + +Escape backslashes (C<\>) in prototype strings. + +=item * Arguments + + $ProtoThisXSUB = C_string($_); + +String needing escaping. + +=item * Return Value + +Properly escaped string. + +=back + +=cut + +sub C_string { + my($string) = @_; + + $string =~ s[\\][\\\\]g; + $string; +} + +=head2 C + +=over 4 + +=item * Purpose + +Validate prototype string. + +=item * Arguments + +String needing checking. + +=item * Return Value + +Upon success, returns the same string passed as argument. + +Upon failure, returns C<0>. + +=back + +=cut + +sub valid_proto_string { + my($string) = @_; + + if ( $string =~ /^$ExtUtils::ParseXS::Constants::PrototypeRegexp+$/ ) { + return $string; + } + + return 0; +} + +=head2 C + +=over 4 + +=item * Purpose + +Process all typemap files. + +=item * Arguments + + my $typemaps_object = process_typemaps( $args{typemap}, $pwd ); + +List of two elements: C element from C<%args>; current working +directory. + +=item * Return Value + +Upon success, returns an L object. + +=back + +=cut + +sub process_typemaps { + my ($tmap, $pwd) = @_; + + my @tm = ref $tmap ? @{$tmap} : ($tmap); + + foreach my $typemap (@tm) { + die "Can't find $typemap in $pwd\n" unless -r $typemap; + } + + push @tm, standard_typemap_locations( \@INC ); + + require ExtUtils::Typemaps; + my $typemap = ExtUtils::Typemaps->new; + foreach my $typemap_loc (@tm) { + next unless -f $typemap_loc; + # skip directories, binary files etc. + warn("Warning: ignoring non-text typemap file '$typemap_loc'\n"), next + unless -T $typemap_loc; + + $typemap->merge(file => $typemap_loc, replace => 1); + } + + return $typemap; +} + +=head2 C + +=over 4 + +=item * Purpose + +Populate C<%targetable>. This constitutes a refinement of the output of +C with respect to its fourth output, C<$output_expr_ref>. + +=item * Arguments + + %targetable = make_targetable($output_expr_ref); + +Single hash reference: the fourth such ref returned by C. + +=item * Return Value + +Hash. + +=back + +=cut + +sub make_targetable { + my $output_expr_ref = shift; + + our $bal; # ()-balanced + $bal = qr[ + (?: + (?>[^()]+) + | + \( (??{ $bal }) \) + )* + ]x; + + # matches variations on (SV*) + my $sv_cast = qr[ + (?: + \( \s* SV \s* \* \s* \) \s* + )? + ]x; + + my $size = qr[ # Third arg (to setpvn) + , \s* (??{ $bal }) + ]x; + + my %targetable; + foreach my $key (keys %{ $output_expr_ref }) { + # We can still bootstrap compile 're', because in code re.pm is + # available to miniperl, and does not attempt to load the XS code. + use re 'eval'; + + my ($type, $with_size, $arg, $sarg) = + ($output_expr_ref->{$key} =~ + m[^ + \s+ + sv_set([iunp])v(n)? # Type, is_setpvn + \s* + \( \s* + $sv_cast \$arg \s* , \s* + ( (??{ $bal }) ) # Set from + ( (??{ $size }) )? # Possible sizeof set-from + \) \s* ; \s* $ + ]x + ); + $targetable{$key} = [$type, $with_size, $arg, $sarg] if $type; + } + return %targetable; +} + +=head2 C + +=over 4 + +=item * Purpose + +Performs a mapping at several places inside C loop. + +=item * Arguments + + $type = map_type($self, $type, $varname); + +List of three arguments. + +=item * Return Value + +String holding augmented version of second argument. + +=back + +=cut + +sub map_type { + my ($self, $type, $varname) = @_; + + # C++ has :: in types too so skip this + $type =~ tr/:/_/ unless $self->{hiertype}; + $type =~ s/^array\(([^,]*),(.*)\).*/$1 */s; + if ($varname) { + if ($type =~ / \( \s* \* (?= \s* \) ) /xg) { + (substr $type, pos $type, 0) = " $varname "; + } + else { + $type .= "\t$varname"; + } + } + return $type; +} + +=head2 C + +=over 4 + +=item * Purpose + +Writes to the C<.c> output file certain preprocessor directives and function +headers needed in all such files. + +=item * Arguments + +None. + +=item * Return Value + +Returns true. + +=back + +=cut + +sub standard_XS_defs { + print <<"EOF"; +#ifndef PERL_UNUSED_VAR +# define PERL_UNUSED_VAR(var) if (0) var = var +#endif + +#ifndef dVAR +# define dVAR dNOOP +#endif + + +/* This stuff is not part of the API! You have been warned. */ +#ifndef PERL_VERSION_DECIMAL +# define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s) +#endif +#ifndef PERL_DECIMAL_VERSION +# define PERL_DECIMAL_VERSION \\ + PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION) +#endif +#ifndef PERL_VERSION_GE +# define PERL_VERSION_GE(r,v,s) \\ + (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s)) +#endif +#ifndef PERL_VERSION_LE +# define PERL_VERSION_LE(r,v,s) \\ + (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s)) +#endif + +/* XS_INTERNAL is the explicit static-linkage variant of the default + * XS macro. + * + * XS_EXTERNAL is the same as XS_INTERNAL except it does not include + * "STATIC", ie. it exports XSUB symbols. You probably don't want that + * for anything but the BOOT XSUB. + * + * See XSUB.h in core! + */ + + +/* TODO: This might be compatible further back than 5.10.0. */ +#if PERL_VERSION_GE(5, 10, 0) && PERL_VERSION_LE(5, 15, 1) +# undef XS_EXTERNAL +# undef XS_INTERNAL +# if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING) +# define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name) +# define XS_INTERNAL(name) STATIC XSPROTO(name) +# endif +# if defined(__SYMBIAN32__) +# define XS_EXTERNAL(name) EXPORT_C XSPROTO(name) +# define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name) +# endif +# ifndef XS_EXTERNAL +# if defined(HASATTRIBUTE_UNUSED) && !defined(__cplusplus) +# define XS_EXTERNAL(name) void name(pTHX_ CV* cv __attribute__unused__) +# define XS_INTERNAL(name) STATIC void name(pTHX_ CV* cv __attribute__unused__) +# else +# ifdef __cplusplus +# define XS_EXTERNAL(name) extern "C" XSPROTO(name) +# define XS_INTERNAL(name) static XSPROTO(name) +# else +# define XS_EXTERNAL(name) XSPROTO(name) +# define XS_INTERNAL(name) STATIC XSPROTO(name) +# endif +# endif +# endif +#endif + +/* perl >= 5.10.0 && perl <= 5.15.1 */ + + +/* The XS_EXTERNAL macro is used for functions that must not be static + * like the boot XSUB of a module. If perl didn't have an XS_EXTERNAL + * macro defined, the best we can do is assume XS is the same. + * Dito for XS_INTERNAL. + */ +#ifndef XS_EXTERNAL +# define XS_EXTERNAL(name) XS(name) +#endif +#ifndef XS_INTERNAL +# define XS_INTERNAL(name) XS(name) +#endif + +/* Now, finally, after all this mess, we want an ExtUtils::ParseXS + * internal macro that we're free to redefine for varying linkage due + * to the EXPORT_XSUB_SYMBOLS XS keyword. This is internal, use + * XS_EXTERNAL(name) or XS_INTERNAL(name) in your code if you need to! + */ + +#undef XS_EUPXS +#if defined(PERL_EUPXS_ALWAYS_EXPORT) +# define XS_EUPXS(name) XS_EXTERNAL(name) +#else + /* default to internal */ +# define XS_EUPXS(name) XS_INTERNAL(name) +#endif + +EOF + + print <<"EOF"; +#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE +#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params) + +/* prototype to pass -Wmissing-prototypes */ +STATIC void +S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params); + +STATIC void +S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params) +{ + const GV *const gv = CvGV(cv); + + PERL_ARGS_ASSERT_CROAK_XS_USAGE; + + if (gv) { + const char *const gvname = GvNAME(gv); + const HV *const stash = GvSTASH(gv); + const char *const hvname = stash ? HvNAME(stash) : NULL; + + if (hvname) + Perl_croak(aTHX_ "Usage: %s::%s(%s)", hvname, gvname, params); + else + Perl_croak(aTHX_ "Usage: %s(%s)", gvname, params); + } else { + /* Pants. I don't think that it should be possible to get here. */ + Perl_croak(aTHX_ "Usage: CODE(0x%"UVxf")(%s)", PTR2UV(cv), params); + } +} +#undef PERL_ARGS_ASSERT_CROAK_XS_USAGE + +#ifdef PERL_IMPLICIT_CONTEXT +#define croak_xs_usage(a,b) S_croak_xs_usage(aTHX_ a,b) +#else +#define croak_xs_usage S_croak_xs_usage +#endif + +#endif + +/* NOTE: the prototype of newXSproto() is different in versions of perls, + * so we define a portable version of newXSproto() + */ +#ifdef newXS_flags +#define newXSproto_portable(name, c_impl, file, proto) newXS_flags(name, c_impl, file, proto, 0) +#else +#define newXSproto_portable(name, c_impl, file, proto) (PL_Sv=(SV*)newXS(name, c_impl, file), sv_setpv(PL_Sv, proto), (CV*)PL_Sv) +#endif /* !defined(newXS_flags) */ + +EOF + return 1; +} + +=head2 C + +=over 4 + +=item * Purpose + +Perform assignment to the C attribute. + +=item * Arguments + + $string = assign_func_args($self, $argsref, $class); + +List of three elements. Second is an array reference; third is a string. + +=item * Return Value + +String. + +=back + +=cut + +sub assign_func_args { + my ($self, $argsref, $class) = @_; + my @func_args = @{$argsref}; + shift @func_args if defined($class); + + for my $arg (@func_args) { + $arg =~ s/^/&/ if $self->{in_out}->{$arg}; + } + return join(", ", @func_args); +} + +=head2 C + +=over 4 + +=item * Purpose + +Within each function inside each Xsub, print to the F<.c> output file certain +preprocessor statements. + +=item * Arguments + + ( $self, $XSS_work_idx, $BootCode_ref ) = + analyze_preprocessor_statements( + $self, $statement, $XSS_work_idx, $BootCode_ref + ); + +List of four elements. + +=item * Return Value + +Modifed values of three of the arguments passed to the function. In +particular, the C and C attributes are modified. + +=back + +=cut + +sub analyze_preprocessor_statements { + my ($self, $statement, $XSS_work_idx, $BootCode_ref) = @_; + + if ($statement eq 'if') { + $XSS_work_idx = @{ $self->{XSStack} }; + push(@{ $self->{XSStack} }, {type => 'if'}); + } + else { + $self->death("Error: '$statement' with no matching 'if'") + if $self->{XSStack}->[-1]{type} ne 'if'; + if ($self->{XSStack}->[-1]{varname}) { + push(@{ $self->{InitFileCode} }, "#endif\n"); + push(@{ $BootCode_ref }, "#endif"); + } + + my(@fns) = keys %{$self->{XSStack}->[-1]{functions}}; + if ($statement ne 'endif') { + # Hide the functions defined in other #if branches, and reset. + @{$self->{XSStack}->[-1]{other_functions}}{@fns} = (1) x @fns; + @{$self->{XSStack}->[-1]}{qw(varname functions)} = ('', {}); + } + else { + my($tmp) = pop(@{ $self->{XSStack} }); + 0 while (--$XSS_work_idx + && $self->{XSStack}->[$XSS_work_idx]{type} ne 'if'); + # Keep all new defined functions + push(@fns, keys %{$tmp->{other_functions}}); + @{$self->{XSStack}->[$XSS_work_idx]{functions}}{@fns} = (1) x @fns; + } + } + return ($self, $XSS_work_idx, $BootCode_ref); +} + +=head2 C + +=over 4 + +=item * Purpose + +=item * Arguments + +=item * Return Value + +=back + +=cut + +sub set_cond { + my ($ellipsis, $min_args, $num_args) = @_; + my $cond; + if ($ellipsis) { + $cond = ($min_args ? qq(items < $min_args) : 0); + } + elsif ($min_args == $num_args) { + $cond = qq(items != $min_args); + } + else { + $cond = qq(items < $min_args || items > $num_args); + } + return $cond; +} + +=head2 C + +=over 4 + +=item * Purpose + +Figures out the current line number in the XS file. + +=item * Arguments + +C<$self> + +=item * Return Value + +The current line number. + +=back + +=cut + +sub current_line_number { + my $self = shift; + my $line_number = $self->{line_no}->[@{ $self->{line_no} } - @{ $self->{line} } -1]; + return $line_number; +} + +=head2 C + +=over 4 + +=item * Purpose + +=item * Arguments + +=item * Return Value + +=back + +=cut + +sub Warn { + my $self = shift; + my $warn_line_number = $self->current_line_number(); + print STDERR "@_ in $self->{filename}, line $warn_line_number\n"; +} + +=head2 C + +=over 4 + +=item * Purpose + +=item * Arguments + +=item * Return Value + +=back + +=cut + +sub blurt { + my $self = shift; + $self->Warn(@_); + $self->{errors}++ +} + +=head2 C + +=over 4 + +=item * Purpose + +=item * Arguments + +=item * Return Value + +=back + +=cut + +sub death { + my $self = shift; + $self->Warn(@_); + exit 1; +} + +=head2 C + +=over 4 + +=item * Purpose + +=item * Arguments + +=item * Return Value + +=back + +=cut + +sub check_conditional_preprocessor_statements { + my ($self) = @_; + my @cpp = grep(/^\#\s*(?:if|e\w+)/, @{ $self->{line} }); + if (@cpp) { + my $cpplevel; + for my $cpp (@cpp) { + if ($cpp =~ /^\#\s*if/) { + $cpplevel++; + } + elsif (!$cpplevel) { + $self->Warn("Warning: #else/elif/endif without #if in this function"); + print STDERR " (precede it with a blank line if the matching #if is outside the function)\n" + if $self->{XSStack}->[-1]{type} eq 'if'; + return; + } + elsif ($cpp =~ /^\#\s*endif/) { + $cpplevel--; + } + } + $self->Warn("Warning: #if without #endif in this function") if $cpplevel; + } +} + +=head2 C + +=over 4 + +=item * Purpose + +Escapes a given code source name (typically a file name but can also +be a command that was read from) so that double-quotes and backslashes are escaped. + +=item * Arguments + +A string. + +=item * Return Value + +A string with escapes for double-quotes and backslashes. + +=back + +=cut + +sub escape_file_for_line_directive { + my $string = shift; + $string =~ s/\\/\\\\/g; + $string =~ s/"/\\"/g; + return $string; +} + +=head2 C + +=over 4 + +=item * Purpose + +Do error reporting for missing typemaps. + +=item * Arguments + +The C object. + +An C object. + +The string that represents the C type that was not found in the typemap. + +Optionally, the string C or C to choose +whether the error is immediately fatal or not. Default: C + +=item * Return Value + +Returns nothing. Depending on the arguments, this +may call C or C, the former of which is +fatal. + +=back + +=cut + +sub report_typemap_failure { + my ($self, $tm, $ctype, $error_method) = @_; + $error_method ||= 'blurt'; + + my @avail_ctypes = $tm->list_mapped_ctypes; + + my $err = "Could not find a typemap for C type '$ctype'.\n" + . "The following C types are mapped by the current typemap:\n'" + . join("', '", @avail_ctypes) . "'\n"; + + $self->$error_method($err); + return(); +} + +1; + +# vim: ts=2 sw=2 et: diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps.pm new file mode 100644 index 00000000000..2bc9c8036f1 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps.pm @@ -0,0 +1,1031 @@ +package ExtUtils::Typemaps; +use 5.006001; +use strict; +use warnings; +our $VERSION = '3.16'; +#use Carp qw(croak); + +require ExtUtils::ParseXS; +require ExtUtils::ParseXS::Constants; +require ExtUtils::Typemaps::InputMap; +require ExtUtils::Typemaps::OutputMap; +require ExtUtils::Typemaps::Type; + +=head1 NAME + +ExtUtils::Typemaps - Read/Write/Modify Perl/XS typemap files + +=head1 SYNOPSIS + + # read/create file + my $typemap = ExtUtils::Typemaps->new(file => 'typemap'); + # alternatively create an in-memory typemap + # $typemap = ExtUtils::Typemaps->new(); + # alternatively create an in-memory typemap by parsing a string + # $typemap = ExtUtils::Typemaps->new(string => $sometypemap); + + # add a mapping + $typemap->add_typemap(ctype => 'NV', xstype => 'T_NV'); + $typemap->add_inputmap( + xstype => 'T_NV', code => '$var = ($type)SvNV($arg);' + ); + $typemap->add_outputmap( + xstype => 'T_NV', code => 'sv_setnv($arg, (NV)$var);' + ); + $typemap->add_string(string => $typemapstring); + # will be parsed and merged + + # remove a mapping (same for remove_typemap and remove_outputmap...) + $typemap->remove_inputmap(xstype => 'SomeType'); + + # save a typemap to a file + $typemap->write(file => 'anotherfile.map'); + + # merge the other typemap into this one + $typemap->merge(typemap => $another_typemap); + +=head1 DESCRIPTION + +This module can read, modify, create and write Perl XS typemap files. If you don't know +what a typemap is, please confer the L and L manuals. + +The module is not entirely round-trip safe: For example it currently simply strips all comments. +The order of entries in the maps is, however, preserved. + +We check for duplicate entries in the typemap, but do not check for missing +C entries for C or C entries since these might be hidden +in a different typemap. + +=head1 METHODS + +=cut + +=head2 new + +Returns a new typemap object. Takes an optional C parameter. +If set, the given file will be read. If the file doesn't exist, an empty typemap +is returned. + +Alternatively, if the C parameter is given, the supplied +string will be parsed instead of a file. + +=cut + +sub new { + my $class = shift; + my %args = @_; + + if (defined $args{file} and defined $args{string}) { + die("Cannot handle both 'file' and 'string' arguments to constructor"); + } + + my $self = bless { + file => undef, + %args, + typemap_section => [], + typemap_lookup => {}, + input_section => [], + input_lookup => {}, + output_section => [], + output_lookup => {}, + } => $class; + + $self->_init(); + + return $self; +} + +sub _init { + my $self = shift; + if (defined $self->{string}) { + $self->_parse(\($self->{string}), $self->{lineno_offset}, $self->{fake_filename}); + delete $self->{string}; + } + elsif (defined $self->{file} and -e $self->{file}) { + open my $fh, '<', $self->{file} + or die "Cannot open typemap file '" + . $self->{file} . "' for reading: $!"; + local $/ = undef; + my $string = <$fh>; + $self->_parse(\$string, $self->{lineno_offset}, $self->{file}); + } +} + +=head2 file + +Get/set the file that the typemap is written to when the +C method is called. + +=cut + +sub file { + $_[0]->{file} = $_[1] if @_ > 1; + $_[0]->{file} +} + +=head2 add_typemap + +Add a C entry to the typemap. + +Required named arguments: The C (e.g. C 'double'>) +and the C (e.g. C 'T_NV'>). + +Optional named arguments: C 1> forces removal/replacement of +existing C entries of the same C. C 1> +triggers a I<"first come first serve"> logic by which new entries that conflict +with existing entries are silently ignored. + +As an alternative to the named parameters usage, you may pass in +an C object as first argument, a copy of which will be +added to the typemap. In that case, only the C or C named parameters +may be used after the object. Example: + + $map->add_typemap($type_obj, replace => 1); + +=cut + +sub add_typemap { + my $self = shift; + my $type; + my %args; + + if ((@_ % 2) == 1) { + my $orig = shift; + $type = $orig->new(); + %args = @_; + } + else { + %args = @_; + my $ctype = $args{ctype}; + die("Need ctype argument") if not defined $ctype; + my $xstype = $args{xstype}; + die("Need xstype argument") if not defined $xstype; + + $type = ExtUtils::Typemaps::Type->new( + xstype => $xstype, + 'prototype' => $args{'prototype'}, + ctype => $ctype, + ); + } + + if ($args{skip} and $args{replace}) { + die("Cannot use both 'skip' and 'replace'"); + } + + if ($args{replace}) { + $self->remove_typemap(ctype => $type->ctype); + } + elsif ($args{skip}) { + return() if exists $self->{typemap_lookup}{$type->ctype}; + } + else { + $self->validate(typemap_xstype => $type->xstype, ctype => $type->ctype); + } + + # store + push @{$self->{typemap_section}}, $type; + # remember type for lookup, too. + $self->{typemap_lookup}{$type->tidy_ctype} = $#{$self->{typemap_section}}; + + return 1; +} + +=head2 add_inputmap + +Add an C entry to the typemap. + +Required named arguments: +The C (e.g. C 'T_NV'>) +and the C to associate with it for input. + +Optional named arguments: C 1> forces removal/replacement of +existing C entries of the same C. C 1> +triggers a I<"first come first serve"> logic by which new entries that conflict +with existing entries are silently ignored. + +As an alternative to the named parameters usage, you may pass in +an C object as first argument, a copy of which will be +added to the typemap. In that case, only the C or C named parameters +may be used after the object. Example: + + $map->add_inputmap($type_obj, replace => 1); + +=cut + +sub add_inputmap { + my $self = shift; + my $input; + my %args; + + if ((@_ % 2) == 1) { + my $orig = shift; + $input = $orig->new(); + %args = @_; + } + else { + %args = @_; + my $xstype = $args{xstype}; + die("Need xstype argument") if not defined $xstype; + my $code = $args{code}; + die("Need code argument") if not defined $code; + + $input = ExtUtils::Typemaps::InputMap->new( + xstype => $xstype, + code => $code, + ); + } + + if ($args{skip} and $args{replace}) { + die("Cannot use both 'skip' and 'replace'"); + } + + if ($args{replace}) { + $self->remove_inputmap(xstype => $input->xstype); + } + elsif ($args{skip}) { + return() if exists $self->{input_lookup}{$input->xstype}; + } + else { + $self->validate(inputmap_xstype => $input->xstype); + } + + # store + push @{$self->{input_section}}, $input; + # remember type for lookup, too. + $self->{input_lookup}{$input->xstype} = $#{$self->{input_section}}; + + return 1; +} + +=head2 add_outputmap + +Add an C entry to the typemap. +Works exactly the same as C. + +=cut + +sub add_outputmap { + my $self = shift; + my $output; + my %args; + + if ((@_ % 2) == 1) { + my $orig = shift; + $output = $orig->new(); + %args = @_; + } + else { + %args = @_; + my $xstype = $args{xstype}; + die("Need xstype argument") if not defined $xstype; + my $code = $args{code}; + die("Need code argument") if not defined $code; + + $output = ExtUtils::Typemaps::OutputMap->new( + xstype => $xstype, + code => $code, + ); + } + + if ($args{skip} and $args{replace}) { + die("Cannot use both 'skip' and 'replace'"); + } + + if ($args{replace}) { + $self->remove_outputmap(xstype => $output->xstype); + } + elsif ($args{skip}) { + return() if exists $self->{output_lookup}{$output->xstype}; + } + else { + $self->validate(outputmap_xstype => $output->xstype); + } + + # store + push @{$self->{output_section}}, $output; + # remember type for lookup, too. + $self->{output_lookup}{$output->xstype} = $#{$self->{output_section}}; + + return 1; +} + +=head2 add_string + +Parses a string as a typemap and merge it into the typemap object. + +Required named argument: C to specify the string to parse. + +=cut + +sub add_string { + my $self = shift; + my %args = @_; + die("Need 'string' argument") if not defined $args{string}; + + # no, this is not elegant. + my $other = ExtUtils::Typemaps->new(string => $args{string}); + $self->merge(typemap => $other); +} + +=head2 remove_typemap + +Removes a C entry from the typemap. + +Required named argument: C to specify the entry to remove from the typemap. + +Alternatively, you may pass a single C object. + +=cut + +sub remove_typemap { + my $self = shift; + my $ctype; + if (@_ > 1) { + my %args = @_; + $ctype = $args{ctype}; + die("Need ctype argument") if not defined $ctype; + $ctype = _tidy_type($ctype); + } + else { + $ctype = $_[0]->tidy_ctype; + } + + return $self->_remove($ctype, $self->{typemap_section}, $self->{typemap_lookup}); +} + +=head2 remove_inputmap + +Removes an C entry from the typemap. + +Required named argument: C to specify the entry to remove from the typemap. + +Alternatively, you may pass a single C object. + +=cut + +sub remove_inputmap { + my $self = shift; + my $xstype; + if (@_ > 1) { + my %args = @_; + $xstype = $args{xstype}; + die("Need xstype argument") if not defined $xstype; + } + else { + $xstype = $_[0]->xstype; + } + + return $self->_remove($xstype, $self->{input_section}, $self->{input_lookup}); +} + +=head2 remove_inputmap + +Removes an C entry from the typemap. + +Required named argument: C to specify the entry to remove from the typemap. + +Alternatively, you may pass a single C object. + +=cut + +sub remove_outputmap { + my $self = shift; + my $xstype; + if (@_ > 1) { + my %args = @_; + $xstype = $args{xstype}; + die("Need xstype argument") if not defined $xstype; + } + else { + $xstype = $_[0]->xstype; + } + + return $self->_remove($xstype, $self->{output_section}, $self->{output_lookup}); +} + +sub _remove { + my $self = shift; + my $rm = shift; + my $array = shift; + my $lookup = shift; + + # Just fetch the index of the item from the lookup table + my $index = $lookup->{$rm}; + return() if not defined $index; + + # Nuke the item from storage + splice(@$array, $index, 1); + + # Decrement the storage position of all items thereafter + foreach my $key (keys %$lookup) { + if ($lookup->{$key} > $index) { + $lookup->{$key}--; + } + } + return(); +} + +=head2 get_typemap + +Fetches an entry of the TYPEMAP section of the typemap. + +Mandatory named arguments: The C of the entry. + +Returns the C +object for the entry if found. + +=cut + +sub get_typemap { + my $self = shift; + die("Need named parameters, got uneven number") if @_ % 2; + + my %args = @_; + my $ctype = $args{ctype}; + die("Need ctype argument") if not defined $ctype; + $ctype = _tidy_type($ctype); + + my $index = $self->{typemap_lookup}{$ctype}; + return() if not defined $index; + return $self->{typemap_section}[$index]; +} + +=head2 get_inputmap + +Fetches an entry of the INPUT section of the +typemap. + +Mandatory named arguments: The C of the +entry or the C of the typemap that can be used to find +the C. To wit, the following pieces of code +are equivalent: + + my $type = $typemap->get_typemap(ctype => $ctype) + my $input_map = $typemap->get_inputmap(xstype => $type->xstype); + + my $input_map = $typemap->get_inputmap(ctype => $ctype); + +Returns the C +object for the entry if found. + +=cut + +sub get_inputmap { + my $self = shift; + die("Need named parameters, got uneven number") if @_ % 2; + + my %args = @_; + my $xstype = $args{xstype}; + my $ctype = $args{ctype}; + die("Need xstype or ctype argument") + if not defined $xstype + and not defined $ctype; + die("Need xstype OR ctype arguments, not both") + if defined $xstype and defined $ctype; + + if (defined $ctype) { + my $tm = $self->get_typemap(ctype => $ctype); + $xstype = $tm && $tm->xstype; + return() if not defined $xstype; + } + + my $index = $self->{input_lookup}{$xstype}; + return() if not defined $index; + return $self->{input_section}[$index]; +} + +=head2 get_outputmap + +Fetches an entry of the OUTPUT section of the +typemap. + +Mandatory named arguments: The C of the +entry or the C of the typemap that can be used to +resolve the C. (See above for an example.) + +Returns the C +object for the entry if found. + +=cut + +sub get_outputmap { + my $self = shift; + die("Need named parameters, got uneven number") if @_ % 2; + + my %args = @_; + my $xstype = $args{xstype}; + my $ctype = $args{ctype}; + die("Need xstype or ctype argument") + if not defined $xstype + and not defined $ctype; + die("Need xstype OR ctype arguments, not both") + if defined $xstype and defined $ctype; + + if (defined $ctype) { + my $tm = $self->get_typemap(ctype => $ctype); + $xstype = $tm && $tm->xstype; + return() if not defined $xstype; + } + + my $index = $self->{output_lookup}{$xstype}; + return() if not defined $index; + return $self->{output_section}[$index]; +} + +=head2 write + +Write the typemap to a file. Optionally takes a C argument. If given, the +typemap will be written to the specified file. If not, the typemap is written +to the currently stored file name (see C<-Efile> above, this defaults to the file +it was read from if any). + +=cut + +sub write { + my $self = shift; + my %args = @_; + my $file = defined $args{file} ? $args{file} : $self->file(); + die("write() needs a file argument (or set the file name of the typemap using the 'file' method)") + if not defined $file; + + open my $fh, '>', $file + or die "Cannot open typemap file '$file' for writing: $!"; + print $fh $self->as_string(); + close $fh; +} + +=head2 as_string + +Generates and returns the string form of the typemap. + +=cut + +sub as_string { + my $self = shift; + my $typemap = $self->{typemap_section}; + my @code; + push @code, "TYPEMAP\n"; + foreach my $entry (@$typemap) { + # type kind proto + # /^(.*?\S)\s+(\S+)\s*($ExtUtils::ParseXS::Constants::PrototypeRegexp*)$/o + push @code, $entry->ctype . "\t" . $entry->xstype + . ($entry->proto ne '' ? "\t".$entry->proto : '') . "\n"; + } + + my $input = $self->{input_section}; + if (@$input) { + push @code, "\nINPUT\n"; + foreach my $entry (@$input) { + push @code, $entry->xstype, "\n", $entry->code, "\n"; + } + } + + my $output = $self->{output_section}; + if (@$output) { + push @code, "\nOUTPUT\n"; + foreach my $entry (@$output) { + push @code, $entry->xstype, "\n", $entry->code, "\n"; + } + } + return join '', @code; +} + +=head2 as_embedded_typemap + +Generates and returns the string form of the typemap with the +appropriate prefix around it for verbatim inclusion into an +XS file as an embedded typemap. This will return a string like + + TYPEMAP: <as_string; + + my @ident_cand = qw(END_TYPEMAP END_OF_TYPEMAP END); + my $icand = 0; + my $cand_suffix = ""; + while ($string =~ /^\Q$ident_cand[$icand]$cand_suffix\E\s*$/m) { + $icand++; + if ($icand == @ident_cand) { + $icand = 0; + ++$cand_suffix; + } + } + + my $marker = "$ident_cand[$icand]$cand_suffix"; + return "TYPEMAP: <<$marker;\n$string\n$marker\n"; +} + +=head2 merge + +Merges a given typemap into the object. Note that a failed merge +operation leaves the object in an inconsistent state so clone it if necessary. + +Mandatory named arguments: Either C $another_typemap_obj> +or C $path_to_typemap_file> but not both. + +Optional arguments: C 1> to force replacement +of existing typemap entries without warning or C 1> +to skip entries that exist already in the typemap. + +=cut + +sub merge { + my $self = shift; + my %args = @_; + + if (exists $args{typemap} and exists $args{file}) { + die("Need {file} OR {typemap} argument. Not both!"); + } + elsif (not exists $args{typemap} and not exists $args{file}) { + die("Need {file} or {typemap} argument!"); + } + + my @params; + push @params, 'replace' => $args{replace} if exists $args{replace}; + push @params, 'skip' => $args{skip} if exists $args{skip}; + + my $typemap = $args{typemap}; + if (not defined $typemap) { + $typemap = ref($self)->new(file => $args{file}, @params); + } + + # FIXME breaking encapsulation. Add accessor code. + foreach my $entry (@{$typemap->{typemap_section}}) { + $self->add_typemap( $entry, @params ); + } + + foreach my $entry (@{$typemap->{input_section}}) { + $self->add_inputmap( $entry, @params ); + } + + foreach my $entry (@{$typemap->{output_section}}) { + $self->add_outputmap( $entry, @params ); + } + + return 1; +} + +=head2 is_empty + +Returns a bool indicating whether this typemap is entirely empty. + +=cut + +sub is_empty { + my $self = shift; + + return @{ $self->{typemap_section} } == 0 + && @{ $self->{input_section} } == 0 + && @{ $self->{output_section} } == 0; +} + +=head2 list_mapped_ctypes + +Returns a list of the C types that are mappable by +this typemap object. + +=cut + +sub list_mapped_ctypes { + my $self = shift; + return sort keys %{ $self->{typemap_lookup} }; +} + +=head2 _get_typemap_hash + +Returns a hash mapping the C types to the XS types: + + { + 'char **' => 'T_PACKEDARRAY', + 'bool_t' => 'T_IV', + 'AV *' => 'T_AVREF', + 'InputStream' => 'T_IN', + 'double' => 'T_DOUBLE', + # ... + } + +This is documented because it is used by C, +but it's not intended for general consumption. May be removed +at any time. + +=cut + +sub _get_typemap_hash { + my $self = shift; + my $lookup = $self->{typemap_lookup}; + my $storage = $self->{typemap_section}; + + my %rv; + foreach my $ctype (keys %$lookup) { + $rv{$ctype} = $storage->[ $lookup->{$ctype} ]->xstype; + } + + return \%rv; +} + +=head2 _get_inputmap_hash + +Returns a hash mapping the XS types (identifiers) to the +corresponding INPUT code: + + { + 'T_CALLBACK' => ' $var = make_perl_cb_$type($arg) + ', + 'T_OUT' => ' $var = IoOFP(sv_2io($arg)) + ', + 'T_REF_IV_PTR' => ' if (sv_isa($arg, \\"${ntype}\\")) { + # ... + } + +This is documented because it is used by C, +but it's not intended for general consumption. May be removed +at any time. + +=cut + +sub _get_inputmap_hash { + my $self = shift; + my $lookup = $self->{input_lookup}; + my $storage = $self->{input_section}; + + my %rv; + foreach my $xstype (keys %$lookup) { + $rv{$xstype} = $storage->[ $lookup->{$xstype} ]->code; + + # Squash trailing whitespace to one line break + # This isn't strictly necessary, but makes the output more similar + # to the original ExtUtils::ParseXS. + $rv{$xstype} =~ s/\s*\z/\n/; + } + + return \%rv; +} + + +=head2 _get_outputmap_hash + +Returns a hash mapping the XS types (identifiers) to the +corresponding OUTPUT code: + + { + 'T_CALLBACK' => ' sv_setpvn($arg, $var.context.value().chp(), + $var.context.value().size()); + ', + 'T_OUT' => ' { + GV *gv = newGVgen("$Package"); + if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) ) + sv_setsv( + $arg, + sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)) + ); + else + $arg = &PL_sv_undef; + } + ', + # ... + } + +This is documented because it is used by C, +but it's not intended for general consumption. May be removed +at any time. + +=cut + +sub _get_outputmap_hash { + my $self = shift; + my $lookup = $self->{output_lookup}; + my $storage = $self->{output_section}; + + my %rv; + foreach my $xstype (keys %$lookup) { + $rv{$xstype} = $storage->[ $lookup->{$xstype} ]->code; + + # Squash trailing whitespace to one line break + # This isn't strictly necessary, but makes the output more similar + # to the original ExtUtils::ParseXS. + $rv{$xstype} =~ s/\s*\z/\n/; + } + + return \%rv; +} + +=head2 _get_prototype_hash + +Returns a hash mapping the C types of the typemap to their +corresponding prototypes. + + { + 'char **' => '$', + 'bool_t' => '$', + 'AV *' => '$', + 'InputStream' => '$', + 'double' => '$', + # ... + } + +This is documented because it is used by C, +but it's not intended for general consumption. May be removed +at any time. + +=cut + +sub _get_prototype_hash { + my $self = shift; + my $lookup = $self->{typemap_lookup}; + my $storage = $self->{typemap_section}; + + my %rv; + foreach my $ctype (keys %$lookup) { + $rv{$ctype} = $storage->[ $lookup->{$ctype} ]->proto || '$'; + } + + return \%rv; +} + + + +# make sure that the provided types wouldn't collide with what's +# in the object already. +sub validate { + my $self = shift; + my %args = @_; + + if ( exists $args{ctype} + and exists $self->{typemap_lookup}{_tidy_type($args{ctype})} ) + { + die("Multiple definition of ctype '$args{ctype}' in TYPEMAP section"); + } + + if ( exists $args{inputmap_xstype} + and exists $self->{input_lookup}{$args{inputmap_xstype}} ) + { + die("Multiple definition of xstype '$args{inputmap_xstype}' in INPUTMAP section"); + } + + if ( exists $args{outputmap_xstype} + and exists $self->{output_lookup}{$args{outputmap_xstype}} ) + { + die("Multiple definition of xstype '$args{outputmap_xstype}' in OUTPUTMAP section"); + } + + return 1; +} + +sub _parse { + my $self = shift; + my $stringref = shift; + my $lineno_offset = shift; + $lineno_offset = 0 if not defined $lineno_offset; + my $filename = shift; + $filename = '' if not defined $filename; + + my $replace = $self->{replace}; + my $skip = $self->{skip}; + die "Can only replace OR skip" if $replace and $skip; + my @add_params; + push @add_params, replace => 1 if $replace; + push @add_params, skip => 1 if $skip; + + # TODO comments should round-trip, currently ignoring + # TODO order of sections, multiple sections of same type + # Heavily influenced by ExtUtils::ParseXS + my $section = 'typemap'; + my $lineno = $lineno_offset; + my $junk = ""; + my $current = \$junk; + my @input_expr; + my @output_expr; + while ($$stringref =~ /^(.*)$/gcm) { + local $_ = $1; + ++$lineno; + chomp; + next if /^\s*#/; + if (/^INPUT\s*$/) { + $section = 'input'; + $current = \$junk; + next; + } + elsif (/^OUTPUT\s*$/) { + $section = 'output'; + $current = \$junk; + next; + } + elsif (/^TYPEMAP\s*$/) { + $section = 'typemap'; + $current = \$junk; + next; + } + + if ($section eq 'typemap') { + my $line = $_; + s/^\s+//; s/\s+$//; + next if $_ eq '' or /^#/; + my($type, $kind, $proto) = /^(.*?\S)\s+(\S+)\s*($ExtUtils::ParseXS::Constants::PrototypeRegexp*)$/o + or warn("Warning: File '$filename' Line $lineno '$line' TYPEMAP entry needs 2 or 3 columns\n"), + next; + # prototype defaults to '$' + $proto = '$' unless $proto; + warn("Warning: File '$filename' Line $lineno '$line' Invalid prototype '$proto'\n") + unless _valid_proto_string($proto); + $self->add_typemap( + ExtUtils::Typemaps::Type->new( + xstype => $kind, proto => $proto, ctype => $type + ), + @add_params + ); + } elsif (/^\s/) { + s/\s+$//; + $$current .= $$current eq '' ? $_ : "\n".$_; + } elsif ($_ eq '') { + next; + } elsif ($section eq 'input') { + s/\s+$//; + push @input_expr, {xstype => $_, code => ''}; + $current = \$input_expr[-1]{code}; + } else { # output section + s/\s+$//; + push @output_expr, {xstype => $_, code => ''}; + $current = \$output_expr[-1]{code}; + } + + } # end while lines + + foreach my $inexpr (@input_expr) { + $self->add_inputmap( ExtUtils::Typemaps::InputMap->new(%$inexpr), @add_params ); + } + foreach my $outexpr (@output_expr) { + $self->add_outputmap( ExtUtils::Typemaps::OutputMap->new(%$outexpr), @add_params ); + } + + return 1; +} + +# taken from ExtUtils::ParseXS +sub _tidy_type { + local $_ = shift; + + # rationalise any '*' by joining them into bunches and removing whitespace + s#\s*(\*+)\s*#$1#g; + s#(\*+)# $1 #g ; + + # trim leading & trailing whitespace + s/^\s+//; s/\s+$//; + + # change multiple whitespace into a single space + s/\s+/ /g; + + $_; +} + + +# taken from ExtUtils::ParseXS +sub _valid_proto_string { + my $string = shift; + if ($string =~ /^$ExtUtils::ParseXS::Constants::PrototypeRegexp+$/o) { + return $string; + } + + return 0 ; +} + +# taken from ExtUtils::ParseXS (C_string) +sub _escape_backslashes { + my $string = shift; + $string =~ s[\\][\\\\]g; + $string; +} + +=head1 CAVEATS + +Inherits some evil code from C. + +=head1 SEE ALSO + +The parser is heavily inspired from the one in L. + +For details on typemaps: L, L. + +=head1 AUTHOR + +Steffen Mueller C<> + +=head1 COPYRIGHT & LICENSE + +Copyright 2009, 2010, 2011, 2012 Steffen Mueller + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + +1; + diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Cmd.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Cmd.pm new file mode 100644 index 00000000000..671110fb97a --- /dev/null +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Cmd.pm @@ -0,0 +1,168 @@ +package ExtUtils::Typemaps::Cmd; +use 5.006001; +use strict; +use warnings; +our $VERSION = '3.16'; + +use ExtUtils::Typemaps; + +require Exporter; + +our @ISA = qw(Exporter); +our @EXPORT = qw(embeddable_typemap); +our %EXPORT_TAGS = (all => \@EXPORT); + +sub embeddable_typemap { + my @tms = @_; + + # Get typemap objects + my @tm_objs = map [$_, _intuit_typemap_source($_)], @tms; + + # merge or short-circuit + my $final_tm; + if (@tm_objs == 1) { + # just one, merge would be pointless + $final_tm = shift(@tm_objs)->[1]; + } + else { + # multiple, need merge + $final_tm = ExtUtils::Typemaps->new; + foreach my $other_tm (@tm_objs) { + my ($tm_ident, $tm_obj) = @$other_tm; + eval { + $final_tm->merge(typemap => $tm_obj); + 1 + } or do { + my $err = $@ || 'Zombie error'; + die "Failed to merge typ"; + } + } + } + + # stringify for embedding + return $final_tm->as_embedded_typemap(); +} + +sub _load_module { + my $name = shift; + return eval "require $name; 1"; +} + +SCOPE: { + my %sources = ( + module => sub { + my $ident = shift; + my $tm; + if (/::/) { # looks like FQ module name, try that first + foreach my $module ($ident, "ExtUtils::Typemaps::$ident") { + if (_load_module($module)) { + eval { $tm = $module->new } + and return $tm; + } + } + } + else { + foreach my $module ("ExtUtils::Typemaps::$ident", "$ident") { + if (_load_module($module)) { + eval { $tm = $module->new } + and return $tm; + } + } + } + return(); + }, + file => sub { + my $ident = shift; + return unless -e $ident and -r _; + return ExtUtils::Typemaps->new(file => $ident); + }, + ); + # Try to find typemap either from module or file + sub _intuit_typemap_source { + my $identifier = shift; + + my @locate_attempts; + if ($identifier =~ /::/ || $identifier !~ /[^\w_]/) { + @locate_attempts = qw(module file); + } + else { + @locate_attempts = qw(file module); + } + + foreach my $source (@locate_attempts) { + my $tm = $sources{$source}->($identifier); + return $tm if defined $tm; + } + + die "Unable to find typemap for '$identifier': " + . "Tried to load both as file or module and failed.\n"; + } +} # end SCOPE + +=head1 NAME + +ExtUtils::Typemaps::Cmd - Quick commands for handling typemaps + +=head1 SYNOPSIS + +From XS: + + INCLUDE_COMMAND: $^X -MExtUtils::Typemaps::Cmd \ + -e "print embeddable_typemap(q{Excommunicated})" + +Loads C, instantiates an object, +and dumps it as an embeddable typemap for use directly in your XS file. + +=head1 DESCRIPTION + +This is a helper module for L for quick +one-liners, specifically for inclusion of shared typemaps +that live on CPAN into an XS file (see SYNOPSIS). + +For this reason, the following functions are exported by default: + +=head1 EXPORTED FUNCTIONS + +=head2 embeddable_typemap + +Given a list of identifiers, C +tries to load typemaps from a file of the given name(s), +or from a module that is an C subclass. + +Returns a string representation of the merged typemaps that can +be included verbatim into XS. Example: + + print embeddable_typemap( + "Excommunicated", "ExtUtils::Typemaps::Basic", "./typemap" + ); + +This will try to load a module C +and use it as an C subclass. If that fails, it'll +try loading C as a module, if that fails, it'll try to +read a file called F. It'll work similarly for the +second argument, but the third will be loaded as a file first. + +After loading all typemap files or modules, it will merge them in the +specified order and dump the result as an embeddable typemap. + +=head1 SEE ALSO + +L + +L + +=head1 AUTHOR + +Steffen Mueller C<> + +=head1 COPYRIGHT & LICENSE + +Copyright 2012 Steffen Mueller + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + +1; + diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/InputMap.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/InputMap.pm new file mode 100644 index 00000000000..9e7053f2290 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/InputMap.pm @@ -0,0 +1,116 @@ +package ExtUtils::Typemaps::InputMap; +use 5.006001; +use strict; +use warnings; +our $VERSION = '3.16'; + +=head1 NAME + +ExtUtils::Typemaps::InputMap - Entry in the INPUT section of a typemap + +=head1 SYNOPSIS + + use ExtUtils::Typemaps; + ... + my $input = $typemap->get_input_map('T_NV'); + my $code = $input->code(); + $input->code("..."); + +=head1 DESCRIPTION + +Refer to L for details. + +=head1 METHODS + +=cut + +=head2 new + +Requires C and C parameters. + +=cut + +sub new { + my $prot = shift; + my $class = ref($prot)||$prot; + my %args = @_; + + if (!ref($prot)) { + if (not defined $args{xstype} or not defined $args{code}) { + die("Need xstype and code parameters"); + } + } + + my $self = bless( + (ref($prot) ? {%$prot} : {}) + => $class + ); + + $self->{xstype} = $args{xstype} if defined $args{xstype}; + $self->{code} = $args{code} if defined $args{code}; + $self->{code} =~ s/^(?=\S)/\t/mg; + + return $self; +} + +=head2 code + +Returns or sets the INPUT mapping code for this entry. + +=cut + +sub code { + $_[0]->{code} = $_[1] if @_ > 1; + return $_[0]->{code}; +} + +=head2 xstype + +Returns the name of the XS type of the INPUT map. + +=cut + +sub xstype { + return $_[0]->{xstype}; +} + +=head2 cleaned_code + +Returns a cleaned-up copy of the code to which certain transformations +have been applied to make it more ANSI compliant. + +=cut + +sub cleaned_code { + my $self = shift; + my $code = $self->code; + + $code =~ s/(?:;+\s*|;*\s+)\z//s; + + # Move C pre-processor instructions to column 1 to be strictly ANSI + # conformant. Some pre-processors are fussy about this. + $code =~ s/^\s+#/#/mg; + $code =~ s/\s*\z/\n/; + + return $code; +} + +=head1 SEE ALSO + +L + +=head1 AUTHOR + +Steffen Mueller C<> + +=head1 COPYRIGHT & LICENSE + +Copyright 2009, 2010, 2011, 2012 Steffen Mueller + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + +1; + diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/OutputMap.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/OutputMap.pm new file mode 100644 index 00000000000..95cbbccf5c3 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/OutputMap.pm @@ -0,0 +1,195 @@ +package ExtUtils::Typemaps::OutputMap; +use 5.006001; +use strict; +use warnings; +our $VERSION = '3.16'; + +=head1 NAME + +ExtUtils::Typemaps::OutputMap - Entry in the OUTPUT section of a typemap + +=head1 SYNOPSIS + + use ExtUtils::Typemaps; + ... + my $output = $typemap->get_output_map('T_NV'); + my $code = $output->code(); + $output->code("..."); + +=head1 DESCRIPTION + +Refer to L for details. + +=head1 METHODS + +=cut + +=head2 new + +Requires C and C parameters. + +=cut + +sub new { + my $prot = shift; + my $class = ref($prot)||$prot; + my %args = @_; + + if (!ref($prot)) { + if (not defined $args{xstype} or not defined $args{code}) { + die("Need xstype and code parameters"); + } + } + + my $self = bless( + (ref($prot) ? {%$prot} : {}) + => $class + ); + + $self->{xstype} = $args{xstype} if defined $args{xstype}; + $self->{code} = $args{code} if defined $args{code}; + $self->{code} =~ s/^(?=\S)/\t/mg; + + return $self; +} + +=head2 code + +Returns or sets the OUTPUT mapping code for this entry. + +=cut + +sub code { + $_[0]->{code} = $_[1] if @_ > 1; + return $_[0]->{code}; +} + +=head2 xstype + +Returns the name of the XS type of the OUTPUT map. + +=cut + +sub xstype { + return $_[0]->{xstype}; +} + +=head2 cleaned_code + +Returns a cleaned-up copy of the code to which certain transformations +have been applied to make it more ANSI compliant. + +=cut + +sub cleaned_code { + my $self = shift; + my $code = $self->code; + + # Move C pre-processor instructions to column 1 to be strictly ANSI + # conformant. Some pre-processors are fussy about this. + $code =~ s/^\s+#/#/mg; + $code =~ s/\s*\z/\n/; + + return $code; +} + +=head2 targetable + +This is an obscure optimization that used to live in C +directly. + +In a nutshell, this will check whether the output code +involves calling C, C, C, C or C +to set the special C<$arg> placeholder to a new value +B. If that is the case, the code is +eligible for using the C-related macros to optimize this. +Thus the name of the method: C. + +If the optimization can not be applied, this returns undef. +If it can be applied, this method returns a hash reference containing +the following information: + + type: Any of the characters i, u, n, p + with_size: Bool indicating whether this is the sv_setpvn variant + what: The code that actually evaluates to the output scalar + what_size: If "with_size", this has the string length (as code, + not constant) + +=cut + +sub targetable { + my $self = shift; + return $self->{targetable} if exists $self->{targetable}; + + our $bal; # ()-balanced + $bal = qr[ + (?: + (?>[^()]+) + | + \( (??{ $bal }) \) + )* + ]x; + + # matches variations on (SV*) + my $sv_cast = qr[ + (?: + \( \s* SV \s* \* \s* \) \s* + )? + ]x; + + my $size = qr[ # Third arg (to setpvn) + , \s* (??{ $bal }) + ]x; + + my $code = $self->code; + + # We can still bootstrap compile 're', because in code re.pm is + # available to miniperl, and does not attempt to load the XS code. + use re 'eval'; + + my ($type, $with_size, $arg, $sarg) = + ($code =~ + m[^ + \s+ + sv_set([iunp])v(n)? # Type, is_setpvn + \s* + \( \s* + $sv_cast \$arg \s* , \s* + ( (??{ $bal }) ) # Set from + ( (??{ $size }) )? # Possible sizeof set-from + \) \s* ; \s* $ + ]x + ); + + my $rv = undef; + if ($type) { + $rv = { + type => $type, + with_size => $with_size, + what => $arg, + what_size => $sarg, + }; + } + $self->{targetable} = $rv; + return $rv; +} + +=head1 SEE ALSO + +L + +=head1 AUTHOR + +Steffen Mueller C<> + +=head1 COPYRIGHT & LICENSE + +Copyright 2009, 2010, 2011, 2012 Steffen Mueller + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + +1; + diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Type.pm b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Type.pm new file mode 100644 index 00000000000..b29e212d455 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/ExtUtils/Typemaps/Type.pm @@ -0,0 +1,121 @@ +package ExtUtils::Typemaps::Type; +use 5.006001; +use strict; +use warnings; +require ExtUtils::Typemaps; + +our $VERSION = '3.16'; + +=head1 NAME + +ExtUtils::Typemaps::Type - Entry in the TYPEMAP section of a typemap + +=head1 SYNOPSIS + + use ExtUtils::Typemaps; + ... + my $type = $typemap->get_type_map('char*'); + my $input = $typemap->get_input_map($type->xstype); + +=head1 DESCRIPTION + +Refer to L for details. +Object associates C with C, which is the index +into the in- and output mapping tables. + +=head1 METHODS + +=cut + +=head2 new + +Requires C and C parameters. + +Optionally takes C parameter. + +=cut + +sub new { + my $prot = shift; + my $class = ref($prot)||$prot; + my %args = @_; + + if (!ref($prot)) { + if (not defined $args{xstype} or not defined $args{ctype}) { + die("Need xstype and ctype parameters"); + } + } + + my $self = bless( + (ref($prot) ? {%$prot} : {proto => ''}) + => $class + ); + + $self->{xstype} = $args{xstype} if defined $args{xstype}; + $self->{ctype} = $args{ctype} if defined $args{ctype}; + $self->{tidy_ctype} = ExtUtils::Typemaps::_tidy_type($self->{ctype}); + $self->{proto} = $args{'prototype'} if defined $args{'prototype'}; + + return $self; +} + +=head2 proto + +Returns or sets the prototype. + +=cut + +sub proto { + $_[0]->{proto} = $_[1] if @_ > 1; + return $_[0]->{proto}; +} + +=head2 xstype + +Returns the name of the XS type that this C type is associated to. + +=cut + +sub xstype { + return $_[0]->{xstype}; +} + +=head2 ctype + +Returns the name of the C type as it was set on construction. + +=cut + +sub ctype { + return defined($_[0]->{ctype}) ? $_[0]->{ctype} : $_[0]->{tidy_ctype}; +} + +=head2 tidy_ctype + +Returns the canonicalized name of the C type. + +=cut + +sub tidy_ctype { + return $_[0]->{tidy_ctype}; +} + +=head1 SEE ALSO + +L + +=head1 AUTHOR + +Steffen Mueller C<> + +=head1 COPYRIGHT & LICENSE + +Copyright 2009, 2010, 2011, 2012 Steffen Mueller + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + +=cut + +1; + diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/testlib.pm b/Master/tlpkg/tlperl/lib/ExtUtils/testlib.pm index 73144109262..44832ee3531 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/testlib.pm +++ b/Master/tlpkg/tlperl/lib/ExtUtils/testlib.pm @@ -3,7 +3,7 @@ package ExtUtils::testlib; use strict; use warnings; -our $VERSION = 6.57_05; +our $VERSION = '6.63_02'; use Cwd; use File::Spec; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/typemap b/Master/tlpkg/tlperl/lib/ExtUtils/typemap index c88238a48da..607c6c8f586 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/typemap +++ b/Master/tlpkg/tlperl/lib/ExtUtils/typemap @@ -24,10 +24,16 @@ char ** T_PACKEDARRAY void * T_PTR Time_t * T_PV SV * T_SV + +# These are the backwards-compatibility AV*/HV* typemaps that +# do not decrement refcounts. Locally override with +# "AV* T_AVREF_REFCOUNT_FIXED", "HV* T_HVREF_REFCOUNT_FIXED", +# "CV* T_CVREF_REFCOUNT_FIXED", "SVREF T_SVREF_REFCOUNT_FIXED", +# to get the fixed versions. SVREF T_SVREF +CV * T_CVREF AV * T_AVREF HV * T_HVREF -CV * T_CVREF IV T_IV UV T_UV @@ -70,6 +76,19 @@ T_SVREF \"$var\"); } } STMT_END +T_SVREF_REFCOUNT_FIXED + STMT_START { + SV* const xsub_tmp_sv = $arg; + SvGETMAGIC(xsub_tmp_sv); + if (SvROK(xsub_tmp_sv)){ + $var = SvRV(xsub_tmp_sv); + } + else{ + Perl_croak(aTHX_ \"%s: %s is not a reference\", + ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, + \"$var\"); + } + } STMT_END T_AVREF STMT_START { SV* const xsub_tmp_sv = $arg; @@ -83,6 +102,19 @@ T_AVREF \"$var\"); } } STMT_END +T_AVREF_REFCOUNT_FIXED + STMT_START { + SV* const xsub_tmp_sv = $arg; + SvGETMAGIC(xsub_tmp_sv); + if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVAV){ + $var = (AV*)SvRV(xsub_tmp_sv); + } + else{ + Perl_croak(aTHX_ \"%s: %s is not an ARRAY reference\", + ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, + \"$var\"); + } + } STMT_END T_HVREF STMT_START { SV* const xsub_tmp_sv = $arg; @@ -96,6 +128,19 @@ T_HVREF \"$var\"); } } STMT_END +T_HVREF_REFCOUNT_FIXED + STMT_START { + SV* const xsub_tmp_sv = $arg; + SvGETMAGIC(xsub_tmp_sv); + if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVHV){ + $var = (HV*)SvRV(xsub_tmp_sv); + } + else{ + Perl_croak(aTHX_ \"%s: %s is not a HASH reference\", + ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, + \"$var\"); + } + } STMT_END T_CVREF STMT_START { SV* const xsub_tmp_sv = $arg; @@ -109,6 +154,19 @@ T_CVREF \"$var\"); } } STMT_END +T_CVREF_REFCOUNT_FIXED + STMT_START { + SV* const xsub_tmp_sv = $arg; + SvGETMAGIC(xsub_tmp_sv); + if (SvROK(xsub_tmp_sv) && SvTYPE(SvRV(xsub_tmp_sv)) == SVt_PVCV){ + $var = (CV*)SvRV(xsub_tmp_sv); + } + else{ + Perl_croak(aTHX_ \"%s: %s is not a CODE reference\", + ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, + \"$var\"); + } + } STMT_END T_SYSRET $var NOT IMPLEMENTED T_UV @@ -217,8 +275,6 @@ T_PACKED $var = XS_unpack_$ntype($arg) T_PACKEDARRAY $var = XS_unpack_$ntype($arg) -T_CALLBACK - $var = make_perl_cb_$type($arg) T_ARRAY U32 ix_$var = $argoff; $var = $ntype(items -= $argoff); @@ -242,12 +298,20 @@ T_SV $arg = $var; T_SVREF $arg = newRV((SV*)$var); +T_SVREF_REFCOUNT_FIXED + $arg = newRV_noinc((SV*)$var); T_AVREF $arg = newRV((SV*)$var); +T_AVREF_REFCOUNT_FIXED + $arg = newRV_noinc((SV*)$var); T_HVREF $arg = newRV((SV*)$var); +T_HVREF_REFCOUNT_FIXED + $arg = newRV_noinc((SV*)$var); T_CVREF $arg = newRV((SV*)$var); +T_CVREF_REFCOUNT_FIXED + $arg = newRV_noinc((SV*)$var); T_IV sv_setiv($arg, (IV)$var); T_UV @@ -311,11 +375,6 @@ T_PACKED XS_pack_$ntype($arg, $var); T_PACKEDARRAY XS_pack_$ntype($arg, $var, count_$ntype); -T_DATAUNIT - sv_setpvn($arg, $var.chp(), $var.size()); -T_CALLBACK - sv_setpvn($arg, $var.context.value().chp(), - $var.context.value().size()); T_ARRAY { U32 ix_$var; diff --git a/Master/tlpkg/tlperl/lib/ExtUtils/xsubpp b/Master/tlpkg/tlperl/lib/ExtUtils/xsubpp index e4e5b774d82..fa0cd50426a 100644 --- a/Master/tlpkg/tlperl/lib/ExtUtils/xsubpp +++ b/Master/tlpkg/tlperl/lib/ExtUtils/xsubpp @@ -1,7 +1,23 @@ -#!./miniperl +#!perl +use 5.006; +use strict; +eval { + require ExtUtils::ParseXS; + ExtUtils::ParseXS->import( + qw( + process_file + report_error_count + ) + ); + 1; +} +or do { + my $err = $@ || 'Zombie error'; + my $v = $ExtUtils::ParseXS::VERSION; + $v = '' if not defined $v; + die "Failed to load or import from ExtUtils::ParseXS (version $v). Please check that ExtUtils::ParseXS is installed correctly and that the newest version will be found in your \@INC path: $err"; +}; -require 5.002; -use ExtUtils::ParseXS qw(process_file); use Getopt::Long; my %args = (); @@ -38,7 +54,7 @@ if ($args{v}) { $args{filename} = shift @ARGV; process_file(%args); -exit( ExtUtils::ParseXS::errors() ? 1 : 0 ); +exit( report_error_count() ? 1 : 0 ); __END__ @@ -52,7 +68,8 @@ B [B<-v>] [B<-except>] [B<-s pattern>] [B<-prototypes>] [B<-noversionche =head1 DESCRIPTION -This compiler is typically run by the makefiles created by L. +This compiler is typically run by the makefiles created by L +or by L or other Perl module build tools. I will compile XS code into C code by embedding the constructs necessary to let C functions manipulate Perl values and creates the glue @@ -110,7 +127,7 @@ number. =item B<-nolinenumbers> -Prevents the inclusion of `#line' directives in the output. +Prevents the inclusion of '#line' directives in the output. =item B<-nooptimize> diff --git a/Master/tlpkg/tlperl/lib/Fatal.pm b/Master/tlpkg/tlperl/lib/Fatal.pm index 55b920ba5b1..aabdf781de0 100644 --- a/Master/tlpkg/tlperl/lib/Fatal.pm +++ b/Master/tlpkg/tlperl/lib/Fatal.pm @@ -40,7 +40,7 @@ use constant ERROR_58_HINTS => q{Non-subroutine %s hints for %s are not supporte use constant MIN_IPC_SYS_SIMPLE_VER => 0.12; # All the Fatal/autodie modules share the same version number. -our $VERSION = '2.1001'; +our $VERSION = '2.10'; our $Debug ||= 0; @@ -116,7 +116,6 @@ my %TAGS = ( ':2.08' => [qw(:default)], ':2.09' => [qw(:default)], ':2.10' => [qw(:default)], - ':2.1001' => [qw(:default)], ); # chmod was only introduced in 2.07 diff --git a/Master/tlpkg/tlperl/lib/File/Basename.pm b/Master/tlpkg/tlperl/lib/File/Basename.pm index 486eba1bbf6..ad98d24d194 100644 --- a/Master/tlpkg/tlperl/lib/File/Basename.pm +++ b/Master/tlpkg/tlperl/lib/File/Basename.pm @@ -54,7 +54,7 @@ our(@ISA, @EXPORT, $VERSION, $Fileparse_fstype, $Fileparse_igncase); require Exporter; @ISA = qw(Exporter); @EXPORT = qw(fileparse fileparse_set_fstype basename dirname); -$VERSION = "2.82"; +$VERSION = "2.84"; fileparse_set_fstype($^O); @@ -91,7 +91,7 @@ portion is removed and becomes the $suffix. # On Unix returns ("baz", "/foo/bar/", ".txt") fileparse("/foo/bar/baz.txt", qr/\.[^.]*/); -If type is non-Unix (see C) then the pattern +If type is non-Unix (see L) then the pattern matching for suffix removal is performed case-insensitively, since those systems are not case-sensitive when opening existing files. @@ -215,7 +215,7 @@ sub basename { my($path) = shift; # From BSD basename(1) - # The basename utility deletes any prefix ending with the last slash `/' + # The basename utility deletes any prefix ending with the last slash '/' # character present in string (after first stripping trailing slashes) _strip_trailing_sep($path); diff --git a/Master/tlpkg/tlperl/lib/File/Copy.pm b/Master/tlpkg/tlperl/lib/File/Copy.pm index 1cf084bb916..cb246d645fb 100644 --- a/Master/tlpkg/tlperl/lib/File/Copy.pm +++ b/Master/tlpkg/tlperl/lib/File/Copy.pm @@ -9,7 +9,7 @@ package File::Copy; use 5.006; use strict; -use warnings; +use warnings; no warnings 'newline'; use File::Spec; use Config; # During perl build, we need File::Copy but Scalar::Util might not be built yet @@ -22,7 +22,7 @@ sub syscopy; sub cp; sub mv; -$VERSION = '2.21'; +$VERSION = '2.23'; require Exporter; @ISA = qw(Exporter); diff --git a/Master/tlpkg/tlperl/lib/File/DosGlob.pm b/Master/tlpkg/tlperl/lib/File/DosGlob.pm index 90434fd467d..7e57175ca3f 100644 --- a/Master/tlpkg/tlperl/lib/File/DosGlob.pm +++ b/Master/tlpkg/tlperl/lib/File/DosGlob.pm @@ -9,7 +9,7 @@ package File::DosGlob; -our $VERSION = '1.04'; +our $VERSION = '1.06'; use strict; use warnings; @@ -106,7 +106,6 @@ sub doglob { # # context (keyed by second cxix arg provided by core) -my %iter; my %entries; sub glob { @@ -116,20 +115,25 @@ sub glob { # glob without args defaults to $_ $pat = $_ unless defined $pat; - # extract patterns - if ($pat =~ /\s/) { + # assume global context if not provided one + $cxix = '_G_' unless defined $cxix; + + # if we're just beginning, do it all first + if (!$entries{$cxix}) { + # extract patterns + if ($pat =~ /\s/) { require Text::ParseWords; @pat = Text::ParseWords::parse_line('\s+',0,$pat); - } - else { + } + else { push @pat, $pat; - } + } - # Mike Mestnik: made to do abc{1,2,3} == abc1 abc2 abc3. - # abc3 will be the original {3} (and drop the {}). - # abc1 abc2 will be put in @appendpat. - # This was just the esiest way, not nearly the best. - REHASH: { + # Mike Mestnik: made to do abc{1,2,3} == abc1 abc2 abc3. + # abc3 will be the original {3} (and drop the {}). + # abc1 abc2 will be put in @appendpat. + # This was just the easiest way, not nearly the best. + REHASH: { my @appendpat = (); for (@pat) { # There must be a "," I.E. abc{efg} is not what we want. @@ -139,7 +143,7 @@ sub glob { my $tmp = "$start$match$end"; while ( $tmp =~ s/^(.*?)(? and I below. +directory tree. See L and L below. If either I or I is in effect: =over 6 diff --git a/Master/tlpkg/tlperl/lib/File/Glob.pm b/Master/tlpkg/tlperl/lib/File/Glob.pm index af17cffa76b..cd15922f32e 100644 --- a/Master/tlpkg/tlperl/lib/File/Glob.pm +++ b/Master/tlpkg/tlperl/lib/File/Glob.pm @@ -29,14 +29,16 @@ use feature 'switch'; GLOB_NOSPACE GLOB_QUOTE GLOB_TILDE - glob bsd_glob + glob ) ], ); +$EXPORT_TAGS{bsd_glob} = [@{$EXPORT_TAGS{glob}}]; +pop @{$EXPORT_TAGS{bsd_glob}}; # no "glob" @EXPORT_OK = (@{$EXPORT_TAGS{'glob'}}, 'csh_glob'); -$VERSION = '1.13'; +$VERSION = '1.17'; sub import { require Exporter; @@ -50,6 +52,9 @@ sub import { no warnings 'redefine'; *CORE::GLOBAL::glob = \&File::Glob::csh_glob; } + if ($_ eq ':bsd_glob') { + no strict; *{caller."::glob"} = \&bsd_glob_override; + } $passthrough = 1; } $passthrough; @@ -70,62 +75,6 @@ sub glob { goto &bsd_glob; } -## borrowed heavily from gsar's File::DosGlob -my %iter; -my %entries; - -sub csh_glob { - my $pat = shift; - my $cxix = shift; - my @pat; - - # glob without args defaults to $_ - $pat = $_ unless defined $pat; - - # extract patterns - $pat =~ s/^\s+//; # Protect against empty elements in - $pat =~ s/\s+$//; # things like < *.c> and <*.c >. - # These alone shouldn't trigger ParseWords. - if ($pat =~ /\s/) { - # XXX this is needed for compatibility with the csh - # implementation in Perl. Need to support a flag - # to disable this behavior. - require Text::ParseWords; - @pat = Text::ParseWords::parse_line('\s+',0,$pat); - } - - # assume global context if not provided one - $cxix = '_G_' unless defined $cxix; - $iter{$cxix} = 0 unless exists $iter{$cxix}; - - # if we're just beginning, do it all first - if ($iter{$cxix} == 0) { - if (@pat) { - $entries{$cxix} = [ map { doglob($_, $DEFAULT_FLAGS) } @pat ]; - } - else { - $entries{$cxix} = [ doglob($pat, $DEFAULT_FLAGS) ]; - } - } - - # chuck it all out, quick or slow - if (wantarray) { - delete $iter{$cxix}; - return @{delete $entries{$cxix}}; - } - else { - if ($iter{$cxix} = scalar @{$entries{$cxix}}) { - return shift @{$entries{$cxix}}; - } - else { - # return undef for EOL - delete $iter{$cxix}; - delete $entries{$cxix}; - return undef; - } - } -} - 1; __END__ @@ -135,7 +84,7 @@ File::Glob - Perl extension for BSD glob routine =head1 SYNOPSIS - use File::Glob ':glob'; + use File::Glob ':bsd_glob'; @list = bsd_glob('*.[ch]'); $homedir = bsd_glob('~gnat', GLOB_TILDE | GLOB_ERR); @@ -178,7 +127,8 @@ Since v5.6.0, Perl's CORE::glob() is implemented in terms of bsd_glob(). Note that they don't share the same prototype--CORE::glob() only accepts a single argument. Due to historical reasons, CORE::glob() will also split its argument on whitespace, treating it as multiple patterns, -whereas bsd_glob() considers them as one pattern. +whereas bsd_glob() considers them as one pattern. But see C<:bsd_glob> +under L, below. =head2 META CHARACTERS @@ -191,9 +141,55 @@ whereas bsd_glob() considers them as one pattern. The metanotation C is a shorthand for C. Left to right order is preserved, with results of matches being sorted separately -at a low level to preserve this order. As a special case C<{>, C<}>, and +at a low level to preserve this order. As a special case C<{>, C<}>, and C<{}> are passed undisturbed. +=head2 EXPORTS + +See also the L below, which can be exported individually. + +=head3 C<:bsd_glob> + +The C<:bsd_glob> export tag exports bsd_glob() and the constants listed +below. It also overrides glob() in the calling package with one that +behaves like bsd_glob() with regard to spaces (the space is treated as part +of a file name), but supports iteration in scalar context; i.e., it +preserves the core function's feature of returning the next item each time +it is called. + +=head3 C<:glob> + +The C<:glob> tag, now discouraged, is the old version of C<:bsd_glob>. It +exports the same constants and functions, but its glob() override does not +support iteration; it returns the last file name in scalar context. That +means this will loop forever: + + use File::Glob ':glob'; + while (my $file = <* copy.txt>) { + ... + } + +=head3 C + +This function, which is included in the two export tags listed above, +takes one or two arguments. The first is the glob pattern. The second is +a set of flags ORed together. The available flags are listed below under +L. If the second argument is omitted, C (or +C on VMS and DOSish systems) is used by default. + +=head3 C<:nocase> and C<:case> + +These two export tags globally modify the default flags that bsd_glob() +and, except on VMS, Perl's built-in C operator use. C +is turned on or off, respectively. + +=head3 C + +The csh_glob() function can also be exported, but you should not use it +directly unless you really know what you are doing. It splits the pattern +into words and feeds each one to bsd_glob(). Perl's own glob() function +uses this internally. + =head2 POSIX FLAGS The POSIX defined flags for bsd_glob() are: @@ -334,10 +330,10 @@ Remember that you can use a backslash to escape things. On DOSISH systems, backslash is a valid directory separator character. In this case, use of backslash as a quoting character (via GLOB_QUOTE) -interferes with the use of backslash as a directory separator. The +interferes with the use of backslash as a directory separator. The best (simplest, most portable) solution is to use forward slashes for -directory separators, and backslashes for quoting. However, this does -not match "normal practice" on these systems. As a concession to user +directory separators, and backslashes for quoting. However, this does +not match "normal practice" on these systems. As a concession to user expectation, therefore, backslashes (under GLOB_QUOTE) only quote the glob metacharacters '[', ']', '{', '}', '-', '~', and backslash itself. All other backslashes are passed through unchanged. @@ -348,46 +344,6 @@ Win32 users should use the real slash. If you really want to use backslashes, consider using Sarathy's File::DosGlob, which comes with the standard Perl distribution. -=item * - -Mac OS (Classic) users should note a few differences. Since -Mac OS is not Unix, when the glob code encounters a tilde glob (e.g. -~user) and the C flag is used, it simply returns that -pattern without doing any expansion. - -Glob on Mac OS is case-insensitive by default (if you don't use any -flags). If you specify any flags at all and still want glob -to be case-insensitive, you must include C in the flags. - -The path separator is ':' (aka colon), not '/' (aka slash). Mac OS users -should be careful about specifying relative pathnames. While a full path -always begins with a volume name, a relative pathname should always -begin with a ':'. If specifying a volume name only, a trailing ':' is -required. - -The specification of pathnames in glob patterns adheres to the usual Mac -OS conventions: The path separator is a colon ':', not a slash '/'. A -full path always begins with a volume name. A relative pathname on Mac -OS must always begin with a ':', except when specifying a file or -directory name in the current working directory, where the leading colon -is optional. If specifying a volume name only, a trailing ':' is -required. Due to these rules, a glob like E*:E will find all -mounted volumes, while a glob like E*E or E:*E will find -all files and directories in the current directory. - -Note that updirs in the glob pattern are resolved before the matching begins, -i.e. a pattern like "*HD:t?p::a*" will be matched as "*HD:a*". Note also, -that a single trailing ':' in the pattern is ignored (unless it's a volume -name pattern like "*HD:"), i.e. a glob like E:*:E will find both -directories I files (and not, as one might expect, only directories). -You can, however, use the C flag to distinguish (without a file -test) directory names from file names. - -If the C flag is set, all directory paths will have a ':' appended. -Since a directory like 'lib:' is I a valid I path on Mac OS, -both a leading and a trailing colon will be added, when the directory name in -question doesn't contain any colons (e.g. 'lib' becomes ':lib:'). - =back =head1 SEE ALSO @@ -422,7 +378,7 @@ following copyright: may be used to endorse or promote products derived from this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE diff --git a/Master/tlpkg/tlperl/lib/File/Spec.pm b/Master/tlpkg/tlperl/lib/File/Spec.pm index 34c527eea2f..782e28425b7 100644 --- a/Master/tlpkg/tlperl/lib/File/Spec.pm +++ b/Master/tlpkg/tlperl/lib/File/Spec.pm @@ -3,8 +3,8 @@ package File::Spec; use strict; use vars qw(@ISA $VERSION); -$VERSION = '3.33'; -$VERSION = eval $VERSION; +$VERSION = '3.39_02'; +$VERSION =~ tr/_//; my %module = (MacOS => 'Mac', MSWin32 => 'Win32', @@ -199,8 +199,10 @@ X X Splits a path in to volume, directory, and filename portions. On systems with no concept of volume, returns '' for volume. - ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = + File::Spec->splitpath( $path ); + ($volume,$directories,$file) = + File::Spec->splitpath( $path, $no_file ); For systems with no syntax differentiating filenames from directories, assumes that the last file is a path unless C<$no_file> is true or a diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm b/Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm index 0709c6fc072..b63b85f6cda 100644 --- a/Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm +++ b/Master/tlpkg/tlperl/lib/File/Spec/Cygwin.pm @@ -4,8 +4,8 @@ use strict; use vars qw(@ISA $VERSION); require File::Spec::Unix; -$VERSION = '3.33'; -$VERSION = eval $VERSION; +$VERSION = '3.39_02'; +$VERSION =~ tr/_//; @ISA = qw(File::Spec::Unix); diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm b/Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm index a3bb62b8656..50304ffed06 100644 --- a/Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm +++ b/Master/tlpkg/tlperl/lib/File/Spec/Epoc.pm @@ -3,8 +3,8 @@ package File::Spec::Epoc; use strict; use vars qw($VERSION @ISA); -$VERSION = '3.33'; -$VERSION = eval $VERSION; +$VERSION = '3.39_02'; +$VERSION =~ tr/_//; require File::Spec::Unix; @ISA = qw(File::Spec::Unix); diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Functions.pm b/Master/tlpkg/tlperl/lib/File/Spec/Functions.pm index 2ee8f5d2c1a..454a5b30898 100644 --- a/Master/tlpkg/tlperl/lib/File/Spec/Functions.pm +++ b/Master/tlpkg/tlperl/lib/File/Spec/Functions.pm @@ -5,8 +5,8 @@ use strict; use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION); -$VERSION = '3.33'; -$VERSION = eval $VERSION; +$VERSION = '3.39_02'; +$VERSION =~ tr/_//; require Exporter; diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Mac.pm b/Master/tlpkg/tlperl/lib/File/Spec/Mac.pm index f47293cb2de..57d1d3efb33 100644 --- a/Master/tlpkg/tlperl/lib/File/Spec/Mac.pm +++ b/Master/tlpkg/tlperl/lib/File/Spec/Mac.pm @@ -4,8 +4,8 @@ use strict; use vars qw(@ISA $VERSION); require File::Spec::Unix; -$VERSION = '3.34'; -$VERSION = eval $VERSION; +$VERSION = '3.39_02'; +$VERSION =~ tr/_//; @ISA = qw(File::Spec::Unix); @@ -156,13 +156,16 @@ their Unix counterparts: Unix: Unix->catdir("","") = "/" Unix->catdir("",".") = "/" - Unix->catdir("","..") = "/" # can't go beyond root + Unix->catdir("","..") = "/" # can't go + # beyond root Unix->catdir("",".","..","..","a") = "/a" Mac: - Mac->catdir("","") = rootdir() # (e.g. "HD:") + Mac->catdir("","") = rootdir() # (e.g. "HD:") Mac->catdir("",":") = rootdir() - Mac->catdir("","::") = rootdir() # can't go beyond root - Mac->catdir("",":","::","::","a") = rootdir() . "a:" # (e.g. "HD:a:") + Mac->catdir("","::") = rootdir() # can't go + # beyond root + Mac->catdir("",":","::","::","a") = rootdir() . "a:" + # (e.g. "HD:a:") However, this approach is limited to the first arguments following "root" (again, see Ccanonpath()> ). If there are more @@ -400,10 +403,11 @@ the filename '' is always considered to be absolute. Note that with version E.g. - File::Spec->file_name_is_absolute("a"); # false (relative) - File::Spec->file_name_is_absolute(":a:b:"); # false (relative) - File::Spec->file_name_is_absolute("MacintoshHD:"); # true (absolute) - File::Spec->file_name_is_absolute(""); # true (absolute) + File::Spec->file_name_is_absolute("a"); # false (relative) + File::Spec->file_name_is_absolute(":a:b:"); # false (relative) + File::Spec->file_name_is_absolute("MacintoshHD:"); + # true (absolute) + File::Spec->file_name_is_absolute(""); # true (absolute) =cut @@ -440,7 +444,8 @@ sub path { =item splitpath ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = File::Spec->splitpath( $path, + $no_file ); Splits a path into volume, directory, and filename portions. diff --git a/Master/tlpkg/tlperl/lib/File/Spec/OS2.pm b/Master/tlpkg/tlperl/lib/File/Spec/OS2.pm index a380dd719b7..5461cf7a701 100644 --- a/Master/tlpkg/tlperl/lib/File/Spec/OS2.pm +++ b/Master/tlpkg/tlperl/lib/File/Spec/OS2.pm @@ -4,8 +4,8 @@ use strict; use vars qw(@ISA $VERSION); require File::Spec::Unix; -$VERSION = '3.33'; -$VERSION = eval $VERSION; +$VERSION = '3.39_02'; +$VERSION =~ tr/_//; @ISA = qw(File::Spec::Unix); diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Unix.pm b/Master/tlpkg/tlperl/lib/File/Spec/Unix.pm index b276b213920..c150445d776 100644 --- a/Master/tlpkg/tlperl/lib/File/Spec/Unix.pm +++ b/Master/tlpkg/tlperl/lib/File/Spec/Unix.pm @@ -3,8 +3,8 @@ package File::Spec::Unix; use strict; use vars qw($VERSION); -$VERSION = '3.33'; -$VERSION = eval $VERSION; +$VERSION = '3.39_02'; +$VERSION =~ tr/_//; =head1 NAME @@ -135,7 +135,7 @@ writable: $ENV{TMPDIR} /tmp -Since perl 5.8.0, if running under taint mode, and if $ENV{TMPDIR} +If running under taint mode, and if $ENV{TMPDIR} is tainted, it is not used. =cut @@ -151,6 +151,9 @@ sub _tmpdir { require Scalar::Util; @dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist; } + elsif ($] < 5.007) { # No ${^TAINT} before 5.8 + @dirlist = grep { eval { eval('1'.substr $_,0,0) } } @dirlist; + } } foreach (@dirlist) { next unless defined && -d && -w _; @@ -238,7 +241,8 @@ sub join { =item splitpath ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = File::Spec->splitpath( $path, + $no_file ); Splits a path into volume, directory, and filename portions. On systems with no concept of volume, returns '' for volume. diff --git a/Master/tlpkg/tlperl/lib/File/Spec/VMS.pm b/Master/tlpkg/tlperl/lib/File/Spec/VMS.pm index 120575a3e0f..1ababbf1350 100644 --- a/Master/tlpkg/tlperl/lib/File/Spec/VMS.pm +++ b/Master/tlpkg/tlperl/lib/File/Spec/VMS.pm @@ -4,8 +4,8 @@ use strict; use vars qw(@ISA $VERSION); require File::Spec::Unix; -$VERSION = '3.34'; -$VERSION = eval $VERSION; +$VERSION = '3.39_02'; +$VERSION =~ tr/_//; @ISA = qw(File::Spec::Unix); @@ -27,15 +27,8 @@ there. This package overrides the implementation of these methods, not the semantics. The default behavior is to allow either VMS or Unix syntax on input and to -return VMS syntax on output, even when Unix syntax was given on input. - -When used with a Perl of version 5.10 or greater and a CRTL possessing the -relevant capabilities, override behavior depends on the CRTL features -C and C. When the -C feature is enabled and the input parameters are clearly -in Unix syntax, the output will be in Unix syntax. If -C is enabled and the output syntax cannot be -determined from the input syntax, the output will be in Unix syntax. +return VMS syntax on output unless Unix syntax has been explicity requested +via the C CRTL feature. =over 4 @@ -64,23 +57,10 @@ sub _unix_rpt { return $unix_rpt; } -# Need to look up the EFS character set mode. This may become a dynamic -# mode in the future. -sub _efs { - my $efs; - if ($use_feature) { - $efs = VMS::Feature::current("efs_charset"); - } else { - my $env_efs = $ENV{'DECC$EFS_CHARSET'} || ''; - $efs = $env_efs =~ /^[ET1]/i; - } - return $efs; -} - =item canonpath (override) -Removes redundant portions of file specifications according to the syntax -detected. +Removes redundant portions of file specifications and returns results +in native syntax unless Unix filename reporting has been enabled. =cut @@ -90,37 +70,31 @@ sub canonpath { return undef unless defined $path; - my $efs = $self->_efs; + my $unix_rpt = $self->_unix_rpt; - if ($path =~ m|/|) { # Fake Unix + if ($path =~ m|/|) { my $pathify = $path =~ m|/\Z(?!\n)|; $path = $self->SUPER::canonpath($path); - # Do not convert to VMS when EFS character sets are in use - return $path if $efs; - - if ($pathify) { return vmspath($path); } - else { return vmsify($path); } + return $path if $unix_rpt; + $path = $pathify ? vmspath($path) : vmsify($path); } - else { - -#FIXME - efs parsing has different rules. Characters in a VMS filespec -# are only delimiters if not preceded by '^'; - $path =~ tr/<>/[]/; # < and > ==> [ and ] - $path =~ s/\]\[\./\.\]\[/g; # ][. ==> .][ - $path =~ s/\[000000\.\]\[/\[/g; # [000000.][ ==> [ - $path =~ s/\[000000\./\[/g; # [000000. ==> [ - $path =~ s/\.\]\[000000\]/\]/g; # .][000000] ==> ] - $path =~ s/\.\]\[/\./g; # foo.][bar ==> foo.bar - 1 while ($path =~ s/([\[\.])(-+)\.(-+)([\.\]])/$1$2$3$4/); + $path =~ s/(? ==> [ and ] + $path =~ s/(?/]/; + $path =~ s/(? .][ + $path =~ s/(? [ + $path =~ s/(? [ + $path =~ s/(? ] + $path =~ s/(? foo.bar + 1 while ($path =~ s/(? .--. # [-.-. ==> [--. # .-.-] ==> .--] # [-.-] ==> [--] - 1 while ($path =~ s/([\[\.])[^\]\.]+\.-(-+)([\]\.])/$1$2$3/); + 1 while ($path =~ s/(? [-] # # And then, the remaining cases - $path =~ s/\[\.-/[-/; # [.- ==> [- - $path =~ s/\.[^\]\.]+\.-\./\./g; # .foo.-. ==> . - $path =~ s/\[[^\]\.]+\.-\./\[/g; # [foo.-. ==> [ - $path =~ s/\.[^\]\.]+\.-\]/\]/g; # .foo.-] ==> ] - $path =~ s/\[[^\]\.]+\.-\]/\[000000\]/g;# [foo.-] ==> [000000] - $path =~ s/\[\]// unless $path eq '[]'; # [] ==> - return $path; - } + $path =~ s/(? [- + $path =~ s/(? . + $path =~ s/(? [ + $path =~ s/(? ] + # [foo.-] ==> [000000] + $path =~ s/(? + $path =~ s/(?_efs; my $unix_rpt = $self->_unix_rpt; - my @dirs = grep {defined() && length()} @_; - if ($efs) { - # Legacy mode removes blank entries. - # But that breaks existing generic perl code that - # uses a blank path at the beginning of the array - # to indicate an absolute path. - # So put it back if found. - if (@_) { - if ($_[0] eq '') { - unshift @dirs, ''; - } - } - } my $rslt; if (@dirs) { my $path = (@dirs == 1 ? $dirs[0] : $self->catdir(@dirs)); my ($spath,$sdir) = ($path,$dir); + $spath =~ s/\.dir\Z(?!\n)//i; $sdir =~ s/\.dir\Z(?!\n)//i; - if ($efs) { - # Extended character set in use, go into DWIM mode. - - # Now we need to identify what the directory is in - # of the specification in order to merge them. - my $path_unix = 0; - $path_unix = 1 if ($path =~ m#/#); - $path_unix = 1 if ($path =~ /^\.\.?$/); - my $path_vms = 0; - $path_vms = 1 if ($path =~ m#(?SUPER::canonpath($rslt); - } else { - - #with <> possible instead of [. - # Normalize the brackets - # Fixme - need to not switch when preceded by ^. - $path =~ s//\]/g; - $dir =~ s//\]/g; - - # Fix up mixed syntax input as good as possible - GIGO - $path = vmsify($path) if $path_unix; - $dir = vmsify($dir) if $dir_unix; - - #Possible path values: foo: [.foo] [foo] foo, and $(foo) - #or starting with '-', or foo.dir - #If path is foo, it needs to be converted to [.foo] - - # Fix up a bare path name. - unless ($path_vms) { - $path =~ s/\.dir\Z(?!\n)//i; - if (($path ne '') && ($path !~ /^-/)) { - # Non blank and not prefixed with '-', add a dot - $path = '[.' . $path; - } else { - # Just start a directory. - $path = '[' . $path; - } - } else { - $path =~ s/\]$//; - } - - #Possible dir values: [.dir] dir and $(foo) - - # No punctuation may have a trailing .dir - unless ($dir_vms) { - $dir =~ s/\.dir\Z(?!\n)//i; - } else { - - #strip off the brackets - $dir =~ s/^\[//; - $dir =~ s/\]$//; - } + if ($unix_rpt) { + $spath = unixify($spath) unless $spath =~ m#/#; + $sdir= unixify($sdir) unless $sdir =~ m#/#; + return $self->SUPER::catdir($spath, $sdir) + } - #strip off the leading dot if present. - $dir =~ s/^\.//; + $sdir = $self->eliminate_macros($sdir) unless $sdir =~ /^[\w\-]+\Z(?!\n)/s; + $rslt = $self->fixpath($self->eliminate_macros($spath)."/$sdir",1); - # Now put the specifications together. - if ($dir ne '') { - # Add a separator unless this is an absolute path - $path .= '.' if ($path ne '['); - $rslt = $path . $dir . ']'; - } else { - $rslt = $path . ']'; - } - } + # Special case for VMS absolute directory specs: these will have + # had device prepended during trip through Unix syntax in + # eliminate_macros(), since Unix syntax has no way to express + # "absolute from the top of this device's directory tree". + if ($spath =~ /^[\[<][^.\-]/s) { $rslt =~ s/^[^\[<]+//s; } - } else { - # Traditional ODS-2 mode. - $spath =~ s/\.dir\Z(?!\n)//i; $sdir =~ s/\.dir\Z(?!\n)//i; - - $sdir = $self->eliminate_macros($sdir) - unless $sdir =~ /^[\w\-]+\Z(?!\n)/s; - $rslt = $self->fixpath($self->eliminate_macros($spath)."/$sdir",1); - - # Special case for VMS absolute directory specs: these will have - # had device prepended during trip through Unix syntax in - # eliminate_macros(), since Unix syntax has no way to express - # "absolute from the top of this device's directory tree". - if ($spath =~ /^[\[<][^.\-]/s) { $rslt =~ s/^[^\[<]+//s; } - } } else { - # Single directory, just make sure it is in directory format - # Return an empty string on null input, and pass through macros. + # Single directory. Return an empty string on null input; otherwise + # just return a canonical path. - if (not defined $dir or not length $dir) { $rslt = ''; } - elsif ($dir =~ /^\$\([^\)]+\)\Z(?!\n)/s) { - $rslt = $dir; + if (not defined $dir or not length $dir) { + $rslt = ''; } else { - my $unix_mode = 0; - - if ($efs) { - my $dir_unix = 0; - $dir_unix = 1 if ($dir =~ m#/#); - $dir_unix = 1 if ($dir =~ /^\.\.?$/); - my $dir_vms = 0; - $dir_vms = 1 if ($dir =~ m#(?canonpath($rslt); @@ -335,137 +179,32 @@ sub catfile { my $file = $self->canonpath($tfile); my @files = grep {defined() && length()} @_; - my $efs = $self->_efs; my $unix_rpt = $self->_unix_rpt; - # Assume VMS mode - my $unix_mode = 0; - my $file_unix = 0; - my $file_vms = 0; - if ($efs) { - - # Now we need to identify format the file is in - # of the specification in order to merge them. - $file_unix = 1 if ($tfile =~ m#/#); - $file_unix = 1 if ($tfile =~ /^\.\.?$/); - $file_vms = 1 if ($tfile =~ m#(?catdir(@files); - } + my $path = (@files == 1 ? $files[0] : $self->catdir(@files)); my $spath = $path; - # Some thing building a VMS path in pieces may try to pass a + # Something building a VMS path in pieces may try to pass a # directory name in filename format, so normalize it. $spath =~ s/\.dir\Z(?!\n)//i; - # if the spath ends with a directory delimiter and the file is bare, - # then just concat them. + # If the spath ends with a directory delimiter and the file is bare, + # then just concatenate them. if ($spath =~ /^(?]+\)\Z(?!\n)/s && basename($file) eq $file) { $rslt = "$spath$file"; } else { - if ($efs) { - - # Now we need to identify what the directory is in - # of the specification in order to merge them. - my $spath_unix = 0; - $spath_unix = 1 if ($spath =~ m#/#); - $spath_unix = 1 if ($spath =~ /^\.\.?$/); - my $spath_vms = 0; - $spath_vms = 1 if ($spath =~ m#(?eliminate_macros($spath); - - - $rslt = vmsify($rslt.((defined $rslt) && - ($rslt ne '') ? '/' : '').unixify($file)); - } + $rslt = $self->eliminate_macros($spath); + $rslt .= (defined($rslt) && length($rslt) ? '/' : '') . unixify($file); + $rslt = vmsify($rslt) unless $unix_rpt; } } else { # Only passed a single file? - my $xfile = $file; + my $xfile = (defined($file) && length($file)) ? $file : ''; - # Traditional VMS perl expects this conversion. - $xfile = vmsify($file) unless ($efs); - - $rslt = (defined($file) && length($file)) ? $xfile : ''; + $rslt = $unix_rpt ? $file : vmsify($file); } return $self->canonpath($rslt) unless $unix_rpt; @@ -602,7 +341,8 @@ sub file_name_is_absolute { =item splitpath (override) ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = File::Spec->splitpath( $path, + $no_file ); Passing a true value for C<$no_file> indicates that the path being split only contains directory components, even on systems where you @@ -614,17 +354,7 @@ between directories and files at a glance. sub splitpath { my($self,$path, $nofile) = @_; my($dev,$dir,$file) = ('','',''); - my $efs = $self->_efs; my $vmsify_path = vmsify($path); - if ($efs) { - my $path_vms = 0; - $path_vms = 1 if ($path =~ m#(?SUPER::splitpath($path, $nofile); - } - $vmsify_path = $path; - } if ( $nofile ) { #vmsify('d1/d2/d3') returns '[.d1.d2]d3' @@ -653,25 +383,13 @@ sub splitdir { my @dirs = (); return @dirs if ( (!defined $dirspec) || ('' eq $dirspec) ); - my $efs = $self->_efs; - - my $dir_unix = 0; - $dir_unix = 1 if ($dirspec =~ m#/#); - $dir_unix = 1 if ($dirspec =~ /^\.\.?$/); - - # Unix filespecs in EFS mode handled by Unix routines. - if ($efs && $dir_unix) { - return $self->SUPER::splitdir($dirspec); - } - - # FIX ME, only split for VMS delimiters not prefixed with '^'. - - $dirspec =~ tr/<>/[]/; # < and > ==> [ and ] - $dirspec =~ s/\]\[\./\.\]\[/g; # ][. ==> .][ - $dirspec =~ s/\[000000\.\]\[/\[/g; # [000000.][ ==> [ - $dirspec =~ s/\[000000\./\[/g; # [000000. ==> [ - $dirspec =~ s/\.\]\[000000\]/\]/g; # .][000000] ==> ] - $dirspec =~ s/\.\]\[/\./g; # foo.][bar ==> foo.bar + $dirspec =~ s/(? ==> [ and ] + $dirspec =~ s/(?/]/; + $dirspec =~ s/(? .][ + $dirspec =~ s/(? [ + $dirspec =~ s/(? [ + $dirspec =~ s/(? ] + $dirspec =~ s/(? foo.bar while ($dirspec =~ s/(^|[\[\<\.])\-(\-+)($|[\]\>\.])/$1-.$2$3/g) {} # That loop does the following # with any amount of dashes: @@ -696,48 +414,16 @@ Construct a complete filespec. sub catpath { my($self,$dev,$dir,$file) = @_; - my $efs = $self->_efs; - my $unix_rpt = $self->_unix_rpt; - - my $unix_mode = 0; - my $dir_unix = 0; - $dir_unix = 1 if ($dir =~ m#/#); - $dir_unix = 1 if ($dir =~ /^\.\.?$/); - my $dir_vms = 0; - $dir_vms = 1 if ($dir =~ m#(?splitpath($dir); - $dev = $dir_volume unless length $dev; - $dir = length $dir_file ? $self->catfile($dir_dir, $dir_file) : - $dir_dir; - } - if ($dev =~ m|^/+([^/]+)|) { $dev = "$1:"; } + my ($dir_volume, $dir_dir, $dir_file) = $self->splitpath($dir); + $dev = $dir_volume unless length $dev; + $dir = length $dir_file ? $self->catfile($dir_dir, $dir_file) : $dir_dir; + + if ($dev =~ m|^(?'); "$dev$dir$file"; @@ -745,92 +431,17 @@ sub catpath { =item abs2rel (override) -Attempt to convert a file specification to a relative specification. -On a system with volumes, like VMS, this may not be possible. +Attempt to convert an absolute file specification to a relative specification. =cut sub abs2rel { my $self = shift; - my($path,$base) = @_; - - my $efs = $self->_efs; - my $unix_rpt = $self->_unix_rpt; - - # We need to identify what the directory is in - # of the specification in order to process them - my $path_unix = 0; - $path_unix = 1 if ($path =~ m#/#); - $path_unix = 1 if ($path =~ /^\.\.?$/); - my $path_vms = 0; - $path_vms = 1 if ($path =~ m#(?_cwd(); - if ($efs) { - $base_unix = 1 if ($base =~ m#/#); - $base_unix = 1 if ($base =~ /^\.\.?$/); - $base = vmspath($base) if $base_unix; - } - } + my($path,$base) = @_; + $base = $self->_cwd() unless defined $base and length $base; for ($path, $base) { $_ = $self->canonpath($_) } @@ -889,57 +500,12 @@ sub rel2abs { my $self = shift ; my ($path,$base ) = @_; return undef unless defined $path; - - my $efs = $self->_efs; - my $unix_rpt = $self->_unix_rpt; - - # We need to identify what the directory is in - # of the specification in order to process them - my $path_unix = 0; - $path_unix = 1 if ($path =~ m#/#); - $path_unix = 1 if ($path =~ /^\.\.?$/); - my $path_vms = 0; - $path_vms = 1 if ($path =~ m#(?file_name_is_absolute( $path ) ) { @@ -954,20 +520,6 @@ sub rel2abs { $base = $self->canonpath( $base ) ; } - if ($efs) { - # base may have changed, so need to look up format again. - if ($unix_mode) { - $base_vms = 1 if ($base =~ m#(?splitpath( $path ))[1,2] ; @@ -978,23 +530,12 @@ sub rel2abs { $path_directories = '' if $path_directories eq '[]' || $path_directories eq '<>'; my $sep = '' ; - - if ($efs) { - # Merge the paths assuming that the base is absolute. - $base_directories = $self->catdir('', - $base_directories, - $path_directories); - } else { - # Legacy behavior assumes VMS only paths - $sep = '.' - if ( $base_directories =~ m{[^.\]>]\Z(?!\n)} && - $path_directories =~ m{^[^.\[<]}s - ) ; - $base_directories = "$base_directories$sep$path_directories"; - $base_directories =~ s{\.?[\]>][\[<]\.?}{.}; - } - - $path_file = '' if ($path_file eq '.') && $unix_mode; + $sep = '.' + if ( $base_directories =~ m{[^.\]>]\Z(?!\n)} && + $path_directories =~ m{^[^.\[<]}s + ) ; + $base_directories = "$base_directories$sep$path_directories"; + $base_directories =~ s{\.?[\]>][\[<]\.?}{.}; $path = $self->catpath( $base_volume, $base_directories, $path_file ); } @@ -1014,10 +555,6 @@ sub rel2abs { # # Update: MakeMaker 6.48 is still using these routines on VMS. # so they need to be kept up to date with ExtUtils::MM_VMS. -# -# The traditional VMS mode using ODS-2 disks depends on these routines -# being here. These routines should not be called in when the -# C or C modes are enabled. sub eliminate_macros { my($self,$path) = @_; diff --git a/Master/tlpkg/tlperl/lib/File/Spec/Win32.pm b/Master/tlpkg/tlperl/lib/File/Spec/Win32.pm index 28d8510ccf6..39f5a8bb95a 100644 --- a/Master/tlpkg/tlperl/lib/File/Spec/Win32.pm +++ b/Master/tlpkg/tlperl/lib/File/Spec/Win32.pm @@ -5,8 +5,8 @@ use strict; use vars qw(@ISA $VERSION); require File::Spec::Unix; -$VERSION = '3.33'; -$VERSION = eval $VERSION; +$VERSION = '3.39_02'; +$VERSION =~ tr/_//; @ISA = qw(File::Spec::Unix); @@ -189,7 +189,8 @@ sub canonpath { =item splitpath ($volume,$directories,$file) = File::Spec->splitpath( $path ); - ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file ); + ($volume,$directories,$file) = File::Spec->splitpath( $path, + $no_file ); Splits a path into volume, directory, and filename portions. Assumes that the last file is a path unless the path ends in '\\', '\\.', '\\..' @@ -231,7 +232,7 @@ sub splitpath { =item splitdir -The opposite of L. +The opposite of L. @dirs = File::Spec->splitdir( $directories ); diff --git a/Master/tlpkg/tlperl/lib/Filter/Simple.pm b/Master/tlpkg/tlperl/lib/Filter/Simple.pm index 2edd798adf3..b0068037f3f 100644 --- a/Master/tlpkg/tlperl/lib/Filter/Simple.pm +++ b/Master/tlpkg/tlperl/lib/Filter/Simple.pm @@ -4,7 +4,7 @@ use Text::Balanced ':ALL'; use vars qw{ $VERSION @EXPORT }; -$VERSION = '0.86'; +$VERSION = '0.88'; use Filter::Util::Call; use Carp; @@ -36,22 +36,31 @@ my $CUT = qr/\n=cut.*$EOP/; my $pod_or_DATA = qr/ ^=(?:head[1-4]|item) .*? $CUT | ^=pod .*? $CUT - | ^=for .*? $EOP - | ^=begin \s* (\S+) .*? \n=end \s* \1 .*? $EOP + | ^=for .*? $CUT + | ^=begin .*? $CUT | ^__(DATA|END)__\r?\n.* /smx; +my $variable = qr{ + [\$*\@%]\s* + \{\s*(?!::)(?:\d+|[][&`'#+*./|,";%=~:?!\@<>()-]|\^[A-Z]?)\} + | (?:\$#?|[*\@\%]|\\&)\$*\s* + (?: \{\s*(?:\^(?=[A-Z_]))?(?:\w|::|'\w)*\s*\} + | (?:\^(?=[A-Z_]))?(?:\w|::|'\w)* + | (?=\{) # ${ block } + ) + ) + | \$\s*(?!::)(?:\d+|[][&`'#+*./|,";%=~:?!\@<>()-]|\^[A-Z]?) + }x; my %extractor_for = ( - quotelike => [ $ws, \&extract_variable, $id, { MATCH => \&extract_quotelike } ], + quotelike => [ $ws, $variable, $id, { MATCH => \&extract_quotelike } ], regex => [ $ws, $pod_or_DATA, $id, $exql ], string => [ $ws, $pod_or_DATA, $id, $exql ], - code => [ $ws, { DONT_MATCH => $pod_or_DATA }, - \&extract_variable, + code => [ $ws, { DONT_MATCH => $pod_or_DATA }, $variable, $id, { DONT_MATCH => \&extract_quotelike } ], code_no_comments => [ { DONT_MATCH => $comment }, - $ncws, { DONT_MATCH => $pod_or_DATA }, - \&extract_variable, + $ncws, { DONT_MATCH => $pod_or_DATA }, $variable, $id, { DONT_MATCH => \&extract_quotelike } ], executable => [ $ws, { DONT_MATCH => $pod_or_DATA } ], executable_no_comments diff --git a/Master/tlpkg/tlperl/lib/Filter/Util/Call.pm b/Master/tlpkg/tlperl/lib/Filter/Util/Call.pm index 1d1b2618f0e..a502575a615 100644 --- a/Master/tlpkg/tlperl/lib/Filter/Util/Call.pm +++ b/Master/tlpkg/tlperl/lib/Filter/Util/Call.pm @@ -1,7 +1,7 @@ # Call.pm # -# Copyright (c) 1995-2009 Paul Marquess. All rights reserved. +# Copyright (c) 1995-2011 Paul Marquess. All rights reserved. # # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. @@ -18,7 +18,7 @@ use vars qw($VERSION @ISA @EXPORT) ; @ISA = qw(Exporter DynaLoader); @EXPORT = qw( filter_add filter_del filter_read filter_read_exact) ; -$VERSION = "1.08" ; +$VERSION = "1.40" ; sub filter_read_exact($) { @@ -483,8 +483,7 @@ Filter::Util::Call. Although it doesn't allow the fine control that Filter::Util::Call does, it should be adequate for the majority of applications. It's available at - http://www.cpan.org/modules/by-author/Damian_Conway/Filter-Simple.tar.gz - http://www.csse.monash.edu.au/~damian/CPAN/Filter-Simple.tar.gz + http://search.cpan.org/dist/Filter-Simple/ =head1 AUTHOR diff --git a/Master/tlpkg/tlperl/lib/FindBin.pm b/Master/tlpkg/tlperl/lib/FindBin.pm index 892d6e5d93a..cf6ecf29040 100644 --- a/Master/tlpkg/tlperl/lib/FindBin.pm +++ b/Master/tlpkg/tlperl/lib/FindBin.pm @@ -59,21 +59,6 @@ workaround was to force the C block to be executed again: delete $INC{'FindBin.pm'}; require FindBin; -=head1 KNOWN BUGS - -If perl is invoked as - - perl filename - -and I does not have executable rights and a program called -I exists in the users C<$ENV{PATH}> which satisfies both B<-x> -and B<-T> then FindBin assumes that it was invoked via the -C<$ENV{PATH}>. - -Workaround is to invoke perl as - - perl ./filename - =head1 AUTHORS FindBin is supported as part of the core perl distribution. Please send bug @@ -103,7 +88,7 @@ use File::Spec; %EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]); @ISA = qw(Exporter); -$VERSION = "1.50"; +$VERSION = "1.51"; # needed for VMS-specific filename translation @@ -145,30 +130,6 @@ sub init } else { - my $dosish = ($^O eq 'MSWin32' or $^O eq 'os2'); - unless(($script =~ m#/# || ($dosish && $script =~ m#\\#)) - && -f $script) - { - my $dir; - foreach $dir (File::Spec->path) - { - my $scr = File::Spec->catfile($dir, $script); - - # $script can been found via PATH but perl could have - # been invoked as 'perl file'. Do a dumb check to see - # if $script is a perl program, if not then keep $script = $0 - # - # well we actually only check that it is an ASCII file - # we know its executable so it is probably a script - # of some sort. - if(-f $scr && -r _ && ($dosish || -x _) && -s _ && -T _) - { - $script = $scr; - last; - } - } - } - croak("Cannot find current script '$0'") unless(-f $script); # Ensure $script contains the complete path in case we C diff --git a/Master/tlpkg/tlperl/lib/Getopt/Std.pm b/Master/tlpkg/tlperl/lib/Getopt/Std.pm index 823bc4dd910..d4ce9a35eee 100644 --- a/Master/tlpkg/tlperl/lib/Getopt/Std.pm +++ b/Master/tlpkg/tlperl/lib/Getopt/Std.pm @@ -72,7 +72,7 @@ and version_mess() with the switches string as an argument. @ISA = qw(Exporter); @EXPORT = qw(getopt getopts); -$VERSION = '1.06'; +$VERSION = '1.07'; # uncomment the next line to disable 1.03-backward compatibility paranoia # $STANDARD_HELP_VERSION = 1; @@ -147,7 +147,7 @@ sub try_exit () { my $p = __PACKAGE__; print {output_h()} <{$key} = $args{$key} if exists $args{$key} } + + # Never override proxy argument as this breaks backwards compat. + if (!exists $self->{proxy} && (my $http_proxy = $ENV{http_proxy})) { + if ($http_proxy =~ m{\Ahttp://[^/?#:@]+:\d+/?\z}) { + $self->{proxy} = $http_proxy; + } + else { + Carp::croak(qq{Environment 'http_proxy' must be in format http://:/\n}); + } + } + return bless $self, $class; } -sub get { - my ($self, $url, $args) = @_; - @_ == 2 || (@_ == 3 && ref $args eq 'HASH') - or Carp::croak(q/Usage: $http->get(URL, [HASHREF])/); - return $self->request('GET', $url, $args || {}); +for my $sub_name ( qw/get head put post delete/ ) { + my $req_method = uc $sub_name; + no strict 'refs'; + eval <<"HERE"; ## no critic + sub $sub_name { + my (\$self, \$url, \$args) = \@_; + \@_ == 2 || (\@_ == 3 && ref \$args eq 'HASH') + or Carp::croak(q/Usage: \$http->$sub_name(URL, [HASHREF])/ . "\n"); + return \$self->request('$req_method', \$url, \$args || {}); + } +HERE +} + + +sub post_form { + my ($self, $url, $data, $args) = @_; + (@_ == 3 || @_ == 4 && ref $args eq 'HASH') + or Carp::croak(q/Usage: $http->post_form(URL, DATAREF, [HASHREF])/ . "\n"); + + my $headers = {}; + while ( my ($key, $value) = each %{$args->{headers} || {}} ) { + $headers->{lc $key} = $value; + } + delete $args->{headers}; + + return $self->request('POST', $url, { + %$args, + content => $self->www_form_urlencode($data), + headers => { + %$headers, + 'content-type' => 'application/x-www-form-urlencoded' + }, + } + ); } sub mirror { my ($self, $url, $file, $args) = @_; @_ == 3 || (@_ == 4 && ref $args eq 'HASH') - or Carp::croak(q/Usage: $http->mirror(URL, FILE, [HASHREF])/); + or Carp::croak(q/Usage: $http->mirror(URL, FILE, [HASHREF])/ . "\n"); if ( -e $file and my $mtime = (stat($file))[9] ) { $args->{headers}{'if-modified-since'} ||= $self->_http_date($mtime); } my $tempfile = $file . int(rand(2**31)); open my $fh, ">", $tempfile - or Carp::croak(qq/Error: Could not open temporary file $tempfile for downloading: $!/); + or Carp::croak(qq/Error: Could not open temporary file $tempfile for downloading: $!\n/); binmode $fh; $args->{data_callback} = sub { print {$fh} $_[0] }; my $response = $self->request('GET', $url, $args); close $fh - or Carp::croak(qq/Error: Could not close temporary file $tempfile: $!/); + or Carp::croak(qq/Error: Could not close temporary file $tempfile: $!\n/); if ( $response->{success} ) { rename $tempfile, $file - or Carp::croak "Error replacing $file with $tempfile: $!\n"; + or Carp::croak(qq/Error replacing $file with $tempfile: $!\n/); my $lm = $response->{headers}{'last-modified'}; if ( $lm and my $mtime = $self->_parse_http_date($lm) ) { utime $mtime, $mtime, $file; @@ -86,7 +116,7 @@ my %idempotent = map { $_ => 1 } qw/GET HEAD PUT DELETE OPTIONS TRACE/; sub request { my ($self, $method, $url, $args) = @_; @_ == 3 || (@_ == 4 && ref $args eq 'HASH') - or Carp::croak(q/Usage: $http->request(METHOD, URL, [HASHREF])/); + or Carp::croak(q/Usage: $http->request(METHOD, URL, [HASHREF])/ . "\n"); $args ||= {}; # we keep some state in this during _request # RFC 2616 Section 8.1.4 mandates a single retry on broken socket @@ -112,6 +142,36 @@ sub request { return $response; } + +sub www_form_urlencode { + my ($self, $data) = @_; + (@_ == 2 && ref $data) + or Carp::croak(q/Usage: $http->www_form_urlencode(DATAREF)/ . "\n"); + (ref $data eq 'HASH' || ref $data eq 'ARRAY') + or Carp::croak("form data must be a hash or array reference"); + + my @params = ref $data eq 'HASH' ? %$data : @$data; + @params % 2 == 0 + or Carp::croak("form data reference must have an even number of terms\n"); + + my @terms; + while( @params ) { + my ($key, $value) = splice(@params, 0, 2); + if ( ref $value eq 'ARRAY' ) { + unshift @params, map { $key => $_ } @$value; + } + else { + push @terms, join("=", map { $self->_uri_escape($_) } $key, $value); + } + } + + return join("&", sort @terms); +} + +#--------------------------------------------------------------------------# +# private methods +#--------------------------------------------------------------------------# + my %DefaultPort = ( http => 80, https => 443, @@ -134,7 +194,7 @@ sub _request { if ($self->{proxy}) { $request->{uri} = "$scheme://$request->{host_port}$path_query"; - croak(qq/HTTPS via proxy is not supported/) + die(qq/HTTPS via proxy is not supported\n/) if $request->{scheme} eq 'https'; $handle->connect(($self->_split_url($self->{proxy}))[0..2]); } @@ -192,7 +252,7 @@ sub _prepare_headers_and_cb { my $content = $args->{content}; if ( $] ge '5.008' ) { utf8::downgrade($content, 1) - or Carp::croak(q/Wide character in request message body/); + or die(qq/Wide character in request message body\n/); } $request->{headers}{'content-length'} = length $content unless $request->{headers}{'content-length'} @@ -246,7 +306,7 @@ sub _split_url { # URI regex adapted from the URI module my ($scheme, $authority, $path_query) = $url =~ m<\A([^:/?#]+)://([^/?#]*)([^#]*)> - or Carp::croak(qq/Cannot parse URL: '$url'/); + or die(qq/Cannot parse URL: '$url'\n/); $scheme = lc $scheme; $path_query = "/$path_query" unless $path_query =~ m<\A/>; @@ -293,16 +353,36 @@ sub _parse_http_date { }; } +# URI escaping adapted from URI::Escape +# c.f. http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1 +# perl 5.6 ready UTF-8 encoding adapted from JSON::PP +my %escapes = map { chr($_) => sprintf("%%%02X", $_) } 0..255; +$escapes{' '}="+"; +my $unsafe_char = qr/[^A-Za-z0-9\-\._~]/; + +sub _uri_escape { + my ($self, $str) = @_; + if ( $] ge '5.008' ) { + utf8::encode($str); + } + else { + $str = pack("U*", unpack("C*", $str)) # UTF-8 encode a byte string + if ( length $str == do { use bytes; length $str } ); + $str = pack("C*", unpack("C*", $str)); # clear UTF-8 flag + } + $str =~ s/($unsafe_char)/$escapes{$1}/ge; + return $str; +} + package HTTP::Tiny::Handle; # hide from PAUSE/indexers use strict; use warnings; -use Carp qw[croak]; use Errno qw[EINTR EPIPE]; use IO::Socket qw[SOCK_STREAM]; -sub BUFSIZE () { 32768 } +sub BUFSIZE () { 32768 } ## no critic my $Printable = sub { local $_ = shift; @@ -333,17 +413,17 @@ my $ssl_verify_args = { }; sub connect { - @_ == 4 || croak(q/Usage: $handle->connect(scheme, host, port)/); + @_ == 4 || die(q/Usage: $handle->connect(scheme, host, port)/ . "\n"); my ($self, $scheme, $host, $port) = @_; if ( $scheme eq 'https' ) { eval "require IO::Socket::SSL" unless exists $INC{'IO/Socket/SSL.pm'}; - croak(qq/IO::Socket::SSL must be installed for https support\n/) + die(qq/IO::Socket::SSL must be installed for https support\n/) unless $INC{'IO/Socket/SSL.pm'}; } elsif ( $scheme ne 'http' ) { - croak(qq/Unsupported URL scheme '$scheme'/); + die(qq/Unsupported URL scheme '$scheme'\n/); } $self->{fh} = 'IO::Socket::INET'->new( @@ -352,10 +432,10 @@ sub connect { Proto => 'tcp', Type => SOCK_STREAM, Timeout => $self->{timeout} - ) or croak(qq/Could not connect to '$host:$port': $@/); + ) or die(qq/Could not connect to '$host:$port': $@\n/); binmode($self->{fh}) - or croak(qq/Could not binmode() socket: '$!'/); + or die(qq/Could not binmode() socket: '$!'\n/); if ( $scheme eq 'https') { IO::Socket::SSL->start_SSL($self->{fh}); @@ -372,19 +452,19 @@ sub connect { } sub close { - @_ == 1 || croak(q/Usage: $handle->close()/); + @_ == 1 || die(q/Usage: $handle->close()/ . "\n"); my ($self) = @_; CORE::close($self->{fh}) - or croak(qq/Could not close socket: '$!'/); + or die(qq/Could not close socket: '$!'\n/); } sub write { - @_ == 2 || croak(q/Usage: $handle->write(buf)/); + @_ == 2 || die(q/Usage: $handle->write(buf)/ . "\n"); my ($self, $buf) = @_; if ( $] ge '5.008' ) { utf8::downgrade($buf, 1) - or croak(q/Wide character in write()/); + or die(qq/Wide character in write()\n/); } my $len = length $buf; @@ -394,7 +474,7 @@ sub write { while () { $self->can_write - or croak(q/Timed out while waiting for socket to become ready for writing/); + or die(qq/Timed out while waiting for socket to become ready for writing\n/); my $r = syswrite($self->{fh}, $buf, $len, $off); if (defined $r) { $len -= $r; @@ -402,17 +482,17 @@ sub write { last unless $len > 0; } elsif ($! == EPIPE) { - croak(qq/Socket closed by remote server: $!/); + die(qq/Socket closed by remote server: $!\n/); } elsif ($! != EINTR) { - croak(qq/Could not write to socket: '$!'/); + die(qq/Could not write to socket: '$!'\n/); } } return $off; } sub read { - @_ == 2 || @_ == 3 || croak(q/Usage: $handle->read(len [, allow_partial])/); + @_ == 2 || @_ == 3 || die(q/Usage: $handle->read(len [, allow_partial])/ . "\n"); my ($self, $len, $allow_partial) = @_; my $buf = ''; @@ -426,24 +506,24 @@ sub read { while ($len > 0) { $self->can_read - or croak(q/Timed out while waiting for socket to become ready for reading/); + or die(q/Timed out while waiting for socket to become ready for reading/ . "\n"); my $r = sysread($self->{fh}, $buf, $len, length $buf); if (defined $r) { last unless $r; $len -= $r; } elsif ($! != EINTR) { - croak(qq/Could not read from socket: '$!'/); + die(qq/Could not read from socket: '$!'\n/); } } if ($len && !$allow_partial) { - croak(q/Unexpected end of stream/); + die(qq/Unexpected end of stream\n/); } return $buf; } sub readline { - @_ == 1 || croak(q/Usage: $handle->readline()/); + @_ == 1 || die(q/Usage: $handle->readline()/ . "\n"); my ($self) = @_; while () { @@ -451,23 +531,23 @@ sub readline { return $1; } if (length $self->{rbuf} >= $self->{max_line_size}) { - croak(qq/Line size exceeds the maximum allowed size of $self->{max_line_size}/); + die(qq/Line size exceeds the maximum allowed size of $self->{max_line_size}\n/); } $self->can_read - or croak(q/Timed out while waiting for socket to become ready for reading/); + or die(qq/Timed out while waiting for socket to become ready for reading\n/); my $r = sysread($self->{fh}, $self->{rbuf}, BUFSIZE, length $self->{rbuf}); if (defined $r) { last unless $r; } elsif ($! != EINTR) { - croak(qq/Could not read from socket: '$!'/); + die(qq/Could not read from socket: '$!'\n/); } } - croak(q/Unexpected end of stream while looking for line/); + die(qq/Unexpected end of stream while looking for line\n/); } sub read_header_lines { - @_ == 1 || @_ == 2 || croak(q/Usage: $handle->read_header_lines([headers])/); + @_ == 1 || @_ == 2 || die(q/Usage: $handle->read_header_lines([headers])/ . "\n"); my ($self, $headers) = @_; $headers ||= {}; my $lines = 0; @@ -477,7 +557,7 @@ sub read_header_lines { my $line = $self->readline; if (++$lines >= $self->{max_header_lines}) { - croak(qq/Header lines exceeds maximum number allowed of $self->{max_header_lines}/); + die(qq/Header lines exceeds maximum number allowed of $self->{max_header_lines}\n/); } elsif ($line =~ /\A ([^\x00-\x1F\x7F:]+) : [\x09\x20]* ([^\x0D\x0A]*)/x) { my ($field_name) = lc $1; @@ -494,7 +574,7 @@ sub read_header_lines { } elsif ($line =~ /\A [\x09\x20]+ ([^\x0D\x0A]*)/x) { $val - or croak(q/Unexpected header continuation line/); + or die(qq/Unexpected header continuation line\n/); next unless length $1; $$val .= ' ' if length $$val; $$val .= $1; @@ -503,14 +583,14 @@ sub read_header_lines { last; } else { - croak(q/Malformed header line: / . $Printable->($line)); + die(q/Malformed header line: / . $Printable->($line) . "\n"); } } return $headers; } sub write_request { - @_ == 2 || croak(q/Usage: $handle->write_request(request)/); + @_ == 2 || die(q/Usage: $handle->write_request(request)/ . "\n"); my($self, $request) = @_; $self->write_request_header(@{$request}{qw/method uri headers/}); $self->write_body($request) if $request->{cb}; @@ -526,7 +606,7 @@ my %HeaderCase = ( ); sub write_header_lines { - (@_ == 2 && ref $_[1] eq 'HASH') || croak(q/Usage: $handle->write_header_lines(headers)/); + (@_ == 2 && ref $_[1] eq 'HASH') || die(q/Usage: $handle->write_header_lines(headers)/ . "\n"); my($self, $headers) = @_; my $buf = ''; @@ -537,13 +617,13 @@ sub write_header_lines { } else { $field_name =~ /\A $Token+ \z/xo - or croak(q/Invalid HTTP header field name: / . $Printable->($field_name)); + or die(q/Invalid HTTP header field name: / . $Printable->($field_name) . "\n"); $field_name =~ s/\b(\w)/\u$1/g; $HeaderCase{lc $field_name} = $field_name; } for (ref $v eq 'ARRAY' ? @$v : $v) { /[^\x0D\x0A]/ - or croak(qq/Invalid HTTP header field value ($field_name): / . $Printable->($_)); + or die(qq/Invalid HTTP header field value ($field_name): / . $Printable->($_). "\n"); $buf .= "$field_name: $_\x0D\x0A"; } } @@ -552,7 +632,7 @@ sub write_header_lines { } sub read_body { - @_ == 3 || croak(q/Usage: $handle->read_body(callback, response)/); + @_ == 3 || die(q/Usage: $handle->read_body(callback, response)/ . "\n"); my ($self, $cb, $response) = @_; my $te = $response->{headers}{'transfer-encoding'} || ''; if ( grep { /chunked/i } ( ref $te eq 'ARRAY' ? @$te : $te ) ) { @@ -565,7 +645,7 @@ sub read_body { } sub write_body { - @_ == 2 || croak(q/Usage: $handle->write_body(request)/); + @_ == 2 || die(q/Usage: $handle->write_body(request)/ . "\n"); my ($self, $request) = @_; if ($request->{headers}{'content-length'}) { return $self->write_content_body($request); @@ -576,7 +656,7 @@ sub write_body { } sub read_content_body { - @_ == 3 || @_ == 4 || croak(q/Usage: $handle->read_content_body(callback, response, [read_length])/); + @_ == 3 || @_ == 4 || die(q/Usage: $handle->read_content_body(callback, response, [read_length])/ . "\n"); my ($self, $cb, $response, $content_length) = @_; $content_length ||= $response->{headers}{'content-length'}; @@ -597,7 +677,7 @@ sub read_content_body { } sub write_content_body { - @_ == 2 || croak(q/Usage: $handle->write_content_body(request)/); + @_ == 2 || die(q/Usage: $handle->write_content_body(request)/ . "\n"); my ($self, $request) = @_; my ($len, $content_length) = (0, $request->{headers}{'content-length'}); @@ -609,27 +689,27 @@ sub write_content_body { if ( $] ge '5.008' ) { utf8::downgrade($data, 1) - or croak(q/Wide character in write_content()/); + or die(qq/Wide character in write_content()\n/); } $len += $self->write($data); } $len == $content_length - or croak(qq/Content-Length missmatch (got: $len expected: $content_length)/); + or die(qq/Content-Length missmatch (got: $len expected: $content_length)\n/); return $len; } sub read_chunked_body { - @_ == 3 || croak(q/Usage: $handle->read_chunked_body(callback, $response)/); + @_ == 3 || die(q/Usage: $handle->read_chunked_body(callback, $response)/ . "\n"); my ($self, $cb, $response) = @_; while () { my $head = $self->readline; $head =~ /\A ([A-Fa-f0-9]+)/x - or croak(q/Malformed chunk head: / . $Printable->($head)); + or die(q/Malformed chunk head: / . $Printable->($head) . "\n"); my $len = hex($1) or last; @@ -637,14 +717,14 @@ sub read_chunked_body { $self->read_content_body($cb, $response, $len); $self->read(2) eq "\x0D\x0A" - or croak(q/Malformed chunk: missing CRLF after chunk data/); + or die(qq/Malformed chunk: missing CRLF after chunk data\n/); } $self->read_header_lines($response->{headers}); return; } sub write_chunked_body { - @_ == 2 || croak(q/Usage: $handle->write_chunked_body(request)/); + @_ == 2 || die(q/Usage: $handle->write_chunked_body(request)/ . "\n"); my ($self, $request) = @_; my $len = 0; @@ -656,7 +736,7 @@ sub write_chunked_body { if ( $] ge '5.008' ) { utf8::downgrade($data, 1) - or croak(q/Wide character in write_chunked_body()/); + or die(qq/Wide character in write_chunked_body()\n/); } $len += length $data; @@ -675,17 +755,17 @@ sub write_chunked_body { } sub read_response_header { - @_ == 1 || croak(q/Usage: $handle->read_response_header()/); + @_ == 1 || die(q/Usage: $handle->read_response_header()/ . "\n"); my ($self) = @_; my $line = $self->readline; $line =~ /\A (HTTP\/(0*\d+\.0*\d+)) [\x09\x20]+ ([0-9]{3}) [\x09\x20]+ ([^\x0D\x0A]*) \x0D?\x0A/x - or croak(q/Malformed Status-Line: / . $Printable->($line)); + or die(q/Malformed Status-Line: / . $Printable->($line). "\n"); my ($protocol, $version, $status, $reason) = ($1, $2, $3, $4); - croak (qq/Unsupported HTTP protocol: $protocol/) + die (qq/Unsupported HTTP protocol: $protocol\n/) unless $version =~ /0*1\.0*[01]/; return { @@ -697,7 +777,7 @@ sub read_response_header { } sub write_request_header { - @_ == 4 || croak(q/Usage: $handle->write_request_header(method, request_uri, headers)/); + @_ == 4 || die(q/Usage: $handle->write_request_header(method, request_uri, headers)/ . "\n"); my ($self, $method, $request_uri, $headers) = @_; return $self->write("$method $request_uri HTTP/1.1\x0D\x0A") @@ -711,7 +791,7 @@ sub _do_timeout { my $fd = fileno $self->{fh}; defined $fd && $fd >= 0 - or croak(q/select(2): 'Bad file descriptor'/); + or die(qq/select(2): 'Bad file descriptor'\n/); my $initial = time; my $pending = $timeout; @@ -725,7 +805,7 @@ sub _do_timeout { : select(undef, $fdset, undef, $pending) ; if ($nfound == -1) { $! == EINTR - or croak(qq/select(2): '$!'/); + or die(qq/select(2): '$!'\n/); redo if !$timeout || ($pending = $timeout - (time - $initial)) > 0; $nfound = 0; } @@ -736,13 +816,13 @@ sub _do_timeout { } sub can_read { - @_ == 1 || @_ == 2 || croak(q/Usage: $handle->can_read([timeout])/); + @_ == 1 || @_ == 2 || die(q/Usage: $handle->can_read([timeout])/ . "\n"); my $self = shift; return $self->_do_timeout('read', @_) } sub can_write { - @_ == 1 || @_ == 2 || croak(q/Usage: $handle->can_write([timeout])/); + @_ == 1 || @_ == 2 || die(q/Usage: $handle->can_write([timeout])/ . "\n"); my $self = shift; return $self->_do_timeout('write', @_) } @@ -760,7 +840,7 @@ HTTP::Tiny - A small, simple, correct HTTP/1.1 client =head1 VERSION -version 0.012 +version 0.017 =head1 SYNOPSIS @@ -782,7 +862,7 @@ version 0.012 =head1 DESCRIPTION -This is a very simple HTTP/1.1 client, designed primarily for doing simple GET +This is a very simple HTTP/1.1 client, designed for doing simple GET requests without the overhead of a large framework like L. It is more correct and more complete than L. It supports @@ -801,52 +881,74 @@ This constructor returns a new HTTP::Tiny object. Valid attributes include: =item * -agent +C A user-agent string (defaults to 'HTTP::Tiny/$VERSION') =item * -default_headers +C A hashref of default headers to apply to requests =item * -max_redirect +C Maximum number of redirects allowed (defaults to 5) =item * -max_size +C Maximum response size (only when not using a data callback). If defined, -responses larger than this will die with an error message +responses larger than this will return an exception. =item * -proxy +C -URL of a proxy server to use. +URL of a proxy server to use (default is C<$ENV{http_proxy}> if set) =item * -timeout +C Request timeout in seconds (default is 60) =back -=head2 get +Exceptions from C, C or other errors will result in a +pseudo-HTTP status code of 599 and a reason of "Internal Exception". The +content field in the response will contain the text of the exception. + +=head2 get|head|put|post|delete $response = $http->get($url); $response = $http->get($url, \%options); + $response = $http->head($url); + +These methods are shorthand for calling C for the given method. The +URL must have unsafe characters escaped and international domain names encoded. +See C for valid options and a description of the response. + +The C field of the response will be true if the status code is 2XX. + +=head2 post_form -Executes a C request for the given URL. The URL must have unsafe -characters escaped and international domain names encoded. Internally, it just -calls C with 'GET' as the method. See C for valid -options and a description of the response. + $response = $http->post_form($url, $form_data); + $response = $http->post_form($url, $form_data, \%options); + +This method executes a C request and sends the key/value pairs from a +form data hash or array reference to the given URL with a C of +C. See documentation for the +C method for details on the encoding. + +The URL must have unsafe characters escaped and international domain names +encoded. See C for valid options and a description of the response. +Any C header or content in the options hashref will be ignored. + +The C field of the response will be true if the status code is 2XX. =head2 mirror @@ -859,11 +961,11 @@ Executes a C request for the URL and saves the response body to the file name provided. The URL must have unsafe characters escaped and international domain names encoded. If the file already exists, the request will includes an C header with the modification timestamp of the file. You -may specificy a different C header yourself in the C<< +may specify a different C header yourself in the C<< $options->{headers} >> hash. The C field of the response will be true if the status code is 2XX -or 304 (unmodified). +or if the status code is 304 (unmodified). If the file was modified and the server response includes a properly formatted C header, the file modification time will @@ -969,6 +1071,18 @@ it will otherwise be a scalar string containing the value On an exception during the execution of the request, the C field will contain 599, and the C field will contain the text of the exception. +=head2 www_form_urlencode + + $params = $http->www_form_urlencode( $data ); + $response = $http->get("http://example.com/query?$params"); + +This method converts the key/value pairs from a data hash or array reference +into a C string. The keys and values from the data +reference will be UTF-8 encoded and escaped per RFC 3986. If a value is an +array reference, the key will be repeated with each of the values of the array +reference. The key/value pairs in the resulting string will be sorted by key +and value. + =for Pod::Coverage agent default_headers max_redirect @@ -1009,7 +1123,7 @@ mandated by the specification. There is no automatic support for status 305 =item * -Persistant connections are not supported. The C header will +Persistent connections are not supported. The C header will always be set to C. =item * @@ -1027,7 +1141,9 @@ inappropriately re-transmitted. =item * -Proxy environment variables are not supported. +Only the C environment variable is supported in the format +C. If a C argument is passed to C (including +undef), then the C environment variable is ignored. =item * @@ -1060,18 +1176,18 @@ L =head2 Bugs / Feature Requests -Please report any bugs or feature requests by email to C, or through -the web interface at L. You will be automatically notified of any -progress on the request by the system. +Please report any bugs or feature requests through the issue tracker +at L. +You will be notified automatically of any progress on your issue. =head2 Source Code This is open source software. The code repository is available for public review and contribution under the terms of the license. -L +L - git clone git://github.com/dagolden/p5-http-tiny.git + git clone https://github.com/dagolden/p5-http-tiny.git =head1 AUTHORS @@ -1089,7 +1205,7 @@ David Golden =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2011 by Christian Hansen. +This software is copyright (c) 2012 by Christian Hansen. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff --git a/Master/tlpkg/tlperl/lib/Hash/Util/FieldHash.pm b/Master/tlpkg/tlperl/lib/Hash/Util/FieldHash.pm index a13ea856d54..4f833fffb40 100644 --- a/Master/tlpkg/tlperl/lib/Hash/Util/FieldHash.pm +++ b/Master/tlpkg/tlperl/lib/Hash/Util/FieldHash.pm @@ -5,7 +5,7 @@ use strict; use warnings; use Scalar::Util qw( reftype); -our $VERSION = '1.09'; +our $VERSION = '1.10'; require Exporter; our @ISA = qw(Exporter); @@ -103,7 +103,7 @@ Returns the reference address of a reference $obj. If $obj is not a reference, returns $obj. This function is a stand-in replacement for -L, that is, it returns +L, that is, it returns the reference address of its argument as a numeric value. The only difference is that C returns C when given a non-reference while C returns its argument unchanged. @@ -217,7 +217,7 @@ in this technique, classes that can advertise themselves as "Put me on your @ISA list and use my methods". If the other class has different ideas about how the object body is used, there is trouble. -For reference L in L shows the standard implementation of +For reference C in L shows the standard implementation of a simple class C in the well-known hash based way. It also demonstrates the predictable failure to construct a common subclass C of C and the class C (whose objects I be globrefs). @@ -231,8 +231,8 @@ With I classes, each class declares a (typically lexical) hash for each field it wants to use. The reference address of an object is used as the hash key. By definition, the reference address is unique to each object so this guarantees a place for each field that -is private to the class and unique to each object. See L in -L for a simple example. +is private to the class and unique to each object. See C +in L for a simple example. In comparison to the standard implementation where the object is a hash and the fields correspond to hash keys, here the fields correspond @@ -494,7 +494,7 @@ class. =item * C -Idhash-based inside-out implementation. Like L it needs +Idhash-based inside-out implementation. Like C it needs a C method and would need C for thread support. =item * C diff --git a/Master/tlpkg/tlperl/lib/I18N/LangTags.pm b/Master/tlpkg/tlperl/lib/I18N/LangTags.pm index efc12c226d8..6815a8549c8 100644 --- a/Master/tlpkg/tlperl/lib/I18N/LangTags.pm +++ b/Master/tlpkg/tlperl/lib/I18N/LangTags.pm @@ -19,7 +19,7 @@ require Exporter; ); %EXPORT_TAGS = ('ALL' => \@EXPORT_OK); -$VERSION = "0.35_01"; +$VERSION = "0.38"; sub uniq { my %seen; return grep(!($seen{$_}++), @_); } # a util function @@ -579,16 +579,16 @@ tag ("ar") exists. Examples: - alternate_language_tags('no-bok') is ('nb') - alternate_language_tags('nb') is ('no-bok') - alternate_language_tags('he') is ('iw') - alternate_language_tags('iw') is ('he') - alternate_language_tags('i-hakka') is ('zh-hakka', 'x-hakka') - alternate_language_tags('zh-hakka') is ('i-hakka', 'x-hakka') - alternate_language_tags('en') is () - alternate_language_tags('x-mingo-tom') is ('i-mingo-tom') - alternate_language_tags('x-klikitat') is ('i-klikitat') - alternate_language_tags('i-klikitat') is ('x-klikitat') + alternate_language_tags('no-bok') is ('nb') + alternate_language_tags('nb') is ('no-bok') + alternate_language_tags('he') is ('iw') + alternate_language_tags('iw') is ('he') + alternate_language_tags('i-hakka') is ('zh-hakka', 'x-hakka') + alternate_language_tags('zh-hakka') is ('i-hakka', 'x-hakka') + alternate_language_tags('en') is () + alternate_language_tags('x-mingo-tom') is ('i-mingo-tom') + alternate_language_tags('x-klikitat') is ('i-klikitat') + alternate_language_tags('i-klikitat') is ('x-klikitat') This function returns empty-list if given anything other than a formally valid language tag. @@ -844,17 +844,17 @@ language tags with their ASCII characters shifted into Plane 14. * L -* RFC 3066, C, "Tags for the +* RFC 3066, C, "Tags for the Identification of Languages". (Obsoletes RFC 1766) -* RFC 2277, C, "IETF Policy on +* RFC 2277, C, "IETF Policy on Character Sets and Languages". -* RFC 2231, C, "MIME Parameter +* RFC 2231, C, "MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations". -* RFC 2482, C, +* RFC 2482, C, "Language Tagging in Unicode Plain Text". * Locale::Codes, in @@ -862,7 +862,7 @@ C * ISO 639-2, "Codes for the representation of names of languages", including two-letter and three-letter codes, -C +C * The IANA list of registered languages (hopefully up-to-date), C diff --git a/Master/tlpkg/tlperl/lib/IO.pm b/Master/tlpkg/tlperl/lib/IO.pm index d6ccbfb1faa..e6f5567b9f0 100644 --- a/Master/tlpkg/tlperl/lib/IO.pm +++ b/Master/tlpkg/tlperl/lib/IO.pm @@ -7,7 +7,7 @@ use Carp; use strict; use warnings; -our $VERSION = "1.25_04"; +our $VERSION = "1.25_06"; XSLoader::load 'IO', $VERSION; sub import { @@ -32,8 +32,8 @@ IO - load various IO modules =head1 SYNOPSIS - use IO qw(Handle File); # loads IO modules, here IO::Handle, IO::File - use IO; # DEPRECATED + use IO qw(Handle File); # loads IO modules, here IO::Handle, IO::File + use IO; # DEPRECATED =head1 DESCRIPTION diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Bzip2.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Bzip2.pm index c3718d1f0df..452e12ef483 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Bzip2.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Bzip2.pm @@ -4,13 +4,12 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.033 qw(:Status); +use IO::Compress::Base::Common 2.048 qw(:Status); -#use Compress::Bzip2 ; -use Compress::Raw::Bzip2 2.033 ; +use Compress::Raw::Bzip2 2.048 ; our ($VERSION); -$VERSION = '2.033'; +$VERSION = '2.048'; sub mkCompObject { @@ -18,11 +17,12 @@ sub mkCompObject my $WorkFactor = shift ; my $Verbosity = shift ; + $BlockSize100K = 1 if ! defined $BlockSize100K ; + $WorkFactor = 0 if ! defined $WorkFactor ; + $Verbosity = 0 if ! defined $Verbosity ; + my ($def, $status) = new Compress::Raw::Bzip2(1, $BlockSize100K, $WorkFactor, $Verbosity); - #my ($def, $status) = bzdeflateInit(); - #-BlockSize100K => $params->value('BlockSize100K'), - #-WorkFactor => $params->value('WorkFactor'); return (undef, "Could not create Deflate object: $status", $status) if $status != BZ_OK ; @@ -39,7 +39,6 @@ sub compr my $def = $self->{Def}; - #my ($out, $status) = $def->bzdeflate(defined ${$_[0]} ? ${$_[0]} : "") ; my $status = $def->bzdeflate($_[0], $_[1]) ; $self->{ErrorNo} = $status; @@ -49,8 +48,6 @@ sub compr return STATUS_ERROR; } - #${ $_[1] } .= $out if defined $out; - return STATUS_OK; } @@ -60,8 +57,6 @@ sub flush my $def = $self->{Def}; - #my ($out, $status) = $def->bzflush($opt); - #my $status = $def->bzflush($_[0], $opt); my $status = $def->bzflush($_[0]); $self->{ErrorNo} = $status; @@ -71,7 +66,6 @@ sub flush return STATUS_ERROR; } - #${ $_[0] } .= $out if defined $out ; return STATUS_OK; } @@ -82,7 +76,6 @@ sub close my $def = $self->{Def}; - #my ($out, $status) = $def->bzclose(); my $status = $def->bzclose($_[0]); $self->{ErrorNo} = $status; @@ -92,7 +85,6 @@ sub close return STATUS_ERROR; } - #${ $_[0] } .= $out if defined $out ; return STATUS_OK; } diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Deflate.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Deflate.pm index 33e56d08a04..4a99c36cf7e 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Deflate.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Deflate.pm @@ -4,12 +4,18 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.033 qw(:Status); - -use Compress::Raw::Zlib 2.033 qw(Z_OK Z_FINISH MAX_WBITS) ; -our ($VERSION); - -$VERSION = '2.033'; +use IO::Compress::Base::Common 2.048 qw(:Status); +use Compress::Raw::Zlib 2.048 qw( !crc32 !adler32 ) ; + +require Exporter; +our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, @EXPORT, %DEFLATE_CONSTANTS); + +$VERSION = '2.048'; +@ISA = qw(Exporter); +@EXPORT_OK = @Compress::Raw::Zlib::DEFLATE_CONSTANTS; +%EXPORT_TAGS = %Compress::Raw::Zlib::DEFLATE_CONSTANTS; +@EXPORT = @EXPORT_OK; +%DEFLATE_CONSTANTS = %EXPORT_TAGS ; sub mkCompObject { diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Identity.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Identity.pm index 21a0be41080..c7a0031a1d4 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Identity.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Adapter/Identity.pm @@ -4,10 +4,10 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.033 qw(:Status); +use IO::Compress::Base::Common 2.048 qw(:Status); our ($VERSION); -$VERSION = '2.033'; +$VERSION = '2.048'; sub mkCompObject { diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Base.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Base.pm index d0d585ce761..2137bbb8de2 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Base.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Base.pm @@ -1,26 +1,26 @@ package IO::Compress::Base ; -require 5.004 ; +require 5.006 ; use strict ; use warnings; -use IO::Compress::Base::Common 2.033 ; +use IO::Compress::Base::Common 2.048 ; -use IO::File ; +use IO::File qw(SEEK_SET SEEK_END); ; use Scalar::Util qw(blessed readonly); #use File::Glob; #require Exporter ; -use Carp ; -use Symbol; +use Carp() ; +use Symbol(); use bytes; our (@ISA, $VERSION); @ISA = qw(Exporter IO::File); -$VERSION = '2.033'; +$VERSION = '2.048'; #Can't locate object method "SWASHNEW" via package "utf8" (perhaps you forgot to load "utf8"?) at .../ext/Compress-Zlib/Gzip/blib/lib/Compress/Zlib/Common.pm line 16. @@ -48,7 +48,7 @@ sub croakError { my $self = shift ; $self->saveErrorString(0, $_[0]); - croak $_[0]; + Carp::croak $_[0]; } sub closeError @@ -106,6 +106,14 @@ sub writeAt return 1; } +sub outputPayload +{ + + my $self = shift ; + return $self->output(@_); +} + + sub output { my $self = shift ; @@ -115,9 +123,9 @@ sub output return 1 if length $data == 0 && ! $last ; - if ( *$self->{FilterEnvelope} ) { + if ( *$self->{FilterContainer} ) { *_ = \$data; - &{ *$self->{FilterEnvelope} }(); + &{ *$self->{FilterContainer} }(); } if (length $data) { @@ -155,7 +163,7 @@ sub checkParams 'Append' => [1, 1, Parse_boolean, 0], 'BinModeIn' => [1, 1, Parse_boolean, 0], - 'FilterEnvelope' => [1, 1, Parse_any, undef], + 'FilterContainer' => [1, 1, Parse_code, undef], $self->getExtraParams(), *$self->{OneShot} ? $self->getOneShotParams() @@ -206,7 +214,7 @@ sub _create my $merge = $got->value('Merge') ; my $appendOutput = $got->value('Append') || $merge ; *$obj->{Append} = $appendOutput; - *$obj->{FilterEnvelope} = $got->value('FilterEnvelope') ; + *$obj->{FilterContainer} = $got->value('FilterContainer') ; if ($merge) { @@ -275,6 +283,7 @@ sub _create *$obj->{Header} = $obj->mkHeader($got) ; $obj->output( *$obj->{Header} ) or return undef; + $obj->beforePayload(); } else { @@ -392,7 +401,7 @@ sub _def # finally the 1 to 1 and n to 1 return $obj->_singleTarget($x, 1, $input, $output, @_); - croak "should not be here" ; + Carp::croak "should not be here" ; } sub _singleTarget @@ -405,7 +414,7 @@ sub _singleTarget if ($x->{oneInput}) { $obj->getFileInfo($x->{Got}, $input) - if isaFilename($input) and $inputIsFilename ; + if isaScalar($input) || (isaFilename($input) and $inputIsFilename) ; my $z = $obj->_create($x->{Got}, @_) or return undef ; @@ -435,7 +444,7 @@ sub _singleTarget else { $obj->getFileInfo($x->{Got}, $element) - if $isFilename; + if isaScalar($element) || $isFilename; $obj->_create($x->{Got}, @_) or return undef ; @@ -504,7 +513,7 @@ sub _wr2 return $count ; } - croak "Should not be here"; + Carp::croak "Should not be here"; return undef; } @@ -518,7 +527,7 @@ sub addInterStream { $self->getFileInfo(*$self->{Got}, $input) #if isaFilename($input) and $inputIsFilename ; - if isaFilename($input) ; + if isaScalar($input) || isaFilename($input) ; # TODO -- newStream needs to allow gzip/zip header to be modified return $self->newStream(); @@ -581,7 +590,7 @@ sub syswrite } $] >= 5.008 and ( utf8::downgrade($$buffer, 1) - or croak "Wide character in " . *$self->{ClassName} . "::write:"); + or Carp::croak "Wide character in " . *$self->{ClassName} . "::write:"); if (@_ > 1) { @@ -625,7 +634,7 @@ sub syswrite *$self->{CompSize}->add(length $outBuffer) ; - $self->output($outBuffer) + $self->outputPayload($outBuffer) or return undef; return $buffer_length; @@ -679,7 +688,7 @@ sub flush *$self->{CompSize}->add(length $outBuffer) ; - $self->output($outBuffer) + $self->outputPayload($outBuffer) or return 0; if ( defined *$self->{FH} ) { @@ -690,16 +699,18 @@ sub flush return 1; } -sub newStream +sub beforePayload +{ +} + +sub _newStream { my $self = shift ; - + my $got = shift; + $self->_writeTrailer() or return 0 ; - my $got = $self->checkParams('newStream', *$self->{Got}, @_) - or return 0 ; - $self->ckParams($got) or $self->croakError("newStream: $self->{Error}"); @@ -713,9 +724,35 @@ sub newStream *$self->{UnCompSize}->reset(); *$self->{CompSize}->reset(); + $self->beforePayload(); + return 1 ; } +sub newStream +{ + my $self = shift ; + + my $got = $self->checkParams('newStream', *$self->{Got}, @_) + or return 0 ; + + $self->_newStream($got); + +# *$self->{Compress} = $self->mkComp($got) +# or return 0; +# +# *$self->{Header} = $self->mkHeader($got) ; +# $self->output(*$self->{Header} ) +# or return 0; +# +# *$self->{UnCompSize}->reset(); +# *$self->{CompSize}->reset(); +# +# $self->beforePayload(); +# +# return 1 ; +} + sub reset { my $self = shift ; @@ -913,7 +950,7 @@ sub input_line_number sub _notAvailable { my $name = shift ; - return sub { croak "$name Not Available: File opened only for output" ; } ; + return sub { Carp::croak "$name Not Available: File opened only for output" ; } ; } *read = _notAvailable('read'); @@ -958,7 +995,7 @@ purpose if to to be sub-classed by IO::Compress modules. L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L -L +L L, L, L, @@ -974,7 +1011,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2011 Paul Marquess. All rights reserved. +Copyright (c) 2005-2012 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Base/Common.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Base/Common.pm index 1b38c59846a..c6c38181ef8 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Base/Common.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Base/Common.pm @@ -11,15 +11,20 @@ use File::GlobMapper; require Exporter; our ($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $HAS_ENCODE); @ISA = qw(Exporter); -$VERSION = '2.033'; +$VERSION = '2.048'; -@EXPORT = qw( isaFilehandle isaFilename whatIsInput whatIsOutput +@EXPORT = qw( isaFilehandle isaFilename isaScalar + whatIsInput whatIsOutput isaFileGlobString cleanFileGlobString oneTarget setBinModeInput setBinModeOutput ckInOutParams createSelfTiedObject getEncoding + isGeMax32 + + MAX32 + WANT_CODE WANT_EXT WANT_UNDEF @@ -42,7 +47,16 @@ use constant STATUS_OK => 0; use constant STATUS_ENDSTREAM => 1; use constant STATUS_EOF => 2; use constant STATUS_ERROR => -1; +use constant MAX16 => 0xFFFF ; +use constant MAX32 => 0xFFFFFFFF ; +use constant MAX32cmp => 0xFFFFFFFF + 1 - 1; # for 5.6.x on 32-bit need to force an non-IV value + +sub isGeMax32 +{ + return $_[0] >= MAX32cmp ; +} + sub hasEncode() { if (! defined $HAS_ENCODE) { @@ -106,6 +120,11 @@ sub isaFilehandle($) ) } +sub isaScalar +{ + return ( defined($_[0]) and ref($_[0]) eq 'SCALAR' and defined ${ $_[0] } ) ; +} + sub isaFilename($) { return (defined $_[0] and @@ -451,7 +470,8 @@ sub createSelfTiedObject $EXPORT_TAGS{Parse} = [qw( ParseParameters Parse_any Parse_unsigned Parse_signed - Parse_boolean Parse_custom Parse_string + Parse_boolean Parse_string + Parse_code Parse_multiple Parse_writable_scalar ) ]; @@ -463,7 +483,7 @@ use constant Parse_unsigned => 0x02; use constant Parse_signed => 0x04; use constant Parse_boolean => 0x08; use constant Parse_string => 0x10; -use constant Parse_custom => 0x12; +use constant Parse_code => 0x20; #use constant Parse_store_ref => 0x100 ; use constant Parse_multiple => 0x100 ; @@ -499,6 +519,7 @@ sub ParseParameters #package IO::Compress::Base::Parameters; use strict; + use warnings; use Carp; @@ -741,6 +762,13 @@ sub IO::Compress::Base::Parameters::_checkType $$output = defined $value ? $value != 0 : 0 ; return 1; } + elsif ($type & Parse_code) + { + return $self->setError("Parameter '$key' must be a code reference, got '$value'") + if $validate && (! defined $value || ref $value ne 'CODE') ; + $$output = defined $value ? $value : "" ; + return 1; + } elsif ($type & Parse_string) { $$output = defined $value ? $value : "" ; @@ -901,9 +929,13 @@ sub add $self->[HIGH] += $value->[HIGH] ; $value = $value->[LOW]; } + elsif ($value > MAX32) { + $self->[HIGH] += int($value / HI_1) ; + $value = $value % HI_1; + } my $available = MAX32 - $self->[LOW] ; - + if ($value > $available) { ++ $self->[HIGH] ; $self->[LOW] = $value - $available - 1; @@ -911,7 +943,33 @@ sub add else { $self->[LOW] += $value ; } +} + +sub subtract +{ + my $self = shift; + my $value = shift; + if (ref $value eq 'U64') { + + if ($value->[HIGH]) { + die "bad" + if $self->[HIGH] == 0 || + $value->[HIGH] > $self->[HIGH] ; + + $self->[HIGH] -= $value->[HIGH] ; + } + + $value = $value->[LOW] ; + } + + if ($value > $self->[LOW]) { + -- $self->[HIGH] ; + $self->[LOW] = MAX32 - $value + $self->[LOW] + 1 ; + } + else { + $self->[LOW] -= $value; + } } sub equal @@ -923,12 +981,40 @@ sub equal $self->[HIGH] == $other->[HIGH] ; } +sub gt +{ + my $self = shift; + my $other = shift; + + return $self->cmp($other) > 0 ; +} + +sub cmp +{ + my $self = shift; + my $other = shift ; + + if ($self->[LOW] == $other->[LOW]) { + return $self->[HIGH] - $other->[HIGH] ; + } + else { + return $self->[LOW] - $other->[LOW] ; + } +} + + sub is64bit { my $self = shift; return $self->[HIGH] > 0 ; } +sub isAlmost64bit +{ + my $self = shift; + return $self->[HIGH] > 0 || $self->[LOW] == MAX32 ; +} + sub getPacked_V64 { my $self = shift; @@ -951,6 +1037,21 @@ sub pack_V64 } +sub full32 +{ + return $_[0] == MAX32 ; +} + +sub Value_VV64 +{ + my $buffer = shift; + + my ($lo, $hi) = unpack ("V V" , $buffer); + no warnings 'uninitialized'; + return $hi * HI_1 + $lo; +} + + package IO::Compress::Base::Common; 1; diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Bzip2.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Bzip2.pm index 5d478d91bd2..dd9016bf834 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Bzip2.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Bzip2.pm @@ -5,16 +5,16 @@ use warnings; use bytes; require Exporter ; -use IO::Compress::Base 2.033 ; +use IO::Compress::Base 2.048 ; -use IO::Compress::Base::Common 2.033 qw(createSelfTiedObject); -use IO::Compress::Adapter::Bzip2 2.033 ; +use IO::Compress::Base::Common 2.048 qw(createSelfTiedObject); +use IO::Compress::Adapter::Bzip2 2.048 ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $Bzip2Error); -$VERSION = '2.033'; +$VERSION = '2.048'; $Bzip2Error = ''; @ISA = qw(Exporter IO::Compress::Base); @@ -51,7 +51,7 @@ sub getExtraParams { my $self = shift ; - use IO::Compress::Base::Common 2.033 qw(:Parse); + use IO::Compress::Base::Common 2.048 qw(:Parse); return ( 'BlockSize100K' => [0, 1, Parse_unsigned, 1], diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Deflate.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Deflate.pm index 20329bb4284..daa7d7aa258 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Deflate.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Deflate.pm @@ -1,26 +1,29 @@ package IO::Compress::Deflate ; +require 5.006 ; + use strict ; use warnings; use bytes; require Exporter ; -use IO::Compress::RawDeflate 2.033 ; +use IO::Compress::RawDeflate 2.048 (); +use IO::Compress::Adapter::Deflate 2.048 ; -use Compress::Raw::Zlib 2.033 ; -use IO::Compress::Zlib::Constants 2.033 ; -use IO::Compress::Base::Common 2.033 qw(createSelfTiedObject); +use IO::Compress::Zlib::Constants 2.048 ; +use IO::Compress::Base::Common 2.048 qw(createSelfTiedObject); -our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $DeflateError); +our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $DeflateError); -$VERSION = '2.033'; +$VERSION = '2.048'; $DeflateError = ''; @ISA = qw(Exporter IO::Compress::RawDeflate); @EXPORT_OK = qw( $DeflateError deflate ) ; %EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ; + push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); @@ -774,7 +777,7 @@ If the C<$z> object is associated with a file or a filehandle, C will return the underlying file descriptor. Once the C method is called C will return C. -If the C<$z> object is is associated with a buffer, this method will return +If the C<$z> object is associated with a buffer, this method will return C. =head2 close @@ -884,8 +887,6 @@ These symbolic constants are used by the C option in the constructor. See L - - =head2 Working with Net::FTP See L @@ -894,7 +895,7 @@ See L L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L -L +L L, L, L, @@ -923,7 +924,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2011 Paul Marquess. All rights reserved. +Copyright (c) 2005-2012 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/FAQ.pod b/Master/tlpkg/tlperl/lib/IO/Compress/FAQ.pod new file mode 100644 index 00000000000..d392ff2cc91 --- /dev/null +++ b/Master/tlpkg/tlperl/lib/IO/Compress/FAQ.pod @@ -0,0 +1,597 @@ + +=head1 NAME + +IO::Compress::FAQ -- Frequently Asked Questions about IO::Compress + +=head1 DESCRIPTION + +Common questions answered. + +=head1 GENERAL + +=head2 Compatibility with Unix compress/uncompress. + +Although C has a pair of functions called C and +C, they are I related to the Unix programs of the same +name. The C module is not compatible with Unix +C. + +If you have the C program available, you can use this to read +compressed files + + open F, "uncompress -c $filename |"; + while () + { + ... + +Alternatively, if you have the C program available, you can use +this to read compressed files + + open F, "gunzip -c $filename |"; + while () + { + ... + +and this to write compress files, if you have the C program +available + + open F, "| compress -c $filename "; + print F "data"; + ... + close F ; + +=head2 Accessing .tar.Z files + +The C module can optionally use C (via the +C module) to access tar files that have been compressed with +C. Unfortunately tar files compressed with the Unix C +utility cannot be read by C and so cannot be directly +accessed by C. + +If the C or C programs are available, you can use one +of these workarounds to read C<.tar.Z> files from C + +Firstly with C + + use strict; + use warnings; + use Archive::Tar; + + open F, "uncompress -c $filename |"; + my $tar = Archive::Tar->new(*F); + ... + +and this with C + + use strict; + use warnings; + use Archive::Tar; + + open F, "gunzip -c $filename |"; + my $tar = Archive::Tar->new(*F); + ... + +Similarly, if the C program is available, you can use this to +write a C<.tar.Z> file + + use strict; + use warnings; + use Archive::Tar; + use IO::File; + + my $fh = new IO::File "| compress -c >$filename"; + my $tar = Archive::Tar->new(); + ... + $tar->write($fh); + $fh->close ; + +=head2 How do I recompress using a different compression? + +This is easier that you might expect if you realise that all the +C objects are derived from C and that all the +C modules can read from an C filehandle. + +So, for example, say you have a file compressed with gzip that you want to +recompress with bzip2. Here is all that is needed to carry out the +recompression. + + use IO::Uncompress::Gunzip ':all'; + use IO::Compress::Bzip2 ':all'; + + my $gzipFile = "somefile.gz"; + my $bzipFile = "somefile.bz2"; + + my $gunzip = new IO::Uncompress::Gunzip $gzipFile + or die "Cannot gunzip $gzipFile: $GunzipError\n" ; + + bzip2 $gunzip => $bzipFile + or die "Cannot bzip2 to $bzipFile: $Bzip2Error\n" ; + +Note, there is a limitation of this technique. Some compression file +formats store extra information along with the compressed data payload. For +example, gzip can optionally store the original filename and Zip stores a +lot of information about the original file. If the original compressed file +contains any of this extra information, it will not be transferred to the +new compressed file usign the technique above. + +=head1 ZIP + +=head2 What Compression Types do IO::Compress::Zip & IO::Uncompress::Unzip support? + +The following compression formats are supported by C and +C + +=over 5 + +=item * Store (method 0) + +No compression at all. + +=item * Deflate (method 8) + +This is the default compression used when creating a zip file with +C. + +=item * Bzip2 (method 12) + +Only supported if the C module is installed. + +=item * Lzma (method 14) + +Only supported if the C module is installed. + +=back + +=head2 Can I Read/Write Zip files larger the 4 Gig? + +Yes, both the C and C modules +support the zip feature called I. That allows them to read/write +files/buffers larger than 4Gig. + +If you are creating a Zip file using the one-shot interface, and any of the +input files is greater than 4Gig, a zip64 complaint zip file will be +created. + + zip "really-large-file" => "my.zip"; + +Similarly with the one-shot interface, if the input is a buffer larger than +4 Gig, a zip64 complaint zip file will be created. + + zip \$really_large_buffer => "my.zip"; + +The one-shot interface allows you to force the creation of a zip64 zip file +by including the C option. + + zip $filehandle => "my.zip", Zip64 => 1; + +If you want to create a zip64 zip file with the OO interface you must +specify the C option. + + my $zip = new IO::Compress::Zip "whatever", Zip64 => 1; + +When uncompressing with C, it will automatically +detect if the zip file is zip64. + +If you intend to manipulate the Zip64 zip files created with +C using an external zip/unzip, make sure that it supports +Zip64. + +In particular, if you are using Info-Zip you need to have zip version 3.x +or better to update a Zip64 archive and unzip version 6.x to read a zip64 +archive. + +=head2 Zip Resources + +The primary reference for zip files is the "appnote" document available at +L + +An alternatively is the Info-Zip appnote. This is available from +L + +=head1 GZIP + +=head2 Gzip Resources + +The primary reference for gzip files is RFC 1952 +L + +The primary site for gzip is F. + +=head1 ZLIB + +=head2 Zlib Resources + +The primary site for the I compression library is +F. + +=head1 HTTP & NETWORK + +=head2 Apache::GZip Revisited + +Below is a mod_perl Apache compression module, called C, +taken from +F + + package Apache::GZip; + #File: Apache::GZip.pm + + use strict vars; + use Apache::Constants ':common'; + use Compress::Zlib; + use IO::File; + use constant GZIP_MAGIC => 0x1f8b; + use constant OS_MAGIC => 0x03; + + sub handler { + my $r = shift; + my ($fh,$gz); + my $file = $r->filename; + return DECLINED unless $fh=IO::File->new($file); + $r->header_out('Content-Encoding'=>'gzip'); + $r->send_http_header; + return OK if $r->header_only; + + tie *STDOUT,'Apache::GZip',$r; + print($_) while <$fh>; + untie *STDOUT; + return OK; + } + + sub TIEHANDLE { + my($class,$r) = @_; + # initialize a deflation stream + my $d = deflateInit(-WindowBits=>-MAX_WBITS()) || return undef; + + # gzip header -- don't ask how I found out + $r->print(pack("nccVcc",GZIP_MAGIC,Z_DEFLATED,0,time(),0,OS_MAGIC)); + + return bless { r => $r, + crc => crc32(undef), + d => $d, + l => 0 + },$class; + } + + sub PRINT { + my $self = shift; + foreach (@_) { + # deflate the data + my $data = $self->{d}->deflate($_); + $self->{r}->print($data); + # keep track of its length and crc + $self->{l} += length($_); + $self->{crc} = crc32($_,$self->{crc}); + } + } + + sub DESTROY { + my $self = shift; + + # flush the output buffers + my $data = $self->{d}->flush; + $self->{r}->print($data); + + # print the CRC and the total length (uncompressed) + $self->{r}->print(pack("LL",@{$self}{qw/crc l/})); + } + + 1; + +Here's the Apache configuration entry you'll need to make use of it. Once +set it will result in everything in the /compressed directory will be +compressed automagically. + + + SetHandler perl-script + PerlHandler Apache::GZip + + +Although at first sight there seems to be quite a lot going on in +C, you could sum up what the code was doing as follows -- +read the contents of the file in C<< $r->filename >>, compress it and write +the compressed data to standard output. That's all. + +This code has to jump through a few hoops to achieve this because + +=over + +=item 1. + +The gzip support in C version 1.x can only work with a real +filesystem filehandle. The filehandles used by Apache modules are not +associated with the filesystem. + +=item 2. + +That means all the gzip support has to be done by hand - in this case by +creating a tied filehandle to deal with creating the gzip header and +trailer. + +=back + +C doesn't have that filehandle limitation (this was one +of the reasons for writing it in the first place). So if +C is used instead of C the whole tied +filehandle code can be removed. Here is the rewritten code. + + package Apache::GZip; + + use strict vars; + use Apache::Constants ':common'; + use IO::Compress::Gzip; + use IO::File; + + sub handler { + my $r = shift; + my ($fh,$gz); + my $file = $r->filename; + return DECLINED unless $fh=IO::File->new($file); + $r->header_out('Content-Encoding'=>'gzip'); + $r->send_http_header; + return OK if $r->header_only; + + my $gz = new IO::Compress::Gzip '-', Minimal => 1 + or return DECLINED ; + + print $gz $_ while <$fh>; + + return OK; + } + +or even more succinctly, like this, using a one-shot gzip + + package Apache::GZip; + + use strict vars; + use Apache::Constants ':common'; + use IO::Compress::Gzip qw(gzip); + + sub handler { + my $r = shift; + $r->header_out('Content-Encoding'=>'gzip'); + $r->send_http_header; + return OK if $r->header_only; + + gzip $r->filename => '-', Minimal => 1 + or return DECLINED ; + + return OK; + } + + 1; + +The use of one-shot C above just reads from C<< $r->filename >> and +writes the compressed data to standard output. + +Note the use of the C option in the code above. When using gzip +for Content-Encoding you should I use this option. In the example +above it will prevent the filename being included in the gzip header and +make the size of the gzip data stream a slight bit smaller. + +=head2 Compressed files and Net::FTP + +The C module provides two low-level methods called C and +C that both return filehandles. These filehandles can used with the +C modules to compress or uncompress files read +from or written to an FTP Server on the fly, without having to create a +temporary file. + +Firstly, here is code that uses C to uncompressed a file as it is +read from the FTP Server. + + use Net::FTP; + use IO::Uncompress::Gunzip qw(:all); + + my $ftp = new Net::FTP ... + + my $retr_fh = $ftp->retr($compressed_filename); + gunzip $retr_fh => $outFilename, AutoClose => 1 + or die "Cannot uncompress '$compressed_file': $GunzipError\n"; + +and this to compress a file as it is written to the FTP Server + + use Net::FTP; + use IO::Compress::Gzip qw(:all); + + my $stor_fh = $ftp->stor($filename); + gzip "filename" => $stor_fh, AutoClose => 1 + or die "Cannot compress '$filename': $GzipError\n"; + +=head1 MISC + +=head2 Using C to uncompress data embedded in a larger file/buffer. + +A fairly common use-case is where compressed data is embedded in a larger +file/buffer and you want to read both. + +As an example consider the structure of a zip file. This is a well-defined +file format that mixes both compressed and uncompressed sections of data in +a single file. + +For the purposes of this discussion you can think of a zip file as sequence +of compressed data streams, each of which is prefixed by an uncompressed +local header. The local header contains information about the compressed +data stream, including the name of the compressed file and, in particular, +the length of the compressed data stream. + +To illustrate how to use C here is a script that walks a zip +file and prints out how many lines are in each compressed file (if you +intend write code to walking through a zip file for real see +L ). Also, although +this example uses the zlib-based compression, the technique can be used by +the other C modules. + + use strict; + use warnings; + + use IO::File; + use IO::Uncompress::RawInflate qw(:all); + + use constant ZIP_LOCAL_HDR_SIG => 0x04034b50; + use constant ZIP_LOCAL_HDR_LENGTH => 30; + + my $file = $ARGV[0] ; + + my $fh = new IO::File "<$file" + or die "Cannot open '$file': $!\n"; + + while (1) + { + my $sig; + my $buffer; + + my $x ; + ($x = $fh->read($buffer, ZIP_LOCAL_HDR_LENGTH)) == ZIP_LOCAL_HDR_LENGTH + or die "Truncated file: $!\n"; + + my $signature = unpack ("V", substr($buffer, 0, 4)); + + last unless $signature == ZIP_LOCAL_HDR_SIG; + + # Read Local Header + my $gpFlag = unpack ("v", substr($buffer, 6, 2)); + my $compressedMethod = unpack ("v", substr($buffer, 8, 2)); + my $compressedLength = unpack ("V", substr($buffer, 18, 4)); + my $uncompressedLength = unpack ("V", substr($buffer, 22, 4)); + my $filename_length = unpack ("v", substr($buffer, 26, 2)); + my $extra_length = unpack ("v", substr($buffer, 28, 2)); + + my $filename ; + $fh->read($filename, $filename_length) == $filename_length + or die "Truncated file\n"; + + $fh->read($buffer, $extra_length) == $extra_length + or die "Truncated file\n"; + + if ($compressedMethod != 8 && $compressedMethod != 0) + { + warn "Skipping file '$filename' - not deflated $compressedMethod\n"; + $fh->read($buffer, $compressedLength) == $compressedLength + or die "Truncated file\n"; + next; + } + + if ($compressedMethod == 0 && $gpFlag & 8 == 8) + { + die "Streamed Stored not supported for '$filename'\n"; + } + + next if $compressedLength == 0; + + # Done reading the Local Header + + my $inf = new IO::Uncompress::RawInflate $fh, + Transparent => 1, + InputLength => $compressedLength + or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ; + + my $line_count = 0; + + while (<$inf>) + { + ++ $line_count; + } + + print "$filename: $line_count\n"; + } + +The majority of the code above is concerned with reading the zip local +header data. The code that I want to focus on is at the bottom. + + while (1) { + + # read local zip header data + # get $filename + # get $compressedLength + + my $inf = new IO::Uncompress::RawInflate $fh, + Transparent => 1, + InputLength => $compressedLength + or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ; + + my $line_count = 0; + + while (<$inf>) + { + ++ $line_count; + } + + print "$filename: $line_count\n"; + } + +The call to C creates a new filehandle C<$inf> +that can be used to read from the parent filehandle C<$fh>, uncompressing +it as it goes. The use of the C option will guarantee that +I C<$compressedLength> bytes of compressed data will be read from +the C<$fh> filehandle (The only exception is for an error case like a +truncated file or a corrupt data stream). + +This means that once RawInflate is finished C<$fh> will be left at the +byte directly after the compressed data stream. + +Now consider what the code looks like without C + + while (1) { + + # read local zip header data + # get $filename + # get $compressedLength + + # read all the compressed data into $data + read($fh, $data, $compressedLength); + + my $inf = new IO::Uncompress::RawInflate \$data, + Transparent => 1, + or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ; + + my $line_count = 0; + + while (<$inf>) + { + ++ $line_count; + } + + print "$filename: $line_count\n"; + } + +The difference here is the addition of the temporary variable C<$data>. +This is used to store a copy of the compressed data while it is being +uncompressed. + +If you know that C<$compressedLength> isn't that big then using temporary +storage won't be a problem. But if C<$compressedLength> is very large or +you are writing an application that other people will use, and so have no +idea how big C<$compressedLength> will be, it could be an issue. + +Using C avoids the use of temporary storage and means the +application can cope with large compressed data streams. + +One final point -- obviously C can only be used whenever you +know the length of the compressed data beforehand, like here with a zip +file. + +=head1 SEE ALSO + +L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L + +L + +L, L, +L, +L + +=head1 AUTHOR + +This module was written by Paul Marquess, F. + +=head1 MODIFICATION HISTORY + +See the Changes file. + +=head1 COPYRIGHT AND LICENSE + +Copyright (c) 2005-2012 Paul Marquess. All rights reserved. + +This program is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. + diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Gzip.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Gzip.pm index 2a7894257d4..6530c2532de 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Gzip.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Gzip.pm @@ -1,19 +1,19 @@ - package IO::Compress::Gzip ; -require 5.004 ; +require 5.006 ; use strict ; use warnings; use bytes; +require Exporter ; -use IO::Compress::RawDeflate 2.033 ; +use IO::Compress::RawDeflate 2.048 () ; +use IO::Compress::Adapter::Deflate 2.048 ; -use Compress::Raw::Zlib 2.033 ; -use IO::Compress::Base::Common 2.033 qw(:Status :Parse createSelfTiedObject); -use IO::Compress::Gzip::Constants 2.033 ; -use IO::Compress::Zlib::Extra 2.033 ; +use IO::Compress::Base::Common 2.048 qw(:Status :Parse isaScalar createSelfTiedObject); +use IO::Compress::Gzip::Constants 2.048 ; +use IO::Compress::Zlib::Extra 2.048 ; BEGIN { @@ -23,16 +23,15 @@ BEGIN { *noUTF8 = sub {} } } -require Exporter ; - -our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $GzipError); +our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $GzipError); -$VERSION = '2.033'; +$VERSION = '2.048'; $GzipError = '' ; @ISA = qw(Exporter IO::Compress::RawDeflate); @EXPORT_OK = qw( $GzipError gzip ) ; %EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ; + push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); @@ -178,6 +177,8 @@ sub getFileInfo my $params = shift; my $filename = shift ; + return if isaScalar($filename); + my $defaultTime = (stat($filename))[9] ; $params->value('Name' => $filename) @@ -256,7 +257,7 @@ sub mkHeader } # HEADER CRC - $out .= pack("v", crc32($out) & 0x00FF ) if $param->value('HeaderCRC') ; + $out .= pack("v", Compress::Raw::Zlib::crc32($out) & 0x00FF ) if $param->value('HeaderCRC') ; noUTF8($out); @@ -1086,7 +1087,7 @@ If the C<$z> object is associated with a file or a filehandle, C will return the underlying file descriptor. Once the C method is called C will return C. -If the C<$z> object is is associated with a buffer, this method will return +If the C<$z> object is associated with a buffer, this method will return C. =head2 close @@ -1196,8 +1197,6 @@ These symbolic constants are used by the C option in the constructor. See L - - =head2 Working with Net::FTP See L @@ -1206,7 +1205,7 @@ See L L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L -L +L L, L, L, @@ -1235,7 +1234,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2011 Paul Marquess. All rights reserved. +Copyright (c) 2005-2012 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Gzip/Constants.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Gzip/Constants.pm index ca74d738837..c218a31445c 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Gzip/Constants.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Gzip/Constants.pm @@ -9,7 +9,7 @@ require Exporter; our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names); our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE); -$VERSION = '2.033'; +$VERSION = '2.048'; @ISA = qw(Exporter); diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/RawDeflate.pm b/Master/tlpkg/tlperl/lib/IO/Compress/RawDeflate.pm index bb077f989c9..883a4eb2f72 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/RawDeflate.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/RawDeflate.pm @@ -7,44 +7,23 @@ use warnings; use bytes; -use IO::Compress::Base 2.033 ; -use IO::Compress::Base::Common 2.033 qw(:Status createSelfTiedObject); -use IO::Compress::Adapter::Deflate 2.033 ; +use IO::Compress::Base 2.048 ; +use IO::Compress::Base::Common 2.048 qw(:Status createSelfTiedObject); +use IO::Compress::Adapter::Deflate 2.048 ; require Exporter ; - our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError); -$VERSION = '2.033'; +$VERSION = '2.048'; $RawDeflateError = ''; @ISA = qw(Exporter IO::Compress::Base); @EXPORT_OK = qw( $RawDeflateError rawdeflate ) ; +push @EXPORT_OK, @IO::Compress::Adapter::Deflate::EXPORT_OK ; + +%EXPORT_TAGS = %IO::Compress::Adapter::Deflate::DEFLATE_CONSTANTS; -%EXPORT_TAGS = ( flush => [qw{ - Z_NO_FLUSH - Z_PARTIAL_FLUSH - Z_SYNC_FLUSH - Z_FULL_FLUSH - Z_FINISH - Z_BLOCK - }], - level => [qw{ - Z_NO_COMPRESSION - Z_BEST_SPEED - Z_BEST_COMPRESSION - Z_DEFAULT_COMPRESSION - }], - strategy => [qw{ - Z_FILTERED - Z_HUFFMAN_ONLY - Z_RLE - Z_FIXED - Z_DEFAULT_STRATEGY - }], - - ); { my %seen; @@ -60,7 +39,7 @@ $RawDeflateError = ''; %DEFLATE_CONSTANTS = %EXPORT_TAGS; -push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; +#push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); @@ -142,8 +121,8 @@ sub getZlibParams { my $self = shift ; - use IO::Compress::Base::Common 2.033 qw(:Parse); - use Compress::Raw::Zlib 2.033 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY); + use IO::Compress::Base::Common 2.048 qw(:Parse); + use Compress::Raw::Zlib 2.048 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY); return ( @@ -861,7 +840,7 @@ If the C<$z> object is associated with a file or a filehandle, C will return the underlying file descriptor. Once the C method is called C will return C. -If the C<$z> object is is associated with a buffer, this method will return +If the C<$z> object is associated with a buffer, this method will return C. =head2 close @@ -971,8 +950,6 @@ These symbolic constants are used by the C option in the constructor. See L - - =head2 Working with Net::FTP See L @@ -981,7 +958,7 @@ See L L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L -L +L L, L, L, @@ -1010,7 +987,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2011 Paul Marquess. All rights reserved. +Copyright (c) 2005-2012 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/Master/tlpkg/tlperl/lib/IO/Compress/Zip.pm b/Master/tlpkg/tlperl/lib/IO/Compress/Zip.pm index 62acc8e1fa2..9c2780a5e06 100644 --- a/Master/tlpkg/tlperl/lib/IO/Compress/Zip.pm +++ b/Master/tlpkg/tlperl/lib/IO/Compress/Zip.pm @@ -4,40 +4,45 @@ use strict ; use warnings; use bytes; -use IO::Compress::Base::Common 2.033 qw(:Status createSelfTiedObject); -use IO::Compress::RawDeflate 2.033 ; -use IO::Compress::Adapter::Deflate 2.033 ; -use IO::Compress::Adapter::Identity 2.033 ; -use IO::Compress::Zlib::Extra 2.033 ; -use IO::Compress::Zip::Constants 2.033 ; +use IO::Compress::Base::Common 2.048 qw(:Status MAX32 isGeMax32 isaScalar createSelfTiedObject); +use IO::Compress::RawDeflate 2.048 (); +use IO::Compress::Adapter::Deflate 2.048 ; +use IO::Compress::Adapter::Identity 2.048 ; +use IO::Compress::Zlib::Extra 2.048 ; +use IO::Compress::Zip::Constants 2.048 ; +use File::Spec(); +use Config; + +use Compress::Raw::Zlib 2.048 (); -use Compress::Raw::Zlib 2.033 qw(crc32) ; BEGIN { eval { require IO::Compress::Adapter::Bzip2 ; - import IO::Compress::Adapter::Bzip2 2.033 ; + import IO::Compress::Adapter::Bzip2 2.048 ; require IO::Compress::Bzip2 ; - import IO::Compress::Bzip2 2.033 ; + import IO::Compress::Bzip2 2.048 ; + } ; + + eval { require IO::Compress::Adapter::Lzma ; + import IO::Compress::Adapter::Lzma 2.048 ; + require IO::Compress::Lzma ; + import IO::Compress::Lzma 2.048 ; } ; -# eval { require IO::Compress::Adapter::Lzma ; -# import IO::Compress::Adapter::Lzma 2.020 ; -# require IO::Compress::Lzma ; -# import IO::Compress::Lzma 2.033 ; -# } ; } require Exporter ; -our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $ZipError); +our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $ZipError); -$VERSION = '2.033'; +$VERSION = '2.048'; $ZipError = ''; @ISA = qw(Exporter IO::Compress::RawDeflate); @EXPORT_OK = qw( $ZipError zip ) ; %EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ; + push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; $EXPORT_TAGS{zip_method} = [qw( ZIP_CM_STORE ZIP_CM_DEFLATE ZIP_CM_BZIP2 ZIP_CM_LZMA)]; @@ -51,6 +56,7 @@ sub new my $obj = createSelfTiedObject($class, \$ZipError); $obj->_create(undef, @_); + } sub zip @@ -59,6 +65,46 @@ sub zip return $obj->_def(@_); } +sub isMethodAvailable +{ + my $method = shift; + + # Store & Deflate are always available + return 1 + if $method == ZIP_CM_STORE || $method == ZIP_CM_DEFLATE ; + + return 1 + if $method == ZIP_CM_BZIP2 and + defined $IO::Compress::Adapter::Bzip2::VERSION; + + return 1 + if $method == ZIP_CM_LZMA and + defined $IO::Compress::Adapter::Lzma::VERSION; + + return 0; +} + +sub beforePayload +{ + my $self = shift ; + + if (*$self->{ZipData}{Sparse} ) { + my $inc = 1024 * 100 ; + my $NULLS = ("\x00" x $inc) ; + my $sparse = *$self->{ZipData}{Sparse} ; + *$self->{CompSize}->add( $sparse ); + *$self->{UnCompSize}->add( $sparse ); + + *$self->{FH}->seek($sparse, IO::Handle::SEEK_CUR); + + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32($NULLS, *$self->{ZipData}{CRC32}) + for 1 .. int $sparse / $inc; + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(substr($NULLS, 0, $sparse % $inc), + *$self->{ZipData}{CRC32}) + if $sparse % $inc; + } +} + sub mkComp { my $self = shift ; @@ -71,7 +117,7 @@ sub mkComp $got->value('Level'), $got->value('Strategy') ); - *$self->{ZipData}{CRC32} = crc32(undef); + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(undef); } elsif (*$self->{ZipData}{Method} == ZIP_CM_DEFLATE) { ($obj, $errstr, $errno) = IO::Compress::Adapter::Deflate::mkCompObject( @@ -87,12 +133,14 @@ sub mkComp $got->value('WorkFactor'), $got->value('Verbosity') ); - *$self->{ZipData}{CRC32} = crc32(undef); + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(undef); + } + elsif (*$self->{ZipData}{Method} == ZIP_CM_LZMA) { + ($obj, $errstr, $errno) = IO::Compress::Adapter::Lzma::mkRawZipCompObject($got->value('Preset'), + $got->value('Extreme'), + ); + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(undef); } -# elsif (*$self->{ZipData}{Method} == ZIP_CM_LZMA) { -# ($obj, $errstr, $errno) = IO::Compress::Adapter::Lzma::mkCompObject(); -# *$self->{ZipData}{CRC32} = crc32(undef); -# } return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; @@ -126,11 +174,57 @@ sub filterUncompressed *$self->{ZipData}{CRC32} = *$self->{Compress}->crc32(); } else { - *$self->{ZipData}{CRC32} = crc32(${$_[0]}, *$self->{ZipData}{CRC32}); + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(${$_[0]}, *$self->{ZipData}{CRC32}); } } +sub canonicalName +{ + # This sub is derived from Archive::Zip::_asZipDirName + + # Return the normalized name as used in a zip file (path + # separators become slashes, etc.). + # Will translate internal slashes in path components (i.e. on Macs) to + # underscores. Discards volume names. + # When $forceDir is set, returns paths with trailing slashes + # + # input output + # . '.' + # ./a a + # ./a/b a/b + # ./a/b/ a/b + # a/b/ a/b + # /a/b/ a/b + # c:\a\b\c.doc a/b/c.doc # on Windows + # "i/o maps:whatever" i_o maps/whatever # on Macs + + my $name = shift; + my $forceDir = shift ; + + my ( $volume, $directories, $file ) = + File::Spec->splitpath( File::Spec->canonpath($name), $forceDir ); + + my @dirs = map { $_ =~ s{/}{_}g; $_ } + File::Spec->splitdir($directories); + + if ( @dirs > 0 ) { pop (@dirs) if $dirs[-1] eq '' } # remove empty component + push @dirs, defined($file) ? $file : '' ; + + my $normalised_path = join '/', @dirs; + + # Leading directory separators should not be stored in zip archives. + # Example: + # C:\a\b\c\ a/b/c + # C:\a\b\c.txt a/b/c.txt + # /a/b/c/ a/b/c + # /a/b/c.txt a/b/c.txt + $normalised_path =~ s{^/}{}; # remove leading separator + + return $normalised_path; +} + + sub mkHeader { my $self = shift; @@ -139,11 +233,27 @@ sub mkHeader *$self->{ZipData}{LocalHdrOffset} = U64::clone(*$self->{ZipData}{Offset}); + my $comment = ''; + $comment = $param->value('Comment') || ''; + my $filename = ''; $filename = $param->value('Name') || ''; - my $comment = ''; - $comment = $param->value('Comment') || ''; + $filename = canonicalName($filename) + if length $filename && $param->value('CanonicalName') ; + + if (defined *$self->{ZipData}{FilterName} ) { + local *_ = \$filename ; + &{ *$self->{ZipData}{FilterName} }() ; + } + +# if ( $param->value('UTF8') ) { +# require Encode ; +# $filename = Encode::encode_utf8($filename) +# if length $filename ; +# $comment = Encode::encode_utf8($filename) +# if length $comment ; +# } my $hdr = ''; @@ -156,11 +266,12 @@ sub mkHeader my $extFileAttr = 0 ; # This code assumes Unix. + # TODO - revisit this $extFileAttr = 0100644 << 16 if $osCode == ZIP_OS_CODE_UNIX ; if (*$self->{ZipData}{Zip64}) { - $empty = 0xFFFFFFFF; + $empty = MAX32; my $x = ''; $x .= pack "V V", 0, 0 ; # uncompressedLength @@ -169,7 +280,7 @@ sub mkHeader } if (! $param->value('Minimal')) { - if (defined $param->value('exTime')) + if ($param->parsed('MTime')) { $extra .= mkExtendedTime($param->value('MTime'), $param->value('ATime'), @@ -178,10 +289,20 @@ sub mkHeader $ctlExtra .= mkExtendedTime($param->value('MTime')); } - if ( $param->value('UID') && $osCode == ZIP_OS_CODE_UNIX) + if ( $osCode == ZIP_OS_CODE_UNIX ) { - $extra .= mkUnix2Extra( $param->value('UID'), $param->value('GID')); - $ctlExtra .= mkUnix2Extra(); + if ( $param->value('want_exUnixN') ) + { + my $ux3 = mkUnixNExtra( @{ $param->value('want_exUnixN') }); + $extra .= $ux3; + $ctlExtra .= $ux3; + } + + if ( $param->value('exUnix2') ) + { + $extra .= mkUnix2Extra( @{ $param->value('exUnix2') }); + $ctlExtra .= mkUnix2Extra(); + } } $extFileAttr = $param->value('ExtAttr') @@ -194,15 +315,21 @@ sub mkHeader if defined $param->value('ExtraFieldCentral'); } + my $method = *$self->{ZipData}{Method} ; my $gpFlag = 0 ; $gpFlag |= ZIP_GP_FLAG_STREAMING_MASK if *$self->{ZipData}{Stream} ; - my $method = *$self->{ZipData}{Method} ; + $gpFlag |= ZIP_GP_FLAG_LZMA_EOS_PRESENT + if $method == ZIP_CM_LZMA ; + + #$gpFlag |= ZIP_GP_FLAG_LANGUAGE_ENCODING + #if $param->value('UTF8') && length($filename) + length($comment); my $version = $ZIP_CM_MIN_VERSIONS{$method}; $version = ZIP64_MIN_VERSION if ZIP64_MIN_VERSION > $version && *$self->{ZipData}{Zip64}; + my $madeBy = ($param->value('OS_Code') << 8) + $version; my $extract = $version; @@ -264,7 +391,7 @@ sub mkHeader # offset to local hdr if (*$self->{ZipData}{LocalHdrOffset}->is64bit() ) { - $ctl .= pack 'V', 0xFFFFFFFF ; + $ctl .= pack 'V', MAX32 ; } else { $ctl .= *$self->{ZipData}{LocalHdrOffset}->getPacked_V32() ; @@ -278,6 +405,7 @@ sub mkHeader *$self->{ZipData}{CentralHeader} = $ctl; + return $hdr; } @@ -307,6 +435,7 @@ sub mkTrailer my $data = $crc32 . $sizes ; + my $xtrasize = *$self->{UnCompSize}->getPacked_V64() ; # Uncompressed size $xtrasize .= *$self->{CompSize}->getPacked_V64() ; # Compressed size @@ -331,14 +460,14 @@ sub mkTrailer my $x = ''; # uncompressed length - if (*$self->{UnCompSize}->is64bit() ) { + if (*$self->{UnCompSize}->isAlmost64bit() || *$self->{ZipData}{Zip64} > 1) { $x .= *$self->{UnCompSize}->getPacked_V64() ; } else { substr($ctl, 24, 4) = *$self->{UnCompSize}->getPacked_V32() ; } # compressed length - if (*$self->{CompSize}->is64bit() ) { + if (*$self->{CompSize}->isAlmost64bit() || *$self->{ZipData}{Zip64} > 1) { $x .= *$self->{CompSize}->getPacked_V64() ; } else { substr($ctl, 20, 4) = *$self->{CompSize}->getPacked_V32() ; @@ -406,8 +535,8 @@ sub mkFinalTrailer $z64e .= *$self->{ZipData}{Offset}->getPacked_V64() ; # offset to end zip64 central dir $z64e .= pack 'V', 1 ; # Total number of disks - $cd_offset = 0xFFFFFFFF ; - $cd_len = 0xFFFFFFFF if $cd_len >= 0xFFFFFFFF ; + $cd_offset = MAX32 ; + $cd_len = MAX32 if isGeMax32 $cd_len ; $entries = 0xFFFF if $entries >= 0xFFFF ; } @@ -449,16 +578,20 @@ sub ckParams $got->value("CTime", $timeRef->[2]); } - # Unix2 Extended Attribute - if ($got->parsed('exUnix2') ) { - my $timeRef = $got->value('exUnix2'); - if ( defined $timeRef) { - return $self->saveErrorString(undef, "exUnix2 not a 2-element array ref") - if ref $timeRef ne 'ARRAY' || @$timeRef != 2; + # Unix2/3 Extended Attribute + for my $name (qw(exUnix2 exUnixN)) + { + if ($got->parsed($name) ) { + my $idRef = $got->value($name); + if ( defined $idRef) { + return $self->saveErrorString(undef, "$name not a 2-element array ref") + if ref $idRef ne 'ARRAY' || @$idRef != 2; + } + + $got->value("UID", $idRef->[0]); + $got->value("GID", $idRef->[1]); + $got->value("want_$name", $idRef); } - - $got->value("UID", $timeRef->[0]); - $got->value("GID", $timeRef->[1]); } *$self->{ZipData}{AnyZip64} = 1 @@ -475,9 +608,8 @@ sub ckParams ! defined $IO::Compress::Adapter::Bzip2::VERSION; return $self->saveErrorString(undef, "Lzma not available") - if $method == ZIP_CM_LZMA ; - #and - #! defined $IO::Compress::Adapter::Lzma::VERSION; + if $method == ZIP_CM_LZMA + and ! defined $IO::Compress::Adapter::Lzma::VERSION; *$self->{ZipData}{Method} = $method; @@ -499,9 +631,28 @@ sub ckParams if defined $IO::Compress::Bzip2::VERSION and ! IO::Compress::Bzip2::ckParams($self, $got); + if ($got->parsed('Sparse') ) { + *$self->{ZipData}{Sparse} = $got->value('Sparse') ; + *$self->{ZipData}{Method} = ZIP_CM_STORE; + } + + if ($got->parsed('FilterName')) { + my $v = $got->value('FilterName') ; + *$self->{ZipData}{FilterName} = $v + if ref $v eq 'CODE' ; + } + return 1 ; } +sub outputPayload +{ + my $self = shift ; + return 1 if *$self->{ZipData}{Sparse} ; + return $self->output(@_); +} + + #sub newHeader #{ # my $self = shift ; @@ -513,14 +664,14 @@ sub getExtraParams { my $self = shift ; - use IO::Compress::Base::Common 2.033 qw(:Parse); - use Compress::Raw::Zlib 2.033 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY); + use IO::Compress::Base::Common 2.048 qw(:Parse); + use Compress::Raw::Zlib 2.048 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY); my @Bzip2 = (); @Bzip2 = IO::Compress::Bzip2::getExtraParams($self) if defined $IO::Compress::Bzip2::VERSION; - + return ( # zlib behaviour $self->getZlibParams(), @@ -535,9 +686,13 @@ sub getExtraParams 'Comment' => [0, 1, Parse_any, ''], 'ZipComment'=> [0, 1, Parse_any, ''], 'Name' => [0, 1, Parse_any, ''], + 'FilterName'=> [0, 1, Parse_code, undef], + 'CanonicalName'=> [0, 1, Parse_boolean, 0], + #'UTF8' => [0, 1, Parse_boolean, 0], 'Time' => [0, 1, Parse_any, undef], 'exTime' => [0, 1, Parse_any, undef], 'exUnix2' => [0, 1, Parse_any, undef], + 'exUnixN' => [0, 1, Parse_any, undef], 'ExtAttr' => [0, 1, Parse_any, $Compress::Raw::Zlib::gzip_os_code == 3 ? 0100644 << 16 @@ -548,6 +703,13 @@ sub getExtraParams 'ExtraFieldLocal' => [0, 1, Parse_any, undef], 'ExtraFieldCentral'=> [0, 1, Parse_any, undef], + # Lzma + 'Preset' => [0, 1, Parse_unsigned, 6], + 'Extreme' => [1, 1, Parse_boolean, 0], + + # For internal use only + 'Sparse' => [0, 1, Parse_unsigned, 0], + @Bzip2, ); } @@ -564,8 +726,31 @@ sub getFileInfo my $params = shift; my $filename = shift ; - my ($mode, $uid, $gid, $atime, $mtime, $ctime) - = (stat($filename))[2, 4,5, 8,9,10] ; + if (isaScalar($filename)) + { + $params->value(Zip64 => 1) + if isGeMax32 length (${ $filename }) ; + + return ; + } + + my ($mode, $uid, $gid, $size, $atime, $mtime, $ctime) ; + if ( $params->parsed('StoreLinks') ) + { + ($mode, $uid, $gid, $size, $atime, $mtime, $ctime) + = (lstat($filename))[2, 4,5,7, 8,9,10] ; + } + else + { + ($mode, $uid, $gid, $size, $atime, $mtime, $ctime) + = (stat($filename))[2, 4,5,7, 8,9,10] ; + } + + $params->value(TextFlag => -T $filename ) + if ! $params->parsed('TextFlag'); + + $params->value(Zip64 => 1) + if isGeMax32 $size ; $params->value('Name' => $filename) if ! $params->parsed('Name') ; @@ -578,13 +763,21 @@ sub getFileInfo $params->value('MTime' => $mtime) ; $params->value('ATime' => $atime) ; $params->value('CTime' => undef) ; # No Creation time - $params->value("exTime", [$mtime, $atime, undef]); + # TODO - see if can fillout creation time on non-Unix } # NOTE - Unix specific code alert - $params->value('ExtAttr' => $mode << 16) - if ! $params->parsed('ExtAttr'); + if (! $params->parsed('ExtAttr')) + { + use Fcntl qw(:mode) ; + my $attr = $mode << 16; + $attr |= ZIP_A_RONLY if ($mode & S_IWRITE) == 0 ; + $attr |= ZIP_A_DIR if ($mode & S_IFMT ) == S_IFDIR ; + + $params->value('ExtAttr' => $attr); + } + $params->value('want_exUnixN', [$uid, $gid]); $params->value('UID' => $uid) ; $params->value('GID' => $gid) ; @@ -625,11 +818,29 @@ sub mkUnix2Extra $ids); } +sub mkUnixNExtra +{ + my $uid = shift; + my $gid = shift; + + # Assumes UID/GID are 32-bit + my $ids ; + $ids .= pack "C", 1; # version + $ids .= pack "C", $Config{uidsize}; + $ids .= pack "V", $uid; + $ids .= pack "C", $Config{gidsize}; + $ids .= pack "V", $gid; + + return IO::Compress::Zlib::Extra::mkSubField(ZIP_EXTRA_ID_INFO_ZIP_UNIXN, + $ids); +} + # from Archive::Zip sub _unixToDosTime # Archive::Zip::Member { my $time_t = shift; + # TODO - add something to cope with unix time < 1980 my ( $sec, $min, $hour, $mday, $mon, $year ) = localtime($time_t); my $dt = 0; @@ -705,11 +916,14 @@ zip files and buffers. It is not a general-purpose file archiver. If that is what you want, check out C. At present three compression methods are supported by IO::Compress::Zip, -namely Store (no compression at all), Deflate and Bzip2. +namely Store (no compression at all), Deflate, Bzip2 and LZMA. Note that to create Bzip2 content, the module C must be installed. +Note that to create LZMA content, the module C must +be installed. + For reading zip files/buffers, see the companion module L. @@ -780,10 +994,10 @@ See L for more details. If the C<$input> parameter is any other type, C will be returned. In addition, if C<$input> is a simple filename, the default values for -the C, C