treewide: move all perl packages into its own folder
authorJosef Schlehofer <[email protected]>
Tue, 17 Jun 2025 20:43:38 +0000 (22:43 +0200)
committerJosef Schlehofer <[email protected]>
Sun, 6 Jul 2025 14:21:08 +0000 (16:21 +0200)
This makes it in sync with Python packages.
Python packages has its own place in /lang/python
Perl does not, so this fixes it.

Signed-off-by: Josef Schlehofer <[email protected]>
194 files changed:
lang/perl-ack/Makefile [deleted file]
lang/perl-ack/test.sh [deleted file]
lang/perl-authen-sasl-xs/Makefile [deleted file]
lang/perl-authen-sasl-xs/patches/100-remove-devel-checklib-checks.patch [deleted file]
lang/perl-authen-sasl-xs/patches/102-strlen-size.patch [deleted file]
lang/perl-authen-sasl-xs/patches/104-use-int2ptr.patch [deleted file]
lang/perl-authen-sasl-xs/patches/105-gcc-14.patch [deleted file]
lang/perl-authen-sasl-xs/patches/106-fix-sasl_ssf-and-sasl_maxoutbuf-property.patch [deleted file]
lang/perl-authen-sasl/Makefile [deleted file]
lang/perl-cgi/Makefile [deleted file]
lang/perl-class-inspector/Makefile [deleted file]
lang/perl-compress-bzip2/Makefile [deleted file]
lang/perl-dbi/Makefile [deleted file]
lang/perl-device-serialport/Makefile [deleted file]
lang/perl-device-usb/Makefile [deleted file]
lang/perl-device-usb/README.patches [deleted file]
lang/perl-device-usb/patches/100-fix_buildsystem.patch [deleted file]
lang/perl-device-usb/patches/110-just_assume_libusb_is_there.patch [deleted file]
lang/perl-device-usb/patches/120-use_libusb_0_1.patch [deleted file]
lang/perl-device-usb/patches/130-provide-proper-library-paths.patch [deleted file]
lang/perl-device-usb/patches/140-avoid-libusb-name-conflicts.patch [deleted file]
lang/perl-encode-locale/Makefile [deleted file]
lang/perl-file-listing/Makefile [deleted file]
lang/perl-file-next/Makefile [deleted file]
lang/perl-file-rsyncp/Makefile [deleted file]
lang/perl-file-rsyncp/patches/001-no-subdirs.patch [deleted file]
lang/perl-file-sharedir-install/Makefile [deleted file]
lang/perl-file-sharedir/Makefile [deleted file]
lang/perl-future-asyncawait/Makefile [deleted file]
lang/perl-future-asyncawait/src/Makefile.PL [deleted file]
lang/perl-future/Makefile [deleted file]
lang/perl-future/src/Makefile.PL [deleted file]
lang/perl-html-form/Makefile [deleted file]
lang/perl-html-parser/Makefile [deleted file]
lang/perl-html-tagset/Makefile [deleted file]
lang/perl-html-tree/Makefile [deleted file]
lang/perl-http-cookies/Makefile [deleted file]
lang/perl-http-daemon/Makefile [deleted file]
lang/perl-http-date/Makefile [deleted file]
lang/perl-http-message/Makefile [deleted file]
lang/perl-http-negotiate/Makefile [deleted file]
lang/perl-http-server-simple/Makefile [deleted file]
lang/perl-inline-c/Makefile [deleted file]
lang/perl-inline-c/patches/100-inline_c-no_compile_hack.patch [deleted file]
lang/perl-inline-c/patches/110-inline_c-make_system_typemap_overridable.patch [deleted file]
lang/perl-inline/Makefile [deleted file]
lang/perl-io-async-ssl/Makefile [deleted file]
lang/perl-io-async-ssl/src/Makefile.PL [deleted file]
lang/perl-io-async/Makefile [deleted file]
lang/perl-io-async/src/Makefile.PL [deleted file]
lang/perl-io-html/Makefile [deleted file]
lang/perl-io-socket-ssl/Makefile [deleted file]
lang/perl-lockfile-simple/Makefile [deleted file]
lang/perl-lwp-mediatypes/Makefile [deleted file]
lang/perl-mail-spamassassin/Makefile [deleted file]
lang/perl-metrics-any/Makefile [deleted file]
lang/perl-metrics-any/src/Makefile.PL [deleted file]
lang/perl-net-async-http/Makefile [deleted file]
lang/perl-net-async-http/src/Makefile.PL [deleted file]
lang/perl-net-cidr-lite/Makefile [deleted file]
lang/perl-net-dns-sec/Makefile [deleted file]
lang/perl-net-dns/Makefile [deleted file]
lang/perl-net-http/Makefile [deleted file]
lang/perl-net-ssleay/Makefile [deleted file]
lang/perl-net-ssleay/patches/001-prefix.patch [deleted file]
lang/perl-net-telnet/Makefile [deleted file]
lang/perl-netaddr-ip/Makefile [deleted file]
lang/perl-parse-recdescent/Makefile [deleted file]
lang/perl-parse-yapp/Makefile [deleted file]
lang/perl-struct-dumb/Makefile [deleted file]
lang/perl-struct-dumb/src/Makefile.PL [deleted file]
lang/perl-sub-uplevel/Makefile [deleted file]
lang/perl-test-harness/Makefile [deleted file]
lang/perl-test-warn/Makefile [deleted file]
lang/perl-text-csv_xs/Makefile [deleted file]
lang/perl-text-csv_xs/patches/900-fix-format-warnings.patch [deleted file]
lang/perl-time-moment/Makefile [deleted file]
lang/perl-try-tiny/Makefile [deleted file]
lang/perl-uri/Makefile [deleted file]
lang/perl-www-curl/Makefile [deleted file]
lang/perl-www-curl/patches/100-perl-www-curl_disable_curl-config_hack.patch [deleted file]
lang/perl-www-curl/patches/101-skip-preprocessor-symbol.path [deleted file]
lang/perl-www-curl/patches/200-fix_default_lflags.patch [deleted file]
lang/perl-www-curl/patches/210-curl_7.66_compat.patch [deleted file]
lang/perl-www-curl/patches/220-curl_7.69_compat.patch [deleted file]
lang/perl-www-curl/patches/230-curl_7.88_compat.patch [deleted file]
lang/perl-www-mechanize/Makefile [deleted file]
lang/perl-www-robotrules/Makefile [deleted file]
lang/perl-www/Makefile [deleted file]
lang/perl-xml-parser/Makefile [deleted file]
lang/perl-xml-parser/patches/010-xml-parser-expat-use-ppport.h [deleted file]
lang/perl-xml-parser/patches/020-xml-parser-expat-lib-inc-path-anchor.patch [deleted file]
lang/perl-xml-parser/patches/030-expat.patch [deleted file]
lang/perl-xs-parse-keyword/Makefile [deleted file]
lang/perl-xs-parse-keyword/src/Makefile.PL [deleted file]
lang/perl-xs-parse-sublike/Makefile [deleted file]
lang/perl-xs-parse-sublike/src/Makefile.PL [deleted file]
lang/perl/perl-ack/Makefile [new file with mode: 0644]
lang/perl/perl-ack/test.sh [new file with mode: 0644]
lang/perl/perl-authen-sasl-xs/Makefile [new file with mode: 0644]
lang/perl/perl-authen-sasl-xs/patches/100-remove-devel-checklib-checks.patch [new file with mode: 0644]
lang/perl/perl-authen-sasl-xs/patches/102-strlen-size.patch [new file with mode: 0644]
lang/perl/perl-authen-sasl-xs/patches/104-use-int2ptr.patch [new file with mode: 0644]
lang/perl/perl-authen-sasl-xs/patches/105-gcc-14.patch [new file with mode: 0644]
lang/perl/perl-authen-sasl-xs/patches/106-fix-sasl_ssf-and-sasl_maxoutbuf-property.patch [new file with mode: 0644]
lang/perl/perl-authen-sasl/Makefile [new file with mode: 0644]
lang/perl/perl-cgi/Makefile [new file with mode: 0644]
lang/perl/perl-class-inspector/Makefile [new file with mode: 0644]
lang/perl/perl-compress-bzip2/Makefile [new file with mode: 0644]
lang/perl/perl-dbi/Makefile [new file with mode: 0644]
lang/perl/perl-device-serialport/Makefile [new file with mode: 0644]
lang/perl/perl-device-usb/Makefile [new file with mode: 0644]
lang/perl/perl-device-usb/README.patches [new file with mode: 0644]
lang/perl/perl-device-usb/patches/100-fix_buildsystem.patch [new file with mode: 0644]
lang/perl/perl-device-usb/patches/110-just_assume_libusb_is_there.patch [new file with mode: 0644]
lang/perl/perl-device-usb/patches/120-use_libusb_0_1.patch [new file with mode: 0644]
lang/perl/perl-device-usb/patches/130-provide-proper-library-paths.patch [new file with mode: 0644]
lang/perl/perl-device-usb/patches/140-avoid-libusb-name-conflicts.patch [new file with mode: 0644]
lang/perl/perl-encode-locale/Makefile [new file with mode: 0644]
lang/perl/perl-file-listing/Makefile [new file with mode: 0644]
lang/perl/perl-file-next/Makefile [new file with mode: 0644]
lang/perl/perl-file-rsyncp/Makefile [new file with mode: 0644]
lang/perl/perl-file-rsyncp/patches/001-no-subdirs.patch [new file with mode: 0644]
lang/perl/perl-file-sharedir-install/Makefile [new file with mode: 0644]
lang/perl/perl-file-sharedir/Makefile [new file with mode: 0644]
lang/perl/perl-future-asyncawait/Makefile [new file with mode: 0644]
lang/perl/perl-future-asyncawait/src/Makefile.PL [new file with mode: 0644]
lang/perl/perl-future/Makefile [new file with mode: 0644]
lang/perl/perl-future/src/Makefile.PL [new file with mode: 0644]
lang/perl/perl-html-form/Makefile [new file with mode: 0644]
lang/perl/perl-html-parser/Makefile [new file with mode: 0644]
lang/perl/perl-html-tagset/Makefile [new file with mode: 0644]
lang/perl/perl-html-tree/Makefile [new file with mode: 0644]
lang/perl/perl-http-cookies/Makefile [new file with mode: 0644]
lang/perl/perl-http-daemon/Makefile [new file with mode: 0644]
lang/perl/perl-http-date/Makefile [new file with mode: 0644]
lang/perl/perl-http-message/Makefile [new file with mode: 0644]
lang/perl/perl-http-negotiate/Makefile [new file with mode: 0644]
lang/perl/perl-http-server-simple/Makefile [new file with mode: 0644]
lang/perl/perl-inline-c/Makefile [new file with mode: 0644]
lang/perl/perl-inline-c/patches/100-inline_c-no_compile_hack.patch [new file with mode: 0644]
lang/perl/perl-inline-c/patches/110-inline_c-make_system_typemap_overridable.patch [new file with mode: 0644]
lang/perl/perl-inline/Makefile [new file with mode: 0644]
lang/perl/perl-io-async-ssl/Makefile [new file with mode: 0644]
lang/perl/perl-io-async-ssl/src/Makefile.PL [new file with mode: 0644]
lang/perl/perl-io-async/Makefile [new file with mode: 0644]
lang/perl/perl-io-async/src/Makefile.PL [new file with mode: 0644]
lang/perl/perl-io-html/Makefile [new file with mode: 0644]
lang/perl/perl-io-socket-ssl/Makefile [new file with mode: 0644]
lang/perl/perl-lockfile-simple/Makefile [new file with mode: 0644]
lang/perl/perl-lwp-mediatypes/Makefile [new file with mode: 0644]
lang/perl/perl-mail-spamassassin/Makefile [new file with mode: 0644]
lang/perl/perl-metrics-any/Makefile [new file with mode: 0644]
lang/perl/perl-metrics-any/src/Makefile.PL [new file with mode: 0644]
lang/perl/perl-net-async-http/Makefile [new file with mode: 0644]
lang/perl/perl-net-async-http/src/Makefile.PL [new file with mode: 0644]
lang/perl/perl-net-cidr-lite/Makefile [new file with mode: 0644]
lang/perl/perl-net-dns-sec/Makefile [new file with mode: 0644]
lang/perl/perl-net-dns/Makefile [new file with mode: 0644]
lang/perl/perl-net-http/Makefile [new file with mode: 0644]
lang/perl/perl-net-ssleay/Makefile [new file with mode: 0644]
lang/perl/perl-net-ssleay/patches/001-prefix.patch [new file with mode: 0644]
lang/perl/perl-net-telnet/Makefile [new file with mode: 0644]
lang/perl/perl-netaddr-ip/Makefile [new file with mode: 0644]
lang/perl/perl-parse-recdescent/Makefile [new file with mode: 0644]
lang/perl/perl-parse-yapp/Makefile [new file with mode: 0644]
lang/perl/perl-struct-dumb/Makefile [new file with mode: 0644]
lang/perl/perl-struct-dumb/src/Makefile.PL [new file with mode: 0644]
lang/perl/perl-sub-uplevel/Makefile [new file with mode: 0644]
lang/perl/perl-test-harness/Makefile [new file with mode: 0644]
lang/perl/perl-test-warn/Makefile [new file with mode: 0644]
lang/perl/perl-text-csv_xs/Makefile [new file with mode: 0644]
lang/perl/perl-text-csv_xs/patches/900-fix-format-warnings.patch [new file with mode: 0644]
lang/perl/perl-time-moment/Makefile [new file with mode: 0644]
lang/perl/perl-try-tiny/Makefile [new file with mode: 0644]
lang/perl/perl-uri/Makefile [new file with mode: 0644]
lang/perl/perl-www-curl/Makefile [new file with mode: 0644]
lang/perl/perl-www-curl/patches/100-perl-www-curl_disable_curl-config_hack.patch [new file with mode: 0644]
lang/perl/perl-www-curl/patches/101-skip-preprocessor-symbol.path [new file with mode: 0644]
lang/perl/perl-www-curl/patches/200-fix_default_lflags.patch [new file with mode: 0644]
lang/perl/perl-www-curl/patches/210-curl_7.66_compat.patch [new file with mode: 0644]
lang/perl/perl-www-curl/patches/220-curl_7.69_compat.patch [new file with mode: 0644]
lang/perl/perl-www-curl/patches/230-curl_7.88_compat.patch [new file with mode: 0644]
lang/perl/perl-www-mechanize/Makefile [new file with mode: 0644]
lang/perl/perl-www-robotrules/Makefile [new file with mode: 0644]
lang/perl/perl-www/Makefile [new file with mode: 0644]
lang/perl/perl-xml-parser/Makefile [new file with mode: 0644]
lang/perl/perl-xml-parser/patches/010-xml-parser-expat-use-ppport.h [new file with mode: 0644]
lang/perl/perl-xml-parser/patches/020-xml-parser-expat-lib-inc-path-anchor.patch [new file with mode: 0644]
lang/perl/perl-xml-parser/patches/030-expat.patch [new file with mode: 0644]
lang/perl/perl-xs-parse-keyword/Makefile [new file with mode: 0644]
lang/perl/perl-xs-parse-keyword/src/Makefile.PL [new file with mode: 0644]
lang/perl/perl-xs-parse-sublike/Makefile [new file with mode: 0644]
lang/perl/perl-xs-parse-sublike/src/Makefile.PL [new file with mode: 0644]

diff --git a/lang/perl-ack/Makefile b/lang/perl-ack/Makefile
deleted file mode 100644 (file)
index 9d05dab..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-only
-#
-# Copyright (C) 2021 ImmortalWrt.org
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-ack
-PKG_VERSION:=3.8.2
-PKG_RELEASE:=1
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/P/PE/PETDANCE/
-PKG_SOURCE:=ack-v$(PKG_VERSION).tar.gz
-PKG_HASH:=a5239f5a2c12e0c7b4e432ffd7e936feef945a9621a41591c77d3b0cf458560b
-
-PKG_LICENSE:=Artistic-2.0
-PKG_LICENSE_FILE:=LICENSE.md
-PKG_MAINTAINER:=Tianling Shen <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/ack-v$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/ack
-  SECTION:=utils
-  CATEGORY:=Utilities
-  TITLE:=A grep-like source code search tool
-  URL:=https://beyondgrep.com
-  DEPENDS:=+perl +perl-ack
-  PROVIDES:=ack-grep
-endef
-
-define Package/perl-ack
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=grep-like text finder
-  URL:=http://search.cpan.org/dist/ack/
-  DEPENDS:=perl +perl-file-next +perlbase-filetest +perlbase-if \
-    +perlbase-list +perlbase-pod +perlbase-test +perlbase-text \
-    +perlbase-term
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/ack/install
-       $(INSTALL_DIR) $(1)/usr/bin/
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ack $(1)/usr/bin/
-       $(SED) "1"'!'"b;s,^#"'!'".*perl.*,#"'!'"/usr/bin/perl," -i --follow-symlinks $(1)/usr/bin/ack
-endef
-
-define Package/perl-ack/install
-       $(call perlmod/Install,$(1),App auto/ack)
-endef
-
-$(eval $(call BuildPackage,ack))
-$(eval $(call BuildPackage,perl-ack))
diff --git a/lang/perl-ack/test.sh b/lang/perl-ack/test.sh
deleted file mode 100644 (file)
index 823c80e..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-case "$1" in
-       "ack")
-               ack --version | grep "$PKG_VERSION"
-               ;;
-esac
diff --git a/lang/perl-authen-sasl-xs/Makefile b/lang/perl-authen-sasl-xs/Makefile
deleted file mode 100644 (file)
index 273465f..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Copyright (C) 2017 Philip Prindeville <[email protected]>
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-authen-sasl-xs
-PKG_VERSION:=1.00
-PKG_RELEASE:=3
-
-PKG_SOURCE_NAME:=Authen-SASL-XS
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GB/GBARR/
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=1b0eaa0e7ac3a45857147d837e3d34c80c6eca1d9fdcb826a213c2a105454234
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Philip Prindeville <[email protected]>, Jens Wagner <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-authen-sasl-xs
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Authen::XS hooks into libsasl.
-  URL:=http://search.cpan.org/dist/$(PKG_SOURCE_NAME)/
-  DEPENDS:=perl +perlbase-dynaloader +perl-authen-sasl +libsasl2
-endef
-
-define Package/perl-authen-sasl-xs/description
-  SASL is a generic mechanism for authentication used by several
-  network protocols. Authen::SASL::XS provides an implementation
-  framework that all protocols should be able to share.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-authen-sasl-xs/install
-       $(call perlmod/Install,$(1),Authen auto/Authen)
-endef
-
-
-$(eval $(call BuildPackage,perl-authen-sasl-xs))
diff --git a/lang/perl-authen-sasl-xs/patches/100-remove-devel-checklib-checks.patch b/lang/perl-authen-sasl-xs/patches/100-remove-devel-checklib-checks.patch
deleted file mode 100644 (file)
index da61f4f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -1,7 +1,6 @@
- # Do yourself a favour, and don't edit this file, see README for build instructions
- use ExtUtils::MakeMaker;
--use Devel::CheckLib;
- my @inc_search = qw(/opt/local/include /usr/local/include);
- my @lib_search = qw(/opt/local/lib64 /usr/local/lib64 /opt/local/lib /usr/local/lib);
-@@ -13,28 +12,13 @@ unless (exists $args{INC} or exists $arg
-   my @incpath = grep {-d} @inc_search;
-   my @libpath = grep {-d} @lib_search;
--  my $have_sasl2 = eval {
--    assert_lib(
--      lib     => "sasl2",
--      header  => "sasl/sasl.h",
--      libpath => \@libpath,
--      incpath => \@incpath
--    );
--    1;
--  };
-+  my $have_sasl2 = 1;
-   if ($have_sasl2) {
-     $mmopt{DEFINE} = "-DSASL2" unless $use_sasl2;
-   }
-   else {
-     exit(0) if $use_sasl2;
--    @incpath = grep {-d} map { ("$_/sasl", $_) } @inc_search;
--    check_lib_or_exit(
--      lib     => "sasl",
--      header  => "sasl.h",
--      libpath => \@libpath,
--      incpath => \@incpath
--    );
-   }
-   $mmopt{INC}  = join " ", map {"-I$_"} @incpath;
-@@ -58,7 +42,6 @@ WriteMakefile(
-           repository => 'http://github.com/gbarr/perl-authen-sasl-xs',
-         },
-         build_requires => {
--          'Devel::CheckLib' => 0,
-         },
-       }
-       )
diff --git a/lang/perl-authen-sasl-xs/patches/102-strlen-size.patch b/lang/perl-authen-sasl-xs/patches/102-strlen-size.patch
deleted file mode 100644 (file)
index 06c27ac..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Description: Fix type mismatches on 64-bit platforms
-Author: Russ Allbery <[email protected]>
-Reviewed-by: gregor herrmann <[email protected]>
-Last-Update: 2023-10-25
-
-Change the data types used in the XS code for the module to ensure data
-types match Perl's expectations on 64-bit platforms.
-
-Note:
-(libauthen-sasl-xs-perl is the successor of libauthen-sasl-cyrus-perl)
-Most of the original changes are applied upstream, one remains.
-[gregor 2023-10-25]
-
---- a/XS.xs
-+++ b/XS.xs
-@@ -946,7 +946,7 @@ void ExtractParentCallbacks(SV *parent,
- {
-       char *key;
-       int count=0,i;
--      long l;
-+      I32 l;
- #ifndef SASL2
-       // Missing SASL1 canonuser workaround
-       int canon=-1,auth=-1;
diff --git a/lang/perl-authen-sasl-xs/patches/104-use-int2ptr.patch b/lang/perl-authen-sasl-xs/patches/104-use-int2ptr.patch
deleted file mode 100644 (file)
index c839f62..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-Description: Use INT2PTR to map objects to Cyrus SASL pointers
-Author: Russ Allbery <[email protected]>
-Reviewed-by: gregor herrmann <[email protected]>
-Last-Update: 2023-10-25
-
-Rather than directly casting the IV to the target pointer, use
-Perl's standard INT2PTR macro.  This shouldn't change the resulting
-code, but it will suppress build warnings and make it easier to
-spot real build issues.
-
-Note:
-(libauthen-sasl-xs-perl is the successor of libauthen-sasl-cyrus-perl)
-[gregor 2023-10-25]
-
---- a/typemap
-+++ b/typemap
-@@ -6,7 +6,7 @@ INPUT
- T_PTROBJ_SPECIAL
-       if (sv_derived_from($arg, \"${(my $ntt=$ntype)=~s/_/::/g; \$ntt}\")) {
-               IV tmp = SvIV((SV*)SvRV($arg));
--              $var = ($type) tmp;
-+              $var = INT2PTR($type, tmp);
-       }
-       else
-               croak(\"$var is not of type ${(my $ntt=$ntype)=~s /_/::/g;\$ntt}\")
diff --git a/lang/perl-authen-sasl-xs/patches/105-gcc-14.patch b/lang/perl-authen-sasl-xs/patches/105-gcc-14.patch
deleted file mode 100644 (file)
index 1642e27..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-Description: fix multiple build issues with gcc 14.
- Multiple callbacks are cast due to otherwise incompatible pointer
- types.  The target pointer cb->proc cannot really see its type adjusted
- for two reasons.  First, it is declared in the libsasl2, and changing
- it might cause an ABI/API breakage.  Second, the different callbacks
- also have different function signatures anyway.
- .
- Another issue seems to be a casting error while trying to set an IV:
- .
-       XS.xs:1886:40: error:
-               initialization of â€˜IV’ {aka â€˜long int’} from â€˜int *’
-                makes integer from pointer without a cast [-Wint-conversion]
-        1886 |                                 XPUSHi((int *)value);
-             |                                        ^
-       /usr/lib/x86_64-linux-gnu/perl/5.38/CORE/pp.h:428:23: note: in definition of macro â€˜TARGi’
-         428 |         IV TARGi_iv = i;                                                \
-             |                       ^
-       XS.xs:1886:33: note: in expansion of macro â€˜XPUSHi’
-        1886 |                                 XPUSHi((int *)value);
-             |                                 ^~~~~~
- .
- It is unclear to me what was the motivation for the initial wrong type.
-
-Author: Ã‰tienne Mollier <[email protected]>
-Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1075146
-Forwarded: no
-Last-Update: 2024-07-26
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
---- a/XS.xs
-+++ b/XS.xs
-@@ -892,39 +892,39 @@ void AddCallback(SV *action, struct _per
-               case SASL_CB_USER:
-               case SASL_CB_AUTHNAME:
-               case SASL_CB_LANGUAGE:
--                               cb->proc = PerlCallback;
-+                               cb->proc = (int (*)(void))PerlCallback;
-                       break;
-               case SASL_CB_PASS:
--                              cb->proc = PerlCallbackSecret;
-+                              cb->proc = (int (*)(void))PerlCallbackSecret;
-                       break;
-               case SASL_CB_GETREALM:
--                              cb->proc = PerlCallbackRealm;
-+                              cb->proc = (int (*)(void))PerlCallbackRealm;
-                       break;
-               case SASL_CB_ECHOPROMPT:
-               case SASL_CB_NOECHOPROMPT:
-                       break;
-               case SASL_CB_PROXY_POLICY:
--                              cb->proc = PerlCallbackAuthorize;
-+                              cb->proc = (int (*)(void))PerlCallbackAuthorize;
-                       break;
-               case SASL_CB_CANON_USER:
--                              cb->proc = PerlCallbackCanonUser;
-+                              cb->proc = (int (*)(void))PerlCallbackCanonUser;
-                       break;
- #ifdef SASL2
-               case SASL_CB_SERVER_USERDB_CHECKPASS:
--                              cb->proc = PerlCallbackServerCheckPass;
-+                              cb->proc = (int (*)(void))PerlCallbackServerCheckPass;
-                       break;
-               case SASL_CB_SERVER_USERDB_SETPASS:
--                              cb->proc = PerlCallbackServerSetPass;
-+                              cb->proc = (int (*)(void))PerlCallbackServerSetPass;
-                       break;
- #else
-               // SASL 1 Servercallbacks:
-               case SASL_CB_SERVER_GETSECRET:
--                              cb->proc = PerlCallbackGetSecret;
-+                              cb->proc = (int (*)(void))PerlCallbackGetSecret;
-                       break;
-               case SASL_CB_SERVER_PUTSECRET:
-                               // Not implemented yet maybe TODO, if ever needed
-@@ -1883,7 +1883,7 @@ PPCODE:
-                       break;
-                       case SASL_SSF:
-                       case SASL_MAXOUTBUF:
--                              XPUSHi((int *)value);
-+                              XPUSHi((long int)value);
-                       break;
- #ifdef SASL2
-                       case SASL_IPLOCALPORT:
diff --git a/lang/perl-authen-sasl-xs/patches/106-fix-sasl_ssf-and-sasl_maxoutbuf-property.patch b/lang/perl-authen-sasl-xs/patches/106-fix-sasl_ssf-and-sasl_maxoutbuf-property.patch
deleted file mode 100644 (file)
index 749d1ec..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Niko Tyni <[email protected]>
-Date: Mon, 5 Aug 2024 16:50:56 +0100
-X-Dgit-Generated: 1.00-2 fe76997d50267530dd5a5f73995d11987547ac4d
-Subject: Fix SASL_SSF and SASL_MAXOUTBUF property handling
-
-sasl_getprop() returns a pointer which needs to be dereferenced to get
-the actual value.
-
-Bug-Debian: https://bugs.debian.org/1075146
-
----
-
---- a/XS.xs
-+++ b/XS.xs
-@@ -1883,7 +1883,7 @@ PPCODE:
-                       break;
-                       case SASL_SSF:
-                       case SASL_MAXOUTBUF:
--                              XPUSHi((long int)value);
-+                              XPUSHi(*((IV *)value));
-                       break;
- #ifdef SASL2
-                       case SASL_IPLOCALPORT:
diff --git a/lang/perl-authen-sasl/Makefile b/lang/perl-authen-sasl/Makefile
deleted file mode 100644 (file)
index 37e0832..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright (C) 2017 Philip Prindeville <[email protected]>
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-authen-sasl
-PKG_VERSION:=2.16
-PKG_RELEASE:=2
-
-PKG_SOURCE_NAME:=Authen-SASL
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GB/GBARR/
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=6614fa7518f094f853741b63c73f3627168c5d3aca89b1d02b1016dc32854e09
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Philip Prindeville <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-authen-sasl
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Generic network authentication protocol framework.
-  URL:=http://search.cpan.org/dist/$(PKG_SOURCE_NAME)/
-  DEPENDS:=perl +perlbase-digest
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-authen-sasl/install
-       $(call perlmod/Install,$(1),Authen)
-endef
-
-
-$(eval $(call BuildPackage,perl-authen-sasl))
diff --git a/lang/perl-cgi/Makefile b/lang/perl-cgi/Makefile
deleted file mode 100644 (file)
index d56b064..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#
-# Copyright (C) 2016 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-cgi
-PKG_VERSION:=4.66
-PKG_RELEASE:=1
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/L/LE/LEEJO
-PKG_SOURCE:=CGI-$(PKG_VERSION).tar.gz
-PKG_HASH:=4697437688a193e3f02556e1d223015590c1f2800b40becf83dc12d5cc5ed8e1
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/CGI-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>, \
-               Philip Prindeville <[email protected]>
-PKG_LICENSE:=Artistic-2.0
-PKG_LICENSE_FILES:=LICENSE
-
-# don't strip comments because that will mangle this module
-PKG_LEAVE_COMMENTS:=1
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-cgi
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Handle Common Gateway Interface requests and responses
-  URL:=https://search.cpan.org/dist/CGI/
-  DEPENDS:=perl +perl-html-parser +perlbase-base +perlbase-config +perlbase-encode +perlbase-essential +perlbase-file +perlbase-if +perlbase-utf8
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-cgi/install
-        $(call perlmod/Install,$(1),CGI CGI.pm auto/CGI)
-endef
-
-
-$(eval $(call BuildPackage,perl-cgi))
diff --git a/lang/perl-class-inspector/Makefile b/lang/perl-class-inspector/Makefile
deleted file mode 100644 (file)
index 82526e9..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-class-inspector
-PKG_VERSION:=1.36
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=Class-Inspector
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=cc295d23a472687c24489d58226ead23b9fdc2588e522f0b5f0747741700694e
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-class-inspector
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Get information about a class and its structure
-  URL:=https://metacpan.org/pod/Class::Inspector
-  DEPENDS:=perl +perlbase-essential +perlbase-file +perlbase-base
-endef
-
-define Package/perl-class-inspector/description
-  Class::Inspector allows you to get information about a loaded class.
-  While most or all of this information can be found in other ways,
-  Class::Inspector provides an easier interface to this information.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-class-inspector/install
-       $(call perlmod/Install,$(1),Class)
-endef
-
-
-$(eval $(call BuildPackage,perl-class-inspector))
diff --git a/lang/perl-compress-bzip2/Makefile b/lang/perl-compress-bzip2/Makefile
deleted file mode 100644 (file)
index d726a46..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2014, 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-compress-bzip2
-PKG_VERSION:=2.28
-PKG_RELEASE:=1
-
-PKG_SOURCE:=Compress-Bzip2-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/R/RU/RURBAN/
-PKG_HASH:=859f835c3f5c998810d8b2a6f9e282ff99d6cb66ccfa55cae7e66dafb035116e
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Compress-Bzip2-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=COPYING
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-compress-bzip2
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl interface to bzip2 compression library
-  URL:=https://search.cpan.org/dist/Compress-Bzip2/
-  DEPENDS:=perl +libbz2 +perlbase-autoloader +perlbase-config +perlbase-essential +perlbase-fcntl +perlbase-file +perlbase-getopt +perlbase-test +perlbase-xsloader
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,BUILD_BZLIB=0)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-compress-bzip2/install
-       $(call perlmod/Install,$(1),Compress auto/Compress)
-endef
-
-
-$(eval $(call BuildPackage,perl-compress-bzip2))
diff --git a/lang/perl-dbi/Makefile b/lang/perl-dbi/Makefile
deleted file mode 100644 (file)
index d60a034..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-#
-# Copyright (C) 2014, 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-dbi
-PKG_VERSION:=1.643
-PKG_RELEASE:=1
-
-PKG_SOURCE:=DBI-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/T/TI/TIMB/
-PKG_HASH:=8a2b993db560a2c373c174ee976a51027dd780ec766ae17620c20393d2e836fa
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/DBI-$(PKG_VERSION)
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/DBI-$(PKG_VERSION)
-HOST_BUILD_DEPENDS:=perl/host
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-dbi
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Database independent interface for Perl
-  URL:=https://search.cpan.org/dist/DBI/
-  DEPENDS:=perl +perlbase-base +perlbase-config +perlbase-cwd +perlbase-data +perlbase-dynaloader +perlbase-errno +perlbase-essential +perlbase-fcntl +perlbase-file +perlbase-io +perlbase-ipc +perlbase-scalar +perlbase-storable +perlbase-symbol +perlbase-tie +perlbase-universal +perlbase-utf8
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Host/Configure
-       $(call perlmod/host/Configure,,)
-endef
-
-define Host/Compile
-       $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-       $(call perlmod/host/Install,$(1),)
-endef
-
-define Package/perl-dbi/install
-       $(call perlmod/Install,$(1),DB* auto/DBI,DBI/W32ODBC.pm auto/DBI/*.h)
-endef
-
-
-$(eval $(call BuildPackage,perl-dbi))
-$(eval $(call HostBuild))
diff --git a/lang/perl-device-serialport/Makefile b/lang/perl-device-serialport/Makefile
deleted file mode 100644 (file)
index 2b87c6a..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Copyright (C) 2014, 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-device-serialport
-PKG_VERSION:=1.04
-PKG_RELEASE:=4
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/C/CO/COOK/
-PKG_SOURCE:=Device-SerialPort-$(PKG_VERSION).tar.gz
-PKG_HASH:=d392567cb39b4ea606c0e0acafd8ed72320311b995336ece5fcefcf9b150e9d7
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Paul Oranje <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Device-SerialPort-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-device-serialport
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=A POSIX-based version of the Win32::SerialPort module
-  URL:=http://search.cpan.org/dist/Device-SerialPort/
-  DEPENDS:=perl +perlbase-essential +perlbase-io +perlbase-posix +perlbase-test +perlbase-xsloader
-endef
-
-define Package/perl-device-serialport/description
-  A POSIX-based version of the Win32::SerialPort module
-  that provides modem support to Perl applications
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-MOD_CFLAGS_PERL += $(if $(CONFIG_HOST_OS_MACOS),-I$(PKG_BUILD_DIR)/macos_compat,)
-
-define Build/Compile
-
-ifeq ($(CONFIG_HOST_OS_MACOS),y)
-       #Zeroize macos specific system headers found by ./configure
-       mkdir -p $(PKG_BUILD_DIR)/macos_compat
-       mkdir -p $(PKG_BUILD_DIR)/macos_compat/sys
-       mkdir -p $(PKG_BUILD_DIR)/macos_compat/IOKit
-       mkdir -p $(PKG_BUILD_DIR)/macos_compat/IOKit/serial
-       echo '' > $(PKG_BUILD_DIR)/macos_compat/sys/ttycom.h
-       echo '' > $(PKG_BUILD_DIR)/macos_compat/IOKit/serial/ioss.h
-endif
-
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-device-serialport/install
-        $(call perlmod/Install,$(1),Device auto/Device)
-endef
-
-
-$(eval $(call BuildPackage,perl-device-serialport))
diff --git a/lang/perl-device-usb/Makefile b/lang/perl-device-usb/Makefile
deleted file mode 100644 (file)
index fdee5cc..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-device-usb
-PKG_VERSION:=0.38
-PKG_RELEASE:=1
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GW/GWADEJ/
-PKG_SOURCE:=Device-USB-$(PKG_VERSION).tar.gz
-PKG_HASH:=f0c36379db4913406dc9bd546a6cfd4da20d58f7c2cc085893a2fe67a43465dc
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Device-USB-$(PKG_VERSION)
-PKG_BUILD_DEPENDS:=perl-inline-c/host
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-device-usb
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=libusb library wrapper
-  URL:=https://search.cpan.org/dist/Device-USB/
-  DEPENDS:=perl +libusb-compat +perl-inline +perl-inline-c +perlbase-essential +perlbase-test
-endef
-
-# Device::USB will generate a second Makefile.PL to build it's native code
-# using Inline::C under _Inline/. The goal here is to prevent Inline::C from
-# running that one automatically, as we need to supply a bunch of overrides via
-# perlmod/Configure.
-# _INLINE_C_NO_COMPILE_ is an OpenWRT-specific environment variable to Inline::C
-# that does just that.
-define Build/Configure
-       $(call perlmod/Configure,,)
-       
-       # Prepare a library directory where we can link againt lusb-0.1(as
-       # opposed to -lusb) to avoid confusion at runtime
-       mkdir $(PKG_BUILD_DIR)/syslib
-       $(LN) $(STAGING_DIR)/usr/lib/libusb.so $(PKG_BUILD_DIR)/syslib/libusb-0.1.so
-       
-       # Generate _Inline
-       $(call perlmod/Compile,config,LIBUSB_LIBDIR=$(PKG_BUILD_DIR)/syslib \
-                                     _INLINE_C_NO_COMPILE_=1 \
-                                     _INLINE_C_SYSTEM_TYPEMAP_=$(STAGING_DIR)/usr/lib/perl5/$(PERL_VERSION)/ExtUtils/typemap)
-       $(call perlmod/Compile,dynamic,_INLINE_C_NO_COMPILE_=1)
-       
-       # Configure _Inline
-       $(call perlmod/Configure,,,$(PKG_BUILD_DIR)/_Inline/build/Device/USB)
-       
-       # Prevent re-configuring Inline code
-       sed 's/^dynamic :: D.*$$$$//' -i $(PKG_BUILD_DIR)/Makefile
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,,$(PKG_BUILD_DIR)/_Inline/build/Device/USB)
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-device-usb/install
-        $(call perlmod/Install,$(1),Device auto/Device)
-endef
-
-
-$(eval $(call BuildPackage,perl-device-usb))
diff --git a/lang/perl-device-usb/README.patches b/lang/perl-device-usb/README.patches
deleted file mode 100644 (file)
index 66ece00..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-This package contains some patches taken directly from Debian Jessie(stable at 
-the time of writing). 
-Namely, these are:
-- 100-fix_buildsystem.patch
-- 110-just_assume_libusb_is_there.diff
-
-The other patches are specific to OpenWRT, fixing bugs and resolving conflicts
-where necessary.
\ No newline at end of file
diff --git a/lang/perl-device-usb/patches/100-fix_buildsystem.patch b/lang/perl-device-usb/patches/100-fix_buildsystem.patch
deleted file mode 100644 (file)
index 30f7d6a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-Description: Ignore files we do not want installed.
-Forwarded: not-needed
-Author: Tim Retout <[email protected]>
-Reviewed-by: gregor herrmann <[email protected]>
-Last-Update: 2013-10-28
-
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -2,6 +2,11 @@ use strict;
- use warnings;
- use Inline::MakeMaker;
-+sub MY::libscan {
-+      return if ($_[1] eq 'USB.pm' or $_[1] eq 'dump_usb.pl');
-+      return $_[1];
-+}
-+
- if($^O eq 'MSWin32')
- {
-     if(!$ENV{LIBUSB_LIBDIR} or !$ENV{LIBUSB_INCDIR})
diff --git a/lang/perl-device-usb/patches/110-just_assume_libusb_is_there.patch b/lang/perl-device-usb/patches/110-just_assume_libusb_is_there.patch
deleted file mode 100644 (file)
index dddd23a..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-Subject: Just assume libusb is out there
- Makefile.PL should not try to check for libusb in a given list of directories
- as the compiler might look in other places as well.
-Origin: vendor
-Bug-Debian: http://bugs.debian.org/639677
-Forwarded: not-needed
-From: Ansgar Burchardt <[email protected]>
-Reviewed-by: gregor herrmann <[email protected]>
-Last-Update: 2013-10-28
-
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -21,7 +21,7 @@ END
-     }
- }
--unless(header_found())
-+unless(1 || header_found())
- {
-     die <<"END";
- ERROR: Can't find usb.h header.
-@@ -36,7 +36,7 @@ following environment variables:
- END
- }
--unless(lib_found())
-+unless(1 || lib_found())
- {
-     die <<"END";
- ERROR: Can't find libusb library.
diff --git a/lang/perl-device-usb/patches/120-use_libusb_0_1.patch b/lang/perl-device-usb/patches/120-use_libusb_0_1.patch
deleted file mode 100644 (file)
index 7d43e73..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/lib/Device/USB.pm
-+++ b/lib/Device/USB.pm
-@@ -9,8 +9,8 @@ use Inline (
-         C => "DATA",
-         ($ENV{LIBUSB_LIBDIR}
-             ? ( LIBS => "-L\"$ENV{LIBUSB_LIBDIR}\" " .
--                        ($^O eq 'MSWin32' ? ' -llibusb -L\"$ENV{WINDDK}\\lib\\crt\\i386\" -lmsvcrt ' : '-lusb') )
--            : ( LIBS => '-lusb', )
-+                        ($^O eq 'MSWin32' ? ' -llibusb -L\"$ENV{WINDDK}\\lib\\crt\\i386\" -lmsvcrt ' : '-lusb-0.1') )
-+            : ( LIBS => '-lusb-0.1', )
-         ),
-         ($ENV{LIBUSB_INCDIR} ? ( INC => "-I\"$ENV{LIBUSB_INCDIR}\"" ) : () ),
-         NAME => 'Device::USB',
diff --git a/lang/perl-device-usb/patches/130-provide-proper-library-paths.patch b/lang/perl-device-usb/patches/130-provide-proper-library-paths.patch
deleted file mode 100644 (file)
index 3fce75a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/lib/Device/USB.pm
-+++ b/lib/Device/USB.pm
-@@ -8,8 +8,8 @@ use Carp;
- use Inline (
-         C => "DATA",
-         ($ENV{LIBUSB_LIBDIR}
--            ? ( LIBS => "-L\"$ENV{LIBUSB_LIBDIR}\" " .
--                        ($^O eq 'MSWin32' ? ' -llibusb -L\"$ENV{WINDDK}\\lib\\crt\\i386\" -lmsvcrt ' : '-lusb-0.1') )
-+            ? ( LIBS => "-L$ENV{LIBUSB_LIBDIR} " .
-+                        ($^O eq 'MSWin32' ? ' -llibusb -L$ENV{WINDDK}\\lib\\crt\\i386 -lmsvcrt ' : '-lusb-0.1') )
-             : ( LIBS => '-lusb-0.1', )
-         ),
-         ($ENV{LIBUSB_INCDIR} ? ( INC => "-I\"$ENV{LIBUSB_INCDIR}\"" ) : () ),
diff --git a/lang/perl-device-usb/patches/140-avoid-libusb-name-conflicts.patch b/lang/perl-device-usb/patches/140-avoid-libusb-name-conflicts.patch
deleted file mode 100644 (file)
index 535579d..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
---- a/lib/Device/USB.pm
-+++ b/lib/Device/USB.pm
-@@ -15,6 +15,7 @@ use Inline (
-         ($ENV{LIBUSB_INCDIR} ? ( INC => "-I\"$ENV{LIBUSB_INCDIR}\"" ) : () ),
-         NAME => 'Device::USB',
-         VERSION => '0.38',
-+        PREFIX => 'deviceusb_',
-    );
- Inline->init();
-@@ -657,74 +658,74 @@ unsigned DeviceUSBDebugLevel()
-     return debugLevel;
- }
--void libusb_init()
-+void deviceusb_libusb_init()
- {
-     usb_init();
- }
--int libusb_find_busses()
-+int deviceusb_libusb_find_busses()
- {
-     return usb_find_busses();
- }
--int libusb_find_devices()
-+int deviceusb_libusb_find_devices()
- {
-     return usb_find_devices();
- }
--void *libusb_get_busses()
-+void *deviceusb_libusb_get_busses()
- {
-     return usb_get_busses();
- }
--void *libusb_open(void *dev)
-+void *deviceusb_libusb_open(void *dev)
- {
-     return usb_open( (struct usb_device*)dev );
- }
--int libusb_close(void *dev)
-+int deviceusb_libusb_close(void *dev)
- {
-     return usb_close((usb_dev_handle *)dev);
- }
--int libusb_set_configuration(void *dev, int configuration)
-+int deviceusb_libusb_set_configuration(void *dev, int configuration)
- {
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_set_configuration( %d )\n", configuration );
-+        printf( "deviceusb_libusb_set_configuration( %d )\n", configuration );
-     }
-     return usb_set_configuration((usb_dev_handle *)dev, configuration);
- }
--int libusb_set_altinterface(void *dev, int alternate)
-+int deviceusb_libusb_set_altinterface(void *dev, int alternate)
- {
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_set_altinterface( %d )\n", alternate );
-+        printf( "deviceusb_libusb_set_altinterface( %d )\n", alternate );
-     }
-     return usb_set_altinterface((usb_dev_handle *)dev, alternate);
- }
--int libusb_clear_halt(void *dev, unsigned int ep)
-+int deviceusb_libusb_clear_halt(void *dev, unsigned int ep)
- {
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_clear_halt( %d )\n", ep );
-+        printf( "deviceusb_libusb_clear_halt( %d )\n", ep );
-     }
-     return usb_clear_halt((usb_dev_handle *)dev, ep);
- }
--int libusb_reset(void *dev)
-+int deviceusb_libusb_reset(void *dev)
- {
-     return usb_reset((usb_dev_handle *)dev);
- }
--int libusb_get_driver_np(void *dev, int interface, char *name, unsigned int namelen)
-+int deviceusb_libusb_get_driver_np(void *dev, int interface, char *name, unsigned int namelen)
- {
-     int ret = 0;
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_get_driver_np( %d )\n", interface );
-+        printf( "deviceusb_libusb_get_driver_np( %d )\n", interface );
-     }
- #if LIBUSB_HAS_GET_DRIVER_NP
-     ret = usb_get_driver_np((usb_dev_handle *)dev, interface, name, namelen);
-@@ -735,11 +736,11 @@ int libusb_get_driver_np(void *dev, int
- #endif
- }
--int libusb_detach_kernel_driver_np(void *dev, int interface)
-+int deviceusb_libusb_detach_kernel_driver_np(void *dev, int interface)
- {
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_detach_kernel_driver_np( %d )\n", interface );
-+        printf( "deviceusb_libusb_detach_kernel_driver_np( %d )\n", interface );
-     }
- #if LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP
-     return usb_detach_kernel_driver_np((usb_dev_handle *)dev, interface);
-@@ -748,25 +749,25 @@ int libusb_detach_kernel_driver_np(void
- #endif
- }
--int libusb_claim_interface(void *dev, int interface)
-+int deviceusb_libusb_claim_interface(void *dev, int interface)
- {
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_claim_interface( %d )\n", interface );
-+        printf( "deviceusb_libusb_claim_interface( %d )\n", interface );
-     }
-     return usb_claim_interface((usb_dev_handle *)dev, interface);
- }
--int libusb_release_interface(void *dev, int interface)
-+int deviceusb_libusb_release_interface(void *dev, int interface)
- {
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_release_interface( %d )\n", interface );
-+        printf( "deviceusb_libusb_release_interface( %d )\n", interface );
-     }
-     return usb_release_interface((usb_dev_handle *)dev, interface);
- }
--void libusb_control_msg(void *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout)
-+void deviceusb_libusb_control_msg(void *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout)
- {
-     int i = 0;
-     int retval = 0;
-@@ -775,7 +776,7 @@ void libusb_control_msg(void *dev, int r
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_control_msg( %#04x, %#04x, %#04x, %#04x, %p, %d, %d )\n",
-+        printf( "deviceusb_libusb_control_msg( %#04x, %#04x, %#04x, %#04x, %p, %d, %d )\n",
-             requesttype, request, value, index, bytes, size, timeout
-         );
-         /* maybe need to add support for printing the bytes string. */
-@@ -808,54 +809,54 @@ void libusb_control_msg(void *dev, int r
-     Inline_Stack_Done;
- }
--int libusb_get_string(void *dev, int index, int langid, char *buf, size_t buflen)
-+int deviceusb_libusb_get_string(void *dev, int index, int langid, char *buf, size_t buflen)
- {
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_get_string( %d, %d, %p, %lu )\n",
-+        printf( "deviceusb_libusb_get_string( %d, %d, %p, %lu )\n",
-             index, langid, buf, (unsigned long)buflen
-         );
-     }
-     return usb_get_string((usb_dev_handle *)dev, index, langid, buf, buflen);
- }
--int libusb_get_string_simple(void *dev, int index, char *buf, size_t buflen)
-+int deviceusb_libusb_get_string_simple(void *dev, int index, char *buf, size_t buflen)
- {
-     if(DeviceUSBDebugLevel())
-     {
--        printf( "libusb_get_string_simple( %d, %p, %lu )\n",
-+        printf( "deviceusb_libusb_get_string_simple( %d, %p, %lu )\n",
-             index, buf, (unsigned long)buflen
-         );
-     }
-     return usb_get_string_simple((usb_dev_handle *)dev, index, buf, buflen);
- }
--int libusb_get_descriptor(void *dev, unsigned char type, unsigned char index, char *buf, int size)
-+int deviceusb_libusb_get_descriptor(void *dev, unsigned char type, unsigned char index, char *buf, int size)
- {
-     return usb_get_descriptor((usb_dev_handle *)dev, type, index, buf, size);
- }
--int libusb_get_descriptor_by_endpoint(void *dev, int ep, unsigned char type, unsigned char index, char *buf, int size)
-+int deviceusb_libusb_get_descriptor_by_endpoint(void *dev, int ep, unsigned char type, unsigned char index, char *buf, int size)
- {
-     return usb_get_descriptor_by_endpoint((usb_dev_handle *)dev, ep, type, index, buf, size);
- }
--int libusb_bulk_write(void *dev, int ep, char *bytes, int size, int timeout)
-+int deviceusb_libusb_bulk_write(void *dev, int ep, char *bytes, int size, int timeout)
- {
-     return usb_bulk_write((usb_dev_handle *)dev, ep, bytes, size, timeout);
- }
--int libusb_bulk_read(void *dev, int ep, char *bytes, int size, int timeout)
-+int deviceusb_libusb_bulk_read(void *dev, int ep, char *bytes, int size, int timeout)
- {
-     return usb_bulk_read((usb_dev_handle *)dev, ep, bytes, size, timeout);
- }
--int libusb_interrupt_write(void *dev, int ep, char *bytes, int size, int timeout)
-+int deviceusb_libusb_interrupt_write(void *dev, int ep, char *bytes, int size, int timeout)
- {
-     return usb_interrupt_write((usb_dev_handle *)dev, ep, bytes, size, timeout);
- }
--int libusb_interrupt_read(void *dev, int ep, char *bytes, int size, int timeout)
-+int deviceusb_libusb_interrupt_read(void *dev, int ep, char *bytes, int size, int timeout)
- {
-     return usb_interrupt_read((usb_dev_handle *)dev, ep, bytes, size, timeout);
- }
diff --git a/lang/perl-encode-locale/Makefile b/lang/perl-encode-locale/Makefile
deleted file mode 100644 (file)
index 7b2aa1b..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-encode-locale
-PKG_VERSION:=1.05
-PKG_RELEASE:=2
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GA/GAAS
-PKG_SOURCE:=Encode-Locale-$(PKG_VERSION).tar.gz
-PKG_HASH:=176fa02771f542a4efb1dbc2a4c928e8f4391bf4078473bd6040d8f11adb0ec1
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Encode-Locale-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-encode-locale
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Determine the locale encoding
-  URL:=http://search.cpan.org/dist/Encode-Locale/
-  DEPENDS:=perl +perlbase-base +perlbase-encode +perlbase-essential
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-encode-locale/install
-        $(call perlmod/Install,$(1),Encode auto/Encode)
-endef
-
-
-$(eval $(call BuildPackage,perl-encode-locale))
diff --git a/lang/perl-file-listing/Makefile b/lang/perl-file-listing/Makefile
deleted file mode 100644 (file)
index f946f68..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-file-listing
-PKG_VERSION:=6.04
-PKG_RELEASE:=2
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GA/GAAS
-PKG_SOURCE:=File-Listing-$(PKG_VERSION).tar.gz
-PKG_HASH:=1e0050fcd6789a2179ec0db282bf1e90fb92be35d1171588bd9c47d52d959cf5
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/File-Listing-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-file-listing
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Parse directory listing
-  URL:=http://search.cpan.org/dist/File-Listing/
-  DEPENDS:=perl +perl-http-date +perlbase-essential
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-file-listing/install
-        $(call perlmod/Install,$(1),File auto/File)
-endef
-
-
-$(eval $(call BuildPackage,perl-file-listing))
diff --git a/lang/perl-file-next/Makefile b/lang/perl-file-next/Makefile
deleted file mode 100644 (file)
index df414a6..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-only
-#
-# Copyright (C) 2021 ImmortalWrt.org
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-file-next
-PKG_VERSION:=1.18
-PKG_RELEASE:=1
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/P/PE/PETDANCE/
-PKG_SOURCE:=File-Next-$(PKG_VERSION).tar.gz
-PKG_HASH:=f900cb39505eb6e168a9ca51a10b73f1bbde1914b923a09ecd72d9c02e6ec2ef
-
-PKG_LICENSE:=Artistic-2.0
-PKG_MAINTAINER:=Tianling Shen <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/File-Next-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-file-next
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=File finding module
-  URL:=http://search.cpan.org/dist/File-Next/
-  DEPENDS:=perl +perlbase-file
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-file-next/install
-       $(call perlmod/Install,$(1),File auto/File)
-endef
-
-$(eval $(call BuildPackage,perl-file-next))
diff --git a/lang/perl-file-rsyncp/Makefile b/lang/perl-file-rsyncp/Makefile
deleted file mode 100644 (file)
index 695163d..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (C) 2018 OpenWrt
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-file-rsyncp
-PKG_VERSION:=0.74
-PKG_RELEASE:=1
-
-PKG_SOURCE:=File-RsyncP-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://search.cpan.org/CPAN/authors/id/C/CB/CBARRATT/
-PKG_HASH:=ba4df5f9b0db6c9d86a6c5cf9861cf00d17b18e77cfa028e7a9157c0015a5aa3
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/File-RsyncP-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Carsten Wolff <[email protected]>
-PKG_LICENSE:=GPL-2.0-or-later
-PKG_LICENSE_FILES:=LICENSE README
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-file-rsyncp
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl Rsync client
-  URL:=http://search.cpan.org/~cbarratt/File-RsyncP/
-  DEPENDS:=perl +perlbase-autoloader +perlbase-socket +perlbase-getopt +perlbase-data +perlbase-config +perlbase-encode +perlbase-fcntl +perlbase-file
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-       $(call perlmod/Configure,,,$(PKG_BUILD_DIR)/Digest)
-       $(call perlmod/Configure,,,$(PKG_BUILD_DIR)/FileList)
-       $(call Build/Configure/Default,,rsync_cv_HAVE_LONGLONG=yes,FileList)
-endef
-
-define Build/Compile
-       PERL5LIB=$(PERL_LIB) $(MAKE) -C $(PKG_BUILD_DIR)/Digest
-       PERL5LIB=$(PERL_LIB) $(MAKE) -C $(PKG_BUILD_DIR)/FileList
-       PERL5LIB=$(PERL_LIB) $(MAKE) -C $(PKG_BUILD_DIR)
-endef
-
-define Package/perl-file-rsyncp/install
-       $(INSTALL_DIR) $(strip $(1))$(PERL_SITELIB)/File/RsyncP
-       $(INSTALL_DIR) $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/Digest
-       $(INSTALL_DIR) $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/FileList
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/lib/File/RsyncP.pm $(strip $(1))$(PERL_SITELIB)/File
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/lib/File/RsyncP/FileIO.pm $(strip $(1))$(PERL_SITELIB)/File/RsyncP
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/Digest/Digest.pm $(strip $(1))$(PERL_SITELIB)/File/RsyncP
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/FileList/FileList.pm $(strip $(1))$(PERL_SITELIB)/File/RsyncP
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/Digest/blib/lib/auto/File/RsyncP/Digest/autosplit.ix $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/Digest
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/Digest/blib/arch/auto/File/RsyncP/Digest/Digest.so $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/Digest
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/FileList/blib/lib/auto/File/RsyncP/FileList/autosplit.ix $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/FileList
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/FileList/blib/arch/auto/File/RsyncP/FileList/FileList.so $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/FileList
-endef
-
-$(eval $(call BuildPackage,perl-file-rsyncp))
diff --git a/lang/perl-file-rsyncp/patches/001-no-subdirs.patch b/lang/perl-file-rsyncp/patches/001-no-subdirs.patch
deleted file mode 100644 (file)
index 746029a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -8,7 +8,7 @@ WriteMakefile(
-                             Getopt::Long => 2.24,     # need OO interface
-                          },
-     'PMLIBDIRS'       => ['lib'],
--    'DIR'             => ['Digest', 'FileList'],
-+    'DIR'             => [],
-     ($] >= 5.005 ?    ## Add these new keywords supported since 5.005
-       (ABSTRACT_FROM  => 'lib/File/RsyncP.pm', # retrieve abstract from module
-        AUTHOR         => 'Craig Barratt <[email protected]>')
diff --git a/lang/perl-file-sharedir-install/Makefile b/lang/perl-file-sharedir-install/Makefile
deleted file mode 100644 (file)
index c1ab6a9..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-file-sharedir-install
-PKG_VERSION:=0.13
-PKG_RELEASE:=1
-
-PKG_SOURCE:=File-ShareDir-Install-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/E/ET/ETHER
-PKG_HASH:=45befdf0d95cbefe7c25a1daf293d85f780d6d2576146546e6828aad26e580f9
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/File-ShareDir-Install-$(PKG_VERSION)
-HOST_BUILD_DEPENDS:=perl/host
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/File-ShareDir-Install-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-file-sharedir-install
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Install read-only data files
-  URL:=https://search.cpan.org/dist/File-ShareDir-Install/
-  DEPENDS:=perl +perlbase-essential +perlbase-extutils +perlbase-file +perlbase-io
-endef
-
-define Host/Configure
-        $(call perlmod/host/Configure,,,)
-endef
-
-define Host/Compile
-        $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-        $(call perlmod/host/Install,$(1),)
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-file-sharedir-install/install
-        $(call perlmod/Install,$(1),File auto/File)
-endef
-
-
-$(eval $(call BuildPackage,perl-file-sharedir-install))
-$(eval $(call HostBuild))
diff --git a/lang/perl-file-sharedir/Makefile b/lang/perl-file-sharedir/Makefile
deleted file mode 100644 (file)
index 68bc50e..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-file-sharedir
-PKG_VERSION:=1.118
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=File-ShareDir
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/R/RE/REHSACK/
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=3bb2a20ba35df958dc0a4f2306fc05d903d8b8c4de3c8beefce17739d281c958
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-file-sharedir
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Locate per-dist and per-module shared files
-  URL:=https://metacpan.org/pod/File::ShareDir
-  DEPENDS:=perl +perlbase-essential +perlbase-file +perl-class-inspector
-endef
-
-define Package/perl-file-sharedir/description
-  File::ShareDir locates shared files distributed with a Perl distribution
-  or module.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-file-sharedir/install
-       $(call perlmod/Install,$(1),File)
-endef
-
-
-$(eval $(call BuildPackage,perl-file-sharedir))
diff --git a/lang/perl-future-asyncawait/Makefile b/lang/perl-future-asyncawait/Makefile
deleted file mode 100644 (file)
index 2a46ea7..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-future-asyncawait
-PKG_VERSION:=0.70
-PKG_RELEASE:=2
-
-PKG_SOURCE_NAME:=Future-AsyncAwait
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=842899049c977fb2326a8096926441e57beca912bb2b4918d5ce090df4d4a6b7
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-future-asyncawait
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Deferred subroutine syntax for futures in Perl
-  URL:=https://metacpan.org/pod/Future::AsyncAwait
-  DEPENDS:=perl +perl-future +perl-xs-parse-keyword +perl-xs-parse-sublike +perlbase-xsloader +perlbase-scalar
-endef
-
-define Package/perl-future-asyncawait/description
-  This module provides syntax for deferring and resuming subroutines while
-  waiting for Futures to complete.
-  The new syntax takes the form of two new keywords, async and await.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-future-asyncawait/install
-       $(call perlmod/Install,$(1),Future auto/Future)
-endef
-
-
-$(eval $(call BuildPackage,perl-future-asyncawait))
diff --git a/lang/perl-future-asyncawait/src/Makefile.PL b/lang/perl-future-asyncawait/src/Makefile.PL
deleted file mode 100644 (file)
index 22882af..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-require 5.016;
-use ExtUtils::MakeMaker;
-WriteMakefile
-(
-  'NAME' => 'Future::AsyncAwait',
-  'VERSION_FROM' => 'lib/Future/AsyncAwait.pm',
-  'PREREQ_PM' => {
-                   'Future' => '0.50',
-                   'XS::Parse::Keyword' => '0.13',
-                   'XS::Parse::Sublike' => '0.31',
-                 },
-  'INSTALLDIRS' => 'site',
-  'EXE_FILES' => [],
-  'PL_FILES' => {},
-  'INC' => '-I. -Ishare/include -Ihax -I'.$ENV{STAGING_PREFIX}.'/share/perl/include',
-  'XSMULTI' => 1,
-)
-;
-
diff --git a/lang/perl-future/Makefile b/lang/perl-future/Makefile
deleted file mode 100644 (file)
index eabad8f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-future
-PKG_VERSION:=0.51
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=Future
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=563ce37383a000ecfd6b7942dd0f4b9fafb2b2c45e0b731029361f261c2f4a36
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-future
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Future represents an operation awaiting completion
-  URL:=https://metacpan.org/pod/Future
-  DEPENDS:=perl +perlbase-essential +perlbase-b +perlbase-time +perlbase-list
-endef
-
-define Package/perl-future/description
-  A Future object represents an operation that is currently in progress,
-  or has recently completed. It can be used in a variety of ways to manage
-  the flow of control, and data, through an asynchronous program.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-future/install
-       $(call perlmod/Install,$(1),Future.pm Future)
-endef
-
-
-$(eval $(call BuildPackage,perl-future))
diff --git a/lang/perl-future/src/Makefile.PL b/lang/perl-future/src/Makefile.PL
deleted file mode 100644 (file)
index e1a78d8..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-require 5.014;
-use ExtUtils::MakeMaker;
-WriteMakefile
-(
-  'NAME' => 'Future',
-  'VERSION_FROM' => 'lib/Future.pm',
-  'PREREQ_PM' => {
-                   'Carp' => '1.25',
-                   'List::Util' => '1.29',
-                   'Time::HiRes' => 0,
-                 },
-  'INSTALLDIRS' => 'site',
-  'EXE_FILES' => [],
-  'PL_FILES' => {}
-)
-;
-
diff --git a/lang/perl-html-form/Makefile b/lang/perl-html-form/Makefile
deleted file mode 100644 (file)
index 04cc084..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-html-form
-PKG_VERSION:=6.07
-PKG_RELEASE:=1
-
-PKG_SOURCE:=HTML-Form-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_HASH:=7daa8c7eaff4005501c3431c8bf478d58bbee7b836f863581aa14afe1b4b6227
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTML-Form-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-html-form
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Class that represents an HTML form element
-  URL:=https://search.cpan.org/dist/HTML-Form/
-  DEPENDS:=perl +perl-html-parser +perl-http-message +perl-uri +perlbase-encode +perlbase-essential
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-html-form/install
-        $(call perlmod/Install,$(1),HTML auto/HTML)
-endef
-
-
-$(eval $(call BuildPackage,perl-html-form))
diff --git a/lang/perl-html-parser/Makefile b/lang/perl-html-parser/Makefile
deleted file mode 100644 (file)
index c956b2f..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (C) 2014 - 2016 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-html-parser
-PKG_VERSION:=3.75
-PKG_RELEASE:=1
-
-PKG_SOURCE:=HTML-Parser-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/C/CA/CAPOEIRAB
-PKG_HASH:=ac6b5e25a8df7af54885201e91c45fb9ab6744c08cedc1a38fcc7d95d21193a9
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_CPE_ID:=cpe:/a:derrick_oswald:html-parser
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTML-Parser-$(PKG_VERSION)
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/HTML-Parser-$(PKG_VERSION)
-HOST_BUILD_DEPENDS:=perl/host
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-html-parser
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=A collection of modules that parse HTML text documents
-  URL:=http://search.cpan.org/dist/HTML-Parser/
-  DEPENDS:=perl +perl-html-tagset +perlbase-essential +perlbase-xsloader
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-html-parser/install
-       $(call perlmod/Install,$(1),HTML auto/HTML)
-endef
-
-define Host/Configure
-       $(call perlmod/host/Configure,,,)
-endef
-
-define Host/Compile
-       $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-       $(call perlmod/host/Install,$(1),)
-endef
-
-$(eval $(call BuildPackage,perl-html-parser))
-$(eval $(call HostBuild))
diff --git a/lang/perl-html-tagset/Makefile b/lang/perl-html-tagset/Makefile
deleted file mode 100644 (file)
index ce5e5ac..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-html-tagset
-PKG_VERSION:=3.20
-PKG_RELEASE:=4
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/P/PE/PETDANCE/
-PKG_SOURCE:=HTML-Tagset-$(PKG_VERSION).tar.gz
-PKG_HASH:=adb17dac9e36cd011f5243881c9739417fd102fce760f8de4e9be4c7131108e2
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTML-Tagset-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-html-tagset
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Data tables pertaining to HTML
-  URL:=http://search.cpan.org/dist/HTML-Tagset/
-  DEPENDS:=perl +perlbase-essential
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-html-tagset/install
-       $(call perlmod/Install,$(1),HTML)
-endef
-
-
-$(eval $(call BuildPackage,perl-html-tagset))
diff --git a/lang/perl-html-tree/Makefile b/lang/perl-html-tree/Makefile
deleted file mode 100644 (file)
index b0eceea..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-html-tree
-PKG_VERSION:=3.23
-PKG_RELEASE:=5
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/P/PE/PETEK/
-PKG_SOURCE:=HTML-Tree-$(PKG_VERSION).tar.gz
-PKG_HASH:=f5175acf262f3710dce899796ea3e353049939400b100706d03df2f08803c8de
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTML-Tree-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-html-tree
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Represent and create HTML syntax trees
-  URL:=http://search.cpan.org/dist/HTML-Tree/
-  DEPENDS:=perl +perl-html-parser +perl-html-tagset +perlbase-essential +perlbase-integer
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-html-tree/install
-       $(call perlmod/Install,$(1),HTML)
-endef
-
-
-$(eval $(call BuildPackage,perl-html-tree))
diff --git a/lang/perl-http-cookies/Makefile b/lang/perl-http-cookies/Makefile
deleted file mode 100644 (file)
index 0bdaf13..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-http-cookies
-PKG_VERSION:=6.08
-PKG_RELEASE:=1
-
-PKG_SOURCE:=HTTP-Cookies-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_HASH:=49ebb73576eb41063c04bc079477df094496deec805ae033f3be338c23c3af59
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Cookies-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-http-cookies
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=HTTP cookie jars
-  URL:=https://search.cpan.org/dist/HTTP-Cookies/
-  DEPENDS:=perl +perl-http-date +perl-http-message +perlbase-essential +perlbase-time
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-http-cookies/install
-        $(call perlmod/Install,$(1),HTTP auto/HTTP)
-endef
-
-
-$(eval $(call BuildPackage,perl-http-cookies))
diff --git a/lang/perl-http-daemon/Makefile b/lang/perl-http-daemon/Makefile
deleted file mode 100644 (file)
index fbecb42..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-http-daemon
-PKG_VERSION:=6.06
-PKG_RELEASE:=1
-
-PKG_SOURCE:=HTTP-Daemon-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_HASH:=fc03a161b54553f766457a4267e7066767f54ad01cacfe9a91d7caa2a0319bad
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Daemon-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENCE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-http-daemon
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=A simple http server class
-  URL:=http://search.cpan.org/dist/HTTP-Daemon/
-  DEPENDS:=perl +perl-http-date +perl-http-message +perl-lwp-mediatypes +perlbase-essential +perlbase-io +perlbase-sys
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-http-daemon/install
-        $(call perlmod/Install,$(1),HTTP auto/HTTP)
-endef
-
-
-$(eval $(call BuildPackage,perl-http-daemon))
diff --git a/lang/perl-http-date/Makefile b/lang/perl-http-date/Makefile
deleted file mode 100644 (file)
index 916a0b8..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-http-date
-PKG_VERSION:=6.05
-PKG_RELEASE:=2
-
-PKG_SOURCE:=HTTP-Date-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_HASH:=365d6294dfbd37ebc51def8b65b81eb79b3934ecbc95a2ec2d4d827efe6a922b
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Date-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-http-date
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Date conversion routines
-  URL:=http://search.cpan.org/dist/HTTP-Date/
-  DEPENDS:=perl +perlbase-essential +perlbase-time
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-http-date/install
-        $(call perlmod/Install,$(1),HTTP auto/HTTP)
-endef
-
-
-$(eval $(call BuildPackage,perl-http-date))
diff --git a/lang/perl-http-message/Makefile b/lang/perl-http-message/Makefile
deleted file mode 100644 (file)
index cc0d965..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-http-message
-PKG_VERSION:=6.22
-PKG_RELEASE:=1
-
-PKG_SOURCE:=HTTP-Message-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_HASH:=970efd151b81c95831d2a5f9e117f8032b63a1768cd2cd3f092ad634c85175c3
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Message-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-http-message
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=HTTP style messages
-  URL:=https://search.cpan.org/dist/HTTP-Message/
-  DEPENDS:=perl +perl-encode-locale +perl-http-date +perl-io-html +perl-lwp-mediatypes +perl-uri +perlbase-base +perlbase-compress +perlbase-encode +perlbase-essential +perlbase-io +perlbase-mime
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-http-message/install
-        $(call perlmod/Install,$(1),HTTP auto/HTTP)
-endef
-
-
-$(eval $(call BuildPackage,perl-http-message))
diff --git a/lang/perl-http-negotiate/Makefile b/lang/perl-http-negotiate/Makefile
deleted file mode 100644 (file)
index 0208e33..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-http-negotiate
-PKG_VERSION:=6.01
-PKG_RELEASE:=2
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GA/GAAS
-PKG_SOURCE:=HTTP-Negotiate-$(PKG_VERSION).tar.gz
-PKG_HASH:=1c729c1ea63100e878405cda7d66f9adfd3ed4f1d6cacaca0ee9152df728e016
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Negotiate-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-http-negotiate
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Choose a variant to serve
-  URL:=http://search.cpan.org/dist/HTTP-Negotiate/
-  DEPENDS:=perl +perl-http-message +perlbase-essential
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-http-negotiate/install
-        $(call perlmod/Install,$(1),HTTP auto/HTTP)
-endef
-
-
-$(eval $(call BuildPackage,perl-http-negotiate))
diff --git a/lang/perl-http-server-simple/Makefile b/lang/perl-http-server-simple/Makefile
deleted file mode 100644 (file)
index 26600a7..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-http-server-simple
-PKG_VERSION:=0.52
-PKG_RELEASE:=1
-
-PKG_SOURCE:=HTTP-Server-Simple-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/B/BP/BPS
-PKG_HASH:=d8939fa4f12bd6b8c043537fd0bf96b055ac3686b9cdd9fa773dca6ae679cb4c
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Server-Simple-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-http-server-simple
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Lightweight HTTP server
-  URL:=https://search.cpan.org/dist/HTTP-Server-Simple/
-  DEPENDS:=perl +perl-cgi +perlbase-base +perlbase-essential +perlbase-filehandle +perlbase-socket +perlbase-test
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-http-server-simple/install
-        $(call perlmod/Install,$(1),HTTP auto/HTTP)
-endef
-
-
-$(eval $(call BuildPackage,perl-http-server-simple))
diff --git a/lang/perl-inline-c/Makefile b/lang/perl-inline-c/Makefile
deleted file mode 100644 (file)
index 9de7a90..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-inline-c
-PKG_VERSION:=0.81
-PKG_RELEASE:=1
-
-PKG_SOURCE:=Inline-C-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/T/TI/TINITA
-PKG_HASH:=f185258d9050d7f79b4f00f12625cc469c2f700ff62d3e831cb18d80d2c87aac
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/Inline-C-$(PKG_VERSION)
-HOST_BUILD_DEPENDS:=perl/host perl-inline/host perl-parse-recdescent/host perl-file-sharedir-install/host
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Inline-C-$(PKG_VERSION)
-PKG_BUILD_DEPENDS:=perl-inline/host perl-parse-recdescent/host perl-file-sharedir-install/host
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-inline-c
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=C Language Support for Inline
-  URL:=https://search.cpan.org/dist/Inline-C/
-  DEPENDS:=perl +perl-inline +perl-parse-recdescent +perlbase-config +perlbase-cwd +perlbase-data +perlbase-essential +perlbase-file +perlbase-if
-endef
-
-define Host/Configure
-        $(call perlmod/host/Configure,,,)
-endef
-
-define Host/Compile
-        $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-        $(call perlmod/host/Install,$(1),)
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-inline-c/install
-        $(call perlmod/Install,$(1),Inline auto/Inline)
-endef
-
-
-$(eval $(call BuildPackage,perl-inline-c))
-$(eval $(call HostBuild))
diff --git a/lang/perl-inline-c/patches/100-inline_c-no_compile_hack.patch b/lang/perl-inline-c/patches/100-inline_c-no_compile_hack.patch
deleted file mode 100644 (file)
index b001c20..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/lib/Inline/C.pm
-+++ b/lib/Inline/C.pm
-@@ -380,7 +380,7 @@ sub build {
-     $o->call('write_XS', 'Build Glue 1');
-     $o->call('write_Inline_headers', 'Build Glue 2');
-     $o->call('write_Makefile_PL', 'Build Glue 3');
--    $o->call('compile', 'Build Compile');
-+    $o->call('compile', 'Build Compile') unless $ENV{'_INLINE_C_NO_COMPILE_'};
-     if (IS_WIN32) {
-         $lockfh->release or die "releasemutex $file: $^E";
-     }
diff --git a/lang/perl-inline-c/patches/110-inline_c-make_system_typemap_overridable.patch b/lang/perl-inline-c/patches/110-inline_c-make_system_typemap_overridable.patch
deleted file mode 100644 (file)
index d26318a..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
---- a/lib/Inline/C.pm
-+++ b/lib/Inline/C.pm
-@@ -457,22 +457,28 @@ sub get_maps {
-     print STDERR "get_maps Stage\n" if $o->{CONFIG}{BUILD_NOISY};
-     my $typemap = '';
-     my $file;
--    $file = File::Spec->catfile(
--        $Config::Config{installprivlib},
--        "ExtUtils",
--        "typemap",
--    );
--    $typemap = $file if -f $file;
--    $file = File::Spec->catfile(
--        $Config::Config{privlibexp}
--        ,"ExtUtils","typemap"
--    );
--    $typemap = $file
--        if (not $typemap and -f $file);
--    warn "Can't find the default system typemap file"
--        if (not $typemap and $^W);
-+    
-+    unless ($ENV{'_INLINE_C_SYSTEM_TYPEMAP_'}) {
-+        $file = File::Spec->catfile(
-+            $Config::Config{installprivlib},
-+            "ExtUtils",
-+            "typemap",
-+        );
-+        $typemap = $file if -f $file;
-+        $file = File::Spec->catfile(
-+            $Config::Config{privlibexp}
-+            ,"ExtUtils","typemap"
-+        );
-+        $typemap = $file
-+            if (not $typemap and -f $file);
-+        warn "Can't find the default system typemap file"
-+            if (not $typemap and $^W);
--    unshift(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, $typemap) if $typemap;
-+        unshift(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, $typemap) if $typemap;
-+    }
-+    else {
-+        unshift(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, $ENV{'_INLINE_C_SYSTEM_TYPEMAP_'});
-+    }
-     if (not $o->UNTAINT) {
-         require FindBin;
diff --git a/lang/perl-inline/Makefile b/lang/perl-inline/Makefile
deleted file mode 100644 (file)
index cbf2e8f..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-inline
-PKG_VERSION:=0.86
-PKG_RELEASE:=1
-
-PKG_SOURCE:=Inline-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/I/IN/INGY
-PKG_HASH:=510a7de2d011b0db80b0874e8c0f7390010991000ae135cff7474df1e6d51e3a
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Inline-$(PKG_VERSION)
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/Inline-$(PKG_VERSION)
-
-HOST_BUILD_DEPENDS:=perl/host
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-inline
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Write subroutines in other languages
-  URL:=https://search.cpan.org/dist/Inline/
-  DEPENDS:=perl +perlbase-base +perlbase-config +perlbase-cwd +perlbase-digest +perlbase-essential +perlbase-fcntl +perlbase-file
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-inline/install
-        $(call perlmod/Install,$(1),Inline.pm Inline auto/Inline)
-endef
-
-define Host/Configure
-       $(call perlmod/host/Configure,,,)
-endef
-
-define Host/Compile
-       $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-       $(call perlmod/host/Install,$(1),)
-endef
-
-
-$(eval $(call BuildPackage,perl-inline))
-$(eval $(call HostBuild))
diff --git a/lang/perl-io-async-ssl/Makefile b/lang/perl-io-async-ssl/Makefile
deleted file mode 100644 (file)
index 13dbfed..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-io-async-ssl
-PKG_VERSION:=0.25
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=IO-Async-SSL
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=4def485db1eff4e139b4b5912202c0fd61c3aed2cec35bd5ab8bf7bbd83f5a75
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-io-async-ssl
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=SSL/TLS with IO::Async
-  URL:=https://metacpan.org/pod/IO::Async::SSL
-  DEPENDS:=perl +perlbase-io +perl-future +perl-io-async
-endef
-
-define Package/perl-io-async-ssl/description
-  This module extends existing IO::Async classes with extra methods to
-  allow the use of SSL or TLS-based connections using IO::Socket::SSL.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-io-async-ssl/install
-       $(call perlmod/Install,$(1),IO)
-endef
-
-$(eval $(call BuildPackage,perl-io-async-ssl))
diff --git a/lang/perl-io-async-ssl/src/Makefile.PL b/lang/perl-io-async-ssl/src/Makefile.PL
deleted file mode 100644 (file)
index 2f948c2..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-use 5.014;
-use ExtUtils::MakeMaker;
-WriteMakefile
-(
-  'NAME' => 'IO::Async::SSL',
-  'VERSION_FROM' => 'lib/IO/Async/SSL.pm',
-  'PREREQ_PM' => {
-                   'Future' => '0.33',
-                   'IO::Async::Loop' => '0.66',
-                   'IO::Async::Handle' => '0.29',
-                   'IO::Async::Protocol::Stream' => 0,
-                   'IO::Async::Stream' => '0.59',
-                   'IO::Socket::SSL' => '2.003',
-                 },
-  'INSTALLDIRS' => 'site',
-  'EXE_FILES' => [],
-  'PL_FILES' => {}
-)
-;
-
diff --git a/lang/perl-io-async/Makefile b/lang/perl-io-async/Makefile
deleted file mode 100644 (file)
index b170bfc..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-io-async
-PKG_VERSION:=0.804
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=IO-Async
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=90615432918164cd6f9e6dc2521195a4589606ffd017e03d5aa97f407d39c494
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-io-async
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Asynchronous event-driven programming for Perl
-  URL:=https://metacpan.org/pod/Net::SSLeay
-  DEPENDS:=perl +perlbase-essential +perlbase-file +perlbase-io +perlbase-list +perlbase-socket +perlbase-storable +perlbase-time +perlbase-encode +perlbase-experimental +perl-future +perl-struct-dumb
-endef
-
-define Package/perl-io-async/description
-  This collection of modules allows programs to be written that perform
-  asynchronous filehandle IO operations.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-io-async/install
-       $(call perlmod/Install,$(1),IO Future)
-endef
-
-$(eval $(call BuildPackage,perl-io-async))
-
diff --git a/lang/perl-io-async/src/Makefile.PL b/lang/perl-io-async/src/Makefile.PL
deleted file mode 100644 (file)
index 1c08060..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-require 5.014;
-use ExtUtils::MakeMaker;
-WriteMakefile
-(
-  'NAME' => 'IO::Async',
-  'VERSION_FROM' => 'lib/IO/Async.pm',
-  'PREREQ_PM' => {
-                   'Future' => '0.44',
-                   'Future::Utils' => '0.18',
-                   'Exporter' => '5.57',
-                   'File::stat' => 0,
-                   'IO::Poll' => 0,
-                   'List::Util' => 0,
-                   'Socket' => '2.007',
-                   'Storable' => 0,
-                   'Struct::Dumb' => 0,
-                   'Time::HiRes' => 0,
-                 },
-  'INSTALLDIRS' => 'site',
-  'EXE_FILES' => [],
-  'PL_FILES' => {}
-)
-;
-
diff --git a/lang/perl-io-html/Makefile b/lang/perl-io-html/Makefile
deleted file mode 100644 (file)
index d5b568d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-io-html
-PKG_VERSION:=1.001
-PKG_RELEASE:=2
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/C/CJ/CJM
-PKG_SOURCE:=IO-HTML-$(PKG_VERSION).tar.gz
-PKG_HASH:=ea78d2d743794adc028bc9589538eb867174b4e165d7d8b5f63486e6b828e7e0
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/IO-HTML-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-io-html
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Open an HTML file with automatic charset detection
-  URL:=http://search.cpan.org/dist/IO-HTML/
-  DEPENDS:=perl +perlbase-encode +perlbase-essential
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-io-html/install
-        $(call perlmod/Install,$(1),IO auto/IO)
-endef
-
-
-$(eval $(call BuildPackage,perl-io-html))
diff --git a/lang/perl-io-socket-ssl/Makefile b/lang/perl-io-socket-ssl/Makefile
deleted file mode 100644 (file)
index 2099f81..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-io-socket-ssl
-PKG_VERSION:=2.090
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=IO-Socket-SSL
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/S/SU/SULLR
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=fdda17888df9f88251b62856f17fcac8f144858c72d7e01d1c4b437d23383d97
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-io-socket-ssl
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl SSL sockets with IO::Socket interface
-  URL:=https://metacpan.org/pod/Net::SSLeay
-  DEPENDS:=perl +perlbase-autoloader +perlbase-io +perlbase-list +perl-net-ssleay
-endef
-
-define Package/perl-io-socket-ssl/description
-  IO::Socket::SSL makes using SSL/TLS much easier by wrapping the
-  functionality into the familiar IO::Socket interface and providing
-  secure defaults whenever possible.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-io-socket-ssl/install
-       $(call perlmod/Install,$(1),IO)
-endef
-
-$(eval $(call BuildPackage,perl-io-socket-ssl))
-
diff --git a/lang/perl-lockfile-simple/Makefile b/lang/perl-lockfile-simple/Makefile
deleted file mode 100644 (file)
index 0495946..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-lockfile-simple
-PKG_VERSION:=0.208
-PKG_RELEASE:=4
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/S/SC/SCHWIGON/lockfile-simple/
-PKG_SOURCE:=LockFile-Simple-$(PKG_VERSION).tar.gz
-PKG_HASH:=45c77896b2a5a0a45f6202a6f813f437ff8b283f84a1c60d0c4f3730802af3a2
-
-PKG_LICENSE:=GPL-2.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/LockFile-Simple-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-lockfile-simple
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Simple advisory file locking
-  URL:=http://search.cpan.org/dist/LockFile-Simple/
-  DEPENDS:=perl +perlbase-essential +perlbase-sys
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-lockfile-simple/install
-       $(call perlmod/Install,$(1),LockFile auto/LockFile)
-endef
-
-
-$(eval $(call BuildPackage,perl-lockfile-simple))
diff --git a/lang/perl-lwp-mediatypes/Makefile b/lang/perl-lwp-mediatypes/Makefile
deleted file mode 100644 (file)
index 9b6d824..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-lwp-mediatypes
-PKG_VERSION:=6.04
-PKG_RELEASE:=1
-
-PKG_SOURCE:=LWP-MediaTypes-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_HASH:=8f1bca12dab16a1c2a7c03a49c5e58cce41a6fec9519f0aadfba8dad997919d9
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/LWP-MediaTypes-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-lwp-mediatypes
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Guess media type for a file or a URL
-  URL:=https://search.cpan.org/dist/LWP-MediaTypes/
-  DEPENDS:=perl +perlbase-essential
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-lwp-mediatypes/install
-        $(call perlmod/Install,$(1),LWP auto/LWP)
-endef
-
-
-$(eval $(call BuildPackage,perl-lwp-mediatypes))
diff --git a/lang/perl-mail-spamassassin/Makefile b/lang/perl-mail-spamassassin/Makefile
deleted file mode 100644 (file)
index 2c6696c..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-mail-spamassassin
-PKG_RELEASE:=1
-PKG_VERSION:=4.0.1
-PKG_HASH:=5c6bb222e18405f1a276816d04e1ffc5cc90785e1265714b4506c2b541d6d5e5
-
-PKG_SOURCE_NAME:=Mail-SpamAssassin
-PKG_SOURCE_URL:=@APACHE/spamassassin/source
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-PKG_MAINTAINER:=Daniel Golle <[email protected]>
-PKG_LICENSE:=Apache-2.0
-PKG_LICENSE_FILES:=LICENSE
-PKG_CPE_ID:=cpe:/a:apache:spamassassin
-
-PKG_BUILD_DEPENDS:=perl-dbi/host perl-html-parser/host perl-net-dns/host perl-netaddr-ip/host
-PKG_INSTALL:=1
-PKG_SOURCE_VERSION:=$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-CONFIGURE_PATH:=spamc
-
-define Package/spamassassin
-  SECTION:=mail
-  CATEGORY:=Mail
-  TITLE:=SpamAssassin
-  URL:=https://spamassassin.apache.org/
-  DEPENDS:=perl +perlbase-autoloader +perlbase-config +perlbase-data +perlbase-digest \
-          +perlbase-encode +perlbase-essential +perlbase-file +perlbase-getopt \
-          +perlbase-hash +perlbase-mime +perlbase-net +perlbase-socket \
-          +perl-dbi +perl-html-parser +perl-net-dns +perl-netaddr-ip
-  VARIANT:=ssl
-endef
-
-define Package/spamc/Default
-  SECTION:=mail
-  CATEGORY:=Mail
-  TITLE:=SpamAssassin client binary
-  URL:=https://spamassassin.apache.org/
-  DEPENDS:=+zlib
-endef
-
-define Package/spamc
-  $(call Package/spamc/Default)
-  VARIANT:=nossl
-endef
-
-define Package/spamc-ssl
-  $(call Package/spamc/Default)
-  TITLE+= (with SSL)
-  DEPENDS+=+libopenssl
-  VARIANT:=ssl
-endef
-
-ifeq ($(BUILD_VARIANT),ssl)
-TARGET_CFLAGS += -DSPAMC_SSL
-CONFIGURE_ARGS += --enable-ssl
-endif
-
-define Package/spamassassin/conffiles
-/etc/mail/spamassassin
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-       $(call Build/Configure/Default)
-       ( cd "$(PKG_BUILD_DIR)/$(CONFIGURE_PATH)" && ./version.h.pl --with-version=$(PKG_SOURCE_VERSION) )
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-       $(call Build/Compile/Default,,,spamc)
-endef
-
-define Package/spamassassin/install
-       $(call perlmod/Install,$(1),Mail/SpamAssassin auto/Mail/SpamAssassin)
-       $(INSTALL_DIR) $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-awl $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-learn $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-compile $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/spamassassin $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-update $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/spamd $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-check_spamd $(1)/usr/bin
-       $(INSTALL_DIR) $(1)/etc/mail/spamassassin
-       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/mail/spamassassin/* $(1)/etc/mail/spamassassin
-endef
-
-define Package/spamc/install
-       $(INSTALL_DIR) $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/spamc $(1)/usr/bin
-endef
-
-Package/spamc-ssl/install = $(Package/spamc/install)
-
-$(eval $(call BuildPackage,spamassassin))
-$(eval $(call BuildPackage,spamc))
-$(eval $(call BuildPackage,spamc-ssl))
diff --git a/lang/perl-metrics-any/Makefile b/lang/perl-metrics-any/Makefile
deleted file mode 100644 (file)
index ce15406..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-metrics-any
-PKG_VERSION:=0.10
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=Metrics-Any
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=a90eadf9c8af24a516bb9a1b67061f641853f90b8fee9ffc24d2bb9720e8b99b
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-metrics-any
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Abstract collection of monitoring metrics
-  URL:=https://metacpan.org/pod/Metrics::Any
-  DEPENDS:=perl +perlbase-list
-endef
-
-define Package/perl-metrics-any/description
-  Provides a central location for modules to report monitoring metrics.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-metrics-any/install
-       $(call perlmod/Install,$(1),Metrics)
-endef
-
-$(eval $(call BuildPackage,perl-metrics-any))
diff --git a/lang/perl-metrics-any/src/Makefile.PL b/lang/perl-metrics-any/src/Makefile.PL
deleted file mode 100644 (file)
index 7a0d317..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-use 5.014;
-use ExtUtils::MakeMaker;
-WriteMakefile
-(
-  'NAME' => 'Metrics::Any',
-  'VERSION_FROM' => 'lib/Metrics/Any.pm',
-  'PREREQ_PM' => {
-                   'List::Util' => '1.29',
-                 },
-  'INSTALLDIRS' => 'site',
-  'EXE_FILES' => [],
-  'PL_FILES' => {}
-)
-;
-
diff --git a/lang/perl-net-async-http/Makefile b/lang/perl-net-async-http/Makefile
deleted file mode 100644 (file)
index 30a6963..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-net-async-http
-PKG_VERSION:=0.50
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=Net-Async-HTTP
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=92845b8ffdd2dc81decbe8a7b99203e4e34971de6624acb5c10aa9ff07885b87
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-net-async-http
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=HTTP with IO::Async
-  URL:=https://metacpan.org/pod/Net::Async::HTTP
-  DEPENDS:=perl +perlbase-list +perlbase-socket +perlbase-time +perl-future +perl-http-message +perl-io-async +perl-metrics-any +perl-struct-dumb +perl-uri
-endef
-
-define Package/perl-net-async-http/description
-  This object class implements an asynchronous HTTP user agent.
-  Similar to LWP::UserAgent, but for IO::Async.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-net-async-http/install
-       $(call perlmod/Install,$(1),Net)
-endef
-
-$(eval $(call BuildPackage,perl-net-async-http))
diff --git a/lang/perl-net-async-http/src/Makefile.PL b/lang/perl-net-async-http/src/Makefile.PL
deleted file mode 100644 (file)
index 77be2c2..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-use 5.014;
-use ExtUtils::MakeMaker;
-WriteMakefile
-(
-  'NAME' => 'Net::Async::HTTP',
-  'VERSION_FROM' => 'lib/Net/Async/HTTP.pm',
-  'PREREQ_PM' => {
-                   'Future' => '0.28',
-                   'Future::Utils' => '0.16',
-                   'HTTP::Request' => 0,
-                   'HTTP::Request::Common' => 0,
-                   'HTTP::Response' => 0,
-                   'IO::Async::Loop' => '0.59',
-                   'IO::Async::Stream' => '0.59',
-                   'IO::Async::Timer::Countdown' => 0,
-                   'List::Util' => "1.29",
-                   'Metrics::Any' => '0.05',
-                   'Socket' => '2.010',
-                   'Struct::Dumb' => '0.07',
-                   'Time::HiRes' => 0,
-                   'URI' => 0,
-                 },
-  'INSTALLDIRS' => 'site',
-  'EXE_FILES' => [],
-  'PL_FILES' => {}
-)
-;
-
diff --git a/lang/perl-net-cidr-lite/Makefile b/lang/perl-net-cidr-lite/Makefile
deleted file mode 100644 (file)
index c09419c..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2020 Philip Prindeville, Redfish Solutions, LLC
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-net-cidr-lite
-PKG_VERSION:=0.21
-PKG_RELEASE:=1
-
-PKG_SOURCE:=Net-CIDR-Lite-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/D/DO/DOUGW
-PKG_HASH:=cfa125e8a2aef9259bc3a44e07cbdfb7894b64d22e7c0cee92aee2f5c7915093
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Net-CIDR-Lite-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Philip Prindeville <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-net-cidr-lite
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl extension for merging IPv4 or IPv6 CIDR addresses
-  URL:=https://search.cpan.org/dist/Net-CIDR-Lite/
-  DEPENDS:=perl +perlbase-essential +perlbase-config +perlbase-io +perlbase-dynaloader
-  PKGARCH:=all
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-net-cidr-lite/install
-        $(call perlmod/Install,$(1),Net Net/CIDR Net/CIDR/Lite.pm)
-endef
-
-
-$(eval $(call BuildPackage,perl-net-cidr-lite))
diff --git a/lang/perl-net-dns-sec/Makefile b/lang/perl-net-dns-sec/Makefile
deleted file mode 100644 (file)
index 0780aab..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-net-dns-sec
-PKG_VERSION:=1.26
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=Net-DNS-SEC
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/N/NL/NLNETLABS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=88592c65487fb7b4d05134f2f9c48e649a9cd533a8493c50189b649b4ea711a6
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=MIT
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-net-dns-sec
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=DNSSEC extensions to Net::DNS
-  URL:=https://metacpan.org/pod/Net::DNS::SEC
-  DEPENDS:=perl +perlbase-essential +perlbase-dynaloader +perlbase-file +perlbase-io +perlbase-mime +perl-net-dns +libopenssl
-endef
-
-define Package/perl-net-dns-sec/description
-  This module extends Net::DNS to support DNSSEC
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-net-dns-sec/install
-       $(call perlmod/Install,$(1),Net auto/Net)
-endef
-
-$(eval $(call BuildPackage,perl-net-dns-sec))
diff --git a/lang/perl-net-dns/Makefile b/lang/perl-net-dns/Makefile
deleted file mode 100644 (file)
index 744e76a..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-net-dns
-PKG_VERSION:=1.50
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=Net-DNS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://www.net-dns.org/download
-PKG_HASH:=c660500b9d96e5aa2b16d9f4260b6f9f05b5602d3c4bea0ca39b45bcd02ba993
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Daniel Golle <[email protected]>
-PKG_LICENSE:=MIT
-HOST_BUILD_DEPENDS:=perl/host
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-net-dns
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Net::DNS DNS resolver implemented in Perl
-  URL:=https://www.net-dns.org/
-  DEPENDS:=perl +perlbase-essential +perlbase-io
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-net-dns/install
-        $(call perlmod/Install,$(1),Net auto/Net)
-endef
-
-define Host/Configure
-        $(call perlmod/host/Configure,,,)
-endef
-
-define Host/Compile
-        $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-        $(call perlmod/host/Install,$(1),)
-endef
-
-$(eval $(call BuildPackage,perl-net-dns))
-$(eval $(call HostBuild))
diff --git a/lang/perl-net-http/Makefile b/lang/perl-net-http/Makefile
deleted file mode 100644 (file)
index c8e0240..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-net-http
-PKG_VERSION:=6.19
-PKG_RELEASE:=1
-
-PKG_SOURCE:=Net-HTTP-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_HASH:=52b76ec13959522cae64d965f15da3d99dcb445eddd85d2ce4e4f4df385b2fc4
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Net-HTTP-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-net-http
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Low-level HTTP connection (client)
-  URL:=https://search.cpan.org/dist/Net-HTTP/
-  DEPENDS:=perl +perl-uri +perlbase-compress +perlbase-essential +perlbase-io
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-net-http/install
-        $(call perlmod/Install,$(1),Net auto/Net)
-endef
-
-
-$(eval $(call BuildPackage,perl-net-http))
diff --git a/lang/perl-net-ssleay/Makefile b/lang/perl-net-ssleay/Makefile
deleted file mode 100644 (file)
index 8de6b73..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-net-ssleay
-PKG_VERSION:=1.94
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=Net-SSLeay
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/C/CH/CHRISN
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=9d7be8a56d1bedda05c425306cc504ba134307e0c09bda4a788c98744ebcd95d
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-net-ssleay
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl bindings for OpenSSL and LibreSSL
-  URL:=https://metacpan.org/pod/Net::SSLeay
-  DEPENDS:=perl +perlbase-essential +perlbase-mime +libopenssl +zlib
-endef
-
-define Package/perl-net-ssleay/description
-  This module provides Perl bindings for libssl (an SSL/TLS API)
-  and libcrypto (a cryptography API).
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-net-ssleay/install
-       $(call perlmod/Install,$(1),Net auto/Net)
-endef
-
-$(eval $(call BuildPackage,perl-net-ssleay))
-
diff --git a/lang/perl-net-ssleay/patches/001-prefix.patch b/lang/perl-net-ssleay/patches/001-prefix.patch
deleted file mode 100644 (file)
index 7b85d46..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -12,6 +12,8 @@ use File::Spec::Functions qw(catfile);
- use Symbol qw(gensym);
- use Text::Wrap;
-+$ENV{OPENSSL_PREFIX} = $ENV{STAGING_PREFIX};
-+
- # According to http://cpanwiki.grango.org/wiki/CPANAuthorNotes, the ideal
- # behaviour to exhibit when a prerequisite does not exist is to use exit code 0
- # to ensure smoke testers stop immediately without reporting a FAIL; in all
diff --git a/lang/perl-net-telnet/Makefile b/lang/perl-net-telnet/Makefile
deleted file mode 100644 (file)
index ac1d315..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2011-2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-net-telnet
-PKG_VERSION:=3.04
-PKG_RELEASE:=4
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/J/JR/JROGERS/
-PKG_SOURCE:=Net-Telnet-$(PKG_VERSION).tar.gz
-PKG_HASH:=e64d567a4e16295ecba949368e7a6b8b5ae2a16b3ad682121d9b007dc5d2a37a
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Net-Telnet-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-net-telnet
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Telnet client
-  URL:=http://search.cpan.org/dist/Net-Telnet/
-  DEPENDS:=perl +perlbase-essential +perlbase-socket +perlbase-symbol
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-net-telnet/install
-       $(call perlmod/Install,$(1),Net auto/Net)
-endef
-
-
-$(eval $(call BuildPackage,perl-net-telnet))
diff --git a/lang/perl-netaddr-ip/Makefile b/lang/perl-netaddr-ip/Makefile
deleted file mode 100644 (file)
index 4e6cf6d..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-netaddr-ip
-PKG_VERSION:=4.079
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=NetAddr-IP
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/M/MI/MIKER/
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=ec5a82dfb7028bcd28bb3d569f95d87dd4166cc19867f2184ed3a59f6d6ca0e7
-
-PKG_LICENSE:=GPL-2.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=Copying
-PKG_MAINTAINER:=Daniel Golle <[email protected]>
-
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/NetAddr-IP-$(PKG_VERSION)
-HOST_BUILD_DEPENDS:=perl/host
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/NetAddr-IP-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-netaddr-ip
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=NetAddr::IP - Manages IPv4 and IPv6 addresses and subnets
-  URL:=http://search.cpan.org/dist/NetAddr::IP/
-  DEPENDS:=perl +perlbase-essential +perlbase-test
-endef
-
-define Host/Configure
-       $(call perlmod/host/Configure,-noxs,,)
-       $(call Host/Configure/Default,,,Lite/Util)
-endef
-
-define Host/Compile
-       $(call Host/Compile/Default,,,Lite/Util)
-       $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-       $(call perlmod/host/Install,$(1),)
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,-noxs,)
-       $(call Build/Configure/Default,,,Lite/Util)
-endef
-
-define Build/Compile
-       $(call Build/Compile/Default,,,Lite/Util)
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-netaddr-ip/install
-       $(call perlmod/Install,$(1),NetAddr auto/NetAddr)
-endef
-
-$(eval $(call BuildPackage,perl-netaddr-ip))
-$(eval $(call HostBuild))
diff --git a/lang/perl-parse-recdescent/Makefile b/lang/perl-parse-recdescent/Makefile
deleted file mode 100644 (file)
index d041a6a..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-parse-recdescent
-PKG_VERSION:=1.967015
-PKG_RELEASE:=2
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/J/JT/JTBRAUN
-PKG_SOURCE:=Parse-RecDescent-$(PKG_VERSION).tar.gz
-PKG_HASH:=1943336a4cb54f1788a733f0827c0c55db4310d5eae15e542639c9dd85656e37
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/Parse-RecDescent-$(PKG_VERSION)
-HOST_BUILD_DEPENDS:=perl/host
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Parse-RecDescent-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-parse-recdescent
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Generate Recursive-Descent Parsers
-  URL:=http://search.cpan.org/dist/Parse-RecDescent/
-  DEPENDS:=perl +perlbase-essential +perlbase-test +perlbase-text
-endef
-
-define Host/Configure
-        $(call perlmod/host/Configure,,,)
-endef
-
-define Host/Compile
-        $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-        $(call perlmod/host/Install,$(1),)
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-parse-recdescent/install
-        $(call perlmod/Install,$(1),Parse auto/Parse)
-endef
-
-
-$(eval $(call BuildPackage,perl-parse-recdescent))
-$(eval $(call HostBuild))
diff --git a/lang/perl-parse-yapp/Makefile b/lang/perl-parse-yapp/Makefile
deleted file mode 100644 (file)
index 7708b97..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-parse-yapp
-PKG_VERSION:=1.21
-PKG_RELEASE:=1
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/W/WB/WBRASWELL/
-PKG_SOURCE:=Parse-Yapp-$(PKG_VERSION).tar.gz
-PKG_HASH:=3810e998308fba2e0f4f26043035032b027ce51ce5c8a52a8b8e340ca65f13e5
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/Parse-Yapp-$(PKG_VERSION)
-HOST_BUILD_DEPENDS:=perl/host
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Parse-Yapp-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-parse-yapp
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Yet Another Parser Parser For Perl
-  URL:=http://search.cpan.org/dist/Parse-Yapp/
-  DEPENDS:=perl +perlbase-essential +perlbase-test
-endef
-
-define Host/Configure
-        $(call perlmod/host/Configure,,,)
-endef
-
-define Host/Compile
-        $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-        $(call perlmod/host/Install,$(1),)
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-parse-yapp/install
-        $(call perlmod/Install,$(1),Parse auto/Parse)
-endef
-
-
-$(eval $(call BuildPackage,perl-parse-yapp))
-$(eval $(call HostBuild))
diff --git a/lang/perl-struct-dumb/Makefile b/lang/perl-struct-dumb/Makefile
deleted file mode 100644 (file)
index ed5ea93..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-struct-dumb
-PKG_VERSION:=0.14
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=Struct-Dumb
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=13c148536b10e28c6e0b4e132f29e4ca6e69b5749059c44157a27e84a5459436
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-struct-dumb
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Make simple lightweight record-like structures
-  URL:=https://metacpan.org/pod/Struct::Dumb
-  DEPENDS:=perl +perlbase-essential +perlbase-scalar
-endef
-
-define Package/perl-struct-dumb/description
-  Struct::Dumb creates record-like structure types,
-  similar to the struct keyword in C, C++ or Record in Pascal.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-struct-dumb/install
-       $(call perlmod/Install,$(1),Struct)
-endef
-
-$(eval $(call BuildPackage,perl-struct-dumb))
-
diff --git a/lang/perl-struct-dumb/src/Makefile.PL b/lang/perl-struct-dumb/src/Makefile.PL
deleted file mode 100644 (file)
index aea8a7f..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-require 5.014;
-use ExtUtils::MakeMaker;
-WriteMakefile
-(
-  'NAME' => 'Struct::Dumb',
-  'VERSION_FROM' => 'lib/Struct/Dumb.pm',
-  'PREREQ_PM' => {
-                   'Scalar::Util' => 0,
-                 },
-  'INSTALLDIRS' => 'site',
-  'EXE_FILES' => [],
-  'PL_FILES' => {}
-)
-;
-
diff --git a/lang/perl-sub-uplevel/Makefile b/lang/perl-sub-uplevel/Makefile
deleted file mode 100644 (file)
index 5f2b421..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-sub-uplevel
-PKG_VERSION:=0.2800
-PKG_RELEASE:=1
-
-PKG_SOURCE:=Sub-Uplevel-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN
-PKG_HASH:=b4f3f63b80f680a421332d8851ddbe5a8e72fcaa74d5d1d98f3c8cc4a3ece293
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Sub-Uplevel-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-sub-uplevel
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Apparently run a function in a higher stack frame
-  URL:=https://search.cpan.org/dist/Sub-Uplevel/
-  DEPENDS:=perl +perlbase-essential
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-sub-uplevel/install
-        $(call perlmod/Install,$(1),Sub auto/Sub)
-endef
-
-
-$(eval $(call BuildPackage,perl-sub-uplevel))
diff --git a/lang/perl-test-harness/Makefile b/lang/perl-test-harness/Makefile
deleted file mode 100644 (file)
index 83001b4..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (C) 2014 - 2016 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-test-harness
-PKG_VERSION:=3.42
-PKG_RELEASE:=1
-
-PKG_SOURCE:=Test-Harness-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/L/LE/LEONT
-PKG_HASH:=0fd90d4efea82d6e262e6933759e85d27cbcfa4091b14bf4042ae20bab528e53
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Test-Harness-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-test-harness
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl Test Harness
-  URL:=https://search.cpan.org/dist/Test-Harness/
-  DEPENDS:=perl +perlbase-base +perlbase-benchmark +perlbase-config +perlbase-essential +perlbase-file +perlbase-getopt +perlbase-io +perlbase-posix +perlbase-text
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-test-harness/install
-       $(call perlmod/Install,$(1),App auto/Test TAP Test)
-endef
-
-
-$(eval $(call BuildPackage,perl-test-harness))
diff --git a/lang/perl-test-warn/Makefile b/lang/perl-test-warn/Makefile
deleted file mode 100644 (file)
index b4fdd22..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-test-warn
-PKG_VERSION:=0.36
-PKG_RELEASE:=1
-
-PKG_SOURCE:=Test-Warn-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/B/BI/BIGJ
-PKG_HASH:=ecbca346d379cef8d3c0e4ac0c8eb3b2613d737ffaaeae52271c38d7bf3c6cda
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Test-Warn-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-test-warn
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl extension to test methods for warnings
-  URL:=https://search.cpan.org/dist/Test-Warn/
-  DEPENDS:=perl +perl-sub-uplevel +perlbase-essential +perlbase-test
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-test-warn/install
-        $(call perlmod/Install,$(1),Test auto/Test)
-endef
-
-
-$(eval $(call BuildPackage,perl-test-warn))
diff --git a/lang/perl-text-csv_xs/Makefile b/lang/perl-text-csv_xs/Makefile
deleted file mode 100644 (file)
index b2dfa2c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (C) 2017 Philip Prindeville, Redfish Solutions, LLC
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-text-csv_xs
-PKG_VERSION:=1.55
-PKG_RELEASE:=1
-
-PKG_SOURCE:=Text-CSV_XS-$(PKG_VERSION).tgz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/H/HM/HMBRAND
-PKG_HASH:=e4b623b31b4ac35e99d7b797d5b7c2205a5b984bcd88dee1a9460a6a39d40b5e
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Text-CSV_XS-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Philip Prindeville <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-text-csv_xs
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Text comma-separated values manipulation routines
-  URL:=https://search.cpan.org/dist/Text-CSV_XS/
-  DEPENDS:=perl +perlbase-essential +perlbase-config +perlbase-io +perlbase-dynaloader
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-text-csv_xs/install
-        $(call perlmod/Install,$(1),Text Text/CSV_XS.pm auto/Text/CSV_XS)
-endef
-
-
-$(eval $(call BuildPackage,perl-text-csv_xs))
diff --git a/lang/perl-text-csv_xs/patches/900-fix-format-warnings.patch b/lang/perl-text-csv_xs/patches/900-fix-format-warnings.patch
deleted file mode 100644 (file)
index 4885bb2..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/CSV_XS.xs
-+++ b/CSV_XS.xs
-@@ -1235,14 +1235,14 @@ static void cx_ErrorDiag (pTHX_ csv_t *c
-     SV **svp;
-     if ((svp = hv_fetchs (csv->self, "_ERROR_DIAG", FALSE)) && *svp) {
--      if (SvIOK (*svp)) (void)fprintf (stderr, "ERR: %d\n", SvIV (*svp));
-+      if (SvIOK (*svp)) (void)fprintf (stderr, "ERR: %ld\n", SvIV (*svp));
-       if (SvPOK (*svp)) (void)fprintf (stderr, "ERR: %s\n", SvPV_nolen (*svp));
-       }
-     if ((svp = hv_fetchs (csv->self, "_ERROR_POS", FALSE)) && *svp) {
--      if (SvIOK (*svp)) (void)fprintf (stderr, "POS: %d\n", SvIV (*svp));
-+      if (SvIOK (*svp)) (void)fprintf (stderr, "POS: %ld\n", SvIV (*svp));
-       }
-     if ((svp = hv_fetchs (csv->self, "_ERROR_FLD", FALSE)) && *svp) {
--      if (SvIOK (*svp)) (void)fprintf (stderr, "FLD: %d\n", SvIV (*svp));
-+      if (SvIOK (*svp)) (void)fprintf (stderr, "FLD: %ld\n", SvIV (*svp));
-       }
-     } /* ErrorDiag */
diff --git a/lang/perl-time-moment/Makefile b/lang/perl-time-moment/Makefile
deleted file mode 100644 (file)
index 4e9334b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-time-moment
-PKG_VERSION:=0.44
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=Time-Moment
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/C/CH/CHANSEN
-PKG_HASH:=64acfa042f634fcef8dadf55e7f42ba4eaab8aaeb7d5212eb89815a31f78f6fd
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Timothy Ace <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-HOST_BUILD_DEPENDS:=perl/host
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-time-moment
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Time::Moment Represents a date and time of day with an offset from UTC
-  URL:=https://github.com/chansen/p5-time-moment
-  DEPENDS:=perl +perlbase-essential +perlbase-time +perlbase-xsloader
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-time-moment/install
-        $(call perlmod/Install,$(1),Time auto/Time)
-endef
-
-define Host/Configure
-        $(call perlmod/host/Configure,,,)
-endef
-
-define Host/Compile
-        $(call perlmod/host/Compile,,)
-endef
-
-define Host/Install
-        $(call perlmod/host/Install,$(1),)
-endef
-
-$(eval $(call BuildPackage,perl-time-moment))
-$(eval $(call HostBuild))
diff --git a/lang/perl-try-tiny/Makefile b/lang/perl-try-tiny/Makefile
deleted file mode 100644 (file)
index 18b79a8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (C) 2021 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-try-tiny
-PKG_VERSION:=0.32
-PKG_RELEASE:=1
-
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/E/ET/ETHER/
-PKG_SOURCE:=Try-Tiny-$(PKG_VERSION).tar.gz
-PKG_HASH:=ef2d6cab0bad18e3ab1c4e6125cc5f695c7e459899f512451c8fa3ef83fa7fc0
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Try-Tiny-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Matt Merhar <[email protected]>
-PKG_LICENSE:=MIT
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-try-tiny
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Minimal try/catch with proper preservation of $$$$@
-  URL:=https://metacpan.org/pod/Try::Tiny
-  DEPENDS:=perl +perlbase-essential
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-try-tiny/install
-       $(call perlmod/Install,$(1),Try auto/Try)
-endef
-
-$(eval $(call BuildPackage,perl-try-tiny))
diff --git a/lang/perl-uri/Makefile b/lang/perl-uri/Makefile
deleted file mode 100644 (file)
index c4f76e5..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 - 2016 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-uri
-PKG_VERSION:=1.76
-PKG_RELEASE:=1
-
-PKG_SOURCE:=URI-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_HASH:=b2c98e1d50d6f572483ee538a6f4ccc8d9185f91f0073fd8af7390898254413e
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/URI-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-uri
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Manipulates and accesses URI strings
-  URL:=https://search.cpan.org/dist/URI/
-  DEPENDS:=perl +perlbase-essential +perlbase-integer +perlbase-mime +perlbase-scalar +perlbase-utf8
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-uri/install
-       $(call perlmod/Install,$(1),URI URI.pm)
-endef
-
-
-$(eval $(call BuildPackage,perl-uri))
diff --git a/lang/perl-www-curl/Makefile b/lang/perl-www-curl/Makefile
deleted file mode 100644 (file)
index a2c51ac..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright (C) 2014 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-www-curl
-PKG_VERSION:=4.17
-PKG_RELEASE:=7
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/S/SZ/SZBALINT/
-PKG_SOURCE:=WWW-Curl-$(PKG_VERSION).tar.gz
-PKG_HASH:=52ffab110e32348d775f241c973eb56f96b08eedbc110d77d257cdb0a24ab7ba
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/WWW-Curl-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-www-curl
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl bindings to libcurl
-  URL:=http://search.cpan.org/dist/WWW-Curl/
-  DEPENDS:=perl +libcurl +perlbase-essential +perlbase-xsloader
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,$(STAGING_DIR)/usr/include,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-www-curl/install
-       $(call perlmod/Install,$(1),WWW/Curl WWW/Curl.pm auto/WWW/Curl)
-endef
-
-
-$(eval $(call BuildPackage,perl-www-curl))
diff --git a/lang/perl-www-curl/patches/100-perl-www-curl_disable_curl-config_hack.patch b/lang/perl-www-curl/patches/100-perl-www-curl_disable_curl-config_hack.patch
deleted file mode 100644 (file)
index 568b65c..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -12,31 +12,31 @@ no_index           directory => 'template';
- repository            'http://github.com/szbalint/WWW--Curl';
- # This is a hack. If you have libcurl installed, just specify curl.h below
- # and comment out this line.
--if ($^O ne 'MSWin32') {
--    if (!$ENV{CURL_CONFIG}) {
--          requires_external_bin       'curl-config';
--    }
--} else {
--      print   "Sorry, no automated install is available on Windows,\n".
--              "please see the README.Win32 file on instructions for a manual install.\n";
--      exit(0);
--}
--
--my $curl_config = $ENV{CURL_CONFIG} || 'curl-config';
--
--my $vernum = `${curl_config} --vernum`; chomp $vernum;
--my $version = `${curl_config} --version`; chomp $version; 
--
--my $minimum_ver = hex("070a08");
--
--if ($vernum && hex($vernum) <= $minimum_ver) {
--      print   "Your currently installed libcurl version - $version - is too old.\n".
--              "This module doesn't seek compatibility with versions older than 7.10.8\n".
--              "Proceed manually if you know what you're doing.\n";
--      exit(0);
--}
--
--print "The version is $version\n";
-+#if ($^O ne 'MSWin32') {
-+#    if (!$ENV{CURL_CONFIG}) {
-+#         requires_external_bin       'curl-config';
-+#    }
-+#} else {
-+#     print   "Sorry, no automated install is available on Windows,\n".
-+#             "please see the README.Win32 file on instructions for a manual install.\n";
-+#     exit(0);
-+#}
-+#
-+#my $curl_config = $ENV{CURL_CONFIG} || 'curl-config';
-+#
-+#my $vernum = `${curl_config} --vernum`; chomp $vernum;
-+#my $version = `${curl_config} --version`; chomp $version; 
-+#
-+#my $minimum_ver = hex("070a08");
-+#
-+#if ($vernum && hex($vernum) <= $minimum_ver) {
-+#     print   "Your currently installed libcurl version - $version - is too old.\n".
-+#             "This module doesn't seek compatibility with versions older than 7.10.8\n".
-+#             "Proceed manually if you know what you're doing.\n";
-+#     exit(0);
-+#}
-+#
-+#print "The version is $version\n";
- my @includes = qw();
- my ($cflags,$lflags, $ldflags) = ('','','');
-@@ -58,10 +58,10 @@ if ($^O ne 'MSWin32') {
- # Get curl to tell us where it is, if we can.
- #
--if ($^O ne 'MSWin32') {
--      $cflags = `${curl_config} --cflags`;
--      $lflags = `${curl_config} --libs`;
--}
-+#if ($^O ne 'MSWin32') {
-+#     $cflags = `${curl_config} --cflags`;
-+#     $lflags = `${curl_config} --libs`;
-+#}
- # can't find link flags, make some guesses
- if (!defined($lflags)) {
diff --git a/lang/perl-www-curl/patches/101-skip-preprocessor-symbol.path b/lang/perl-www-curl/patches/101-skip-preprocessor-symbol.path
deleted file mode 100644 (file)
index 8a46f5d..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-From 0be0223422e6e5f4091c6e4e058d213623eed105 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <[email protected]>
-Date: Mon, 12 Sep 2016 14:40:44 +0200
-Subject: [PATCH] Skip preprocessor symbol only CURL_STRICTER
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-CURL_STRICTER leaked into curl-constants.c when building against
-curl-7.50.2. This is a preprocessor only macro without a value.
-
-CPAN RT#117793
-
-Signed-off-by: Petr PísaÅ™ <[email protected]>
----
- Makefile.PL | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -127,7 +127,7 @@ if (!defined($curl_h)) {
-     close H;
-     for my $e (sort @syms) {
--       if($e =~ /(OBSOLETE|^CURL_EXTERN|_LAST\z|_LASTENTRY\z)/) {
-+       if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z)/) {
-           next;
-        }
-        my ($group) = $e =~ m/^([^_]+_)/;
diff --git a/lang/perl-www-curl/patches/200-fix_default_lflags.patch b/lang/perl-www-curl/patches/200-fix_default_lflags.patch
deleted file mode 100644 (file)
index f51eaf5..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -39,7 +39,7 @@ repository           'http://github.com/szbalint/
- #print "The version is $version\n";
- my @includes = qw();
--my ($cflags,$lflags, $ldflags) = ('','','');
-+my ($cflags,$lflags, $ldflags) = ('','-lcurl','');
- # You may need to specify where to find curl.h on your platform
- # These are guesses only, in case curl-config is not telling us.
diff --git a/lang/perl-www-curl/patches/210-curl_7.66_compat.patch b/lang/perl-www-curl/patches/210-curl_7.66_compat.patch
deleted file mode 100644 (file)
index 0ef5f65..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/Curl.xs
-+++ b/Curl.xs
-@@ -70,7 +70,7 @@ typedef struct {
- typedef struct {
--#ifdef __CURL_MULTI_H
-+#ifdef CURLINC_MULTI_H
-     struct CURLM *curlm;
- #else
-     struct void *curlm;
-@@ -234,7 +234,7 @@ static perl_curl_multi * perl_curl_multi
- {
-     perl_curl_multi *self;
-     Newz(1, self, 1, perl_curl_multi);
--#ifdef __CURL_MULTI_H
-+#ifdef CURLINC_MULTI_H
-     self->curlm=curl_multi_init();
- #else
-     croak("curl version too old to support curl_multi_init()");
-@@ -245,7 +245,7 @@ static perl_curl_multi * perl_curl_multi
- /* delete the multi */
- static void perl_curl_multi_delete(perl_curl_multi *self)
- {
--#ifdef __CURL_MULTI_H
-+#ifdef CURLINC_MULTI_H
-     if (self->curlm) 
-         curl_multi_cleanup(self->curlm);
-     Safefree(self);
-@@ -1065,7 +1065,7 @@ curl_multi_add_handle(curlm, curl)
-     WWW::Curl::Multi curlm
-     WWW::Curl::Easy curl
-     CODE:
--#ifdef __CURL_MULTI_H
-+#ifdef CURLINC_MULTI_H
-         curl_multi_add_handle(curlm->curlm, curl->curl);
- #endif
-@@ -1074,7 +1074,7 @@ curl_multi_remove_handle(curlm, curl)
-     WWW::Curl::Multi curlm
-     WWW::Curl::Easy curl
-     CODE:
--#ifdef __CURL_MULTI_H
-+#ifdef CURLINC_MULTI_H
-         curl_multi_remove_handle(curlm->curlm, curl->curl);
- #endif
-@@ -1149,7 +1149,7 @@ curl_multi_perform(self)
-     PREINIT:
-         int remaining;
-     CODE:
--#ifdef __CURL_MULTI_H
-+#ifdef CURLINC_MULTI_H
-         while(CURLM_CALL_MULTI_PERFORM ==
-             curl_multi_perform(self->curlm, &remaining));
-           RETVAL = remaining;
diff --git a/lang/perl-www-curl/patches/220-curl_7.69_compat.patch b/lang/perl-www-curl/patches/220-curl_7.69_compat.patch
deleted file mode 100644 (file)
index bfedb91..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -127,7 +127,7 @@ if (!defined($curl_h)) {
-     close H;
-     for my $e (sort @syms) {
--       if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z)/) {
-+       if($e =~ /(OBSOLETE|^CURL_EXTERN|CURLOPT\z|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z|WIN32)/) {
-           next;
-        }
-        my ($group) = $e =~ m/^([^_]+_)/;
diff --git a/lang/perl-www-curl/patches/230-curl_7.88_compat.patch b/lang/perl-www-curl/patches/230-curl_7.88_compat.patch
deleted file mode 100644 (file)
index 58a6160..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -127,7 +127,7 @@ if (!defined($curl_h)) {
-     close H;
-     for my $e (sort @syms) {
--       if($e =~ /(OBSOLETE|^CURL_EXTERN|CURLOPT\z|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z|WIN32)/) {
-+      if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURL_STRICTER\z|^CURL_DID_MEMORY_FUNC_TYPEDEFS\z|_LAST\z|_LASTENTRY\z|^CURLINC_|^CURL_WIN32\z|^CURL_DEPRECATED\z|^CURL_IGNORE_DEPRECATION\z|^CURLOPTDEPRECATED\z|^CURLOPT\z)/) {
-           next;
-        }
-        my ($group) = $e =~ m/^([^_]+_)/;
diff --git a/lang/perl-www-mechanize/Makefile b/lang/perl-www-mechanize/Makefile
deleted file mode 100644 (file)
index bb72a91..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2010-2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-www-mechanize
-PKG_VERSION:=1.96
-PKG_RELEASE:=1
-
-PKG_SOURCE:=WWW-Mechanize-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_HASH:=a79a613452287433a88e689195b09951a06c2df6d7fd40c15aa556452de9ab04
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/WWW-Mechanize-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-www-mechanize
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl WWW Mechanize
-  URL:=https://search.cpan.org/dist/WWW-Mechanize/
-  DEPENDS:=perl +perl-cgi +perl-html-form +perl-html-parser +perl-html-tree +perl-http-daemon +perl-http-message +perl-http-server-simple +perl-test-warn +perl-uri +perl-www +perlbase-base +perlbase-essential +perlbase-file +perlbase-findbin +perlbase-getopt +perlbase-pod +perlbase-test
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,$(STAGING_DIR)/usr/include,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-www-mechanize/install
-       $(call perlmod/Install,$(1),WWW/Mechanize WWW/Mechanize.pm)
-endef
-
-
-$(eval $(call BuildPackage,perl-www-mechanize))
diff --git a/lang/perl-www-robotrules/Makefile b/lang/perl-www-robotrules/Makefile
deleted file mode 100644 (file)
index 8c104c2..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-www-robotrules
-PKG_VERSION:=6.02
-PKG_RELEASE:=2
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GA/GAAS
-PKG_SOURCE:=WWW-RobotRules-$(PKG_VERSION).tar.gz
-PKG_HASH:=46b502e7a288d559429891eeb5d979461dd3ecc6a5c491ead85d165b6e03a51e
-
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/WWW-RobotRules-$(PKG_VERSION)
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-www-robotrules
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=database of robots.txt-derived permissions
-  URL:=http://search.cpan.org/dist/WWW-RobotRules/
-  DEPENDS:=perl +perl-uri +perlbase-anydbm-file +perlbase-essential +perlbase-fcntl
-endef
-
-define Build/Configure
-        $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-        $(call perlmod/Compile,,)
-endef
-
-define Package/perl-www-robotrules/install
-        $(call perlmod/Install,$(1),WWW auto/WWW)
-endef
-
-
-$(eval $(call BuildPackage,perl-www-robotrules))
diff --git a/lang/perl-www/Makefile b/lang/perl-www/Makefile
deleted file mode 100644 (file)
index ddd707f..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#
-# Copyright (C) 2013-2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-www
-PKG_VERSION:=6.43
-PKG_RELEASE:=2
-
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
-PKG_SOURCE:=libwww-perl-$(PKG_VERSION).tar.gz
-PKG_HASH:=e9849d7ee6fd0e89cc999e63d7612c951afd6aeea6bc721b767870d9df4ac40d
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/libwww-perl-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-PKG_CPE_ID:=cpe:/a:search.cpan:libwww-perl
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-www
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=WWW client/server library for Perl (aka LWP)
-  URL:=https://search.cpan.org/dist/libwww-perl/
-  DEPENDS:=perl +perl-encode-locale +perl-file-listing +perl-html-parser +perl-http-cookies +perl-http-daemon +perl-http-date +perl-http-message +perl-http-negotiate +perl-lwp-mediatypes +perl-net-http +perl-try-tiny +perl-uri +perl-www-robotrules +perlbase-base +perlbase-digest +perlbase-encode +perlbase-essential +perlbase-io +perlbase-mime +perlbase-net
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-www/install
-       $(call perlmod/Install,$(1),LWP.pm LWP LWP)
-endef
-
-
-$(eval $(call BuildPackage,perl-www))
diff --git a/lang/perl-xml-parser/Makefile b/lang/perl-xml-parser/Makefile
deleted file mode 100644 (file)
index bafc31d..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# Copyright (C) 2015 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-xml-parser
-PKG_VERSION:=2.46
-PKG_RELEASE:=1
-
-PKG_SOURCE_URL:=https://www.cpan.org/authors/id/T/TO/TODDR/
-PKG_SOURCE:=XML-Parser-$(PKG_VERSION).tar.gz
-PKG_HASH:=d331332491c51cccfb4cb94ffc44f9cd73378e618498d4a37df9e043661c515d
-
-PKG_MAINTAINER:=Marcel Denia <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/XML-Parser-$(PKG_VERSION)
-HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/XML-Parser-$(PKG_VERSION)
-
-HOST_BUILD_DEPENDS:=perl/host
-
-EXPAT_LIBPATH:=$(STAGING_DIR)/usr/lib
-EXPAT_INCPATH:=$(STAGING_DIR)/usr/include
-HOST_EXPAT_LIBPATH:=$(STAGING_DIR_HOSTPKG)/lib
-HOST_EXPAT_INCPATH:=$(STAGING_DIR_HOSTPKG)/include
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/host-build.mk
-include ../perl/perlmod.mk
-
-define Package/perl-xml-parser
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=Perl XML Parser
-  URL:=http://search.cpan.org/dist/XML-Parser/
-  DEPENDS:=perl +libexpat +perlbase-dynaloader +perlbase-essential
-endef
-
-define FixupExpat
-       # Manually reconfigure XML::Parser::Expat, as some overrides we provide will not have any effect otherwise
-       # Force usage of OpenWRT's expat
-       sed \
-               -e 's!%%EXPAT_LIBPATH%%!$(2)!g' \
-               -e 's!%%EXPAT_INCPATH%%!$(3)!g' \
-               -i $(1)/Expat/Makefile.PL
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,EXPATLIBPATH=$(EXPAT_LIBPATH) EXPATINCPATH=$(EXPAT_INCPATH),,)
-
-       $(call FixupExpat,$(PKG_BUILD_DIR),$(EXPAT_LIBPATH),$(EXPAT_INCPATH))
-       $(call perlmod/Configure,,,$(PKG_BUILD_DIR)/Expat)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-       $(call perlmod/Compile,,,$(PKG_BUILD_DIR)/Expat)
-endef
-
-define Host/Configure
-       $(call perlmod/host/Configure,EXPATLIBPATH=$(HOST_EXPAT_LIBPATH) EXPATINCPATH=$(HOST_EXPAT_INCPATH),,)
-       $(call FixupExpat,$(HOST_BUILD_DIR),$(HOST_EXPAT_LIBPATH),$(HOST_EXPAT_INCPATH))
-       $(call perlmod/host/Configure,,,$(HOST_BUILD_DIR)/Expat)
-endef
-
-define Host/Compile
-       $(call perlmod/host/Compile,,)
-       $(call perlmod/host/Compile,,,$(HOST_BUILD_DIR)/Expat)
-endef
-
-define Host/Install
-       $(call perlmod/host/Install,$(1),)
-endef
-
-define Package/perl-xml-parser/install
-       $(call perlmod/Install,$(1),auto/XML XML)
-endef
-
-
-$(eval $(call BuildPackage,perl-xml-parser))
-$(eval $(call HostBuild))
diff --git a/lang/perl-xml-parser/patches/010-xml-parser-expat-use-ppport.h b/lang/perl-xml-parser/patches/010-xml-parser-expat-use-ppport.h
deleted file mode 100644 (file)
index e2aad83..0000000
+++ /dev/null
@@ -1,7476 +0,0 @@
---- a/Expat/Expat.xs
-+++ b/Expat/Expat.xs
-@@ -20,17 +20,7 @@
- #include "patchlevel.h"
- #include "encoding.h"
--
--/* Version 5.005_5x (Development version for 5.006) doesn't like sv_...
--   anymore, but 5.004 doesn't know about PL_sv..
--   Don't want to push up required version just for this. */
--
--#if PATCHLEVEL < 5
--#define PL_sv_undef   sv_undef
--#define PL_sv_no      sv_no
--#define PL_sv_yes     sv_yes
--#define PL_na         na
--#endif
-+#include "ppport.h"
- #define BUFSIZE 32768
---- /dev/null
-+++ b/Expat/ppport.h
-@@ -0,0 +1,7452 @@
-+#if 0
-+<<'SKIP';
-+#endif
-+/*
-+----------------------------------------------------------------------
-+
-+    ppport.h -- Perl/Pollution/Portability Version 3.21
-+
-+    Automatically created by Devel::PPPort running under perl 5.020002.
-+
-+    Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
-+    includes in parts/inc/ instead.
-+
-+    Use 'perldoc ppport.h' to view the documentation below.
-+
-+----------------------------------------------------------------------
-+
-+SKIP
-+
-+=pod
-+
-+=head1 NAME
-+
-+ppport.h - Perl/Pollution/Portability version 3.21
-+
-+=head1 SYNOPSIS
-+
-+  perl ppport.h [options] [source files]
-+
-+  Searches current directory for files if no [source files] are given
-+
-+  --help                      show short help
-+
-+  --version                   show version
-+
-+  --patch=file                write one patch file with changes
-+  --copy=suffix               write changed copies with suffix
-+  --diff=program              use diff program and options
-+
-+  --compat-version=version    provide compatibility with Perl version
-+  --cplusplus                 accept C++ comments
-+
-+  --quiet                     don't output anything except fatal errors
-+  --nodiag                    don't show diagnostics
-+  --nohints                   don't show hints
-+  --nochanges                 don't suggest changes
-+  --nofilter                  don't filter input files
-+
-+  --strip                     strip all script and doc functionality from
-+                              ppport.h
-+
-+  --list-provided             list provided API
-+  --list-unsupported          list unsupported API
-+  --api-info=name             show Perl API portability information
-+
-+=head1 COMPATIBILITY
-+
-+This version of F<ppport.h> is designed to support operation with Perl
-+installations back to 5.003, and has been tested up to 5.11.5.
-+
-+=head1 OPTIONS
-+
-+=head2 --help
-+
-+Display a brief usage summary.
-+
-+=head2 --version
-+
-+Display the version of F<ppport.h>.
-+
-+=head2 --patch=I<file>
-+
-+If this option is given, a single patch file will be created if
-+any changes are suggested. This requires a working diff program
-+to be installed on your system.
-+
-+=head2 --copy=I<suffix>
-+
-+If this option is given, a copy of each file will be saved with
-+the given suffix that contains the suggested changes. This does
-+not require any external programs. Note that this does not
-+automagially add a dot between the original filename and the
-+suffix. If you want the dot, you have to include it in the option
-+argument.
-+
-+If neither C<--patch> or C<--copy> are given, the default is to
-+simply print the diffs for each file. This requires either
-+C<Text::Diff> or a C<diff> program to be installed.
-+
-+=head2 --diff=I<program>
-+
-+Manually set the diff program and options to use. The default
-+is to use C<Text::Diff>, when installed, and output unified
-+context diffs.
-+
-+=head2 --compat-version=I<version>
-+
-+Tell F<ppport.h> to check for compatibility with the given
-+Perl version. The default is to check for compatibility with Perl
-+version 5.003. You can use this option to reduce the output
-+of F<ppport.h> if you intend to be backward compatible only
-+down to a certain Perl version.
-+
-+=head2 --cplusplus
-+
-+Usually, F<ppport.h> will detect C++ style comments and
-+replace them with C style comments for portability reasons.
-+Using this option instructs F<ppport.h> to leave C++
-+comments untouched.
-+
-+=head2 --quiet
-+
-+Be quiet. Don't print anything except fatal errors.
-+
-+=head2 --nodiag
-+
-+Don't output any diagnostic messages. Only portability
-+alerts will be printed.
-+
-+=head2 --nohints
-+
-+Don't output any hints. Hints often contain useful portability
-+notes. Warnings will still be displayed.
-+
-+=head2 --nochanges
-+
-+Don't suggest any changes. Only give diagnostic output and hints
-+unless these are also deactivated.
-+
-+=head2 --nofilter
-+
-+Don't filter the list of input files. By default, files not looking
-+like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
-+
-+=head2 --strip
-+
-+Strip all script and documentation functionality from F<ppport.h>.
-+This reduces the size of F<ppport.h> dramatically and may be useful
-+if you want to include F<ppport.h> in smaller modules without
-+increasing their distribution size too much.
-+
-+The stripped F<ppport.h> will have a C<--unstrip> option that allows
-+you to undo the stripping, but only if an appropriate C<Devel::PPPort>
-+module is installed.
-+
-+=head2 --list-provided
-+
-+Lists the API elements for which compatibility is provided by
-+F<ppport.h>. Also lists if it must be explicitly requested,
-+if it has dependencies, and if there are hints or warnings for it.
-+
-+=head2 --list-unsupported
-+
-+Lists the API elements that are known not to be supported by
-+F<ppport.h> and below which version of Perl they probably
-+won't be available or work.
-+
-+=head2 --api-info=I<name>
-+
-+Show portability information for API elements matching I<name>.
-+If I<name> is surrounded by slashes, it is interpreted as a regular
-+expression.
-+
-+=head1 DESCRIPTION
-+
-+In order for a Perl extension (XS) module to be as portable as possible
-+across differing versions of Perl itself, certain steps need to be taken.
-+
-+=over 4
-+
-+=item *
-+
-+Including this header is the first major one. This alone will give you
-+access to a large part of the Perl API that hasn't been available in
-+earlier Perl releases. Use
-+
-+    perl ppport.h --list-provided
-+
-+to see which API elements are provided by ppport.h.
-+
-+=item *
-+
-+You should avoid using deprecated parts of the API. For example, using
-+global Perl variables without the C<PL_> prefix is deprecated. Also,
-+some API functions used to have a C<perl_> prefix. Using this form is
-+also deprecated. You can safely use the supported API, as F<ppport.h>
-+will provide wrappers for older Perl versions.
-+
-+=item *
-+
-+If you use one of a few functions or variables that were not present in
-+earlier versions of Perl, and that can't be provided using a macro, you
-+have to explicitly request support for these functions by adding one or
-+more C<#define>s in your source code before the inclusion of F<ppport.h>.
-+
-+These functions or variables will be marked C<explicit> in the list shown
-+by C<--list-provided>.
-+
-+Depending on whether you module has a single or multiple files that
-+use such functions or variables, you want either C<static> or global
-+variants.
-+
-+For a C<static> function or variable (used only in a single source
-+file), use:
-+
-+    #define NEED_function
-+    #define NEED_variable
-+
-+For a global function or variable (used in multiple source files),
-+use:
-+
-+    #define NEED_function_GLOBAL
-+    #define NEED_variable_GLOBAL
-+
-+Note that you mustn't have more than one global request for the
-+same function or variable in your project.
-+
-+    Function / Variable       Static Request               Global Request
-+    -----------------------------------------------------------------------------------------
-+    PL_parser                 NEED_PL_parser               NEED_PL_parser_GLOBAL
-+    PL_signals                NEED_PL_signals              NEED_PL_signals_GLOBAL
-+    eval_pv()                 NEED_eval_pv                 NEED_eval_pv_GLOBAL
-+    grok_bin()                NEED_grok_bin                NEED_grok_bin_GLOBAL
-+    grok_hex()                NEED_grok_hex                NEED_grok_hex_GLOBAL
-+    grok_number()             NEED_grok_number             NEED_grok_number_GLOBAL
-+    grok_numeric_radix()      NEED_grok_numeric_radix      NEED_grok_numeric_radix_GLOBAL
-+    grok_oct()                NEED_grok_oct                NEED_grok_oct_GLOBAL
-+    load_module()             NEED_load_module             NEED_load_module_GLOBAL
-+    my_snprintf()             NEED_my_snprintf             NEED_my_snprintf_GLOBAL
-+    my_sprintf()              NEED_my_sprintf              NEED_my_sprintf_GLOBAL
-+    my_strlcat()              NEED_my_strlcat              NEED_my_strlcat_GLOBAL
-+    my_strlcpy()              NEED_my_strlcpy              NEED_my_strlcpy_GLOBAL
-+    newCONSTSUB()             NEED_newCONSTSUB             NEED_newCONSTSUB_GLOBAL
-+    newRV_noinc()             NEED_newRV_noinc             NEED_newRV_noinc_GLOBAL
-+    newSV_type()              NEED_newSV_type              NEED_newSV_type_GLOBAL
-+    newSVpvn_flags()          NEED_newSVpvn_flags          NEED_newSVpvn_flags_GLOBAL
-+    newSVpvn_share()          NEED_newSVpvn_share          NEED_newSVpvn_share_GLOBAL
-+    pv_display()              NEED_pv_display              NEED_pv_display_GLOBAL
-+    pv_escape()               NEED_pv_escape               NEED_pv_escape_GLOBAL
-+    pv_pretty()               NEED_pv_pretty               NEED_pv_pretty_GLOBAL
-+    sv_2pv_flags()            NEED_sv_2pv_flags            NEED_sv_2pv_flags_GLOBAL
-+    sv_2pvbyte()              NEED_sv_2pvbyte              NEED_sv_2pvbyte_GLOBAL
-+    sv_catpvf_mg()            NEED_sv_catpvf_mg            NEED_sv_catpvf_mg_GLOBAL
-+    sv_catpvf_mg_nocontext()  NEED_sv_catpvf_mg_nocontext  NEED_sv_catpvf_mg_nocontext_GLOBAL
-+    sv_pvn_force_flags()      NEED_sv_pvn_force_flags      NEED_sv_pvn_force_flags_GLOBAL
-+    sv_setpvf_mg()            NEED_sv_setpvf_mg            NEED_sv_setpvf_mg_GLOBAL
-+    sv_setpvf_mg_nocontext()  NEED_sv_setpvf_mg_nocontext  NEED_sv_setpvf_mg_nocontext_GLOBAL
-+    vload_module()            NEED_vload_module            NEED_vload_module_GLOBAL
-+    vnewSVpvf()               NEED_vnewSVpvf               NEED_vnewSVpvf_GLOBAL
-+    warner()                  NEED_warner                  NEED_warner_GLOBAL
-+
-+To avoid namespace conflicts, you can change the namespace of the
-+explicitly exported functions / variables using the C<DPPP_NAMESPACE>
-+macro. Just C<#define> the macro before including C<ppport.h>:
-+
-+    #define DPPP_NAMESPACE MyOwnNamespace_
-+    #include "ppport.h"
-+
-+The default namespace is C<DPPP_>.
-+
-+=back
-+
-+The good thing is that most of the above can be checked by running
-+F<ppport.h> on your source code. See the next section for
-+details.
-+
-+=head1 EXAMPLES
-+
-+To verify whether F<ppport.h> is needed for your module, whether you
-+should make any changes to your code, and whether any special defines
-+should be used, F<ppport.h> can be run as a Perl script to check your
-+source code. Simply say:
-+
-+    perl ppport.h
-+
-+The result will usually be a list of patches suggesting changes
-+that should at least be acceptable, if not necessarily the most
-+efficient solution, or a fix for all possible problems.
-+
-+If you know that your XS module uses features only available in
-+newer Perl releases, if you're aware that it uses C++ comments,
-+and if you want all suggestions as a single patch file, you could
-+use something like this:
-+
-+    perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
-+
-+If you only want your code to be scanned without any suggestions
-+for changes, use:
-+
-+    perl ppport.h --nochanges
-+
-+You can specify a different C<diff> program or options, using
-+the C<--diff> option:
-+
-+    perl ppport.h --diff='diff -C 10'
-+
-+This would output context diffs with 10 lines of context.
-+
-+If you want to create patched copies of your files instead, use:
-+
-+    perl ppport.h --copy=.new
-+
-+To display portability information for the C<newSVpvn> function,
-+use:
-+
-+    perl ppport.h --api-info=newSVpvn
-+
-+Since the argument to C<--api-info> can be a regular expression,
-+you can use
-+
-+    perl ppport.h --api-info=/_nomg$/
-+
-+to display portability information for all C<_nomg> functions or
-+
-+    perl ppport.h --api-info=/./
-+
-+to display information for all known API elements.
-+
-+=head1 BUGS
-+
-+If this version of F<ppport.h> is causing failure during
-+the compilation of this module, please check if newer versions
-+of either this module or C<Devel::PPPort> are available on CPAN
-+before sending a bug report.
-+
-+If F<ppport.h> was generated using the latest version of
-+C<Devel::PPPort> and is causing failure of this module, please
-+file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
-+
-+Please include the following information:
-+
-+=over 4
-+
-+=item 1.
-+
-+The complete output from running "perl -V"
-+
-+=item 2.
-+
-+This file.
-+
-+=item 3.
-+
-+The name and version of the module you were trying to build.
-+
-+=item 4.
-+
-+A full log of the build that failed.
-+
-+=item 5.
-+
-+Any other information that you think could be relevant.
-+
-+=back
-+
-+For the latest version of this code, please get the C<Devel::PPPort>
-+module from CPAN.
-+
-+=head1 COPYRIGHT
-+
-+Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz.
-+
-+Version 2.x, Copyright (C) 2001, Paul Marquess.
-+
-+Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
-+
-+This program is free software; you can redistribute it and/or
-+modify it under the same terms as Perl itself.
-+
-+=head1 SEE ALSO
-+
-+See L<Devel::PPPort>.
-+
-+=cut
-+
-+use strict;
-+
-+# Disable broken TRIE-optimization
-+BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 }
-+
-+my $VERSION = 3.21;
-+
-+my %opt = (
-+  quiet     => 0,
-+  diag      => 1,
-+  hints     => 1,
-+  changes   => 1,
-+  cplusplus => 0,
-+  filter    => 1,
-+  strip     => 0,
-+  version   => 0,
-+);
-+
-+my($ppport) = $0 =~ /([\w.]+)$/;
-+my $LF = '(?:\r\n|[\r\n])';   # line feed
-+my $HS = "[ \t]";             # horizontal whitespace
-+
-+# Never use C comments in this file!
-+my $ccs  = '/'.'*';
-+my $cce  = '*'.'/';
-+my $rccs = quotemeta $ccs;
-+my $rcce = quotemeta $cce;
-+
-+eval {
-+  require Getopt::Long;
-+  Getopt::Long::GetOptions(\%opt, qw(
-+    help quiet diag! filter! hints! changes! cplusplus strip version
-+    patch=s copy=s diff=s compat-version=s
-+    list-provided list-unsupported api-info=s
-+  )) or usage();
-+};
-+
-+if ($@ and grep /^-/, @ARGV) {
-+  usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
-+  die "Getopt::Long not found. Please don't use any options.\n";
-+}
-+
-+if ($opt{version}) {
-+  print "This is $0 $VERSION.\n";
-+  exit 0;
-+}
-+
-+usage() if $opt{help};
-+strip() if $opt{strip};
-+
-+if (exists $opt{'compat-version'}) {
-+  my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
-+  if ($@) {
-+    die "Invalid version number format: '$opt{'compat-version'}'\n";
-+  }
-+  die "Only Perl 5 is supported\n" if $r != 5;
-+  die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
-+  $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
-+}
-+else {
-+  $opt{'compat-version'} = 5;
-+}
-+
-+my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
-+                ? ( $1 => {
-+                      ($2                  ? ( base     => $2 ) : ()),
-+                      ($3                  ? ( todo     => $3 ) : ()),
-+                      (index($4, 'v') >= 0 ? ( varargs  => 1  ) : ()),
-+                      (index($4, 'p') >= 0 ? ( provided => 1  ) : ()),
-+                      (index($4, 'n') >= 0 ? ( nothxarg => 1  ) : ()),
-+                    } )
-+                : die "invalid spec: $_" } qw(
-+AvFILLp|5.004050||p
-+AvFILL|||
-+BhkDISABLE||5.019003|
-+BhkENABLE||5.019003|
-+BhkENTRY_set||5.019003|
-+BhkENTRY|||
-+BhkFLAGS|||
-+CALL_BLOCK_HOOKS|||
-+CLASS|||n
-+CPERLscope|5.005000||p
-+CX_CURPAD_SAVE|||
-+CX_CURPAD_SV|||
-+CopFILEAV|5.006000||p
-+CopFILEGV_set|5.006000||p
-+CopFILEGV|5.006000||p
-+CopFILESV|5.006000||p
-+CopFILE_set|5.006000||p
-+CopFILE|5.006000||p
-+CopSTASHPV_set|5.006000||p
-+CopSTASHPV|5.006000||p
-+CopSTASH_eq|5.006000||p
-+CopSTASH_set|5.006000||p
-+CopSTASH|5.006000||p
-+CopyD|5.009002|5.004050|p
-+Copy||5.004050|
-+CvPADLIST||5.008001|
-+CvSTASH|||
-+CvWEAKOUTSIDE|||
-+DEFSV_set|5.010001||p
-+DEFSV|5.004050||p
-+END_EXTERN_C|5.005000||p
-+ENTER|||
-+ERRSV|5.004050||p
-+EXTEND|||
-+EXTERN_C|5.005000||p
-+F0convert|||n
-+FREETMPS|||
-+GIMME_V||5.004000|n
-+GIMME|||n
-+GROK_NUMERIC_RADIX|5.007002||p
-+G_ARRAY|||
-+G_DISCARD|||
-+G_EVAL|||
-+G_METHOD|5.006001||p
-+G_NOARGS|||
-+G_SCALAR|||
-+G_VOID||5.004000|
-+GetVars|||
-+GvAV|||
-+GvCV|||
-+GvHV|||
-+GvSVn|5.009003||p
-+GvSV|||
-+Gv_AMupdate||5.011000|
-+HEf_SVKEY||5.004000|
-+HeHASH||5.004000|
-+HeKEY||5.004000|
-+HeKLEN||5.004000|
-+HePV||5.004000|
-+HeSVKEY_force||5.004000|
-+HeSVKEY_set||5.004000|
-+HeSVKEY||5.004000|
-+HeUTF8||5.010001|
-+HeVAL||5.004000|
-+HvENAMELEN||5.015004|
-+HvENAMEUTF8||5.015004|
-+HvENAME||5.013007|
-+HvNAMELEN_get|5.009003||p
-+HvNAMELEN||5.015004|
-+HvNAMEUTF8||5.015004|
-+HvNAME_get|5.009003||p
-+HvNAME|||
-+INT2PTR|5.006000||p
-+IN_LOCALE_COMPILETIME|5.007002||p
-+IN_LOCALE_RUNTIME|5.007002||p
-+IN_LOCALE|5.007002||p
-+IN_PERL_COMPILETIME|5.008001||p
-+IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p
-+IS_NUMBER_INFINITY|5.007002||p
-+IS_NUMBER_IN_UV|5.007002||p
-+IS_NUMBER_NAN|5.007003||p
-+IS_NUMBER_NEG|5.007002||p
-+IS_NUMBER_NOT_INT|5.007002||p
-+IVSIZE|5.006000||p
-+IVTYPE|5.006000||p
-+IVdf|5.006000||p
-+LEAVE|||
-+LINKLIST||5.013006|
-+LVRET|||
-+MARK|||
-+MULTICALL||5.019003|
-+MY_CXT_CLONE|5.009002||p
-+MY_CXT_INIT|5.007003||p
-+MY_CXT|5.007003||p
-+MoveD|5.009002|5.004050|p
-+Move||5.004050|
-+NOOP|5.005000||p
-+NUM2PTR|5.006000||p
-+NVTYPE|5.006000||p
-+NVef|5.006001||p
-+NVff|5.006001||p
-+NVgf|5.006001||p
-+Newxc|5.009003||p
-+Newxz|5.009003||p
-+Newx|5.009003||p
-+Nullav|||
-+Nullch|||
-+Nullcv|||
-+Nullhv|||
-+Nullsv|||
-+OP_CLASS||5.013007|
-+OP_DESC||5.007003|
-+OP_NAME||5.007003|
-+ORIGMARK|||
-+PAD_BASE_SV|||
-+PAD_CLONE_VARS|||
-+PAD_COMPNAME_FLAGS|||
-+PAD_COMPNAME_GEN_set|||
-+PAD_COMPNAME_GEN|||
-+PAD_COMPNAME_OURSTASH|||
-+PAD_COMPNAME_PV|||
-+PAD_COMPNAME_TYPE|||
-+PAD_RESTORE_LOCAL|||
-+PAD_SAVE_LOCAL|||
-+PAD_SAVE_SETNULLPAD|||
-+PAD_SETSV|||
-+PAD_SET_CUR_NOSAVE|||
-+PAD_SET_CUR|||
-+PAD_SVl|||
-+PAD_SV|||
-+PERLIO_FUNCS_CAST|5.009003||p
-+PERLIO_FUNCS_DECL|5.009003||p
-+PERL_ABS|5.008001||p
-+PERL_BCDVERSION|5.019002||p
-+PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
-+PERL_HASH|5.004000||p
-+PERL_INT_MAX|5.004000||p
-+PERL_INT_MIN|5.004000||p
-+PERL_LONG_MAX|5.004000||p
-+PERL_LONG_MIN|5.004000||p
-+PERL_MAGIC_arylen|5.007002||p
-+PERL_MAGIC_backref|5.007002||p
-+PERL_MAGIC_bm|5.007002||p
-+PERL_MAGIC_collxfrm|5.007002||p
-+PERL_MAGIC_dbfile|5.007002||p
-+PERL_MAGIC_dbline|5.007002||p
-+PERL_MAGIC_defelem|5.007002||p
-+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.019002||p
-+PERL_MAGIC_isaelem|5.007002||p
-+PERL_MAGIC_isa|5.007002||p
-+PERL_MAGIC_mutex|5.019002||p
-+PERL_MAGIC_nkeys|5.007002||p
-+PERL_MAGIC_overload_elem|5.019002||p
-+PERL_MAGIC_overload_table|5.007002||p
-+PERL_MAGIC_overload|5.019002||p
-+PERL_MAGIC_pos|5.007002||p
-+PERL_MAGIC_qr|5.007002||p
-+PERL_MAGIC_regdata|5.007002||p
-+PERL_MAGIC_regdatum|5.007002||p
-+PERL_MAGIC_regex_global|5.007002||p
-+PERL_MAGIC_shared_scalar|5.007003||p
-+PERL_MAGIC_shared|5.007003||p
-+PERL_MAGIC_sigelem|5.007002||p
-+PERL_MAGIC_sig|5.007002||p
-+PERL_MAGIC_substr|5.007002||p
-+PERL_MAGIC_sv|5.007002||p
-+PERL_MAGIC_taint|5.007002||p
-+PERL_MAGIC_tiedelem|5.007002||p
-+PERL_MAGIC_tiedscalar|5.007002||p
-+PERL_MAGIC_tied|5.007002||p
-+PERL_MAGIC_utf8|5.008001||p
-+PERL_MAGIC_uvar_elem|5.007003||p
-+PERL_MAGIC_uvar|5.007002||p
-+PERL_MAGIC_vec|5.007002||p
-+PERL_MAGIC_vstring|5.008001||p
-+PERL_PV_ESCAPE_ALL|5.009004||p
-+PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p
-+PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p
-+PERL_PV_ESCAPE_NOCLEAR|5.009004||p
-+PERL_PV_ESCAPE_QUOTE|5.009004||p
-+PERL_PV_ESCAPE_RE|5.009005||p
-+PERL_PV_ESCAPE_UNI_DETECT|5.009004||p
-+PERL_PV_ESCAPE_UNI|5.009004||p
-+PERL_PV_PRETTY_DUMP|5.009004||p
-+PERL_PV_PRETTY_ELLIPSES|5.010000||p
-+PERL_PV_PRETTY_LTGT|5.009004||p
-+PERL_PV_PRETTY_NOCLEAR|5.010000||p
-+PERL_PV_PRETTY_QUOTE|5.009004||p
-+PERL_PV_PRETTY_REGPROP|5.009004||p
-+PERL_QUAD_MAX|5.004000||p
-+PERL_QUAD_MIN|5.004000||p
-+PERL_REVISION|5.006000||p
-+PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p
-+PERL_SCAN_DISALLOW_PREFIX|5.007003||p
-+PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p
-+PERL_SCAN_SILENT_ILLDIGIT|5.008001||p
-+PERL_SHORT_MAX|5.004000||p
-+PERL_SHORT_MIN|5.004000||p
-+PERL_SIGNALS_UNSAFE_FLAG|5.008001||p
-+PERL_SUBVERSION|5.006000||p
-+PERL_SYS_INIT3||5.010000|
-+PERL_SYS_INIT||5.010000|
-+PERL_SYS_TERM||5.019003|
-+PERL_UCHAR_MAX|5.004000||p
-+PERL_UCHAR_MIN|5.004000||p
-+PERL_UINT_MAX|5.004000||p
-+PERL_UINT_MIN|5.004000||p
-+PERL_ULONG_MAX|5.004000||p
-+PERL_ULONG_MIN|5.004000||p
-+PERL_UNUSED_ARG|5.009003||p
-+PERL_UNUSED_CONTEXT|5.009004||p
-+PERL_UNUSED_DECL|5.007002||p
-+PERL_UNUSED_VAR|5.007002||p
-+PERL_UQUAD_MAX|5.004000||p
-+PERL_UQUAD_MIN|5.004000||p
-+PERL_USE_GCC_BRACE_GROUPS|5.009004||p
-+PERL_USHORT_MAX|5.004000||p
-+PERL_USHORT_MIN|5.004000||p
-+PERL_VERSION|5.006000||p
-+PL_DBsignal|5.005000||p
-+PL_DBsingle|||pn
-+PL_DBsub|||pn
-+PL_DBtrace|||pn
-+PL_Sv|5.005000||p
-+PL_bufend|5.019002||p
-+PL_bufptr|5.019002||p
-+PL_check||5.006000|
-+PL_compiling|5.004050||p
-+PL_comppad_name||5.017004|
-+PL_comppad||5.008001|
-+PL_copline|5.019002||p
-+PL_curcop|5.004050||p
-+PL_curpad||5.005000|
-+PL_curstash|5.004050||p
-+PL_debstash|5.004050||p
-+PL_defgv|5.004050||p
-+PL_diehook|5.004050||p
-+PL_dirty|5.004050||p
-+PL_dowarn|||pn
-+PL_errgv|5.004050||p
-+PL_error_count|5.019002||p
-+PL_expect|5.019002||p
-+PL_hexdigit|5.005000||p
-+PL_hints|5.005000||p
-+PL_in_my_stash|5.019002||p
-+PL_in_my|5.019002||p
-+PL_keyword_plugin||5.011002|
-+PL_last_in_gv|||n
-+PL_laststatval|5.005000||p
-+PL_lex_state|5.019002||p
-+PL_lex_stuff|5.019002||p
-+PL_linestr|5.019002||p
-+PL_modglobal||5.005000|n
-+PL_na|5.004050||pn
-+PL_no_modify|5.006000||p
-+PL_ofsgv|||n
-+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_rpeepp||5.013005|n
-+PL_rsfp_filters|5.019002||p
-+PL_rsfp|5.019002||p
-+PL_rs|||n
-+PL_signals|5.008001||p
-+PL_stack_base|5.004050||p
-+PL_stack_sp|5.004050||p
-+PL_statcache|5.005000||p
-+PL_stdingv|5.004050||p
-+PL_sv_arenaroot|5.004050||p
-+PL_sv_no|5.004050||pn
-+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.019002||p
-+POP_MULTICALL||5.019003|
-+POPi|||n
-+POPl|||n
-+POPn|||n
-+POPpbytex||5.007001|n
-+POPpx||5.005030|n
-+POPp|||n
-+POPs|||n
-+PTR2IV|5.006000||p
-+PTR2NV|5.006000||p
-+PTR2UV|5.006000||p
-+PTR2nat|5.009003||p
-+PTR2ul|5.007001||p
-+PTRV|5.006000||p
-+PUSHMARK|||
-+PUSH_MULTICALL||5.019003|
-+PUSHi|||
-+PUSHmortal|5.009002||p
-+PUSHn|||
-+PUSHp|||
-+PUSHs|||
-+PUSHu|5.004000||p
-+PUTBACK|||
-+PadARRAY||5.019003|
-+PadMAX||5.019003|
-+PadlistARRAY||5.019003|
-+PadlistMAX||5.019003|
-+PadlistNAMESARRAY||5.019003|
-+PadlistNAMESMAX||5.019003|
-+PadlistNAMES||5.019003|
-+PadlistREFCNT||5.017004|
-+PadnameIsOUR|||
-+PadnameIsSTATE|||
-+PadnameLEN||5.019003|
-+PadnameOURSTASH|||
-+PadnameOUTER|||
-+PadnamePV||5.019003|
-+PadnameSV||5.019003|
-+PadnameTYPE|||
-+PadnameUTF8||5.019003|
-+PadnamelistARRAY||5.019003|
-+PadnamelistMAX||5.019003|
-+PerlIO_clearerr||5.007003|
-+PerlIO_close||5.007003|
-+PerlIO_context_layers||5.009004|
-+PerlIO_eof||5.007003|
-+PerlIO_error||5.007003|
-+PerlIO_fileno||5.007003|
-+PerlIO_fill||5.007003|
-+PerlIO_flush||5.007003|
-+PerlIO_get_base||5.007003|
-+PerlIO_get_bufsiz||5.007003|
-+PerlIO_get_cnt||5.007003|
-+PerlIO_get_ptr||5.007003|
-+PerlIO_read||5.007003|
-+PerlIO_seek||5.007003|
-+PerlIO_set_cnt||5.007003|
-+PerlIO_set_ptrcnt||5.007003|
-+PerlIO_setlinebuf||5.007003|
-+PerlIO_stderr||5.007003|
-+PerlIO_stdin||5.007003|
-+PerlIO_stdout||5.007003|
-+PerlIO_tell||5.007003|
-+PerlIO_unread||5.007003|
-+PerlIO_write||5.007003|
-+Perl_signbit||5.009005|n
-+PoisonFree|5.009004||p
-+PoisonNew|5.009004||p
-+PoisonWith|5.009004||p
-+Poison|5.008000||p
-+READ_XDIGIT||5.017006|
-+RETVAL|||n
-+Renewc|||
-+Renew|||
-+SAVECLEARSV|||
-+SAVECOMPPAD|||
-+SAVEPADSV|||
-+SAVETMPS|||
-+SAVE_DEFSV|5.004050||p
-+SPAGAIN|||
-+SP|||
-+START_EXTERN_C|5.005000||p
-+START_MY_CXT|5.007003||p
-+STMT_END|||p
-+STMT_START|||p
-+STR_WITH_LEN|5.009003||p
-+ST|||
-+SV_CONST_RETURN|5.009003||p
-+SV_COW_DROP_PV|5.008001||p
-+SV_COW_SHARED_HASH_KEYS|5.009005||p
-+SV_GMAGIC|5.007002||p
-+SV_HAS_TRAILING_NUL|5.009004||p
-+SV_IMMEDIATE_UNREF|5.007001||p
-+SV_MUTABLE_RETURN|5.009003||p
-+SV_NOSTEAL|5.009002||p
-+SV_SMAGIC|5.009003||p
-+SV_UTF8_NO_ENCODING|5.008001||p
-+SVfARG|5.009005||p
-+SVf_UTF8|5.006000||p
-+SVf|5.006000||p
-+SVt_INVLIST||5.019002|
-+SVt_IV|||
-+SVt_NULL|||
-+SVt_NV|||
-+SVt_PVAV|||
-+SVt_PVCV|||
-+SVt_PVFM|||
-+SVt_PVGV|||
-+SVt_PVHV|||
-+SVt_PVIO|||
-+SVt_PVIV|||
-+SVt_PVLV|||
-+SVt_PVMG|||
-+SVt_PVNV|||
-+SVt_PV|||
-+SVt_REGEXP||5.011000|
-+Safefree|||
-+Slab_Alloc|||
-+Slab_Free|||
-+Slab_to_ro|||
-+Slab_to_rw|||
-+StructCopy|||
-+SvCUR_set|||
-+SvCUR|||
-+SvEND|||
-+SvGAMAGIC||5.006001|
-+SvGETMAGIC|5.004050||p
-+SvGROW|||
-+SvIOK_UV||5.006000|
-+SvIOK_notUV||5.006000|
-+SvIOK_off|||
-+SvIOK_only_UV||5.006000|
-+SvIOK_only|||
-+SvIOK_on|||
-+SvIOKp|||
-+SvIOK|||
-+SvIVX|||
-+SvIV_nomg|5.009001||p
-+SvIV_set|||
-+SvIVx|||
-+SvIV|||
-+SvIsCOW_shared_hash||5.008003|
-+SvIsCOW||5.008003|
-+SvLEN_set|||
-+SvLEN|||
-+SvLOCK||5.007003|
-+SvMAGIC_set|5.009003||p
-+SvNIOK_off|||
-+SvNIOKp|||
-+SvNIOK|||
-+SvNOK_off|||
-+SvNOK_only|||
-+SvNOK_on|||
-+SvNOKp|||
-+SvNOK|||
-+SvNVX|||
-+SvNV_nomg||5.013002|
-+SvNV_set|||
-+SvNVx|||
-+SvNV|||
-+SvOK|||
-+SvOOK_offset||5.011000|
-+SvOOK|||
-+SvPOK_off|||
-+SvPOK_only_UTF8||5.006000|
-+SvPOK_only|||
-+SvPOK_on|||
-+SvPOKp|||
-+SvPOK|||
-+SvPVX_const|5.009003||p
-+SvPVX_mutable|5.009003||p
-+SvPVX|||
-+SvPV_const|5.009003||p
-+SvPV_flags_const_nolen|5.009003||p
-+SvPV_flags_const|5.009003||p
-+SvPV_flags_mutable|5.009003||p
-+SvPV_flags|5.007002||p
-+SvPV_force_flags_mutable|5.009003||p
-+SvPV_force_flags_nolen|5.009003||p
-+SvPV_force_flags|5.007002||p
-+SvPV_force_mutable|5.009003||p
-+SvPV_force_nolen|5.009003||p
-+SvPV_force_nomg_nolen|5.009003||p
-+SvPV_force_nomg|5.007002||p
-+SvPV_force|||p
-+SvPV_mutable|5.009003||p
-+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||p
-+SvPV_nomg|5.007002||p
-+SvPV_renew|5.009003||p
-+SvPV_set|||
-+SvPVbyte_force||5.009002|
-+SvPVbyte_nolen||5.006000|
-+SvPVbytex_force||5.006000|
-+SvPVbytex||5.006000|
-+SvPVbyte|5.006000||p
-+SvPVutf8_force||5.006000|
-+SvPVutf8_nolen||5.006000|
-+SvPVutf8x_force||5.006000|
-+SvPVutf8x||5.006000|
-+SvPVutf8||5.006000|
-+SvPVx|||
-+SvPV|||
-+SvREFCNT_dec_NN||5.017007|
-+SvREFCNT_dec|||
-+SvREFCNT_inc_NN|5.009004||p
-+SvREFCNT_inc_simple_NN|5.009004||p
-+SvREFCNT_inc_simple_void_NN|5.009004||p
-+SvREFCNT_inc_simple_void|5.009004||p
-+SvREFCNT_inc_simple|5.009004||p
-+SvREFCNT_inc_void_NN|5.009004||p
-+SvREFCNT_inc_void|5.009004||p
-+SvREFCNT_inc|||p
-+SvREFCNT|||
-+SvROK_off|||
-+SvROK_on|||
-+SvROK|||
-+SvRV_set|5.009003||p
-+SvRV|||
-+SvRXOK||5.009005|
-+SvRX||5.009005|
-+SvSETMAGIC|||
-+SvSHARED_HASH|5.009003||p
-+SvSHARE||5.007003|
-+SvSTASH_set|5.009003||p
-+SvSTASH|||
-+SvSetMagicSV_nosteal||5.004000|
-+SvSetMagicSV||5.004000|
-+SvSetSV_nosteal||5.004000|
-+SvSetSV|||
-+SvTAINTED_off||5.004000|
-+SvTAINTED_on||5.004000|
-+SvTAINTED||5.004000|
-+SvTAINT|||
-+SvTHINKFIRST|||
-+SvTRUE_nomg||5.013006|
-+SvTRUE|||
-+SvTYPE|||
-+SvUNLOCK||5.007003|
-+SvUOK|5.007001|5.006000|p
-+SvUPGRADE|||
-+SvUTF8_off||5.006000|
-+SvUTF8_on||5.006000|
-+SvUTF8||5.006000|
-+SvUVXx|5.004000||p
-+SvUVX|5.004000||p
-+SvUV_nomg|5.009001||p
-+SvUV_set|5.009003||p
-+SvUVx|5.004000||p
-+SvUV|5.004000||p
-+SvVOK||5.008001|
-+SvVSTRING_mg|5.009004||p
-+THIS|||n
-+UNDERBAR|5.009002||p
-+UTF8_MAXBYTES|5.009002||p
-+UVSIZE|5.006000||p
-+UVTYPE|5.006000||p
-+UVXf|5.007001||p
-+UVof|5.006000||p
-+UVuf|5.006000||p
-+UVxf|5.006000||p
-+WARN_ALL|5.006000||p
-+WARN_AMBIGUOUS|5.006000||p
-+WARN_ASSERTIONS|5.019002||p
-+WARN_BAREWORD|5.006000||p
-+WARN_CLOSED|5.006000||p
-+WARN_CLOSURE|5.006000||p
-+WARN_DEBUGGING|5.006000||p
-+WARN_DEPRECATED|5.006000||p
-+WARN_DIGIT|5.006000||p
-+WARN_EXEC|5.006000||p
-+WARN_EXITING|5.006000||p
-+WARN_GLOB|5.006000||p
-+WARN_INPLACE|5.006000||p
-+WARN_INTERNAL|5.006000||p
-+WARN_IO|5.006000||p
-+WARN_LAYER|5.008000||p
-+WARN_MALLOC|5.006000||p
-+WARN_MISC|5.006000||p
-+WARN_NEWLINE|5.006000||p
-+WARN_NUMERIC|5.006000||p
-+WARN_ONCE|5.006000||p
-+WARN_OVERFLOW|5.006000||p
-+WARN_PACK|5.006000||p
-+WARN_PARENTHESIS|5.006000||p
-+WARN_PIPE|5.006000||p
-+WARN_PORTABLE|5.006000||p
-+WARN_PRECEDENCE|5.006000||p
-+WARN_PRINTF|5.006000||p
-+WARN_PROTOTYPE|5.006000||p
-+WARN_QW|5.006000||p
-+WARN_RECURSION|5.006000||p
-+WARN_REDEFINE|5.006000||p
-+WARN_REGEXP|5.006000||p
-+WARN_RESERVED|5.006000||p
-+WARN_SEMICOLON|5.006000||p
-+WARN_SEVERE|5.006000||p
-+WARN_SIGNAL|5.006000||p
-+WARN_SUBSTR|5.006000||p
-+WARN_SYNTAX|5.006000||p
-+WARN_TAINT|5.006000||p
-+WARN_THREADS|5.008000||p
-+WARN_UNINITIALIZED|5.006000||p
-+WARN_UNOPENED|5.006000||p
-+WARN_UNPACK|5.006000||p
-+WARN_UNTIE|5.006000||p
-+WARN_UTF8|5.006000||p
-+WARN_VOID|5.006000||p
-+WIDEST_UTYPE|5.015004||p
-+XCPT_CATCH|5.009002||p
-+XCPT_RETHROW|5.009002|5.007001|p
-+XCPT_TRY_END|5.009002|5.004000|p
-+XCPT_TRY_START|5.009002|5.004000|p
-+XPUSHi|||
-+XPUSHmortal|5.009002||p
-+XPUSHn|||
-+XPUSHp|||
-+XPUSHs|||
-+XPUSHu|5.004000||p
-+XSPROTO|5.010000||p
-+XSRETURN_EMPTY|||
-+XSRETURN_IV|||
-+XSRETURN_NO|||
-+XSRETURN_NV|||
-+XSRETURN_PV|||
-+XSRETURN_UNDEF|||
-+XSRETURN_UV|5.008001||p
-+XSRETURN_YES|||
-+XSRETURN|||p
-+XST_mIV|||
-+XST_mNO|||
-+XST_mNV|||
-+XST_mPV|||
-+XST_mUNDEF|||
-+XST_mUV|5.008001||p
-+XST_mYES|||
-+XS_APIVERSION_BOOTCHECK||5.013004|
-+XS_EXTERNAL||5.019003|
-+XS_INTERNAL||5.019003|
-+XS_VERSION_BOOTCHECK|||
-+XS_VERSION|||
-+XSprePUSH|5.006000||p
-+XS|||
-+XopDISABLE||5.019003|
-+XopENABLE||5.019003|
-+XopENTRY_set||5.019003|
-+XopENTRY||5.019003|
-+XopFLAGS||5.013007|
-+ZeroD|5.009002||p
-+Zero|||
-+_aMY_CXT|5.007003||p
-+_add_range_to_invlist|||
-+_append_range_to_invlist|||
-+_core_swash_init|||
-+_get_swash_invlist|||
-+_invlist_array_init|||
-+_invlist_contains_cp|||
-+_invlist_contents|||
-+_invlist_dump|||
-+_invlist_intersection_maybe_complement_2nd|||
-+_invlist_intersection|||
-+_invlist_invert_prop|||
-+_invlist_invert|||
-+_invlist_len|||
-+_invlist_populate_swatch|||
-+_invlist_search|||
-+_invlist_subtract|||
-+_invlist_union_maybe_complement_2nd|||
-+_invlist_union|||
-+_is_uni_FOO||5.017008|
-+_is_uni_perl_idcont||5.017008|
-+_is_uni_perl_idstart||5.017007|
-+_is_utf8_FOO||5.017008|
-+_is_utf8_mark||5.017008|
-+_is_utf8_perl_idcont||5.017008|
-+_is_utf8_perl_idstart||5.017007|
-+_new_invlist_C_array|||
-+_new_invlist|||
-+_pMY_CXT|5.007003||p
-+_swash_inversion_hash|||
-+_swash_to_invlist|||
-+_to_fold_latin1|||
-+_to_uni_fold_flags||5.013011|
-+_to_upper_title_latin1|||
-+_to_utf8_fold_flags||5.015006|
-+_to_utf8_lower_flags||5.015006|
-+_to_utf8_title_flags||5.015006|
-+_to_utf8_upper_flags||5.015006|
-+aMY_CXT_|5.007003||p
-+aMY_CXT|5.007003||p
-+aTHXR_|5.019002||p
-+aTHXR|5.019002||p
-+aTHX_|5.006000||p
-+aTHX|5.006000||p
-+aassign_common_vars|||
-+add_cp_to_invlist|||
-+add_data|||n
-+add_utf16_textfilter|||
-+addmad|||
-+adjust_size_and_find_bucket|||n
-+adjust_stack_on_leave|||
-+alloc_maybe_populate_EXACT|||
-+alloccopstash|||
-+allocmy|||
-+amagic_call|||
-+amagic_cmp_locale|||
-+amagic_cmp|||
-+amagic_deref_call||5.013007|
-+amagic_i_ncmp|||
-+amagic_is_enabled|||
-+amagic_ncmp|||
-+anonymise_cv_maybe|||
-+any_dup|||
-+ao|||
-+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|
-+av_clear|||
-+av_create_and_push||5.009005|
-+av_create_and_unshift_one||5.009005|
-+av_delete||5.006000|
-+av_exists||5.006000|
-+av_extend_guts|||
-+av_extend|||
-+av_fetch|||
-+av_fill|||
-+av_iter_p||5.011000|
-+av_len|||
-+av_make|||
-+av_pop|||
-+av_push|||
-+av_reify|||
-+av_shift|||
-+av_store|||
-+av_tindex||5.017009|
-+av_top_index||5.017009|
-+av_undef|||
-+av_unshift|||
-+ax|||n
-+bad_type_gv|||
-+bad_type_pv|||
-+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|
-+call_argv|5.006000||p
-+call_atexit||5.006000|
-+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|
-+cast_iv||5.006000|
-+cast_ulong||5.006000|
-+cast_uv||5.006000|
-+check_locale_boundary_crossing|||
-+check_type_and_open|||
-+check_uni|||
-+check_utf8_print|||
-+checkcomma|||
-+ckWARN|5.006000||p
-+ck_entersub_args_core|||
-+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|||n
-+cl_is_anything|||n
-+cl_or|||n
-+clear_placeholders|||
-+clone_params_del|||n
-+clone_params_new|||n
-+closest_cop|||
-+compute_EXACTish|||
-+convert|||
-+cop_fetch_label||5.015001|
-+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|
-+cop_store_label||5.015001|
-+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.019003|
-+cophh_store_pvn||5.013007|
-+cophh_store_pvs||5.013007|
-+cophh_store_pv||5.013007|
-+cophh_store_sv||5.013007|
-+core_prototype|||
-+core_regclass_swash|||
-+coresub_op|||
-+could_it_be_a_POSIX_class|||
-+cr_textfilter|||
-+create_eval_scope|||
-+croak_memory_wrap||5.019003|n
-+croak_no_mem|||n
-+croak_no_modify||5.013003|n
-+croak_nocontext|||vn
-+croak_popstack|||n
-+croak_sv||5.013001|
-+croak_xs_usage||5.010001|n
-+croak|||v
-+csighandler||5.009003|n
-+curmad|||
-+current_re_engine|||
-+curse|||
-+custom_op_desc||5.007003|
-+custom_op_name||5.007003|
-+custom_op_register||5.013007|
-+custom_op_xop||5.013007|
-+cv_ckproto_len_flags|||
-+cv_clone_into|||
-+cv_clone|||
-+cv_const_sv_or_av|||
-+cv_const_sv||5.004000|
-+cv_dump|||
-+cv_forget_slab|||
-+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|||
-+dAXMARK|5.009003||p
-+dAX|5.007002||p
-+dITEMS|5.007002||p
-+dMARK|||
-+dMULTICALL||5.009003|
-+dMY_CXT_SV|5.007003||p
-+dMY_CXT|5.007003||p
-+dNOOP|5.006000||p
-+dORIGMARK|||
-+dSP|||
-+dTHR|5.004050||p
-+dTHXR|5.019002||p
-+dTHXa|5.006000||p
-+dTHXoa|5.006000||p
-+dTHX|5.006000||p
-+dUNDERBAR|5.009002||p
-+dVAR|5.009003||p
-+dXCPT|5.009002||p
-+dXSARGS|||
-+dXSI32|||
-+dXSTARG|5.006000||p
-+deb_curcv|||
-+deb_nocontext|||vn
-+deb_stack_all|||
-+deb_stack_n|||
-+debop||5.005000|
-+debprofdump||5.005000|
-+debprof|||
-+debstackptrs||5.007003|
-+debstack||5.007003|
-+debug_start_match|||
-+deb||5.007003|v
-+defelem_target|||
-+del_sv|||
-+delete_eval_scope|||
-+delimcpy||5.004000|n
-+deprecate_commaless_var_list|||
-+despatch_signals||5.007001|
-+destroy_matcher|||
-+die_nocontext|||vn
-+die_sv||5.013001|
-+die_unwind|||
-+die|||v
-+dirp_dup|||
-+div128|||
-+djSP|||
-+do_aexec5|||
-+do_aexec|||
-+do_aspawn|||
-+do_binmode||5.004050|
-+do_chomp|||
-+do_close|||
-+do_delete_local|||
-+do_dump_pad|||
-+do_eof|||
-+do_exec3|||
-+do_execfree|||
-+do_exec|||
-+do_gv_dump||5.006000|
-+do_gvgv_dump||5.006000|
-+do_hv_dump||5.006000|
-+do_ipcctl|||
-+do_ipcget|||
-+do_join|||
-+do_magic_dump||5.006000|
-+do_msgrcv|||
-+do_msgsnd|||
-+do_ncmp|||
-+do_oddball|||
-+do_op_dump||5.006000|
-+do_op_xmldump|||
-+do_open9||5.006000|
-+do_openn||5.007001|
-+do_open||5.004000|
-+do_pmop_dump||5.006000|
-+do_pmop_xmldump|||
-+do_print|||
-+do_readline|||
-+do_seek|||
-+do_semop|||
-+do_shmio|||
-+do_smartmatch|||
-+do_spawn_nowait|||
-+do_spawn|||
-+do_sprintf|||
-+do_sv_dump||5.006000|
-+do_sysseek|||
-+do_tell|||
-+do_trans_complex_utf8|||
-+do_trans_complex|||
-+do_trans_count_utf8|||
-+do_trans_count|||
-+do_trans_simple_utf8|||
-+do_trans_simple|||
-+do_trans|||
-+do_vecget|||
-+do_vecset|||
-+do_vop|||
-+docatch|||
-+doeval|||
-+dofile|||
-+dofindlabel|||
-+doform|||
-+doing_taint||5.008001|n
-+dooneliner|||
-+doopen_pm|||
-+doparseform|||
-+dopoptoeval|||
-+dopoptogiven|||
-+dopoptolabel|||
-+dopoptoloop|||
-+dopoptosub_at|||
-+dopoptowhen|||
-+doref||5.009003|
-+dounwind|||
-+dowantarray|||
-+dump_all_perl|||
-+dump_all||5.006000|
-+dump_eval||5.006000|
-+dump_exec_pos|||
-+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|||
-+dump_trie_interim_table|||
-+dump_trie|||
-+dump_vindent||5.006000|
-+dumpuntil|||
-+dup_attrlist|||
-+emulate_cop_io|||
-+eval_pv|5.006000||p
-+eval_sv|5.006000||p
-+exec_failed|||
-+expect_number|||
-+fbm_compile||5.005000|
-+fbm_instr||5.005000|
-+feature_is_enabled|||
-+filter_add|||
-+filter_del|||
-+filter_gets|||
-+filter_read|||
-+finalize_optree|||
-+finalize_op|||
-+find_and_forget_pmops|||
-+find_array_subscript|||
-+find_beginning|||
-+find_byclass|||
-+find_hash_subscript|||
-+find_in_my_stash|||
-+find_lexical_cv|||
-+find_runcv_where|||
-+find_runcv||5.008001|
-+find_rundefsv2|||
-+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_maybe_lex|||
-+force_ident|||
-+force_list|||
-+force_next|||
-+force_strict_version|||
-+force_version|||
-+force_word|||
-+forget_pmop|||
-+form_nocontext|||vn
-+form_short_octal_warning|||
-+form||5.004000|v
-+fp_dup|||
-+fprintf_nocontext|||vn
-+free_global_struct|||
-+free_tied_hv_pool|||
-+free_tmps|||
-+gen_constant_list|||
-+get_and_check_backslash_N_name|||
-+get_aux_mg|||
-+get_av|5.006000||p
-+get_context||5.006000|n
-+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_invlist_iter_addr|||
-+get_invlist_offset_addr|||
-+get_invlist_previous_index_addr|||
-+get_mstats|||
-+get_no_modify|||
-+get_num|||
-+get_op_descs||5.005000|
-+get_op_names||5.005000|
-+get_opargs|||
-+get_ppaddr||5.006000|
-+get_re_arg|||
-+get_sv|5.006000||p
-+get_vtbl||5.005030|
-+getcwd_sv||5.007002|
-+getenv_len|||
-+glob_2number|||
-+glob_assign_glob|||
-+glob_assign_ref|||
-+gp_dup|||
-+gp_free|||
-+gp_ref|||
-+grok_bin|5.007003||p
-+grok_bslash_N|||
-+grok_bslash_c|||
-+grok_bslash_o|||
-+grok_bslash_x|||
-+grok_hex|5.007003||p
-+grok_number|5.007002||p
-+grok_numeric_radix|5.007002||p
-+grok_oct|5.007003||p
-+group_end|||
-+gv_AVadd|||
-+gv_HVadd|||
-+gv_IOadd|||
-+gv_SVadd|||
-+gv_add_by_type||5.011000|
-+gv_autoload4||5.004000|
-+gv_autoload_pvn||5.015004|
-+gv_autoload_pv||5.015004|
-+gv_autoload_sv||5.015004|
-+gv_check|||
-+gv_const_sv||5.009003|
-+gv_dump||5.006000|
-+gv_efullname3||5.004000|
-+gv_efullname4||5.006001|
-+gv_efullname|||
-+gv_ename|||
-+gv_fetchfile_flags||5.009005|
-+gv_fetchfile|||
-+gv_fetchmeth_autoload||5.007003|
-+gv_fetchmeth_pv_autoload||5.015004|
-+gv_fetchmeth_pvn_autoload||5.015004|
-+gv_fetchmeth_pvn||5.015004|
-+gv_fetchmeth_pv||5.015004|
-+gv_fetchmeth_sv_autoload||5.015004|
-+gv_fetchmeth_sv||5.015004|
-+gv_fetchmethod_autoload||5.004000|
-+gv_fetchmethod_pv_flags||5.015004|
-+gv_fetchmethod_pvn_flags||5.015004|
-+gv_fetchmethod_sv_flags||5.015004|
-+gv_fetchmethod|||
-+gv_fetchmeth|||
-+gv_fetchpvn_flags|5.009002||p
-+gv_fetchpvs|5.009004||p
-+gv_fetchpv|||
-+gv_fetchsv|5.009002||p
-+gv_fullname3||5.004000|
-+gv_fullname4||5.006001|
-+gv_fullname|||
-+gv_handler||5.007001|
-+gv_init_pvn||5.015004|
-+gv_init_pv||5.015004|
-+gv_init_svtype|||
-+gv_init_sv||5.015004|
-+gv_init|||
-+gv_magicalize_isa|||
-+gv_name_set||5.009004|
-+gv_stashpvn|5.004000||p
-+gv_stashpvs|5.009003||p
-+gv_stashpv|||
-+gv_stashsv|||
-+gv_try_downgrade|||
-+handle_regex_sets|||
-+he_dup|||
-+hek_dup|||
-+hfree_next_entry|||
-+hfreeentries|||
-+hsplit|||
-+hv_assert|||
-+hv_auxinit|||
-+hv_backreferences_p|||
-+hv_clear_placeholders||5.009001|
-+hv_clear|||
-+hv_common_key_len||5.010000|
-+hv_common||5.010000|
-+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_ret|||
-+hv_free_ent||5.004000|
-+hv_iterinit|||
-+hv_iterkeysv||5.004000|
-+hv_iterkey|||
-+hv_iternext_flags||5.008000|
-+hv_iternextsv|||
-+hv_iternext|||
-+hv_iterval|||
-+hv_kill_backrefs|||
-+hv_ksplit||5.004000|
-+hv_magic_check|||n
-+hv_magic|||
-+hv_name_set||5.009003|
-+hv_notallowed|||
-+hv_placeholders_get||5.009003|
-+hv_placeholders_p|||
-+hv_placeholders_set||5.009003|
-+hv_rand_set||5.017011|
-+hv_riter_p||5.009003|
-+hv_riter_set||5.009003|
-+hv_scalar||5.009001|
-+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|
-+ibcmp|||
-+incline|||
-+incpush_if_exists|||
-+incpush_use_sep|||
-+incpush|||
-+ingroup|||
-+init_argv_symbols|||
-+init_constants|||
-+init_dbargs|||
-+init_debugger|||
-+init_global_struct|||
-+init_i18nl10n||5.006000|
-+init_i18nl14n||5.006000|
-+init_ids|||
-+init_interp|||
-+init_main_stash|||
-+init_perllib|||
-+init_postdump_symbols|||
-+init_predump_symbols|||
-+init_stacks||5.005000|
-+init_tm||5.007002|
-+inplace_aassign|||
-+instr|||n
-+intro_my|||
-+intuit_method|||
-+intuit_more|||
-+invert|||
-+invlist_array|||
-+invlist_clone|||
-+invlist_extend|||
-+invlist_highest|||
-+invlist_is_iterating|||
-+invlist_iterfinish|||
-+invlist_iterinit|||
-+invlist_iternext|||
-+invlist_max|||
-+invlist_previous_index|||
-+invlist_set_len|||
-+invlist_set_previous_index|||
-+invlist_trim|||
-+invoke_exception_hook|||
-+io_close|||
-+isALNUMC|5.006000||p
-+isALNUM_lazy|||
-+isALPHANUMERIC||5.017008|
-+isALPHA|||
-+isASCII|5.006000|5.006000|p
-+isBLANK|5.006001||p
-+isCNTRL|5.006000|5.006000|p
-+isDIGIT|||
-+isFOO_lc|||
-+isFOO_utf8_lc|||
-+isGRAPH|5.006000||p
-+isGV_with_GP|5.009004||p
-+isIDCONT||5.017008|
-+isIDFIRST_lazy|||
-+isIDFIRST|||
-+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_cur_LC_category_utf8|||
-+is_handle_constructor|||n
-+is_list_assignment|||
-+is_lvalue_sub||5.007001|
-+is_uni_alnum_lc||5.006000|
-+is_uni_alnumc_lc||5.017007|
-+is_uni_alnumc||5.017007|
-+is_uni_alnum||5.006000|
-+is_uni_alpha_lc||5.006000|
-+is_uni_alpha||5.006000|
-+is_uni_ascii_lc||5.006000|
-+is_uni_ascii||5.006000|
-+is_uni_blank_lc||5.017002|
-+is_uni_blank||5.017002|
-+is_uni_cntrl_lc||5.006000|
-+is_uni_cntrl||5.006000|
-+is_uni_digit_lc||5.006000|
-+is_uni_digit||5.006000|
-+is_uni_graph_lc||5.006000|
-+is_uni_graph||5.006000|
-+is_uni_idfirst_lc||5.006000|
-+is_uni_idfirst||5.006000|
-+is_uni_lower_lc||5.006000|
-+is_uni_lower||5.006000|
-+is_uni_print_lc||5.006000|
-+is_uni_print||5.006000|
-+is_uni_punct_lc||5.006000|
-+is_uni_punct||5.006000|
-+is_uni_space_lc||5.006000|
-+is_uni_space||5.006000|
-+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.017007|
-+is_utf8_alnum||5.006000|
-+is_utf8_alpha||5.006000|
-+is_utf8_ascii||5.006000|
-+is_utf8_blank||5.017002|
-+is_utf8_char_buf||5.015008|n
-+is_utf8_char_slow|||n
-+is_utf8_char||5.006000|n
-+is_utf8_cntrl||5.006000|
-+is_utf8_common|||
-+is_utf8_digit||5.006000|
-+is_utf8_graph||5.006000|
-+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|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_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
-+load_module|5.006000||pv
-+localize|||
-+looks_like_bool|||
-+looks_like_number|||
-+lop|||
-+mPUSHi|5.009002||p
-+mPUSHn|5.009002||p
-+mPUSHp|5.009002||p
-+mPUSHs|5.010001||p
-+mPUSHu|5.009002||p
-+mXPUSHi|5.009002||p
-+mXPUSHn|5.009002||p
-+mXPUSHp|5.009002||p
-+mXPUSHs|5.010001||p
-+mXPUSHu|5.009002||p
-+mad_free|||
-+madlex|||
-+madparse|||
-+magic_clear_all_env|||
-+magic_cleararylen_p|||
-+magic_clearenv|||
-+magic_clearhints|||
-+magic_clearhint|||
-+magic_clearisa|||
-+magic_clearpack|||
-+magic_clearsig|||
-+magic_copycallchecker|||
-+magic_dump||5.006000|
-+magic_existspack|||
-+magic_freearylen_p|||
-+magic_freeovrld|||
-+magic_getarylen|||
-+magic_getdefelem|||
-+magic_getnkeys|||
-+magic_getpack|||
-+magic_getpos|||
-+magic_getsig|||
-+magic_getsubstr|||
-+magic_gettaint|||
-+magic_getuvar|||
-+magic_getvec|||
-+magic_get|||
-+magic_killbackrefs|||
-+magic_methcall1|||
-+magic_methcall|||v
-+magic_methpack|||
-+magic_nextpack|||
-+magic_regdata_cnt|||
-+magic_regdatum_get|||
-+magic_regdatum_set|||
-+magic_scalarpack|||
-+magic_set_all_env|||
-+magic_setarylen|||
-+magic_setcollxfrm|||
-+magic_setdbline|||
-+magic_setdefelem|||
-+magic_setenv|||
-+magic_sethint|||
-+magic_setisa|||
-+magic_setmglob|||
-+magic_setnkeys|||
-+magic_setpack|||
-+magic_setpos|||
-+magic_setregexp|||
-+magic_setsig|||
-+magic_setsubstr|||
-+magic_settaint|||
-+magic_setutf8|||
-+magic_setuvar|||
-+magic_setvec|||
-+magic_set|||
-+magic_sizepack|||
-+magic_wipepack|||
-+make_matcher|||
-+make_trie_failtable|||
-+make_trie|||
-+malloc_good_size|||n
-+malloced_size|||n
-+malloc||5.007002|n
-+markstack_grow|||
-+matcher_matches_sv|||
-+mayberelocate|||
-+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_find_mglob|||
-+mg_findext||5.013008|
-+mg_find|||
-+mg_free_type||5.013006|
-+mg_free|||
-+mg_get|||
-+mg_length||5.005000|
-+mg_localize|||
-+mg_magical|||
-+mg_set|||
-+mg_size||5.005000|
-+mini_mktime||5.007002|
-+minus_v|||
-+missingterm|||
-+mode_from_discipline|||
-+modkids|||
-+more_bodies|||
-+more_sv|||
-+moreswitches|||
-+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.010001|
-+mro_isa_changed_in|||
-+mro_meta_dup|||
-+mro_meta_init|||
-+mro_method_changed_in||5.009005|
-+mro_package_moved|||
-+mro_register||5.010001|
-+mro_set_mro||5.010001|
-+mro_set_private_data||5.010001|
-+mul128|||
-+mulexp10|||n
-+my_atof2||5.007002|
-+my_atof||5.006000|
-+my_attrs|||
-+my_bcopy|||n
-+my_bzero|||n
-+my_chsize|||
-+my_clearenv|||
-+my_cxt_index|||
-+my_cxt_init|||
-+my_dirfd||5.009005|
-+my_exit_jump|||
-+my_exit|||
-+my_failure_exit||5.004000|
-+my_fflush_all||5.006000|
-+my_fork||5.007003|n
-+my_kid|||
-+my_lstat_flags|||
-+my_lstat||5.019003|
-+my_memcmp|||n
-+my_memset||5.004000|n
-+my_pclose||5.004000|
-+my_popen_list||5.007001|
-+my_popen||5.004000|
-+my_setenv|||
-+my_snprintf|5.009004||pvn
-+my_socketpair||5.007003|n
-+my_sprintf|5.009003||pvn
-+my_stat_flags|||
-+my_stat||5.019003|
-+my_strftime||5.007002|
-+my_strlcat|5.009004||pn
-+my_strlcpy|5.009004||pn
-+my_unexec|||
-+my_vsnprintf||5.009004|n
-+need_utf8|||n
-+newANONATTRSUB||5.006000|
-+newANONHASH|||
-+newANONLIST|||
-+newANONSUB|||
-+newASSIGNOP|||
-+newATTRSUB_flags|||
-+newATTRSUB||5.006000|
-+newAVREF|||
-+newAV|||
-+newBINOP|||
-+newCONDOP|||
-+newCONSTSUB_flags||5.015006|
-+newCONSTSUB|5.004050||p
-+newCVREF|||
-+newDEFSVOP|||
-+newFORM|||
-+newFOROP||5.013007|
-+newGIVENOP||5.009003|
-+newGIVWHENOP|||
-+newGP|||
-+newGVOP|||
-+newGVREF|||
-+newGVgen_flags||5.015004|
-+newGVgen|||
-+newHVREF|||
-+newHVhv||5.005000|
-+newHV|||
-+newIO|||
-+newLISTOP|||
-+newLOGOP|||
-+newLOOPEX|||
-+newLOOPOP|||
-+newMADPROP|||
-+newMADsv|||
-+newMYSUB||5.017004|
-+newNULLLIST|||
-+newOP|||
-+newPADOP|||
-+newPMOP|||
-+newPROG|||
-+newPVOP|||
-+newRANGE|||
-+newRV_inc|5.004000||p
-+newRV_noinc|5.004000||p
-+newRV|||
-+newSLICEOP|||
-+newSTATEOP|||
-+newSTUB|||
-+newSUB|||
-+newSVOP|||
-+newSVREF|||
-+newSV_type|5.009005||p
-+newSVhek||5.009003|
-+newSViv|||
-+newSVnv|||
-+newSVpadname||5.017004|
-+newSVpv_share||5.013006|
-+newSVpvf_nocontext|||vn
-+newSVpvf||5.004000|v
-+newSVpvn_flags|5.010001||p
-+newSVpvn_share|5.007001||p
-+newSVpvn_utf8|5.010001||p
-+newSVpvn|5.004050||p
-+newSVpvs_flags|5.010001||p
-+newSVpvs_share|5.009003||p
-+newSVpvs|5.009003||p
-+newSVpv|||
-+newSVrv|||
-+newSVsv|||
-+newSVuv|5.006000||p
-+newSV|||
-+newTOKEN|||
-+newUNOP|||
-+newWHENOP||5.009003|
-+newWHILEOP||5.013007|
-+newXS_flags||5.009004|
-+newXS_len_flags|||
-+newXSproto||5.006000|
-+newXS||5.006000|
-+new_collate||5.006000|
-+new_constant|||
-+new_ctype||5.006000|
-+new_he|||
-+new_logop|||
-+new_numeric||5.006000|
-+new_stackinfo||5.005000|
-+new_version||5.009000|
-+new_warnings_bitfield|||
-+next_symbol|||
-+nextargv|||
-+nextchar|||
-+ninstr|||n
-+no_bareword_allowed|||
-+no_fh_allowed|||
-+no_op|||
-+not_a_number|||
-+not_incrementable|||
-+nothreadhook||5.008000|
-+nuke_stacks|||
-+num_overflow|||n
-+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_integerize|||
-+op_linklist||5.013006|
-+op_lvalue_flags|||
-+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_std_init|||
-+op_unscope|||
-+op_xmldump|||
-+open_script|||
-+opslab_force_free|||
-+opslab_free_nopad|||
-+opslab_free|||
-+pMY_CXT_|5.007003||p
-+pMY_CXT|5.007003||p
-+pTHX_|5.006000||p
-+pTHX|5.006000||p
-+packWARN|5.007003||p
-+pack_cat||5.007003|
-+pack_rec|||
-+package_version|||
-+package|||
-+packlist||5.008001|
-+pad_add_anon||5.008001|
-+pad_add_name_pvn||5.015001|
-+pad_add_name_pvs||5.015001|
-+pad_add_name_pv||5.015001|
-+pad_add_name_sv||5.015001|
-+pad_alloc_name|||
-+pad_alloc|||
-+pad_block_start|||
-+pad_check_dup|||
-+pad_compname_type||5.009003|
-+pad_findlex|||
-+pad_findmy_pvn||5.015001|
-+pad_findmy_pvs||5.015001|
-+pad_findmy_pv||5.015001|
-+pad_findmy_sv||5.015001|
-+pad_fixup_inner_anons|||
-+pad_free|||
-+pad_leavemy|||
-+pad_new||5.008001|
-+pad_peg|||n
-+pad_push|||
-+pad_reset|||
-+pad_setsv|||
-+pad_sv|||
-+pad_swipe|||
-+pad_tidy||5.008001|
-+padlist_dup|||
-+padlist_store|||
-+parse_arithexpr||5.013008|
-+parse_barestmt||5.013007|
-+parse_block||5.013007|
-+parse_body|||
-+parse_fullexpr||5.013008|
-+parse_fullstmt||5.013005|
-+parse_ident|||
-+parse_label||5.013007|
-+parse_listexpr||5.013008|
-+parse_lparen_question_flags|||
-+parse_stmtseq||5.013006|
-+parse_termexpr||5.013008|
-+parse_unicode_opts|||
-+parser_dup|||
-+parser_free_nexttoke_ops|||
-+parser_free|||
-+path_is_searchable|||n
-+peep|||
-+pending_ident|||
-+perl_alloc_using|||n
-+perl_alloc|||n
-+perl_clone_using|||n
-+perl_clone|||n
-+perl_construct|||n
-+perl_destruct||5.007003|n
-+perl_free|||n
-+perl_parse||5.006000|n
-+perl_run|||n
-+pidgone|||
-+pm_description|||
-+pmop_dump||5.006000|
-+pmop_xmldump|||
-+pmruntime|||
-+pmtrans|||
-+pop_scope|||
-+populate_isa|||v
-+pregcomp||5.009005|
-+pregexec|||
-+pregfree2||5.011000|
-+pregfree|||
-+prepend_madprops|||
-+prescan_version||5.011004|
-+printbuf|||
-+printf_nocontext|||vn
-+process_special_blocks|||
-+ptr_hash|||n
-+ptr_table_clear||5.009005|
-+ptr_table_fetch||5.009005|
-+ptr_table_find|||n
-+ptr_table_free||5.009005|
-+ptr_table_new||5.009005|
-+ptr_table_split||5.009005|
-+ptr_table_store||5.009005|
-+push_scope|||
-+put_byte|||
-+put_latin1_charclass_innards|||
-+pv_display|5.006000||p
-+pv_escape|5.009004||p
-+pv_pretty|5.009004||p
-+pv_uni_display||5.007003|
-+qerror|||
-+qsortsvu|||
-+re_compile||5.009005|
-+re_croak2|||
-+re_dup_guts|||
-+re_intuit_start||5.019001|
-+re_intuit_string||5.006000|
-+re_op_compile|||
-+readpipe_override|||
-+realloc||5.007002|n
-+reentrant_free||5.019003|
-+reentrant_init||5.019003|
-+reentrant_retry||5.019003|vn
-+reentrant_size||5.019003|
-+ref_array_or_hash|||
-+refcounted_he_chain_2hv|||
-+refcounted_he_fetch_pvn|||
-+refcounted_he_fetch_pvs|||
-+refcounted_he_fetch_pv|||
-+refcounted_he_fetch_sv|||
-+refcounted_he_free|||
-+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.019003|
-+reg_check_named_buff_matched|||
-+reg_named_buff_all||5.009005|
-+reg_named_buff_exists||5.009005|
-+reg_named_buff_fetch||5.009005|
-+reg_named_buff_firstkey||5.009005|
-+reg_named_buff_iter|||
-+reg_named_buff_nextkey||5.009005|
-+reg_named_buff_scalar||5.009005|
-+reg_named_buff|||
-+reg_node|||
-+reg_numbered_buff_fetch|||
-+reg_numbered_buff_length|||
-+reg_numbered_buff_store|||
-+reg_qr_package|||
-+reg_recode|||
-+reg_scan_name|||
-+reg_skipcomment|||
-+reg_temp_copy|||
-+reganode|||
-+regatom|||
-+regbranch|||
-+regclass_swash||5.009004|
-+regclass|||
-+regcppop|||
-+regcppush|||
-+regcurly|||
-+regdump_extflags|||
-+regdump_intflags|||
-+regdump||5.005000|
-+regdupe_internal|||
-+regexec_flags||5.005000|
-+regfree_internal||5.009005|
-+reghop3|||n
-+reghop4|||n
-+reghopmaybe3|||n
-+reginclass|||
-+reginitcolors||5.006000|
-+reginsert|||
-+regmatch|||
-+regnext||5.005000|
-+regpatws|||n
-+regpiece|||
-+regpposixcc|||
-+regprop|||
-+regrepeat|||
-+regtail_study|||
-+regtail|||
-+regtry|||
-+reguni|||
-+regwhite|||n
-+reg|||
-+repeatcpy|||n
-+report_evil_fh|||
-+report_redefined_cv|||
-+report_uninit|||
-+report_wrongway_fh|||
-+require_pv||5.006000|
-+require_tie_mod|||
-+restore_magic|||
-+rninstr|||n
-+rpeep|||
-+rsignal_restore|||
-+rsignal_save|||
-+rsignal_state||5.004000|
-+rsignal||5.004000|
-+run_body|||
-+run_user_filter|||
-+runops_debug||5.005000|
-+runops_standard||5.005000|
-+rv2cv_op_cv||5.013006|
-+rvpv_dup|||
-+rxres_free|||
-+rxres_restore|||
-+rxres_save|||
-+safesyscalloc||5.006000|n
-+safesysfree||5.006000|n
-+safesysmalloc||5.006000|n
-+safesysrealloc||5.006000|n
-+same_dirent|||
-+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|||
-+save_ary|||
-+save_bool||5.008001|
-+save_clearsv|||
-+save_delete|||
-+save_destructor_x||5.006000|
-+save_destructor||5.006000|
-+save_freeop|||
-+save_freepv|||
-+save_freesv|||
-+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||5.010001|
-+save_hptr|||
-+save_int|||
-+save_item|||
-+save_iv||5.005000|
-+save_lines|||
-+save_list|||
-+save_long|||
-+save_magic_flags|||
-+save_mortalizesv||5.007001|
-+save_nogv|||
-+save_op||5.005000|
-+save_padsv_and_mortalize||5.010001|
-+save_pptr|||
-+save_pushi32ptr||5.010001|
-+save_pushptri32ptr|||
-+save_pushptrptr||5.010001|
-+save_pushptr||5.010001|
-+save_re_context||5.006000|
-+save_scalar_at|||
-+save_scalar|||
-+save_set_svflags||5.009000|
-+save_shared_pvref||5.007003|
-+save_sptr|||
-+save_svref|||
-+save_vptr||5.006000|
-+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|
-+sawparens|||
-+scalar_mod_type|||n
-+scalarboolean|||
-+scalarkids|||
-+scalarseq|||
-+scalarvoid|||
-+scalar|||
-+scan_bin||5.006000|
-+scan_commit|||
-+scan_const|||
-+scan_formline|||
-+scan_heredoc|||
-+scan_hex|||
-+scan_ident|||
-+scan_inputsymbol|||
-+scan_num||5.007001|
-+scan_oct|||
-+scan_pat|||
-+scan_str|||
-+scan_subst|||
-+scan_trans|||
-+scan_version||5.009001|
-+scan_vstring||5.009005|
-+scan_word|||
-+screaminstr||5.005000|
-+search_const|||
-+seed||5.008001|
-+sequence_num|||
-+set_context||5.006000|n
-+set_numeric_local||5.006000|
-+set_numeric_radix||5.006000|
-+set_numeric_standard||5.006000|
-+setdefout|||
-+share_hek_flags|||
-+share_hek||5.004000|
-+si_dup|||
-+sighandler|||n
-+simplify_sort|||
-+skipspace0|||
-+skipspace1|||
-+skipspace2|||
-+skipspace_flags|||
-+softref2xv|||
-+sortcv_stacked|||
-+sortcv_xsub|||
-+sortcv|||
-+sortsv_flags||5.009003|
-+sortsv||5.007003|
-+space_join_names_mortal|||
-+ss_dup|||
-+stack_grow|||
-+start_force|||
-+start_glob|||
-+start_subparse||5.004000|
-+stdize_locale|||
-+strEQ|||
-+strGE|||
-+strGT|||
-+strLE|||
-+strLT|||
-+strNE|||
-+str_to_version||5.006000|
-+strip_return|||
-+strnEQ|||
-+strnNE|||
-+study_chunk|||
-+sub_crush_depth|||
-+sublex_done|||
-+sublex_push|||
-+sublex_start|||
-+sv_2bool_flags||5.013006|
-+sv_2bool|||
-+sv_2cv|||
-+sv_2io|||
-+sv_2iuv_common|||
-+sv_2iuv_non_preserve|||
-+sv_2iv_flags||5.009001|
-+sv_2iv|||
-+sv_2mortal|||
-+sv_2num|||
-+sv_2nv_flags||5.013001|
-+sv_2pv_flags|5.007002||p
-+sv_2pv_nolen|5.006000||p
-+sv_2pvbyte_nolen|5.006000||p
-+sv_2pvbyte|5.006000||p
-+sv_2pvutf8_nolen||5.006000|
-+sv_2pvutf8||5.006000|
-+sv_2pv|||
-+sv_2uv_flags||5.009001|
-+sv_2uv|5.004000||p
-+sv_add_arena|||
-+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
-+sv_catpvf||5.004000|v
-+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|
-+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_copypv_flags||5.017002|
-+sv_copypv_nomg||5.017002|
-+sv_copypv|||
-+sv_dec_nomg||5.013002|
-+sv_dec|||
-+sv_del_backref|||
-+sv_derived_from_pvn||5.015004|
-+sv_derived_from_pv||5.015004|
-+sv_derived_from_sv||5.015004|
-+sv_derived_from||5.004000|
-+sv_destroyable||5.010000|
-+sv_display|||
-+sv_does_pvn||5.015004|
-+sv_does_pv||5.015004|
-+sv_does_sv||5.015004|
-+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|
-+sv_force_normal||5.006000|
-+sv_free2|||
-+sv_free_arenas|||
-+sv_free|||
-+sv_gets||5.004000|
-+sv_grow|||
-+sv_i_ncmp|||
-+sv_inc_nomg||5.013002|
-+sv_inc|||
-+sv_insert_flags||5.010001|
-+sv_insert|||
-+sv_isa|||
-+sv_isobject|||
-+sv_iv||5.005000|
-+sv_kill_backrefs|||
-+sv_len_utf8_nomg|||
-+sv_len_utf8||5.006000|
-+sv_len|||
-+sv_magic_portable|5.019003|5.004000|p
-+sv_magicext_mglob|||
-+sv_magicext||5.007003|
-+sv_magic|||
-+sv_mortalcopy_flags|||
-+sv_mortalcopy|||
-+sv_ncmp|||
-+sv_newmortal|||
-+sv_newref|||
-+sv_nolocking||5.007003|
-+sv_nosharing||5.007003|
-+sv_nounlocking|||
-+sv_nv||5.005000|
-+sv_peek||5.005000|
-+sv_pos_b2u_flags||5.019003|
-+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|
-+sv_pvbyten_force||5.006000|
-+sv_pvbyten||5.006000|
-+sv_pvbyte||5.006000|
-+sv_pvn_force_flags|5.007002||p
-+sv_pvn_force|||
-+sv_pvn_nomg|5.007003|5.005000|p
-+sv_pvn||5.005000|
-+sv_pvutf8n_force||5.006000|
-+sv_pvutf8n||5.006000|
-+sv_pvutf8||5.006000|
-+sv_pv||5.006000|
-+sv_recode_to_utf8||5.007003|
-+sv_reftype|||
-+sv_ref|||
-+sv_release_COW|||
-+sv_replace|||
-+sv_report_used|||
-+sv_resetpvn|||
-+sv_reset|||
-+sv_rvweaken||5.006000|
-+sv_sethek|||
-+sv_setiv_mg|5.004050||p
-+sv_setiv|||
-+sv_setnv_mg|5.006000||p
-+sv_setnv|||
-+sv_setpv_mg|5.004050||p
-+sv_setpvf_mg_nocontext|||pvn
-+sv_setpvf_mg|5.006000|5.004000|pv
-+sv_setpvf_nocontext|||vn
-+sv_setpvf||5.004000|v
-+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.019003|
-+sv_setref_pv|||
-+sv_setref_uv||5.007001|
-+sv_setsv_cow|||
-+sv_setsv_flags||5.007002|
-+sv_setsv_mg|5.004050||p
-+sv_setsv_nomg|5.007002||p
-+sv_setsv|||
-+sv_setuv_mg|5.004050||p
-+sv_setuv|5.004000||p
-+sv_tainted||5.004000|
-+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|||
-+sv_untaint||5.004000|
-+sv_upgrade|||
-+sv_usepvn_flags||5.009004|
-+sv_usepvn_mg|5.004050||p
-+sv_usepvn|||
-+sv_utf8_decode||5.006000|
-+sv_utf8_downgrade||5.006000|
-+sv_utf8_encode||5.006000|
-+sv_utf8_upgrade_flags_grow||5.011000|
-+sv_utf8_upgrade_flags||5.007002|
-+sv_utf8_upgrade_nomg||5.007002|
-+sv_utf8_upgrade||5.007001|
-+sv_uv|5.005000||p
-+sv_vcatpvf_mg|5.006000|5.004000|p
-+sv_vcatpvfn_flags||5.017002|
-+sv_vcatpvfn||5.004000|
-+sv_vcatpvf|5.006000|5.004000|p
-+sv_vsetpvf_mg|5.006000|5.004000|p
-+sv_vsetpvfn||5.004000|
-+sv_vsetpvf|5.006000|5.004000|p
-+sv_xmlpeek|||
-+svtype|||
-+swallow_bom|||
-+swash_fetch||5.007002|
-+swash_init||5.006000|
-+swatch_get|||
-+sys_init3||5.010000|n
-+sys_init||5.010000|n
-+sys_intern_clear|||
-+sys_intern_dup|||
-+sys_intern_init|||
-+sys_term||5.010000|n
-+taint_env|||
-+taint_proper|||
-+tied_method|||v
-+tmps_grow||5.006000|
-+toFOLD_uni||5.007003|
-+toFOLD_utf8||5.019001|
-+toFOLD||5.019001|
-+toLOWER_L1||5.019001|
-+toLOWER_LC||5.004000|
-+toLOWER_uni||5.007003|
-+toLOWER_utf8||5.015007|
-+toLOWER|||
-+toTITLE_uni||5.007003|
-+toTITLE_utf8||5.015007|
-+toTITLE||5.019001|
-+toUPPER_uni||5.007003|
-+toUPPER_utf8||5.015007|
-+toUPPER||5.004000|
-+to_byte_substr|||
-+to_lower_latin1|||
-+to_uni_fold||5.007003|
-+to_uni_lower_lc||5.006000|
-+to_uni_lower||5.007003|
-+to_uni_title_lc||5.006000|
-+to_uni_title||5.007003|
-+to_uni_upper_lc||5.006000|
-+to_uni_upper||5.007003|
-+to_utf8_case||5.007003|
-+to_utf8_fold||5.015007|
-+to_utf8_lower||5.015007|
-+to_utf8_substr|||
-+to_utf8_title||5.015007|
-+to_utf8_upper||5.015007|
-+token_free|||
-+token_getmad|||
-+tokenize_use|||
-+tokeq|||
-+tokereport|||
-+too_few_arguments_pv|||
-+too_few_arguments_sv|||
-+too_many_arguments_pv|||
-+too_many_arguments_sv|||
-+translate_substr_offsets|||
-+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|
-+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_buf||5.015009|
-+utf8_to_uvchr||5.007001|
-+utf8_to_uvuni_buf||5.015009|
-+utf8_to_uvuni||5.007001|
-+utf8n_to_uvchr|||
-+utf8n_to_uvuni||5.007001|
-+utilize|||
-+uvchr_to_utf8_flags||5.007003|
-+uvchr_to_utf8|||
-+uvuni_to_utf8_flags||5.007003|
-+uvuni_to_utf8||5.007001|
-+valid_utf8_to_uvchr|||
-+valid_utf8_to_uvuni||5.015009|
-+validate_proto|||
-+validate_suid|||
-+varname|||
-+vcmp||5.009000|
-+vcroak||5.006000|
-+vdeb||5.007003|
-+vform||5.006000|
-+visit|||
-+vivify_defelem|||
-+vivify_ref|||
-+vload_module|5.006000||p
-+vmess||5.006000|
-+vnewSVpvf|5.006000|5.004000|p
-+vnormal||5.009002|
-+vnumify||5.009000|
-+vstringify||5.009000|
-+vverify||5.009003|
-+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
-+was_lvalue_sub|||
-+watch|||
-+whichsig_pvn||5.015004|
-+whichsig_pv||5.015004|
-+whichsig_sv||5.015004|
-+whichsig|||
-+win32_croak_not_implemented|||n
-+with_queued_errors|||
-+wrap_op_checker||5.015008|
-+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_pvn|||
-+yyerror_pv|||
-+yyerror|||
-+yylex|||
-+yyparse|||
-+yyunlex|||
-+yywarn|||
-+);
-+
-+if (exists $opt{'list-unsupported'}) {
-+  my $f;
-+  for $f (sort { lc $a cmp lc $b } keys %API) {
-+    next unless $API{$f}{todo};
-+    print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
-+  }
-+  exit 0;
-+}
-+
-+# Scan for possible replacement candidates
-+
-+my(%replace, %need, %hints, %warnings, %depends);
-+my $replace = 0;
-+my($hint, $define, $function);
-+
-+sub find_api
-+{
-+  my $code = shift;
-+  $code =~ s{
-+    / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
-+  | "[^"\\]*(?:\\.[^"\\]*)*"
-+  | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
-+  grep { exists $API{$_} } $code =~ /(\w+)/mg;
-+}
-+
-+while (<DATA>) {
-+  if ($hint) {
-+    my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
-+    if (m{^\s*\*\s(.*?)\s*$}) {
-+      for (@{$hint->[1]}) {
-+        $h->{$_} ||= '';  # suppress warning with older perls
-+        $h->{$_} .= "$1\n";
-+      }
-+    }
-+    else { undef $hint }
-+  }
-+
-+  $hint = [$1, [split /,?\s+/, $2]]
-+      if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
-+
-+  if ($define) {
-+    if ($define->[1] =~ /\\$/) {
-+      $define->[1] .= $_;
-+    }
-+    else {
-+      if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
-+        my @n = find_api($define->[1]);
-+        push @{$depends{$define->[0]}}, @n if @n
-+      }
-+      undef $define;
-+    }
-+  }
-+
-+  $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
-+
-+  if ($function) {
-+    if (/^}/) {
-+      if (exists $API{$function->[0]}) {
-+        my @n = find_api($function->[1]);
-+        push @{$depends{$function->[0]}}, @n if @n
-+      }
-+      undef $function;
-+    }
-+    else {
-+      $function->[1] .= $_;
-+    }
-+  }
-+
-+  $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
-+
-+  $replace     = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
-+  $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
-+  $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
-+  $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
-+
-+  if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
-+    my @deps = map { s/\s+//g; $_ } split /,/, $3;
-+    my $d;
-+    for $d (map { s/\s+//g; $_ } split /,/, $1) {
-+      push @{$depends{$d}}, @deps;
-+    }
-+  }
-+
-+  $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
-+}
-+
-+for (values %depends) {
-+  my %s;
-+  $_ = [sort grep !$s{$_}++, @$_];
-+}
-+
-+if (exists $opt{'api-info'}) {
-+  my $f;
-+  my $count = 0;
-+  my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
-+  for $f (sort { lc $a cmp lc $b } keys %API) {
-+    next unless $f =~ /$match/;
-+    print "\n=== $f ===\n\n";
-+    my $info = 0;
-+    if ($API{$f}{base} || $API{$f}{todo}) {
-+      my $base = format_version($API{$f}{base} || $API{$f}{todo});
-+      print "Supported at least starting from perl-$base.\n";
-+      $info++;
-+    }
-+    if ($API{$f}{provided}) {
-+      my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
-+      print "Support by $ppport provided back to perl-$todo.\n";
-+      print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
-+      print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
-+      print "\n$hints{$f}" if exists $hints{$f};
-+      print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
-+      $info++;
-+    }
-+    print "No portability information available.\n" unless $info;
-+    $count++;
-+  }
-+  $count or print "Found no API matching '$opt{'api-info'}'.";
-+  print "\n";
-+  exit 0;
-+}
-+
-+if (exists $opt{'list-provided'}) {
-+  my $f;
-+  for $f (sort { lc $a cmp lc $b } keys %API) {
-+    next unless $API{$f}{provided};
-+    my @flags;
-+    push @flags, 'explicit' if exists $need{$f};
-+    push @flags, 'depend'   if exists $depends{$f};
-+    push @flags, 'hint'     if exists $hints{$f};
-+    push @flags, 'warning'  if exists $warnings{$f};
-+    my $flags = @flags ? '  ['.join(', ', @flags).']' : '';
-+    print "$f$flags\n";
-+  }
-+  exit 0;
-+}
-+
-+my @files;
-+my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
-+my $srcext = join '|', map { quotemeta $_ } @srcext;
-+
-+if (@ARGV) {
-+  my %seen;
-+  for (@ARGV) {
-+    if (-e) {
-+      if (-f) {
-+        push @files, $_ unless $seen{$_}++;
-+      }
-+      else { warn "'$_' is not a file.\n" }
-+    }
-+    else {
-+      my @new = grep { -f } glob $_
-+          or warn "'$_' does not exist.\n";
-+      push @files, grep { !$seen{$_}++ } @new;
-+    }
-+  }
-+}
-+else {
-+  eval {
-+    require File::Find;
-+    File::Find::find(sub {
-+      $File::Find::name =~ /($srcext)$/i
-+          and push @files, $File::Find::name;
-+    }, '.');
-+  };
-+  if ($@) {
-+    @files = map { glob "*$_" } @srcext;
-+  }
-+}
-+
-+if (!@ARGV || $opt{filter}) {
-+  my(@in, @out);
-+  my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files;
-+  for (@files) {
-+    my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
-+    push @{ $out ? \@out : \@in }, $_;
-+  }
-+  if (@ARGV && @out) {
-+    warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
-+  }
-+  @files = @in;
-+}
-+
-+die "No input files given!\n" unless @files;
-+
-+my(%files, %global, %revreplace);
-+%revreplace = reverse %replace;
-+my $filename;
-+my $patch_opened = 0;
-+
-+for $filename (@files) {
-+  unless (open IN, "<$filename") {
-+    warn "Unable to read from $filename: $!\n";
-+    next;
-+  }
-+
-+  info("Scanning $filename ...");
-+
-+  my $c = do { local $/; <IN> };
-+  close IN;
-+
-+  my %file = (orig => $c, changes => 0);
-+
-+  # Temporarily remove C/XS comments and strings from the code
-+  my @ccom;
-+
-+  $c =~ s{
-+    ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
-+    | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
-+  | ( ^$HS*\#[^\r\n]*
-+    | "[^"\\]*(?:\\.[^"\\]*)*"
-+    | '[^'\\]*(?:\\.[^'\\]*)*'
-+    | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
-+  }{ defined $2 and push @ccom, $2;
-+     defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
-+
-+  $file{ccom} = \@ccom;
-+  $file{code} = $c;
-+  $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
-+
-+  my $func;
-+
-+  for $func (keys %API) {
-+    my $match = $func;
-+    $match .= "|$revreplace{$func}" if exists $revreplace{$func};
-+    if ($c =~ /\b(?:Perl_)?($match)\b/) {
-+      $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
-+      $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
-+      if (exists $API{$func}{provided}) {
-+        $file{uses_provided}{$func}++;
-+        if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
-+          $file{uses}{$func}++;
-+          my @deps = rec_depend($func);
-+          if (@deps) {
-+            $file{uses_deps}{$func} = \@deps;
-+            for (@deps) {
-+              $file{uses}{$_} = 0 unless exists $file{uses}{$_};
-+            }
-+          }
-+          for ($func, @deps) {
-+            $file{needs}{$_} = 'static' if exists $need{$_};
-+          }
-+        }
-+      }
-+      if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
-+        if ($c =~ /\b$func\b/) {
-+          $file{uses_todo}{$func}++;
-+        }
-+      }
-+    }
-+  }
-+
-+  while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
-+    if (exists $need{$2}) {
-+      $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
-+    }
-+    else { warning("Possibly wrong #define $1 in $filename") }
-+  }
-+
-+  for (qw(uses needs uses_todo needed_global needed_static)) {
-+    for $func (keys %{$file{$_}}) {
-+      push @{$global{$_}{$func}}, $filename;
-+    }
-+  }
-+
-+  $files{$filename} = \%file;
-+}
-+
-+# Globally resolve NEED_'s
-+my $need;
-+for $need (keys %{$global{needs}}) {
-+  if (@{$global{needs}{$need}} > 1) {
-+    my @targets = @{$global{needs}{$need}};
-+    my @t = grep $files{$_}{needed_global}{$need}, @targets;
-+    @targets = @t if @t;
-+    @t = grep /\.xs$/i, @targets;
-+    @targets = @t if @t;
-+    my $target = shift @targets;
-+    $files{$target}{needs}{$need} = 'global';
-+    for (@{$global{needs}{$need}}) {
-+      $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
-+    }
-+  }
-+}
-+
-+for $filename (@files) {
-+  exists $files{$filename} or next;
-+
-+  info("=== Analyzing $filename ===");
-+
-+  my %file = %{$files{$filename}};
-+  my $func;
-+  my $c = $file{code};
-+  my $warnings = 0;
-+
-+  for $func (sort keys %{$file{uses_Perl}}) {
-+    if ($API{$func}{varargs}) {
-+      unless ($API{$func}{nothxarg}) {
-+        my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
-+                              { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
-+        if ($changes) {
-+          warning("Doesn't pass interpreter argument aTHX to Perl_$func");
-+          $file{changes} += $changes;
-+        }
-+      }
-+    }
-+    else {
-+      warning("Uses Perl_$func instead of $func");
-+      $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
-+                                {$func$1(}g);
-+    }
-+  }
-+
-+  for $func (sort keys %{$file{uses_replace}}) {
-+    warning("Uses $func instead of $replace{$func}");
-+    $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
-+  }
-+
-+  for $func (sort keys %{$file{uses_provided}}) {
-+    if ($file{uses}{$func}) {
-+      if (exists $file{uses_deps}{$func}) {
-+        diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
-+      }
-+      else {
-+        diag("Uses $func");
-+      }
-+    }
-+    $warnings += hint($func);
-+  }
-+
-+  unless ($opt{quiet}) {
-+    for $func (sort keys %{$file{uses_todo}}) {
-+      print "*** WARNING: Uses $func, which may not be portable below perl ",
-+            format_version($API{$func}{todo}), ", even with '$ppport'\n";
-+      $warnings++;
-+    }
-+  }
-+
-+  for $func (sort keys %{$file{needed_static}}) {
-+    my $message = '';
-+    if (not exists $file{uses}{$func}) {
-+      $message = "No need to define NEED_$func if $func is never used";
-+    }
-+    elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
-+      $message = "No need to define NEED_$func when already needed globally";
-+    }
-+    if ($message) {
-+      diag($message);
-+      $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
-+    }
-+  }
-+
-+  for $func (sort keys %{$file{needed_global}}) {
-+    my $message = '';
-+    if (not exists $global{uses}{$func}) {
-+      $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
-+    }
-+    elsif (exists $file{needs}{$func}) {
-+      if ($file{needs}{$func} eq 'extern') {
-+        $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
-+      }
-+      elsif ($file{needs}{$func} eq 'static') {
-+        $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
-+      }
-+    }
-+    if ($message) {
-+      diag($message);
-+      $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
-+    }
-+  }
-+
-+  $file{needs_inc_ppport} = keys %{$file{uses}};
-+
-+  if ($file{needs_inc_ppport}) {
-+    my $pp = '';
-+
-+    for $func (sort keys %{$file{needs}}) {
-+      my $type = $file{needs}{$func};
-+      next if $type eq 'extern';
-+      my $suffix = $type eq 'global' ? '_GLOBAL' : '';
-+      unless (exists $file{"needed_$type"}{$func}) {
-+        if ($type eq 'global') {
-+          diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
-+        }
-+        else {
-+          diag("File needs $func, adding static request");
-+        }
-+        $pp .= "#define NEED_$func$suffix\n";
-+      }
-+    }
-+
-+    if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
-+      $pp = '';
-+      $file{changes}++;
-+    }
-+
-+    unless ($file{has_inc_ppport}) {
-+      diag("Needs to include '$ppport'");
-+      $pp .= qq(#include "$ppport"\n)
-+    }
-+
-+    if ($pp) {
-+      $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
-+                     || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
-+                     || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
-+                     || ($c =~ s/^/$pp/);
-+    }
-+  }
-+  else {
-+    if ($file{has_inc_ppport}) {
-+      diag("No need to include '$ppport'");
-+      $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
-+    }
-+  }
-+
-+  # put back in our C comments
-+  my $ix;
-+  my $cppc = 0;
-+  my @ccom = @{$file{ccom}};
-+  for $ix (0 .. $#ccom) {
-+    if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
-+      $cppc++;
-+      $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
-+    }
-+    else {
-+      $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
-+    }
-+  }
-+
-+  if ($cppc) {
-+    my $s = $cppc != 1 ? 's' : '';
-+    warning("Uses $cppc C++ style comment$s, which is not portable");
-+  }
-+
-+  my $s = $warnings != 1 ? 's' : '';
-+  my $warn = $warnings ? " ($warnings warning$s)" : '';
-+  info("Analysis completed$warn");
-+
-+  if ($file{changes}) {
-+    if (exists $opt{copy}) {
-+      my $newfile = "$filename$opt{copy}";
-+      if (-e $newfile) {
-+        error("'$newfile' already exists, refusing to write copy of '$filename'");
-+      }
-+      else {
-+        local *F;
-+        if (open F, ">$newfile") {
-+          info("Writing copy of '$filename' with changes to '$newfile'");
-+          print F $c;
-+          close F;
-+        }
-+        else {
-+          error("Cannot open '$newfile' for writing: $!");
-+        }
-+      }
-+    }
-+    elsif (exists $opt{patch} || $opt{changes}) {
-+      if (exists $opt{patch}) {
-+        unless ($patch_opened) {
-+          if (open PATCH, ">$opt{patch}") {
-+            $patch_opened = 1;
-+          }
-+          else {
-+            error("Cannot open '$opt{patch}' for writing: $!");
-+            delete $opt{patch};
-+            $opt{changes} = 1;
-+            goto fallback;
-+          }
-+        }
-+        mydiff(\*PATCH, $filename, $c);
-+      }
-+      else {
-+fallback:
-+        info("Suggested changes:");
-+        mydiff(\*STDOUT, $filename, $c);
-+      }
-+    }
-+    else {
-+      my $s = $file{changes} == 1 ? '' : 's';
-+      info("$file{changes} potentially required change$s detected");
-+    }
-+  }
-+  else {
-+    info("Looks good");
-+  }
-+}
-+
-+close PATCH if $patch_opened;
-+
-+exit 0;
-+
-+
-+sub try_use { eval "use @_;"; return $@ eq '' }
-+
-+sub mydiff
-+{
-+  local *F = shift;
-+  my($file, $str) = @_;
-+  my $diff;
-+
-+  if (exists $opt{diff}) {
-+    $diff = run_diff($opt{diff}, $file, $str);
-+  }
-+
-+  if (!defined $diff and try_use('Text::Diff')) {
-+    $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
-+    $diff = <<HEADER . $diff;
-+--- $file
-++++ $file.patched
-+HEADER
-+  }
-+
-+  if (!defined $diff) {
-+    $diff = run_diff('diff -u', $file, $str);
-+  }
-+
-+  if (!defined $diff) {
-+    $diff = run_diff('diff', $file, $str);
-+  }
-+
-+  if (!defined $diff) {
-+    error("Cannot generate a diff. Please install Text::Diff or use --copy.");
-+    return;
-+  }
-+
-+  print F $diff;
-+}
-+
-+sub run_diff
-+{
-+  my($prog, $file, $str) = @_;
-+  my $tmp = 'dppptemp';
-+  my $suf = 'aaa';
-+  my $diff = '';
-+  local *F;
-+
-+  while (-e "$tmp.$suf") { $suf++ }
-+  $tmp = "$tmp.$suf";
-+
-+  if (open F, ">$tmp") {
-+    print F $str;
-+    close F;
-+
-+    if (open F, "$prog $file $tmp |") {
-+      while (<F>) {
-+        s/\Q$tmp\E/$file.patched/;
-+        $diff .= $_;
-+      }
-+      close F;
-+      unlink $tmp;
-+      return $diff;
-+    }
-+
-+    unlink $tmp;
-+  }
-+  else {
-+    error("Cannot open '$tmp' for writing: $!");
-+  }
-+
-+  return undef;
-+}
-+
-+sub rec_depend
-+{
-+  my($func, $seen) = @_;
-+  return () unless exists $depends{$func};
-+  $seen = {%{$seen||{}}};
-+  return () if $seen->{$func}++;
-+  my %s;
-+  grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
-+}
-+
-+sub parse_version
-+{
-+  my $ver = shift;
-+
-+  if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
-+    return ($1, $2, $3);
-+  }
-+  elsif ($ver !~ /^\d+\.[\d_]+$/) {
-+    die "cannot parse version '$ver'\n";
-+  }
-+
-+  $ver =~ s/_//g;
-+  $ver =~ s/$/000000/;
-+
-+  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
-+
-+  $v = int $v;
-+  $s = int $s;
-+
-+  if ($r < 5 || ($r == 5 && $v < 6)) {
-+    if ($s % 10) {
-+      die "cannot parse version '$ver'\n";
-+    }
-+  }
-+
-+  return ($r, $v, $s);
-+}
-+
-+sub format_version
-+{
-+  my $ver = shift;
-+
-+  $ver =~ s/$/000000/;
-+  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
-+
-+  $v = int $v;
-+  $s = int $s;
-+
-+  if ($r < 5 || ($r == 5 && $v < 6)) {
-+    if ($s % 10) {
-+      die "invalid version '$ver'\n";
-+    }
-+    $s /= 10;
-+
-+    $ver = sprintf "%d.%03d", $r, $v;
-+    $s > 0 and $ver .= sprintf "_%02d", $s;
-+
-+    return $ver;
-+  }
-+
-+  return sprintf "%d.%d.%d", $r, $v, $s;
-+}
-+
-+sub info
-+{
-+  $opt{quiet} and return;
-+  print @_, "\n";
-+}
-+
-+sub diag
-+{
-+  $opt{quiet} and return;
-+  $opt{diag} and print @_, "\n";
-+}
-+
-+sub warning
-+{
-+  $opt{quiet} and return;
-+  print "*** ", @_, "\n";
-+}
-+
-+sub error
-+{
-+  print "*** ERROR: ", @_, "\n";
-+}
-+
-+my %given_hints;
-+my %given_warnings;
-+sub hint
-+{
-+  $opt{quiet} and return;
-+  my $func = shift;
-+  my $rv = 0;
-+  if (exists $warnings{$func} && !$given_warnings{$func}++) {
-+    my $warn = $warnings{$func};
-+    $warn =~ s!^!*** !mg;
-+    print "*** WARNING: $func\n", $warn;
-+    $rv++;
-+  }
-+  if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
-+    my $hint = $hints{$func};
-+    $hint =~ s/^/   /mg;
-+    print "   --- hint for $func ---\n", $hint;
-+  }
-+  $rv;
-+}
-+
-+sub usage
-+{
-+  my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
-+  my %M = ( 'I' => '*' );
-+  $usage =~ s/^\s*perl\s+\S+/$^X $0/;
-+  $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
-+
-+  print <<ENDUSAGE;
-+
-+Usage: $usage
-+
-+See perldoc $0 for details.
-+
-+ENDUSAGE
-+
-+  exit 2;
-+}
-+
-+sub strip
-+{
-+  my $self = do { local(@ARGV,$/)=($0); <> };
-+  my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
-+  $copy =~ s/^(?=\S+)/    /gms;
-+  $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
-+  $self =~ s/^SKIP.*(?=^__DATA__)/SKIP
-+if (\@ARGV && \$ARGV[0] eq '--unstrip') {
-+  eval { require Devel::PPPort };
-+  \$@ and die "Cannot require Devel::PPPort, please install.\\n";
-+  if (eval \$Devel::PPPort::VERSION < $VERSION) {
-+    die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
-+      . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
-+      . "Please install a newer version, or --unstrip will not work.\\n";
-+  }
-+  Devel::PPPort::WriteFile(\$0);
-+  exit 0;
-+}
-+print <<END;
-+
-+Sorry, but this is a stripped version of \$0.
-+
-+To be able to use its original script and doc functionality,
-+please try to regenerate this file using:
-+
-+  \$^X \$0 --unstrip
-+
-+END
-+/ms;
-+  my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
-+  $c =~ s{
-+    / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
-+  | ( "[^"\\]*(?:\\.[^"\\]*)*"
-+    | '[^'\\]*(?:\\.[^'\\]*)*' )
-+  | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
-+  $c =~ s!\s+$!!mg;
-+  $c =~ s!^$LF!!mg;
-+  $c =~ s!^\s*#\s*!#!mg;
-+  $c =~ s!^\s+!!mg;
-+
-+  open OUT, ">$0" or die "cannot strip $0: $!\n";
-+  print OUT "$pl$c\n";
-+
-+  exit 0;
-+}
-+
-+__DATA__
-+*/
-+
-+#ifndef _P_P_PORTABILITY_H_
-+#define _P_P_PORTABILITY_H_
-+
-+#ifndef DPPP_NAMESPACE
-+#  define DPPP_NAMESPACE DPPP_
-+#endif
-+
-+#define DPPP_CAT2(x,y) CAT2(x,y)
-+#define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
-+
-+#ifndef PERL_REVISION
-+#  if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
-+#    define PERL_PATCHLEVEL_H_IMPLICIT
-+#    include <patchlevel.h>
-+#  endif
-+#  if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
-+#    include <could_not_find_Perl_patchlevel.h>
-+#  endif
-+#  ifndef PERL_REVISION
-+#    define PERL_REVISION       (5)
-+     /* Replace: 1 */
-+#    define PERL_VERSION        PATCHLEVEL
-+#    define PERL_SUBVERSION     SUBVERSION
-+     /* Replace PERL_PATCHLEVEL with PERL_VERSION */
-+     /* Replace: 0 */
-+#  endif
-+#endif
-+
-+#define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
-+#define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION))
-+
-+/* It is very unlikely that anyone will try to use this with Perl 6
-+   (or greater), but who knows.
-+ */
-+#if PERL_REVISION != 5
-+#  error ppport.h only works with Perl version 5
-+#endif /* PERL_REVISION != 5 */
-+#ifndef dTHR
-+#  define dTHR                           dNOOP
-+#endif
-+#ifndef dTHX
-+#  define dTHX                           dNOOP
-+#endif
-+
-+#ifndef dTHXa
-+#  define dTHXa(x)                       dNOOP
-+#endif
-+#ifndef pTHX
-+#  define pTHX                           void
-+#endif
-+
-+#ifndef pTHX_
-+#  define pTHX_
-+#endif
-+
-+#ifndef aTHX
-+#  define aTHX
-+#endif
-+
-+#ifndef aTHX_
-+#  define aTHX_
-+#endif
-+
-+#if (PERL_BCDVERSION < 0x5006000)
-+#  ifdef USE_THREADS
-+#    define aTHXR  thr
-+#    define aTHXR_ thr,
-+#  else
-+#    define aTHXR
-+#    define aTHXR_
-+#  endif
-+#  define dTHXR  dTHR
-+#else
-+#  define aTHXR  aTHX
-+#  define aTHXR_ aTHX_
-+#  define dTHXR  dTHX
-+#endif
-+#ifndef dTHXoa
-+#  define dTHXoa(x)                      dTHXa(x)
-+#endif
-+
-+#ifdef I_LIMITS
-+#  include <limits.h>
-+#endif
-+
-+#ifndef PERL_UCHAR_MIN
-+#  define PERL_UCHAR_MIN ((unsigned char)0)
-+#endif
-+
-+#ifndef PERL_UCHAR_MAX
-+#  ifdef UCHAR_MAX
-+#    define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
-+#  else
-+#    ifdef MAXUCHAR
-+#      define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
-+#    else
-+#      define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
-+#    endif
-+#  endif
-+#endif
-+
-+#ifndef PERL_USHORT_MIN
-+#  define PERL_USHORT_MIN ((unsigned short)0)
-+#endif
-+
-+#ifndef PERL_USHORT_MAX
-+#  ifdef USHORT_MAX
-+#    define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
-+#  else
-+#    ifdef MAXUSHORT
-+#      define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
-+#    else
-+#      ifdef USHRT_MAX
-+#        define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
-+#      else
-+#        define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
-+#      endif
-+#    endif
-+#  endif
-+#endif
-+
-+#ifndef PERL_SHORT_MAX
-+#  ifdef SHORT_MAX
-+#    define PERL_SHORT_MAX ((short)SHORT_MAX)
-+#  else
-+#    ifdef MAXSHORT    /* Often used in <values.h> */
-+#      define PERL_SHORT_MAX ((short)MAXSHORT)
-+#    else
-+#      ifdef SHRT_MAX
-+#        define PERL_SHORT_MAX ((short)SHRT_MAX)
-+#      else
-+#        define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
-+#      endif
-+#    endif
-+#  endif
-+#endif
-+
-+#ifndef PERL_SHORT_MIN
-+#  ifdef SHORT_MIN
-+#    define PERL_SHORT_MIN ((short)SHORT_MIN)
-+#  else
-+#    ifdef MINSHORT
-+#      define PERL_SHORT_MIN ((short)MINSHORT)
-+#    else
-+#      ifdef SHRT_MIN
-+#        define PERL_SHORT_MIN ((short)SHRT_MIN)
-+#      else
-+#        define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
-+#      endif
-+#    endif
-+#  endif
-+#endif
-+
-+#ifndef PERL_UINT_MAX
-+#  ifdef UINT_MAX
-+#    define PERL_UINT_MAX ((unsigned int)UINT_MAX)
-+#  else
-+#    ifdef MAXUINT
-+#      define PERL_UINT_MAX ((unsigned int)MAXUINT)
-+#    else
-+#      define PERL_UINT_MAX (~(unsigned int)0)
-+#    endif
-+#  endif
-+#endif
-+
-+#ifndef PERL_UINT_MIN
-+#  define PERL_UINT_MIN ((unsigned int)0)
-+#endif
-+
-+#ifndef PERL_INT_MAX
-+#  ifdef INT_MAX
-+#    define PERL_INT_MAX ((int)INT_MAX)
-+#  else
-+#    ifdef MAXINT    /* Often used in <values.h> */
-+#      define PERL_INT_MAX ((int)MAXINT)
-+#    else
-+#      define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
-+#    endif
-+#  endif
-+#endif
-+
-+#ifndef PERL_INT_MIN
-+#  ifdef INT_MIN
-+#    define PERL_INT_MIN ((int)INT_MIN)
-+#  else
-+#    ifdef MININT
-+#      define PERL_INT_MIN ((int)MININT)
-+#    else
-+#      define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
-+#    endif
-+#  endif
-+#endif
-+
-+#ifndef PERL_ULONG_MAX
-+#  ifdef ULONG_MAX
-+#    define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
-+#  else
-+#    ifdef MAXULONG
-+#      define PERL_ULONG_MAX ((unsigned long)MAXULONG)
-+#    else
-+#      define PERL_ULONG_MAX (~(unsigned long)0)
-+#    endif
-+#  endif
-+#endif
-+
-+#ifndef PERL_ULONG_MIN
-+#  define PERL_ULONG_MIN ((unsigned long)0L)
-+#endif
-+
-+#ifndef PERL_LONG_MAX
-+#  ifdef LONG_MAX
-+#    define PERL_LONG_MAX ((long)LONG_MAX)
-+#  else
-+#    ifdef MAXLONG
-+#      define PERL_LONG_MAX ((long)MAXLONG)
-+#    else
-+#      define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
-+#    endif
-+#  endif
-+#endif
-+
-+#ifndef PERL_LONG_MIN
-+#  ifdef LONG_MIN
-+#    define PERL_LONG_MIN ((long)LONG_MIN)
-+#  else
-+#    ifdef MINLONG
-+#      define PERL_LONG_MIN ((long)MINLONG)
-+#    else
-+#      define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
-+#    endif
-+#  endif
-+#endif
-+
-+#if defined(HAS_QUAD) && (defined(convex) || defined(uts))
-+#  ifndef PERL_UQUAD_MAX
-+#    ifdef ULONGLONG_MAX
-+#      define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX)
-+#    else
-+#      ifdef MAXULONGLONG
-+#        define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG)
-+#      else
-+#        define PERL_UQUAD_MAX (~(unsigned long long)0)
-+#      endif
-+#    endif
-+#  endif
-+
-+#  ifndef PERL_UQUAD_MIN
-+#    define PERL_UQUAD_MIN ((unsigned long long)0L)
-+#  endif
-+
-+#  ifndef PERL_QUAD_MAX
-+#    ifdef LONGLONG_MAX
-+#      define PERL_QUAD_MAX ((long long)LONGLONG_MAX)
-+#    else
-+#      ifdef MAXLONGLONG
-+#        define PERL_QUAD_MAX ((long long)MAXLONGLONG)
-+#      else
-+#        define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1))
-+#      endif
-+#    endif
-+#  endif
-+
-+#  ifndef PERL_QUAD_MIN
-+#    ifdef LONGLONG_MIN
-+#      define PERL_QUAD_MIN ((long long)LONGLONG_MIN)
-+#    else
-+#      ifdef MINLONGLONG
-+#        define PERL_QUAD_MIN ((long long)MINLONGLONG)
-+#      else
-+#        define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
-+#      endif
-+#    endif
-+#  endif
-+#endif
-+
-+/* This is based on code from 5.003 perl.h */
-+#ifdef HAS_QUAD
-+#  ifdef cray
-+#ifndef IVTYPE
-+#  define IVTYPE                         int
-+#endif
-+
-+#ifndef IV_MIN
-+#  define IV_MIN                         PERL_INT_MIN
-+#endif
-+
-+#ifndef IV_MAX
-+#  define IV_MAX                         PERL_INT_MAX
-+#endif
-+
-+#ifndef UV_MIN
-+#  define UV_MIN                         PERL_UINT_MIN
-+#endif
-+
-+#ifndef UV_MAX
-+#  define UV_MAX                         PERL_UINT_MAX
-+#endif
-+
-+#    ifdef INTSIZE
-+#ifndef IVSIZE
-+#  define IVSIZE                         INTSIZE
-+#endif
-+
-+#    endif
-+#  else
-+#    if defined(convex) || defined(uts)
-+#ifndef IVTYPE
-+#  define IVTYPE                         long long
-+#endif
-+
-+#ifndef IV_MIN
-+#  define IV_MIN                         PERL_QUAD_MIN
-+#endif
-+
-+#ifndef IV_MAX
-+#  define IV_MAX                         PERL_QUAD_MAX
-+#endif
-+
-+#ifndef UV_MIN
-+#  define UV_MIN                         PERL_UQUAD_MIN
-+#endif
-+
-+#ifndef UV_MAX
-+#  define UV_MAX                         PERL_UQUAD_MAX
-+#endif
-+
-+#      ifdef LONGLONGSIZE
-+#ifndef IVSIZE
-+#  define IVSIZE                         LONGLONGSIZE
-+#endif
-+
-+#      endif
-+#    else
-+#ifndef IVTYPE
-+#  define IVTYPE                         long
-+#endif
-+
-+#ifndef IV_MIN
-+#  define IV_MIN                         PERL_LONG_MIN
-+#endif
-+
-+#ifndef IV_MAX
-+#  define IV_MAX                         PERL_LONG_MAX
-+#endif
-+
-+#ifndef UV_MIN
-+#  define UV_MIN                         PERL_ULONG_MIN
-+#endif
-+
-+#ifndef UV_MAX
-+#  define UV_MAX                         PERL_ULONG_MAX
-+#endif
-+
-+#      ifdef LONGSIZE
-+#ifndef IVSIZE
-+#  define IVSIZE                         LONGSIZE
-+#endif
-+
-+#      endif
-+#    endif
-+#  endif
-+#ifndef IVSIZE
-+#  define IVSIZE                         8
-+#endif
-+
-+#ifndef LONGSIZE
-+#  define LONGSIZE                       8
-+#endif
-+
-+#ifndef PERL_QUAD_MIN
-+#  define PERL_QUAD_MIN                  IV_MIN
-+#endif
-+
-+#ifndef PERL_QUAD_MAX
-+#  define PERL_QUAD_MAX                  IV_MAX
-+#endif
-+
-+#ifndef PERL_UQUAD_MIN
-+#  define PERL_UQUAD_MIN                 UV_MIN
-+#endif
-+
-+#ifndef PERL_UQUAD_MAX
-+#  define PERL_UQUAD_MAX                 UV_MAX
-+#endif
-+
-+#else
-+#ifndef IVTYPE
-+#  define IVTYPE                         long
-+#endif
-+
-+#ifndef LONGSIZE
-+#  define LONGSIZE                       4
-+#endif
-+
-+#ifndef IV_MIN
-+#  define IV_MIN                         PERL_LONG_MIN
-+#endif
-+
-+#ifndef IV_MAX
-+#  define IV_MAX                         PERL_LONG_MAX
-+#endif
-+
-+#ifndef UV_MIN
-+#  define UV_MIN                         PERL_ULONG_MIN
-+#endif
-+
-+#ifndef UV_MAX
-+#  define UV_MAX                         PERL_ULONG_MAX
-+#endif
-+
-+#endif
-+
-+#ifndef IVSIZE
-+#  ifdef LONGSIZE
-+#    define IVSIZE LONGSIZE
-+#  else
-+#    define IVSIZE 4 /* A bold guess, but the best we can make. */
-+#  endif
-+#endif
-+#ifndef UVTYPE
-+#  define UVTYPE                         unsigned IVTYPE
-+#endif
-+
-+#ifndef UVSIZE
-+#  define UVSIZE                         IVSIZE
-+#endif
-+#ifndef sv_setuv
-+#  define sv_setuv(sv, uv)               \
-+               STMT_START {                         \
-+                 UV TeMpUv = uv;                    \
-+                 if (TeMpUv <= IV_MAX)              \
-+                   sv_setiv(sv, TeMpUv);            \
-+                 else                               \
-+                   sv_setnv(sv, (double)TeMpUv);    \
-+               } STMT_END
-+#endif
-+#ifndef newSVuv
-+#  define newSVuv(uv)                    ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
-+#endif
-+#ifndef sv_2uv
-+#  define sv_2uv(sv)                     ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
-+#endif
-+
-+#ifndef SvUVX
-+#  define SvUVX(sv)                      ((UV)SvIVX(sv))
-+#endif
-+
-+#ifndef SvUVXx
-+#  define SvUVXx(sv)                     SvUVX(sv)
-+#endif
-+
-+#ifndef SvUV
-+#  define SvUV(sv)                       (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
-+#endif
-+
-+#ifndef SvUVx
-+#  define SvUVx(sv)                      ((PL_Sv = (sv)), SvUV(PL_Sv))
-+#endif
-+
-+/* Hint: sv_uv
-+ * Always use the SvUVx() macro instead of sv_uv().
-+ */
-+#ifndef sv_uv
-+#  define sv_uv(sv)                      SvUVx(sv)
-+#endif
-+
-+#if !defined(SvUOK) && defined(SvIOK_UV)
-+#  define SvUOK(sv) SvIOK_UV(sv)
-+#endif
-+#ifndef XST_mUV
-+#  define XST_mUV(i,v)                   (ST(i) = sv_2mortal(newSVuv(v))  )
-+#endif
-+
-+#ifndef XSRETURN_UV
-+#  define XSRETURN_UV(v)                 STMT_START { XST_mUV(0,v);  XSRETURN(1); } STMT_END
-+#endif
-+#ifndef PUSHu
-+#  define PUSHu(u)                       STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG;  } STMT_END
-+#endif
-+
-+#ifndef XPUSHu
-+#  define XPUSHu(u)                      STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
-+#endif
-+
-+#ifdef HAS_MEMCMP
-+#ifndef memNE
-+#  define memNE(s1,s2,l)                 (memcmp(s1,s2,l))
-+#endif
-+
-+#ifndef memEQ
-+#  define memEQ(s1,s2,l)                 (!memcmp(s1,s2,l))
-+#endif
-+
-+#else
-+#ifndef memNE
-+#  define memNE(s1,s2,l)                 (bcmp(s1,s2,l))
-+#endif
-+
-+#ifndef memEQ
-+#  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))
-+#endif
-+
-+#ifndef CopyD
-+#  define CopyD(s,d,n,t)                 memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
-+#endif
-+
-+#ifdef HAS_MEMSET
-+#ifndef ZeroD
-+#  define ZeroD(d,n,t)                   memzero((char*)(d), (n) * sizeof(t))
-+#endif
-+
-+#else
-+#ifndef ZeroD
-+#  define ZeroD(d,n,t)                   ((void)memzero((char*)(d), (n) * sizeof(t)), d)
-+#endif
-+
-+#endif
-+#ifndef PoisonWith
-+#  define PoisonWith(d,n,t,b)            (void)memset((char*)(d), (U8)(b), (n) * sizeof(t))
-+#endif
-+
-+#ifndef PoisonNew
-+#  define PoisonNew(d,n,t)               PoisonWith(d,n,t,0xAB)
-+#endif
-+
-+#ifndef PoisonFree
-+#  define PoisonFree(d,n,t)              PoisonWith(d,n,t,0xEF)
-+#endif
-+
-+#ifndef Poison
-+#  define Poison(d,n,t)                  PoisonFree(d,n,t)
-+#endif
-+#ifndef Newx
-+#  define Newx(v,n,t)                    New(0,v,n,t)
-+#endif
-+
-+#ifndef Newxc
-+#  define Newxc(v,n,t,c)                 Newc(0,v,n,t,c)
-+#endif
-+
-+#ifndef Newxz
-+#  define Newxz(v,n,t)                   Newz(0,v,n,t)
-+#endif
-+
-+#ifndef PERL_UNUSED_DECL
-+#  ifdef HASATTRIBUTE
-+#    if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER)
-+#      define PERL_UNUSED_DECL
-+#    else
-+#      define PERL_UNUSED_DECL __attribute__((unused))
-+#    endif
-+#  else
-+#    define PERL_UNUSED_DECL
-+#  endif
-+#endif
-+
-+#ifndef PERL_UNUSED_ARG
-+#  if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
-+#    include <note.h>
-+#    define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
-+#  else
-+#    define PERL_UNUSED_ARG(x) ((void)x)
-+#  endif
-+#endif
-+
-+#ifndef PERL_UNUSED_VAR
-+#  define PERL_UNUSED_VAR(x) ((void)x)
-+#endif
-+
-+#ifndef PERL_UNUSED_CONTEXT
-+#  ifdef USE_ITHREADS
-+#    define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
-+#  else
-+#    define PERL_UNUSED_CONTEXT
-+#  endif
-+#endif
-+#ifndef NOOP
-+#  define NOOP                           /*EMPTY*/(void)0
-+#endif
-+
-+#ifndef dNOOP
-+#  define dNOOP                          extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL
-+#endif
-+
-+#ifndef NVTYPE
-+#  if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
-+#    define NVTYPE long double
-+#  else
-+#    define NVTYPE double
-+#  endif
-+typedef NVTYPE NV;
-+#endif
-+
-+#ifndef INT2PTR
-+#  if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
-+#    define PTRV                  UV
-+#    define INT2PTR(any,d)        (any)(d)
-+#  else
-+#    if PTRSIZE == LONGSIZE
-+#      define PTRV                unsigned long
-+#    else
-+#      define PTRV                unsigned
-+#    endif
-+#    define INT2PTR(any,d)        (any)(PTRV)(d)
-+#  endif
-+#endif
-+
-+#ifndef PTR2ul
-+#  if PTRSIZE == LONGSIZE
-+#    define PTR2ul(p)     (unsigned long)(p)
-+#  else
-+#    define PTR2ul(p)     INT2PTR(unsigned long,p)
-+#  endif
-+#endif
-+#ifndef PTR2nat
-+#  define PTR2nat(p)                     (PTRV)(p)
-+#endif
-+
-+#ifndef NUM2PTR
-+#  define NUM2PTR(any,d)                 (any)PTR2nat(d)
-+#endif
-+
-+#ifndef PTR2IV
-+#  define PTR2IV(p)                      INT2PTR(IV,p)
-+#endif
-+
-+#ifndef PTR2UV
-+#  define PTR2UV(p)                      INT2PTR(UV,p)
-+#endif
-+
-+#ifndef PTR2NV
-+#  define PTR2NV(p)                      NUM2PTR(NV,p)
-+#endif
-+
-+#undef START_EXTERN_C
-+#undef END_EXTERN_C
-+#undef EXTERN_C
-+#ifdef __cplusplus
-+#  define START_EXTERN_C extern "C" {
-+#  define END_EXTERN_C }
-+#  define EXTERN_C extern "C"
-+#else
-+#  define START_EXTERN_C
-+#  define END_EXTERN_C
-+#  define EXTERN_C extern
-+#endif
-+
-+#if defined(PERL_GCC_PEDANTIC)
-+#  ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
-+#    define PERL_GCC_BRACE_GROUPS_FORBIDDEN
-+#  endif
-+#endif
-+
-+#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
-+#  ifndef PERL_USE_GCC_BRACE_GROUPS
-+#    define PERL_USE_GCC_BRACE_GROUPS
-+#  endif
-+#endif
-+
-+#undef STMT_START
-+#undef STMT_END
-+#ifdef PERL_USE_GCC_BRACE_GROUPS
-+#  define STMT_START    (void)( /* gcc supports ``({ STATEMENTS; })'' */
-+#  define STMT_END      )
-+#else
-+#  if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
-+#    define STMT_START  if (1)
-+#    define STMT_END    else (void)0
-+#  else
-+#    define STMT_START  do
-+#    define STMT_END    while (0)
-+#  endif
-+#endif
-+#ifndef boolSV
-+#  define boolSV(b)                      ((b) ? &PL_sv_yes : &PL_sv_no)
-+#endif
-+
-+/* DEFSV appears first in 5.004_56 */
-+#ifndef DEFSV
-+#  define DEFSV                          GvSV(PL_defgv)
-+#endif
-+
-+#ifndef SAVE_DEFSV
-+#  define SAVE_DEFSV                     SAVESPTR(GvSV(PL_defgv))
-+#endif
-+
-+#ifndef DEFSV_set
-+#  define DEFSV_set(sv)                  (DEFSV = (sv))
-+#endif
-+
-+/* Older perls (<=5.003) lack AvFILLp */
-+#ifndef AvFILLp
-+#  define AvFILLp                        AvFILL
-+#endif
-+#ifndef ERRSV
-+#  define ERRSV                          get_sv("@",FALSE)
-+#endif
-+
-+/* Hint: gv_stashpvn
-+ * This function's backport doesn't support the length parameter, but
-+ * rather ignores it. Portability can only be ensured if the length
-+ * parameter is used for speed reasons, but the length can always be
-+ * correctly computed from the string argument.
-+ */
-+#ifndef gv_stashpvn
-+#  define gv_stashpvn(str,len,create)    gv_stashpv(str,create)
-+#endif
-+
-+/* Replace: 1 */
-+#ifndef get_cv
-+#  define get_cv                         perl_get_cv
-+#endif
-+
-+#ifndef get_sv
-+#  define get_sv                         perl_get_sv
-+#endif
-+
-+#ifndef get_av
-+#  define get_av                         perl_get_av
-+#endif
-+
-+#ifndef get_hv
-+#  define get_hv                         perl_get_hv
-+#endif
-+
-+/* Replace: 0 */
-+#ifndef dUNDERBAR
-+#  define dUNDERBAR                      dNOOP
-+#endif
-+
-+#ifndef UNDERBAR
-+#  define UNDERBAR                       DEFSV
-+#endif
-+#ifndef dAX
-+#  define dAX                            I32 ax = MARK - PL_stack_base + 1
-+#endif
-+
-+#ifndef dITEMS
-+#  define dITEMS                         I32 items = SP - MARK
-+#endif
-+#ifndef dXSTARG
-+#  define dXSTARG                        SV * targ = sv_newmortal()
-+#endif
-+#ifndef dAXMARK
-+#  define dAXMARK                        I32 ax = POPMARK; \
-+                               register SV ** const mark = PL_stack_base + ax++
-+#endif
-+#ifndef XSprePUSH
-+#  define XSprePUSH                      (sp = PL_stack_base + ax - 1)
-+#endif
-+
-+#if (PERL_BCDVERSION < 0x5005000)
-+#  undef XSRETURN
-+#  define XSRETURN(off)                                   \
-+      STMT_START {                                        \
-+          PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
-+          return;                                         \
-+      } STMT_END
-+#endif
-+#ifndef XSPROTO
-+#  define XSPROTO(name)                  void name(pTHX_ CV* cv)
-+#endif
-+
-+#ifndef SVfARG
-+#  define SVfARG(p)                      ((void*)(p))
-+#endif
-+#ifndef PERL_ABS
-+#  define PERL_ABS(x)                    ((x) < 0 ? -(x) : (x))
-+#endif
-+#ifndef dVAR
-+#  define dVAR                           dNOOP
-+#endif
-+#ifndef SVf
-+#  define SVf                            "_"
-+#endif
-+#ifndef UTF8_MAXBYTES
-+#  define UTF8_MAXBYTES                  UTF8_MAXLEN
-+#endif
-+#ifndef CPERLscope
-+#  define CPERLscope(x)                  x
-+#endif
-+#ifndef PERL_HASH
-+#  define PERL_HASH(hash,str,len)        \
-+     STMT_START { \
-+        const char *s_PeRlHaSh = str; \
-+        I32 i_PeRlHaSh = len; \
-+        U32 hash_PeRlHaSh = 0; \
-+        while (i_PeRlHaSh--) \
-+            hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \
-+        (hash) = hash_PeRlHaSh; \
-+    } STMT_END
-+#endif
-+
-+#ifndef PERLIO_FUNCS_DECL
-+# ifdef PERLIO_FUNCS_CONST
-+#  define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
-+#  define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
-+# else
-+#  define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
-+#  define PERLIO_FUNCS_CAST(funcs) (funcs)
-+# endif
-+#endif
-+
-+/* provide these typedefs for older perls */
-+#if (PERL_BCDVERSION < 0x5009003)
-+
-+# ifdef ARGSproto
-+typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto);
-+# else
-+typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX);
-+# endif
-+
-+typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
-+
-+#endif
-+#ifndef isPSXSPC
-+#  define isPSXSPC(c)                    (isSPACE(c) || (c) == '\v')
-+#endif
-+
-+#ifndef isBLANK
-+#  define isBLANK(c)                     ((c) == ' ' || (c) == '\t')
-+#endif
-+
-+#ifdef EBCDIC
-+#ifndef isALNUMC
-+#  define isALNUMC(c)                    isalnum(c)
-+#endif
-+
-+#ifndef isASCII
-+#  define isASCII(c)                     isascii(c)
-+#endif
-+
-+#ifndef isCNTRL
-+#  define isCNTRL(c)                     iscntrl(c)
-+#endif
-+
-+#ifndef isGRAPH
-+#  define isGRAPH(c)                     isgraph(c)
-+#endif
-+
-+#ifndef isPRINT
-+#  define isPRINT(c)                     isprint(c)
-+#endif
-+
-+#ifndef isPUNCT
-+#  define isPUNCT(c)                     ispunct(c)
-+#endif
-+
-+#ifndef isXDIGIT
-+#  define isXDIGIT(c)                    isxdigit(c)
-+#endif
-+
-+#else
-+# if (PERL_BCDVERSION < 0x5010000)
-+/* Hint: isPRINT
-+ * The implementation in older perl versions includes all of the
-+ * isSPACE() characters, which is wrong. The version provided by
-+ * Devel::PPPort always overrides a present buggy version.
-+ */
-+#  undef isPRINT
-+# endif
-+
-+#ifdef HAS_QUAD
-+# define WIDEST_UTYPE U64TYPE
-+#else
-+# define WIDEST_UTYPE U32
-+#endif
-+#ifndef isALNUMC
-+#  define isALNUMC(c)                    (isALPHA(c) || isDIGIT(c))
-+#endif
-+
-+#ifndef isASCII
-+#  define isASCII(c)                     ((WIDEST_UTYPE) (c) <= 127)
-+#endif
-+
-+#ifndef isCNTRL
-+#  define isCNTRL(c)                     ((WIDEST_UTYPE) (c) < ' ' || (c) == 127)
-+#endif
-+
-+#ifndef isGRAPH
-+#  define isGRAPH(c)                     (isALNUM(c) || isPUNCT(c))
-+#endif
-+
-+#ifndef isPRINT
-+#  define isPRINT(c)                     (((c) >= 32 && (c) < 127))
-+#endif
-+
-+#ifndef isPUNCT
-+#  define isPUNCT(c)                     (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64)  || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126))
-+#endif
-+
-+#ifndef isXDIGIT
-+#  define isXDIGIT(c)                    (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
-+#endif
-+
-+#endif
-+
-+#ifndef PERL_SIGNALS_UNSAFE_FLAG
-+
-+#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
-+
-+#if (PERL_BCDVERSION < 0x5008000)
-+#  define D_PPP_PERL_SIGNALS_INIT   PERL_SIGNALS_UNSAFE_FLAG
-+#else
-+#  define D_PPP_PERL_SIGNALS_INIT   0
-+#endif
-+
-+#if defined(NEED_PL_signals)
-+static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
-+#elif defined(NEED_PL_signals_GLOBAL)
-+U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
-+#else
-+extern U32 DPPP_(my_PL_signals);
-+#endif
-+#define PL_signals DPPP_(my_PL_signals)
-+
-+#endif
-+
-+/* Hint: PL_ppaddr
-+ * Calling an op via PL_ppaddr requires passing a context argument
-+ * for threaded builds. Since the context argument is different for
-+ * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will
-+ * automatically be defined as the correct argument.
-+ */
-+
-+#if (PERL_BCDVERSION <= 0x5005005)
-+/* Replace: 1 */
-+#  define PL_ppaddr                 ppaddr
-+#  define PL_no_modify              no_modify
-+/* Replace: 0 */
-+#endif
-+
-+#if (PERL_BCDVERSION <= 0x5004005)
-+/* Replace: 1 */
-+#  define PL_DBsignal               DBsignal
-+#  define PL_DBsingle               DBsingle
-+#  define PL_DBsub                  DBsub
-+#  define PL_DBtrace                DBtrace
-+#  define PL_Sv                     Sv
-+#  define PL_bufend                 bufend
-+#  define PL_bufptr                 bufptr
-+#  define PL_compiling              compiling
-+#  define PL_copline                copline
-+#  define PL_curcop                 curcop
-+#  define PL_curstash               curstash
-+#  define PL_debstash               debstash
-+#  define PL_defgv                  defgv
-+#  define PL_diehook                diehook
-+#  define PL_dirty                  dirty
-+#  define PL_dowarn                 dowarn
-+#  define PL_errgv                  errgv
-+#  define PL_error_count            error_count
-+#  define PL_expect                 expect
-+#  define PL_hexdigit               hexdigit
-+#  define PL_hints                  hints
-+#  define PL_in_my                  in_my
-+#  define PL_laststatval            laststatval
-+#  define PL_lex_state              lex_state
-+#  define PL_lex_stuff              lex_stuff
-+#  define PL_linestr                linestr
-+#  define PL_na                     na
-+#  define PL_perl_destruct_level    perl_destruct_level
-+#  define PL_perldb                 perldb
-+#  define PL_rsfp_filters           rsfp_filters
-+#  define PL_rsfp                   rsfp
-+#  define PL_stack_base             stack_base
-+#  define PL_stack_sp               stack_sp
-+#  define PL_statcache              statcache
-+#  define PL_stdingv                stdingv
-+#  define PL_sv_arenaroot           sv_arenaroot
-+#  define PL_sv_no                  sv_no
-+#  define PL_sv_undef               sv_undef
-+#  define PL_sv_yes                 sv_yes
-+#  define PL_tainted                tainted
-+#  define PL_tainting               tainting
-+#  define PL_tokenbuf               tokenbuf
-+/* Replace: 0 */
-+#endif
-+
-+/* Warning: PL_parser
-+ * For perl versions earlier than 5.9.5, this is an always
-+ * non-NULL dummy. Also, it cannot be dereferenced. Don't
-+ * use it if you can avoid is and unless you absolutely know
-+ * what you're doing.
-+ * If you always check that PL_parser is non-NULL, you can
-+ * define DPPP_PL_parser_NO_DUMMY to avoid the creation of
-+ * a dummy parser structure.
-+ */
-+
-+#if (PERL_BCDVERSION >= 0x5009005)
-+# ifdef DPPP_PL_parser_NO_DUMMY
-+#  define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
-+                (croak("panic: PL_parser == NULL in %s:%d", \
-+                       __FILE__, __LINE__), (yy_parser *) NULL))->var)
-+# else
-+#  ifdef DPPP_PL_parser_NO_DUMMY_WARNING
-+#   define D_PPP_parser_dummy_warning(var)
-+#  else
-+#   define D_PPP_parser_dummy_warning(var) \
-+             warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__),
-+#  endif
-+#  define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
-+                (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var)
-+#if defined(NEED_PL_parser)
-+static yy_parser DPPP_(dummy_PL_parser);
-+#elif defined(NEED_PL_parser_GLOBAL)
-+yy_parser DPPP_(dummy_PL_parser);
-+#else
-+extern yy_parser DPPP_(dummy_PL_parser);
-+#endif
-+
-+# endif
-+
-+/* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */
-+/* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf
-+ * Do not use this variable unless you know exactly what you're
-+ * doint. It is internal to the perl parser and may change or even
-+ * be removed in the future. As of perl 5.9.5, you have to check
-+ * for (PL_parser != NULL) for this variable to have any effect.
-+ * An always non-NULL PL_parser dummy is provided for earlier
-+ * perl versions.
-+ * If PL_parser is NULL when you try to access this variable, a
-+ * dummy is being accessed instead and a warning is issued unless
-+ * you define DPPP_PL_parser_NO_DUMMY_WARNING.
-+ * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access
-+ * this variable will croak with a panic message.
-+ */
-+
-+# define PL_expect         D_PPP_my_PL_parser_var(expect)
-+# define PL_copline        D_PPP_my_PL_parser_var(copline)
-+# define PL_rsfp           D_PPP_my_PL_parser_var(rsfp)
-+# define PL_rsfp_filters   D_PPP_my_PL_parser_var(rsfp_filters)
-+# define PL_linestr        D_PPP_my_PL_parser_var(linestr)
-+# define PL_bufptr         D_PPP_my_PL_parser_var(bufptr)
-+# define PL_bufend         D_PPP_my_PL_parser_var(bufend)
-+# define PL_lex_state      D_PPP_my_PL_parser_var(lex_state)
-+# define PL_lex_stuff      D_PPP_my_PL_parser_var(lex_stuff)
-+# define PL_tokenbuf       D_PPP_my_PL_parser_var(tokenbuf)
-+# define PL_in_my          D_PPP_my_PL_parser_var(in_my)
-+# define PL_in_my_stash    D_PPP_my_PL_parser_var(in_my_stash)
-+# define PL_error_count    D_PPP_my_PL_parser_var(error_count)
-+
-+
-+#else
-+
-+/* ensure that PL_parser != NULL and cannot be dereferenced */
-+# define PL_parser         ((void *) 1)
-+
-+#endif
-+#ifndef mPUSHs
-+#  define mPUSHs(s)                      PUSHs(sv_2mortal(s))
-+#endif
-+
-+#ifndef PUSHmortal
-+#  define PUSHmortal                     PUSHs(sv_newmortal())
-+#endif
-+
-+#ifndef mPUSHp
-+#  define mPUSHp(p,l)                    sv_setpvn(PUSHmortal, (p), (l))
-+#endif
-+
-+#ifndef mPUSHn
-+#  define mPUSHn(n)                      sv_setnv(PUSHmortal, (NV)(n))
-+#endif
-+
-+#ifndef mPUSHi
-+#  define mPUSHi(i)                      sv_setiv(PUSHmortal, (IV)(i))
-+#endif
-+
-+#ifndef mPUSHu
-+#  define mPUSHu(u)                      sv_setuv(PUSHmortal, (UV)(u))
-+#endif
-+#ifndef mXPUSHs
-+#  define mXPUSHs(s)                     XPUSHs(sv_2mortal(s))
-+#endif
-+
-+#ifndef XPUSHmortal
-+#  define XPUSHmortal                    XPUSHs(sv_newmortal())
-+#endif
-+
-+#ifndef mXPUSHp
-+#  define mXPUSHp(p,l)                   STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END
-+#endif
-+
-+#ifndef mXPUSHn
-+#  define mXPUSHn(n)                     STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END
-+#endif
-+
-+#ifndef mXPUSHi
-+#  define mXPUSHi(i)                     STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END
-+#endif
-+
-+#ifndef mXPUSHu
-+#  define mXPUSHu(u)                     STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END
-+#endif
-+
-+/* Replace: 1 */
-+#ifndef call_sv
-+#  define call_sv                        perl_call_sv
-+#endif
-+
-+#ifndef call_pv
-+#  define call_pv                        perl_call_pv
-+#endif
-+
-+#ifndef call_argv
-+#  define call_argv                      perl_call_argv
-+#endif
-+
-+#ifndef call_method
-+#  define call_method                    perl_call_method
-+#endif
-+#ifndef eval_sv
-+#  define eval_sv                        perl_eval_sv
-+#endif
-+
-+/* Replace: 0 */
-+#ifndef PERL_LOADMOD_DENY
-+#  define PERL_LOADMOD_DENY              0x1
-+#endif
-+
-+#ifndef PERL_LOADMOD_NOIMPORT
-+#  define PERL_LOADMOD_NOIMPORT          0x2
-+#endif
-+
-+#ifndef PERL_LOADMOD_IMPORT_OPS
-+#  define PERL_LOADMOD_IMPORT_OPS        0x4
-+#endif
-+
-+#ifndef G_METHOD
-+# define G_METHOD               64
-+# ifdef call_sv
-+#  undef call_sv
-+# endif
-+# if (PERL_BCDVERSION < 0x5006000)
-+#  define call_sv(sv, flags)  ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \
-+                                (flags) & ~G_METHOD) : perl_call_sv(sv, flags))
-+# else
-+#  define call_sv(sv, flags)  ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \
-+                                (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags))
-+# endif
-+#endif
-+
-+/* Replace perl_eval_pv with eval_pv */
-+
-+#ifndef eval_pv
-+#if defined(NEED_eval_pv)
-+static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
-+static
-+#else
-+extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
-+#endif
-+
-+#ifdef eval_pv
-+#  undef eval_pv
-+#endif
-+#define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b)
-+#define Perl_eval_pv DPPP_(my_eval_pv)
-+
-+#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL)
-+
-+SV*
-+DPPP_(my_eval_pv)(char *p, I32 croak_on_error)
-+{
-+    dSP;
-+    SV* sv = newSVpv(p, 0);
-+
-+    PUSHMARK(sp);
-+    eval_sv(sv, G_SCALAR);
-+    SvREFCNT_dec(sv);
-+
-+    SPAGAIN;
-+    sv = POPs;
-+    PUTBACK;
-+
-+    if (croak_on_error && SvTRUE(GvSV(errgv)))
-+        croak(SvPVx(GvSV(errgv), na));
-+
-+    return sv;
-+}
-+
-+#endif
-+#endif
-+
-+#ifndef vload_module
-+#if defined(NEED_vload_module)
-+static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
-+static
-+#else
-+extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
-+#endif
-+
-+#ifdef vload_module
-+#  undef vload_module
-+#endif
-+#define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d)
-+#define Perl_vload_module DPPP_(my_vload_module)
-+
-+#if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL)
-+
-+void
-+DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args)
-+{
-+    dTHR;
-+    dVAR;
-+    OP *veop, *imop;
-+
-+    OP * const modname = newSVOP(OP_CONST, 0, name);
-+    /* 5.005 has a somewhat hacky force_normal that doesn't croak on
-+       SvREADONLY() if PL_compling is true. Current perls take care in
-+       ck_require() to correctly turn off SvREADONLY before calling
-+       force_normal_flags(). This seems a better fix than fudging PL_compling
-+     */
-+    SvREADONLY_off(((SVOP*)modname)->op_sv);
-+    modname->op_private |= OPpCONST_BARE;
-+    if (ver) {
-+        veop = newSVOP(OP_CONST, 0, ver);
-+    }
-+    else
-+        veop = NULL;
-+    if (flags & PERL_LOADMOD_NOIMPORT) {
-+        imop = sawparens(newNULLLIST());
-+    }
-+    else if (flags & PERL_LOADMOD_IMPORT_OPS) {
-+        imop = va_arg(*args, OP*);
-+    }
-+    else {
-+        SV *sv;
-+        imop = NULL;
-+        sv = va_arg(*args, SV*);
-+        while (sv) {
-+            imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
-+            sv = va_arg(*args, SV*);
-+        }
-+    }
-+    {
-+        const line_t ocopline = PL_copline;
-+        COP * const ocurcop = PL_curcop;
-+        const int oexpect = PL_expect;
-+
-+#if (PERL_BCDVERSION >= 0x5004000)
-+        utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
-+                veop, modname, imop);
-+#else
-+        utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(),
-+                modname, imop);
-+#endif
-+        PL_expect = oexpect;
-+        PL_copline = ocopline;
-+        PL_curcop = ocurcop;
-+    }
-+}
-+
-+#endif
-+#endif
-+
-+#ifndef load_module
-+#if defined(NEED_load_module)
-+static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
-+static
-+#else
-+extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
-+#endif
-+
-+#ifdef load_module
-+#  undef load_module
-+#endif
-+#define load_module DPPP_(my_load_module)
-+#define Perl_load_module DPPP_(my_load_module)
-+
-+#if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL)
-+
-+void
-+DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...)
-+{
-+    va_list args;
-+    va_start(args, ver);
-+    vload_module(flags, name, ver, &args);
-+    va_end(args);
-+}
-+
-+#endif
-+#endif
-+#ifndef newRV_inc
-+#  define newRV_inc(sv)                  newRV(sv)   /* Replace */
-+#endif
-+
-+#ifndef newRV_noinc
-+#if defined(NEED_newRV_noinc)
-+static SV * DPPP_(my_newRV_noinc)(SV *sv);
-+static
-+#else
-+extern SV * DPPP_(my_newRV_noinc)(SV *sv);
-+#endif
-+
-+#ifdef newRV_noinc
-+#  undef newRV_noinc
-+#endif
-+#define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a)
-+#define Perl_newRV_noinc DPPP_(my_newRV_noinc)
-+
-+#if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL)
-+SV *
-+DPPP_(my_newRV_noinc)(SV *sv)
-+{
-+  SV *rv = (SV *)newRV(sv);
-+  SvREFCNT_dec(sv);
-+  return rv;
-+}
-+#endif
-+#endif
-+
-+/* Hint: newCONSTSUB
-+ * Returns a CV* as of perl-5.7.1. This return value is not supported
-+ * by Devel::PPPort.
-+ */
-+
-+/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
-+#if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005)
-+#if defined(NEED_newCONSTSUB)
-+static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
-+static
-+#else
-+extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
-+#endif
-+
-+#ifdef newCONSTSUB
-+#  undef newCONSTSUB
-+#endif
-+#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c)
-+#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB)
-+
-+#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
-+
-+/* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */
-+/* (There's no PL_parser in perl < 5.005, so this is completely safe)     */
-+#define D_PPP_PL_copline PL_copline
-+
-+void
-+DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv)
-+{
-+        U32 oldhints = PL_hints;
-+        HV *old_cop_stash = PL_curcop->cop_stash;
-+        HV *old_curstash = PL_curstash;
-+        line_t oldline = PL_curcop->cop_line;
-+        PL_curcop->cop_line = D_PPP_PL_copline;
-+
-+        PL_hints &= ~HINT_BLOCK_SCOPE;
-+        if (stash)
-+                PL_curstash = PL_curcop->cop_stash = stash;
-+
-+        newSUB(
-+
-+#if   (PERL_BCDVERSION < 0x5003022)
-+                start_subparse(),
-+#elif (PERL_BCDVERSION == 0x5003022)
-+                start_subparse(0),
-+#else  /* 5.003_23  onwards */
-+                start_subparse(FALSE, 0),
-+#endif
-+
-+                newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)),
-+                newSVOP(OP_CONST, 0, &PL_sv_no),   /* SvPV(&PL_sv_no) == "" -- GMB */
-+                newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
-+        );
-+
-+        PL_hints = oldhints;
-+        PL_curcop->cop_stash = old_cop_stash;
-+        PL_curstash = old_curstash;
-+        PL_curcop->cop_line = oldline;
-+}
-+#endif
-+#endif
-+
-+/*
-+ * Boilerplate macros for initializing and accessing interpreter-local
-+ * data from C.  All statics in extensions should be reworked to use
-+ * this, if you want to make the extension thread-safe.  See ext/re/re.xs
-+ * for an example of the use of these macros.
-+ *
-+ * Code that uses these macros is responsible for the following:
-+ * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
-+ * 2. Declare a typedef named my_cxt_t that is a structure that contains
-+ *    all the data that needs to be interpreter-local.
-+ * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
-+ * 4. Use the MY_CXT_INIT macro such that it is called exactly once
-+ *    (typically put in the BOOT: section).
-+ * 5. Use the members of the my_cxt_t structure everywhere as
-+ *    MY_CXT.member.
-+ * 6. Use the dMY_CXT macro (a declaration) in all the functions that
-+ *    access MY_CXT.
-+ */
-+
-+#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \
-+    defined(PERL_CAPI)    || defined(PERL_IMPLICIT_CONTEXT)
-+
-+#ifndef START_MY_CXT
-+
-+/* This must appear in all extensions that define a my_cxt_t structure,
-+ * right after the definition (i.e. at file scope).  The non-threads
-+ * case below uses it to declare the data as static. */
-+#define START_MY_CXT
-+
-+#if (PERL_BCDVERSION < 0x5004068)
-+/* Fetches the SV that keeps the per-interpreter data. */
-+#define dMY_CXT_SV \
-+        SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
-+#else /* >= perl5.004_68 */
-+#define dMY_CXT_SV \
-+        SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY,             \
-+                                  sizeof(MY_CXT_KEY)-1, TRUE)
-+#endif /* < perl5.004_68 */
-+
-+/* This declaration should be used within all functions that use the
-+ * interpreter-local data. */
-+#define dMY_CXT \
-+        dMY_CXT_SV;                                                     \
-+        my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
-+
-+/* Creates and zeroes the per-interpreter data.
-+ * (We allocate my_cxtp in a Perl SV so that it will be released when
-+ * the interpreter goes away.) */
-+#define MY_CXT_INIT \
-+        dMY_CXT_SV;                                                     \
-+        /* newSV() allocates one more than needed */                    \
-+        my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
-+        Zero(my_cxtp, 1, my_cxt_t);                                     \
-+        sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
-+
-+/* This macro must be used to access members of the my_cxt_t structure.
-+ * e.g. MYCXT.some_data */
-+#define MY_CXT          (*my_cxtp)
-+
-+/* Judicious use of these macros can reduce the number of times dMY_CXT
-+ * is used.  Use is similar to pTHX, aTHX etc. */
-+#define pMY_CXT         my_cxt_t *my_cxtp
-+#define pMY_CXT_        pMY_CXT,
-+#define _pMY_CXT        ,pMY_CXT
-+#define aMY_CXT         my_cxtp
-+#define aMY_CXT_        aMY_CXT,
-+#define _aMY_CXT        ,aMY_CXT
-+
-+#endif /* START_MY_CXT */
-+
-+#ifndef MY_CXT_CLONE
-+/* Clones the per-interpreter data. */
-+#define MY_CXT_CLONE \
-+        dMY_CXT_SV;                                                     \
-+        my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
-+        Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
-+        sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
-+#endif
-+
-+#else /* single interpreter */
-+
-+#ifndef START_MY_CXT
-+
-+#define START_MY_CXT    static my_cxt_t my_cxt;
-+#define dMY_CXT_SV      dNOOP
-+#define dMY_CXT         dNOOP
-+#define MY_CXT_INIT     NOOP
-+#define MY_CXT          my_cxt
-+
-+#define pMY_CXT         void
-+#define pMY_CXT_
-+#define _pMY_CXT
-+#define aMY_CXT
-+#define aMY_CXT_
-+#define _aMY_CXT
-+
-+#endif /* START_MY_CXT */
-+
-+#ifndef MY_CXT_CLONE
-+#define MY_CXT_CLONE    NOOP
-+#endif
-+
-+#endif
-+
-+#ifndef IVdf
-+#  if IVSIZE == LONGSIZE
-+#    define     IVdf      "ld"
-+#    define     UVuf      "lu"
-+#    define     UVof      "lo"
-+#    define     UVxf      "lx"
-+#    define     UVXf      "lX"
-+#  elif IVSIZE == INTSIZE
-+#    define   IVdf      "d"
-+#    define   UVuf      "u"
-+#    define   UVof      "o"
-+#    define   UVxf      "x"
-+#    define   UVXf      "X"
-+#  else
-+#    error "cannot define IV/UV formats"
-+#  endif
-+#endif
-+
-+#ifndef NVef
-+#  if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
-+      defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000)
-+            /* Not very likely, but let's try anyway. */
-+#    define NVef          PERL_PRIeldbl
-+#    define NVff          PERL_PRIfldbl
-+#    define NVgf          PERL_PRIgldbl
-+#  else
-+#    define NVef          "e"
-+#    define NVff          "f"
-+#    define NVgf          "g"
-+#  endif
-+#endif
-+
-+#ifndef SvREFCNT_inc
-+#  ifdef PERL_USE_GCC_BRACE_GROUPS
-+#    define SvREFCNT_inc(sv)            \
-+      ({                                \
-+          SV * const _sv = (SV*)(sv);   \
-+          if (_sv)                      \
-+               (SvREFCNT(_sv))++;       \
-+          _sv;                          \
-+      })
-+#  else
-+#    define SvREFCNT_inc(sv)    \
-+          ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
-+#  endif
-+#endif
-+
-+#ifndef SvREFCNT_inc_simple
-+#  ifdef PERL_USE_GCC_BRACE_GROUPS
-+#    define SvREFCNT_inc_simple(sv)     \
-+      ({                                        \
-+          if (sv)                               \
-+               (SvREFCNT(sv))++;                \
-+          (SV *)(sv);                           \
-+      })
-+#  else
-+#    define SvREFCNT_inc_simple(sv) \
-+          ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
-+#  endif
-+#endif
-+
-+#ifndef SvREFCNT_inc_NN
-+#  ifdef PERL_USE_GCC_BRACE_GROUPS
-+#    define SvREFCNT_inc_NN(sv)         \
-+      ({                                        \
-+          SV * const _sv = (SV*)(sv);   \
-+          SvREFCNT(_sv)++;              \
-+          _sv;                          \
-+      })
-+#  else
-+#    define SvREFCNT_inc_NN(sv) \
-+          (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
-+#  endif
-+#endif
-+
-+#ifndef SvREFCNT_inc_void
-+#  ifdef PERL_USE_GCC_BRACE_GROUPS
-+#    define SvREFCNT_inc_void(sv)               \
-+      ({                                        \
-+          SV * const _sv = (SV*)(sv);   \
-+          if (_sv)                      \
-+              (void)(SvREFCNT(_sv)++);  \
-+      })
-+#  else
-+#    define SvREFCNT_inc_void(sv) \
-+          (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
-+#  endif
-+#endif
-+#ifndef SvREFCNT_inc_simple_void
-+#  define SvREFCNT_inc_simple_void(sv)   STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
-+#endif
-+
-+#ifndef SvREFCNT_inc_simple_NN
-+#  define SvREFCNT_inc_simple_NN(sv)     (++SvREFCNT(sv), (SV*)(sv))
-+#endif
-+
-+#ifndef SvREFCNT_inc_void_NN
-+#  define SvREFCNT_inc_void_NN(sv)       (void)(++SvREFCNT((SV*)(sv)))
-+#endif
-+
-+#ifndef SvREFCNT_inc_simple_void_NN
-+#  define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
-+#endif
-+
-+#ifndef newSV_type
-+
-+#if defined(NEED_newSV_type)
-+static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
-+static
-+#else
-+extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
-+#endif
-+
-+#ifdef newSV_type
-+#  undef newSV_type
-+#endif
-+#define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a)
-+#define Perl_newSV_type DPPP_(my_newSV_type)
-+
-+#if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL)
-+
-+SV*
-+DPPP_(my_newSV_type)(pTHX_ svtype const t)
-+{
-+  SV* const sv = newSV(0);
-+  sv_upgrade(sv, t);
-+  return sv;
-+}
-+
-+#endif
-+
-+#endif
-+
-+#if (PERL_BCDVERSION < 0x5006000)
-+# define D_PPP_CONSTPV_ARG(x)  ((char *) (x))
-+#else
-+# define D_PPP_CONSTPV_ARG(x)  (x)
-+#endif
-+#ifndef newSVpvn
-+#  define newSVpvn(data,len)             ((data)                                              \
-+                                    ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
-+                                    : newSV(0))
-+#endif
-+#ifndef newSVpvn_utf8
-+#  define newSVpvn_utf8(s, len, u)       newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
-+#endif
-+#ifndef SVf_UTF8
-+#  define SVf_UTF8                       0
-+#endif
-+
-+#ifndef newSVpvn_flags
-+
-+#if defined(NEED_newSVpvn_flags)
-+static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
-+static
-+#else
-+extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
-+#endif
-+
-+#ifdef newSVpvn_flags
-+#  undef newSVpvn_flags
-+#endif
-+#define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c)
-+#define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags)
-+
-+#if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL)
-+
-+SV *
-+DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags)
-+{
-+  SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len);
-+  SvFLAGS(sv) |= (flags & SVf_UTF8);
-+  return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
-+}
-+
-+#endif
-+
-+#endif
-+
-+/* Backwards compatibility stuff... :-( */
-+#if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen)
-+#  define NEED_sv_2pv_flags
-+#endif
-+#if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL)
-+#  define NEED_sv_2pv_flags_GLOBAL
-+#endif
-+
-+/* Hint: sv_2pv_nolen
-+ * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen().
-+ */
-+#ifndef sv_2pv_nolen
-+#  define sv_2pv_nolen(sv)               SvPV_nolen(sv)
-+#endif
-+
-+#ifdef SvPVbyte
-+
-+/* Hint: SvPVbyte
-+ * Does not work in perl-5.6.1, ppport.h implements a version
-+ * borrowed from perl-5.7.3.
-+ */
-+
-+#if (PERL_BCDVERSION < 0x5007000)
-+
-+#if defined(NEED_sv_2pvbyte)
-+static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
-+static
-+#else
-+extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
-+#endif
-+
-+#ifdef sv_2pvbyte
-+#  undef sv_2pvbyte
-+#endif
-+#define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b)
-+#define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte)
-+
-+#if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL)
-+
-+char *
-+DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp)
-+{
-+  sv_utf8_downgrade(sv,0);
-+  return SvPV(sv,*lp);
-+}
-+
-+#endif
-+
-+/* Hint: sv_2pvbyte
-+ * Use the SvPVbyte() macro instead of sv_2pvbyte().
-+ */
-+
-+#undef SvPVbyte
-+
-+#define SvPVbyte(sv, lp)                                                \
-+        ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK)                \
-+         ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
-+
-+#endif
-+
-+#else
-+
-+#  define SvPVbyte          SvPV
-+#  define sv_2pvbyte        sv_2pv
-+
-+#endif
-+#ifndef sv_2pvbyte_nolen
-+#  define sv_2pvbyte_nolen(sv)           sv_2pv_nolen(sv)
-+#endif
-+
-+/* Hint: sv_pvn
-+ * Always use the SvPV() macro instead of sv_pvn().
-+ */
-+
-+/* Hint: sv_pvn_force
-+ * Always use the SvPV_force() macro instead of sv_pvn_force().
-+ */
-+
-+/* If these are undefined, they're not handled by the core anyway */
-+#ifndef SV_IMMEDIATE_UNREF
-+#  define SV_IMMEDIATE_UNREF             0
-+#endif
-+
-+#ifndef SV_GMAGIC
-+#  define SV_GMAGIC                      0
-+#endif
-+
-+#ifndef SV_COW_DROP_PV
-+#  define SV_COW_DROP_PV                 0
-+#endif
-+
-+#ifndef SV_UTF8_NO_ENCODING
-+#  define SV_UTF8_NO_ENCODING            0
-+#endif
-+
-+#ifndef SV_NOSTEAL
-+#  define SV_NOSTEAL                     0
-+#endif
-+
-+#ifndef SV_CONST_RETURN
-+#  define SV_CONST_RETURN                0
-+#endif
-+
-+#ifndef SV_MUTABLE_RETURN
-+#  define SV_MUTABLE_RETURN              0
-+#endif
-+
-+#ifndef SV_SMAGIC
-+#  define SV_SMAGIC                      0
-+#endif
-+
-+#ifndef SV_HAS_TRAILING_NUL
-+#  define SV_HAS_TRAILING_NUL            0
-+#endif
-+
-+#ifndef SV_COW_SHARED_HASH_KEYS
-+#  define SV_COW_SHARED_HASH_KEYS        0
-+#endif
-+
-+#if (PERL_BCDVERSION < 0x5007002)
-+
-+#if defined(NEED_sv_2pv_flags)
-+static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
-+static
-+#else
-+extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
-+#endif
-+
-+#ifdef sv_2pv_flags
-+#  undef sv_2pv_flags
-+#endif
-+#define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c)
-+#define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags)
-+
-+#if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL)
-+
-+char *
-+DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
-+{
-+  STRLEN n_a = (STRLEN) flags;
-+  return sv_2pv(sv, lp ? lp : &n_a);
-+}
-+
-+#endif
-+
-+#if defined(NEED_sv_pvn_force_flags)
-+static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
-+static
-+#else
-+extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
-+#endif
-+
-+#ifdef sv_pvn_force_flags
-+#  undef sv_pvn_force_flags
-+#endif
-+#define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c)
-+#define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags)
-+
-+#if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL)
-+
-+char *
-+DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
-+{
-+  STRLEN n_a = (STRLEN) flags;
-+  return sv_pvn_force(sv, lp ? lp : &n_a);
-+}
-+
-+#endif
-+
-+#endif
-+
-+#if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) )
-+# define DPPP_SVPV_NOLEN_LP_ARG &PL_na
-+#else
-+# define DPPP_SVPV_NOLEN_LP_ARG 0
-+#endif
-+#ifndef SvPV_const
-+#  define SvPV_const(sv, lp)             SvPV_flags_const(sv, lp, SV_GMAGIC)
-+#endif
-+
-+#ifndef SvPV_mutable
-+#  define SvPV_mutable(sv, lp)           SvPV_flags_mutable(sv, lp, SV_GMAGIC)
-+#endif
-+#ifndef SvPV_flags
-+#  define SvPV_flags(sv, lp, flags)      \
-+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
-+                  ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
-+#endif
-+#ifndef SvPV_flags_const
-+#  define SvPV_flags_const(sv, lp, flags) \
-+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
-+                  ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
-+                  (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN))
-+#endif
-+#ifndef SvPV_flags_const_nolen
-+#  define SvPV_flags_const_nolen(sv, flags) \
-+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
-+                  ? SvPVX_const(sv) : \
-+                  (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN))
-+#endif
-+#ifndef SvPV_flags_mutable
-+#  define SvPV_flags_mutable(sv, lp, flags) \
-+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
-+                  ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
-+                  sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
-+#endif
-+#ifndef SvPV_force
-+#  define SvPV_force(sv, lp)             SvPV_force_flags(sv, lp, SV_GMAGIC)
-+#endif
-+
-+#ifndef SvPV_force_nolen
-+#  define SvPV_force_nolen(sv)           SvPV_force_flags_nolen(sv, SV_GMAGIC)
-+#endif
-+
-+#ifndef SvPV_force_mutable
-+#  define SvPV_force_mutable(sv, lp)     SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
-+#endif
-+
-+#ifndef SvPV_force_nomg
-+#  define SvPV_force_nomg(sv, lp)        SvPV_force_flags(sv, lp, 0)
-+#endif
-+
-+#ifndef SvPV_force_nomg_nolen
-+#  define SvPV_force_nomg_nolen(sv)      SvPV_force_flags_nolen(sv, 0)
-+#endif
-+#ifndef SvPV_force_flags
-+#  define SvPV_force_flags(sv, lp, flags) \
-+                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
-+                 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
-+#endif
-+#ifndef SvPV_force_flags_nolen
-+#  define SvPV_force_flags_nolen(sv, flags) \
-+                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
-+                 ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags))
-+#endif
-+#ifndef SvPV_force_flags_mutable
-+#  define SvPV_force_flags_mutable(sv, lp, flags) \
-+                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
-+                 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
-+                  : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
-+#endif
-+#ifndef SvPV_nolen
-+#  define SvPV_nolen(sv)                 \
-+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
-+                  ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC))
-+#endif
-+#ifndef SvPV_nolen_const
-+#  define SvPV_nolen_const(sv)           \
-+                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
-+                  ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN))
-+#endif
-+#ifndef SvPV_nomg
-+#  define SvPV_nomg(sv, lp)              SvPV_flags(sv, lp, 0)
-+#endif
-+
-+#ifndef SvPV_nomg_const
-+#  define SvPV_nomg_const(sv, lp)        SvPV_flags_const(sv, lp, 0)
-+#endif
-+
-+#ifndef SvPV_nomg_const_nolen
-+#  define SvPV_nomg_const_nolen(sv)      SvPV_flags_const_nolen(sv, 0)
-+#endif
-+
-+#ifndef SvPV_nomg_nolen
-+#  define SvPV_nomg_nolen(sv)            ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
-+                                    ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, 0))
-+#endif
-+#ifndef SvPV_renew
-+#  define SvPV_renew(sv,n)               STMT_START { SvLEN_set(sv, n); \
-+                 SvPV_set((sv), (char *) saferealloc(          \
-+                       (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \
-+               } STMT_END
-+#endif
-+#ifndef SvMAGIC_set
-+#  define SvMAGIC_set(sv, val)           \
-+                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
-+                (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
-+#endif
-+
-+#if (PERL_BCDVERSION < 0x5009003)
-+#ifndef SvPVX_const
-+#  define SvPVX_const(sv)                ((const char*) (0 + SvPVX(sv)))
-+#endif
-+
-+#ifndef SvPVX_mutable
-+#  define SvPVX_mutable(sv)              (0 + SvPVX(sv))
-+#endif
-+#ifndef SvRV_set
-+#  define SvRV_set(sv, val)              \
-+                STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
-+                (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END
-+#endif
-+
-+#else
-+#ifndef SvPVX_const
-+#  define SvPVX_const(sv)                ((const char*)((sv)->sv_u.svu_pv))
-+#endif
-+
-+#ifndef SvPVX_mutable
-+#  define SvPVX_mutable(sv)              ((sv)->sv_u.svu_pv)
-+#endif
-+#ifndef SvRV_set
-+#  define SvRV_set(sv, val)              \
-+                STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
-+                ((sv)->sv_u.svu_rv = (val)); } STMT_END
-+#endif
-+
-+#endif
-+#ifndef SvSTASH_set
-+#  define SvSTASH_set(sv, val)           \
-+                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
-+                (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
-+#endif
-+
-+#if (PERL_BCDVERSION < 0x5004000)
-+#ifndef SvUV_set
-+#  define SvUV_set(sv, val)              \
-+                STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
-+                (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END
-+#endif
-+
-+#else
-+#ifndef SvUV_set
-+#  define SvUV_set(sv, val)              \
-+                STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
-+                (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END
-+#endif
-+
-+#endif
-+
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf)
-+#if defined(NEED_vnewSVpvf)
-+static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
-+static
-+#else
-+extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
-+#endif
-+
-+#ifdef vnewSVpvf
-+#  undef vnewSVpvf
-+#endif
-+#define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b)
-+#define Perl_vnewSVpvf DPPP_(my_vnewSVpvf)
-+
-+#if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL)
-+
-+SV *
-+DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args)
-+{
-+  register SV *sv = newSV(0);
-+  sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
-+  return sv;
-+}
-+
-+#endif
-+#endif
-+
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf)
-+#  define sv_vcatpvf(sv, pat, args)  sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
-+#endif
-+
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf)
-+#  define sv_vsetpvf(sv, pat, args)  sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
-+#endif
-+
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg)
-+#if defined(NEED_sv_catpvf_mg)
-+static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
-+static
-+#else
-+extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
-+#endif
-+
-+#define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg)
-+
-+#if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL)
-+
-+void
-+DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
-+{
-+  va_list args;
-+  va_start(args, pat);
-+  sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
-+  SvSETMAGIC(sv);
-+  va_end(args);
-+}
-+
-+#endif
-+#endif
-+
-+#ifdef PERL_IMPLICIT_CONTEXT
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext)
-+#if defined(NEED_sv_catpvf_mg_nocontext)
-+static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
-+static
-+#else
-+extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
-+#endif
-+
-+#define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
-+#define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
-+
-+#if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL)
-+
-+void
-+DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
-+{
-+  dTHX;
-+  va_list args;
-+  va_start(args, pat);
-+  sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
-+  SvSETMAGIC(sv);
-+  va_end(args);
-+}
-+
-+#endif
-+#endif
-+#endif
-+
-+/* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */
-+#ifndef sv_catpvf_mg
-+#  ifdef PERL_IMPLICIT_CONTEXT
-+#    define sv_catpvf_mg   Perl_sv_catpvf_mg_nocontext
-+#  else
-+#    define sv_catpvf_mg   Perl_sv_catpvf_mg
-+#  endif
-+#endif
-+
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg)
-+#  define sv_vcatpvf_mg(sv, pat, args)                                     \
-+   STMT_START {                                                            \
-+     sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));  \
-+     SvSETMAGIC(sv);                                                       \
-+   } STMT_END
-+#endif
-+
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg)
-+#if defined(NEED_sv_setpvf_mg)
-+static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
-+static
-+#else
-+extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
-+#endif
-+
-+#define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg)
-+
-+#if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL)
-+
-+void
-+DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
-+{
-+  va_list args;
-+  va_start(args, pat);
-+  sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
-+  SvSETMAGIC(sv);
-+  va_end(args);
-+}
-+
-+#endif
-+#endif
-+
-+#ifdef PERL_IMPLICIT_CONTEXT
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext)
-+#if defined(NEED_sv_setpvf_mg_nocontext)
-+static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
-+static
-+#else
-+extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
-+#endif
-+
-+#define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
-+#define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
-+
-+#if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL)
-+
-+void
-+DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
-+{
-+  dTHX;
-+  va_list args;
-+  va_start(args, pat);
-+  sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
-+  SvSETMAGIC(sv);
-+  va_end(args);
-+}
-+
-+#endif
-+#endif
-+#endif
-+
-+/* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */
-+#ifndef sv_setpvf_mg
-+#  ifdef PERL_IMPLICIT_CONTEXT
-+#    define sv_setpvf_mg   Perl_sv_setpvf_mg_nocontext
-+#  else
-+#    define sv_setpvf_mg   Perl_sv_setpvf_mg
-+#  endif
-+#endif
-+
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg)
-+#  define sv_vsetpvf_mg(sv, pat, args)                                     \
-+   STMT_START {                                                            \
-+     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));  \
-+     SvSETMAGIC(sv);                                                       \
-+   } 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)
-+static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
-+static
-+#else
-+extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
-+#endif
-+
-+#ifdef newSVpvn_share
-+#  undef newSVpvn_share
-+#endif
-+#define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c)
-+#define Perl_newSVpvn_share DPPP_(my_newSVpvn_share)
-+
-+#if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL)
-+
-+SV *
-+DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash)
-+{
-+  SV *sv;
-+  if (len < 0)
-+    len = -len;
-+  if (!hash)
-+    PERL_HASH(hash, (char*) src, len);
-+  sv = newSVpvn((char *) src, len);
-+  sv_upgrade(sv, SVt_PVIV);
-+  SvIVX(sv) = hash;
-+  SvREADONLY_on(sv);
-+  SvPOK_on(sv);
-+  return sv;
-+}
-+
-+#endif
-+
-+#endif
-+#ifndef SvSHARED_HASH
-+#  define SvSHARED_HASH(sv)              (0 + SvUVX(sv))
-+#endif
-+#ifndef HvNAME_get
-+#  define HvNAME_get(hv)                 HvNAME(hv)
-+#endif
-+#ifndef HvNAMELEN_get
-+#  define HvNAMELEN_get(hv)              (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0)
-+#endif
-+#ifndef GvSVn
-+#  define GvSVn(gv)                      GvSV(gv)
-+#endif
-+
-+#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
-+
-+#ifndef WARN_CLOSURE
-+#  define WARN_CLOSURE                   1
-+#endif
-+
-+#ifndef WARN_DEPRECATED
-+#  define WARN_DEPRECATED                2
-+#endif
-+
-+#ifndef WARN_EXITING
-+#  define WARN_EXITING                   3
-+#endif
-+
-+#ifndef WARN_GLOB
-+#  define WARN_GLOB                      4
-+#endif
-+
-+#ifndef WARN_IO
-+#  define WARN_IO                        5
-+#endif
-+
-+#ifndef WARN_CLOSED
-+#  define WARN_CLOSED                    6
-+#endif
-+
-+#ifndef WARN_EXEC
-+#  define WARN_EXEC                      7
-+#endif
-+
-+#ifndef WARN_LAYER
-+#  define WARN_LAYER                     8
-+#endif
-+
-+#ifndef WARN_NEWLINE
-+#  define WARN_NEWLINE                   9
-+#endif
-+
-+#ifndef WARN_PIPE
-+#  define WARN_PIPE                      10
-+#endif
-+
-+#ifndef WARN_UNOPENED
-+#  define WARN_UNOPENED                  11
-+#endif
-+
-+#ifndef WARN_MISC
-+#  define WARN_MISC                      12
-+#endif
-+
-+#ifndef WARN_NUMERIC
-+#  define WARN_NUMERIC                   13
-+#endif
-+
-+#ifndef WARN_ONCE
-+#  define WARN_ONCE                      14
-+#endif
-+
-+#ifndef WARN_OVERFLOW
-+#  define WARN_OVERFLOW                  15
-+#endif
-+
-+#ifndef WARN_PACK
-+#  define WARN_PACK                      16
-+#endif
-+
-+#ifndef WARN_PORTABLE
-+#  define WARN_PORTABLE                  17
-+#endif
-+
-+#ifndef WARN_RECURSION
-+#  define WARN_RECURSION                 18
-+#endif
-+
-+#ifndef WARN_REDEFINE
-+#  define WARN_REDEFINE                  19
-+#endif
-+
-+#ifndef WARN_REGEXP
-+#  define WARN_REGEXP                    20
-+#endif
-+
-+#ifndef WARN_SEVERE
-+#  define WARN_SEVERE                    21
-+#endif
-+
-+#ifndef WARN_DEBUGGING
-+#  define WARN_DEBUGGING                 22
-+#endif
-+
-+#ifndef WARN_INPLACE
-+#  define WARN_INPLACE                   23
-+#endif
-+
-+#ifndef WARN_INTERNAL
-+#  define WARN_INTERNAL                  24
-+#endif
-+
-+#ifndef WARN_MALLOC
-+#  define WARN_MALLOC                    25
-+#endif
-+
-+#ifndef WARN_SIGNAL
-+#  define WARN_SIGNAL                    26
-+#endif
-+
-+#ifndef WARN_SUBSTR
-+#  define WARN_SUBSTR                    27
-+#endif
-+
-+#ifndef WARN_SYNTAX
-+#  define WARN_SYNTAX                    28
-+#endif
-+
-+#ifndef WARN_AMBIGUOUS
-+#  define WARN_AMBIGUOUS                 29
-+#endif
-+
-+#ifndef WARN_BAREWORD
-+#  define WARN_BAREWORD                  30
-+#endif
-+
-+#ifndef WARN_DIGIT
-+#  define WARN_DIGIT                     31
-+#endif
-+
-+#ifndef WARN_PARENTHESIS
-+#  define WARN_PARENTHESIS               32
-+#endif
-+
-+#ifndef WARN_PRECEDENCE
-+#  define WARN_PRECEDENCE                33
-+#endif
-+
-+#ifndef WARN_PRINTF
-+#  define WARN_PRINTF                    34
-+#endif
-+
-+#ifndef WARN_PROTOTYPE
-+#  define WARN_PROTOTYPE                 35
-+#endif
-+
-+#ifndef WARN_QW
-+#  define WARN_QW                        36
-+#endif
-+
-+#ifndef WARN_RESERVED
-+#  define WARN_RESERVED                  37
-+#endif
-+
-+#ifndef WARN_SEMICOLON
-+#  define WARN_SEMICOLON                 38
-+#endif
-+
-+#ifndef WARN_TAINT
-+#  define WARN_TAINT                     39
-+#endif
-+
-+#ifndef WARN_THREADS
-+#  define WARN_THREADS                   40
-+#endif
-+
-+#ifndef WARN_UNINITIALIZED
-+#  define WARN_UNINITIALIZED             41
-+#endif
-+
-+#ifndef WARN_UNPACK
-+#  define WARN_UNPACK                    42
-+#endif
-+
-+#ifndef WARN_UNTIE
-+#  define WARN_UNTIE                     43
-+#endif
-+
-+#ifndef WARN_UTF8
-+#  define WARN_UTF8                      44
-+#endif
-+
-+#ifndef WARN_VOID
-+#  define WARN_VOID                      45
-+#endif
-+
-+#ifndef WARN_ASSERTIONS
-+#  define WARN_ASSERTIONS                46
-+#endif
-+#ifndef packWARN
-+#  define packWARN(a)                    (a)
-+#endif
-+
-+#ifndef ckWARN
-+#  ifdef G_WARN_ON
-+#    define  ckWARN(a)                  (PL_dowarn & G_WARN_ON)
-+#  else
-+#    define  ckWARN(a)                  PL_dowarn
-+#  endif
-+#endif
-+
-+#if (PERL_BCDVERSION >= 0x5004000) && !defined(warner)
-+#if defined(NEED_warner)
-+static void DPPP_(my_warner)(U32 err, const char *pat, ...);
-+static
-+#else
-+extern void DPPP_(my_warner)(U32 err, const char *pat, ...);
-+#endif
-+
-+#define Perl_warner DPPP_(my_warner)
-+
-+#if defined(NEED_warner) || defined(NEED_warner_GLOBAL)
-+
-+void
-+DPPP_(my_warner)(U32 err, const char *pat, ...)
-+{
-+  SV *sv;
-+  va_list args;
-+
-+  PERL_UNUSED_ARG(err);
-+
-+  va_start(args, pat);
-+  sv = vnewSVpvf(pat, &args);
-+  va_end(args);
-+  sv_2mortal(sv);
-+  warn("%s", SvPV_nolen(sv));
-+}
-+
-+#define warner  Perl_warner
-+
-+#define Perl_warner_nocontext  Perl_warner
-+
-+#endif
-+#endif
-+
-+/* concatenating with "" ensures that only literal strings are accepted as argument
-+ * note that STR_WITH_LEN() can't be used as argument to macros or functions that
-+ * under some configurations might be macros
-+ */
-+#ifndef STR_WITH_LEN
-+#  define STR_WITH_LEN(s)                (s ""), (sizeof(s)-1)
-+#endif
-+#ifndef newSVpvs
-+#  define newSVpvs(str)                  newSVpvn(str "", sizeof(str) - 1)
-+#endif
-+
-+#ifndef newSVpvs_flags
-+#  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
-+
-+#ifndef sv_setpvs
-+#  define sv_setpvs(sv, str)             sv_setpvn(sv, str "", sizeof(str) - 1)
-+#endif
-+
-+#ifndef hv_fetchs
-+#  define hv_fetchs(hv, key, lval)       hv_fetch(hv, key "", sizeof(key) - 1, lval)
-+#endif
-+
-+#ifndef hv_stores
-+#  define hv_stores(hv, key, val)        hv_store(hv, key "", sizeof(key) - 1, val, 0)
-+#endif
-+#ifndef gv_fetchpvs
-+#  define gv_fetchpvs(name, flags, svt)  gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt)
-+#endif
-+
-+#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
-+#ifndef PERL_MAGIC_sv
-+#  define PERL_MAGIC_sv                  '\0'
-+#endif
-+
-+#ifndef PERL_MAGIC_overload
-+#  define PERL_MAGIC_overload            'A'
-+#endif
-+
-+#ifndef PERL_MAGIC_overload_elem
-+#  define PERL_MAGIC_overload_elem       'a'
-+#endif
-+
-+#ifndef PERL_MAGIC_overload_table
-+#  define PERL_MAGIC_overload_table      'c'
-+#endif
-+
-+#ifndef PERL_MAGIC_bm
-+#  define PERL_MAGIC_bm                  'B'
-+#endif
-+
-+#ifndef PERL_MAGIC_regdata
-+#  define PERL_MAGIC_regdata             'D'
-+#endif
-+
-+#ifndef PERL_MAGIC_regdatum
-+#  define PERL_MAGIC_regdatum            'd'
-+#endif
-+
-+#ifndef PERL_MAGIC_env
-+#  define PERL_MAGIC_env                 'E'
-+#endif
-+
-+#ifndef PERL_MAGIC_envelem
-+#  define PERL_MAGIC_envelem             'e'
-+#endif
-+
-+#ifndef PERL_MAGIC_fm
-+#  define PERL_MAGIC_fm                  'f'
-+#endif
-+
-+#ifndef PERL_MAGIC_regex_global
-+#  define PERL_MAGIC_regex_global        'g'
-+#endif
-+
-+#ifndef PERL_MAGIC_isa
-+#  define PERL_MAGIC_isa                 'I'
-+#endif
-+
-+#ifndef PERL_MAGIC_isaelem
-+#  define PERL_MAGIC_isaelem             'i'
-+#endif
-+
-+#ifndef PERL_MAGIC_nkeys
-+#  define PERL_MAGIC_nkeys               'k'
-+#endif
-+
-+#ifndef PERL_MAGIC_dbfile
-+#  define PERL_MAGIC_dbfile              'L'
-+#endif
-+
-+#ifndef PERL_MAGIC_dbline
-+#  define PERL_MAGIC_dbline              'l'
-+#endif
-+
-+#ifndef PERL_MAGIC_mutex
-+#  define PERL_MAGIC_mutex               'm'
-+#endif
-+
-+#ifndef PERL_MAGIC_shared
-+#  define PERL_MAGIC_shared              'N'
-+#endif
-+
-+#ifndef PERL_MAGIC_shared_scalar
-+#  define PERL_MAGIC_shared_scalar       'n'
-+#endif
-+
-+#ifndef PERL_MAGIC_collxfrm
-+#  define PERL_MAGIC_collxfrm            'o'
-+#endif
-+
-+#ifndef PERL_MAGIC_tied
-+#  define PERL_MAGIC_tied                'P'
-+#endif
-+
-+#ifndef PERL_MAGIC_tiedelem
-+#  define PERL_MAGIC_tiedelem            'p'
-+#endif
-+
-+#ifndef PERL_MAGIC_tiedscalar
-+#  define PERL_MAGIC_tiedscalar          'q'
-+#endif
-+
-+#ifndef PERL_MAGIC_qr
-+#  define PERL_MAGIC_qr                  'r'
-+#endif
-+
-+#ifndef PERL_MAGIC_sig
-+#  define PERL_MAGIC_sig                 'S'
-+#endif
-+
-+#ifndef PERL_MAGIC_sigelem
-+#  define PERL_MAGIC_sigelem             's'
-+#endif
-+
-+#ifndef PERL_MAGIC_taint
-+#  define PERL_MAGIC_taint               't'
-+#endif
-+
-+#ifndef PERL_MAGIC_uvar
-+#  define PERL_MAGIC_uvar                'U'
-+#endif
-+
-+#ifndef PERL_MAGIC_uvar_elem
-+#  define PERL_MAGIC_uvar_elem           'u'
-+#endif
-+
-+#ifndef PERL_MAGIC_vstring
-+#  define PERL_MAGIC_vstring             'V'
-+#endif
-+
-+#ifndef PERL_MAGIC_vec
-+#  define PERL_MAGIC_vec                 'v'
-+#endif
-+
-+#ifndef PERL_MAGIC_utf8
-+#  define PERL_MAGIC_utf8                'w'
-+#endif
-+
-+#ifndef PERL_MAGIC_substr
-+#  define PERL_MAGIC_substr              'x'
-+#endif
-+
-+#ifndef PERL_MAGIC_defelem
-+#  define PERL_MAGIC_defelem             'y'
-+#endif
-+
-+#ifndef PERL_MAGIC_glob
-+#  define PERL_MAGIC_glob                '*'
-+#endif
-+
-+#ifndef PERL_MAGIC_arylen
-+#  define PERL_MAGIC_arylen              '#'
-+#endif
-+
-+#ifndef PERL_MAGIC_pos
-+#  define PERL_MAGIC_pos                 '.'
-+#endif
-+
-+#ifndef PERL_MAGIC_backref
-+#  define PERL_MAGIC_backref             '<'
-+#endif
-+
-+#ifndef PERL_MAGIC_ext
-+#  define PERL_MAGIC_ext                 '~'
-+#endif
-+
-+/* That's the best we can do... */
-+#ifndef sv_catpvn_nomg
-+#  define sv_catpvn_nomg                 sv_catpvn
-+#endif
-+
-+#ifndef sv_catsv_nomg
-+#  define sv_catsv_nomg                  sv_catsv
-+#endif
-+
-+#ifndef sv_setsv_nomg
-+#  define sv_setsv_nomg                  sv_setsv
-+#endif
-+
-+#ifndef sv_pvn_nomg
-+#  define sv_pvn_nomg                    sv_pvn
-+#endif
-+
-+#ifndef SvIV_nomg
-+#  define SvIV_nomg                      SvIV
-+#endif
-+
-+#ifndef SvUV_nomg
-+#  define SvUV_nomg                      SvUV
-+#endif
-+
-+#ifndef sv_catpv_mg
-+#  define sv_catpv_mg(sv, ptr)          \
-+   STMT_START {                         \
-+     SV *TeMpSv = sv;                   \
-+     sv_catpv(TeMpSv,ptr);              \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+
-+#ifndef sv_catpvn_mg
-+#  define sv_catpvn_mg(sv, ptr, len)    \
-+   STMT_START {                         \
-+     SV *TeMpSv = sv;                   \
-+     sv_catpvn(TeMpSv,ptr,len);         \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+
-+#ifndef sv_catsv_mg
-+#  define sv_catsv_mg(dsv, ssv)         \
-+   STMT_START {                         \
-+     SV *TeMpSv = dsv;                  \
-+     sv_catsv(TeMpSv,ssv);              \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+
-+#ifndef sv_setiv_mg
-+#  define sv_setiv_mg(sv, i)            \
-+   STMT_START {                         \
-+     SV *TeMpSv = sv;                   \
-+     sv_setiv(TeMpSv,i);                \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+
-+#ifndef sv_setnv_mg
-+#  define sv_setnv_mg(sv, num)          \
-+   STMT_START {                         \
-+     SV *TeMpSv = sv;                   \
-+     sv_setnv(TeMpSv,num);              \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+
-+#ifndef sv_setpv_mg
-+#  define sv_setpv_mg(sv, ptr)          \
-+   STMT_START {                         \
-+     SV *TeMpSv = sv;                   \
-+     sv_setpv(TeMpSv,ptr);              \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+
-+#ifndef sv_setpvn_mg
-+#  define sv_setpvn_mg(sv, ptr, len)    \
-+   STMT_START {                         \
-+     SV *TeMpSv = sv;                   \
-+     sv_setpvn(TeMpSv,ptr,len);         \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+
-+#ifndef sv_setsv_mg
-+#  define sv_setsv_mg(dsv, ssv)         \
-+   STMT_START {                         \
-+     SV *TeMpSv = dsv;                  \
-+     sv_setsv(TeMpSv,ssv);              \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+
-+#ifndef sv_setuv_mg
-+#  define sv_setuv_mg(sv, i)            \
-+   STMT_START {                         \
-+     SV *TeMpSv = sv;                   \
-+     sv_setuv(TeMpSv,i);                \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+
-+#ifndef sv_usepvn_mg
-+#  define sv_usepvn_mg(sv, ptr, len)    \
-+   STMT_START {                         \
-+     SV *TeMpSv = sv;                   \
-+     sv_usepvn(TeMpSv,ptr,len);         \
-+     SvSETMAGIC(TeMpSv);                \
-+   } STMT_END
-+#endif
-+#ifndef SvVSTRING_mg
-+#  define SvVSTRING_mg(sv)               (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL)
-+#endif
-+
-+/* Hint: sv_magic_portable
-+ * This is a compatibility function that is only available with
-+ * Devel::PPPort. It is NOT in the perl core.
-+ * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when
-+ * it is being passed a name pointer with namlen == 0. In that
-+ * case, perl 5.8.0 and later store the pointer, not a copy of it.
-+ * The compatibility can be provided back to perl 5.004. With
-+ * earlier versions, the code will not compile.
-+ */
-+
-+#if (PERL_BCDVERSION < 0x5004000)
-+
-+  /* code that uses sv_magic_portable will not compile */
-+
-+#elif (PERL_BCDVERSION < 0x5008000)
-+
-+#  define sv_magic_portable(sv, obj, how, name, namlen)     \
-+   STMT_START {                                             \
-+     SV *SvMp_sv = (sv);                                    \
-+     char *SvMp_name = (char *) (name);                     \
-+     I32 SvMp_namlen = (namlen);                            \
-+     if (SvMp_name && SvMp_namlen == 0)                     \
-+     {                                                      \
-+       MAGIC *mg;                                           \
-+       sv_magic(SvMp_sv, obj, how, 0, 0);                   \
-+       mg = SvMAGIC(SvMp_sv);                               \
-+       mg->mg_len = -42; /* XXX: this is the tricky part */ \
-+       mg->mg_ptr = SvMp_name;                              \
-+     }                                                      \
-+     else                                                   \
-+     {                                                      \
-+       sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \
-+     }                                                      \
-+   } STMT_END
-+
-+#else
-+
-+#  define sv_magic_portable(a, b, c, d, e)  sv_magic(a, b, c, d, e)
-+
-+#endif
-+
-+#ifdef USE_ITHREADS
-+#ifndef CopFILE
-+#  define CopFILE(c)                     ((c)->cop_file)
-+#endif
-+
-+#ifndef CopFILEGV
-+#  define CopFILEGV(c)                   (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv)
-+#endif
-+
-+#ifndef CopFILE_set
-+#  define CopFILE_set(c,pv)              ((c)->cop_file = savepv(pv))
-+#endif
-+
-+#ifndef CopFILESV
-+#  define CopFILESV(c)                   (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv)
-+#endif
-+
-+#ifndef CopFILEAV
-+#  define CopFILEAV(c)                   (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav)
-+#endif
-+
-+#ifndef CopSTASHPV
-+#  define CopSTASHPV(c)                  ((c)->cop_stashpv)
-+#endif
-+
-+#ifndef CopSTASHPV_set
-+#  define CopSTASHPV_set(c,pv)           ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch))
-+#endif
-+
-+#ifndef CopSTASH
-+#  define CopSTASH(c)                    (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv)
-+#endif
-+
-+#ifndef CopSTASH_set
-+#  define CopSTASH_set(c,hv)             CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch)
-+#endif
-+
-+#ifndef CopSTASH_eq
-+#  define CopSTASH_eq(c,hv)              ((hv) && (CopSTASHPV(c) == HvNAME(hv) \
-+                                        || (CopSTASHPV(c) && HvNAME(hv) \
-+                                        && strEQ(CopSTASHPV(c), HvNAME(hv)))))
-+#endif
-+
-+#else
-+#ifndef CopFILEGV
-+#  define CopFILEGV(c)                   ((c)->cop_filegv)
-+#endif
-+
-+#ifndef CopFILEGV_set
-+#  define CopFILEGV_set(c,gv)            ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
-+#endif
-+
-+#ifndef CopFILE_set
-+#  define CopFILE_set(c,pv)              CopFILEGV_set((c), gv_fetchfile(pv))
-+#endif
-+
-+#ifndef CopFILESV
-+#  define CopFILESV(c)                   (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv)
-+#endif
-+
-+#ifndef CopFILEAV
-+#  define CopFILEAV(c)                   (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav)
-+#endif
-+
-+#ifndef CopFILE
-+#  define CopFILE(c)                     (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch)
-+#endif
-+
-+#ifndef CopSTASH
-+#  define CopSTASH(c)                    ((c)->cop_stash)
-+#endif
-+
-+#ifndef CopSTASH_set
-+#  define CopSTASH_set(c,hv)             ((c)->cop_stash = (hv))
-+#endif
-+
-+#ifndef CopSTASHPV
-+#  define CopSTASHPV(c)                  (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch)
-+#endif
-+
-+#ifndef CopSTASHPV_set
-+#  define CopSTASHPV_set(c,pv)           CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
-+#endif
-+
-+#ifndef CopSTASH_eq
-+#  define CopSTASH_eq(c,hv)              (CopSTASH(c) == (hv))
-+#endif
-+
-+#endif /* USE_ITHREADS */
-+#ifndef IN_PERL_COMPILETIME
-+#  define IN_PERL_COMPILETIME            (PL_curcop == &PL_compiling)
-+#endif
-+
-+#ifndef IN_LOCALE_RUNTIME
-+#  define IN_LOCALE_RUNTIME              (PL_curcop->op_private & HINT_LOCALE)
-+#endif
-+
-+#ifndef IN_LOCALE_COMPILETIME
-+#  define IN_LOCALE_COMPILETIME          (PL_hints & HINT_LOCALE)
-+#endif
-+
-+#ifndef IN_LOCALE
-+#  define IN_LOCALE                      (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
-+#endif
-+#ifndef IS_NUMBER_IN_UV
-+#  define IS_NUMBER_IN_UV                0x01
-+#endif
-+
-+#ifndef IS_NUMBER_GREATER_THAN_UV_MAX
-+#  define IS_NUMBER_GREATER_THAN_UV_MAX  0x02
-+#endif
-+
-+#ifndef IS_NUMBER_NOT_INT
-+#  define IS_NUMBER_NOT_INT              0x04
-+#endif
-+
-+#ifndef IS_NUMBER_NEG
-+#  define IS_NUMBER_NEG                  0x08
-+#endif
-+
-+#ifndef IS_NUMBER_INFINITY
-+#  define IS_NUMBER_INFINITY             0x10
-+#endif
-+
-+#ifndef IS_NUMBER_NAN
-+#  define IS_NUMBER_NAN                  0x20
-+#endif
-+#ifndef GROK_NUMERIC_RADIX
-+#  define GROK_NUMERIC_RADIX(sp, send)   grok_numeric_radix(sp, send)
-+#endif
-+#ifndef PERL_SCAN_GREATER_THAN_UV_MAX
-+#  define PERL_SCAN_GREATER_THAN_UV_MAX  0x02
-+#endif
-+
-+#ifndef PERL_SCAN_SILENT_ILLDIGIT
-+#  define PERL_SCAN_SILENT_ILLDIGIT      0x04
-+#endif
-+
-+#ifndef PERL_SCAN_ALLOW_UNDERSCORES
-+#  define PERL_SCAN_ALLOW_UNDERSCORES    0x01
-+#endif
-+
-+#ifndef PERL_SCAN_DISALLOW_PREFIX
-+#  define PERL_SCAN_DISALLOW_PREFIX      0x02
-+#endif
-+
-+#ifndef grok_numeric_radix
-+#if defined(NEED_grok_numeric_radix)
-+static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
-+static
-+#else
-+extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
-+#endif
-+
-+#ifdef grok_numeric_radix
-+#  undef grok_numeric_radix
-+#endif
-+#define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b)
-+#define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix)
-+
-+#if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL)
-+bool
-+DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
-+{
-+#ifdef USE_LOCALE_NUMERIC
-+#ifdef PL_numeric_radix_sv
-+    if (PL_numeric_radix_sv && IN_LOCALE) {
-+        STRLEN len;
-+        char* radix = SvPV(PL_numeric_radix_sv, len);
-+        if (*sp + len <= send && memEQ(*sp, radix, len)) {
-+            *sp += len;
-+            return TRUE;
-+        }
-+    }
-+#else
-+    /* older perls don't have PL_numeric_radix_sv so the radix
-+     * must manually be requested from locale.h
-+     */
-+#include <locale.h>
-+    dTHR;  /* needed for older threaded perls */
-+    struct lconv *lc = localeconv();
-+    char *radix = lc->decimal_point;
-+    if (radix && IN_LOCALE) {
-+        STRLEN len = strlen(radix);
-+        if (*sp + len <= send && memEQ(*sp, radix, len)) {
-+            *sp += len;
-+            return TRUE;
-+        }
-+    }
-+#endif
-+#endif /* USE_LOCALE_NUMERIC */
-+    /* always try "." if numeric radix didn't match because
-+     * we may have data from different locales mixed */
-+    if (*sp < send && **sp == '.') {
-+        ++*sp;
-+        return TRUE;
-+    }
-+    return FALSE;
-+}
-+#endif
-+#endif
-+
-+#ifndef grok_number
-+#if defined(NEED_grok_number)
-+static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
-+static
-+#else
-+extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
-+#endif
-+
-+#ifdef grok_number
-+#  undef grok_number
-+#endif
-+#define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c)
-+#define Perl_grok_number DPPP_(my_grok_number)
-+
-+#if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL)
-+int
-+DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
-+{
-+  const char *s = pv;
-+  const char *send = pv + len;
-+  const UV max_div_10 = UV_MAX / 10;
-+  const char max_mod_10 = UV_MAX % 10;
-+  int numtype = 0;
-+  int sawinf = 0;
-+  int sawnan = 0;
-+
-+  while (s < send && isSPACE(*s))
-+    s++;
-+  if (s == send) {
-+    return 0;
-+  } else if (*s == '-') {
-+    s++;
-+    numtype = IS_NUMBER_NEG;
-+  }
-+  else if (*s == '+')
-+  s++;
-+
-+  if (s == send)
-+    return 0;
-+
-+  /* next must be digit or the radix separator or beginning of infinity */
-+  if (isDIGIT(*s)) {
-+    /* UVs are at least 32 bits, so the first 9 decimal digits cannot
-+       overflow.  */
-+    UV value = *s - '0';
-+    /* This construction seems to be more optimiser friendly.
-+       (without it gcc does the isDIGIT test and the *s - '0' separately)
-+       With it gcc on arm is managing 6 instructions (6 cycles) per digit.
-+       In theory the optimiser could deduce how far to unroll the loop
-+       before checking for overflow.  */
-+    if (++s < send) {
-+      int digit = *s - '0';
-+      if (digit >= 0 && digit <= 9) {
-+        value = value * 10 + digit;
-+        if (++s < send) {
-+          digit = *s - '0';
-+          if (digit >= 0 && digit <= 9) {
-+            value = value * 10 + digit;
-+            if (++s < send) {
-+              digit = *s - '0';
-+              if (digit >= 0 && digit <= 9) {
-+                value = value * 10 + digit;
-+                if (++s < send) {
-+                  digit = *s - '0';
-+                  if (digit >= 0 && digit <= 9) {
-+                    value = value * 10 + digit;
-+                    if (++s < send) {
-+                      digit = *s - '0';
-+                      if (digit >= 0 && digit <= 9) {
-+                        value = value * 10 + digit;
-+                        if (++s < send) {
-+                          digit = *s - '0';
-+                          if (digit >= 0 && digit <= 9) {
-+                            value = value * 10 + digit;
-+                            if (++s < send) {
-+                              digit = *s - '0';
-+                              if (digit >= 0 && digit <= 9) {
-+                                value = value * 10 + digit;
-+                                if (++s < send) {
-+                                  digit = *s - '0';
-+                                  if (digit >= 0 && digit <= 9) {
-+                                    value = value * 10 + digit;
-+                                    if (++s < send) {
-+                                      /* Now got 9 digits, so need to check
-+                                         each time for overflow.  */
-+                                      digit = *s - '0';
-+                                      while (digit >= 0 && digit <= 9
-+                                             && (value < max_div_10
-+                                                 || (value == max_div_10
-+                                                     && digit <= max_mod_10))) {
-+                                        value = value * 10 + digit;
-+                                        if (++s < send)
-+                                          digit = *s - '0';
-+                                        else
-+                                          break;
-+                                      }
-+                                      if (digit >= 0 && digit <= 9
-+                                          && (s < send)) {
-+                                        /* value overflowed.
-+                                           skip the remaining digits, don't
-+                                           worry about setting *valuep.  */
-+                                        do {
-+                                          s++;
-+                                        } while (s < send && isDIGIT(*s));
-+                                        numtype |=
-+                                          IS_NUMBER_GREATER_THAN_UV_MAX;
-+                                        goto skip_value;
-+                                      }
-+                                    }
-+                                  }
-+                                }
-+                              }
-+                            }
-+                          }
-+                        }
-+                      }
-+                    }
-+                  }
-+                }
-+              }
-+            }
-+          }
-+        }
-+      }
-+    }
-+    numtype |= IS_NUMBER_IN_UV;
-+    if (valuep)
-+      *valuep = value;
-+
-+  skip_value:
-+    if (GROK_NUMERIC_RADIX(&s, send)) {
-+      numtype |= IS_NUMBER_NOT_INT;
-+      while (s < send && isDIGIT(*s))  /* optional digits after the radix */
-+        s++;
-+    }
-+  }
-+  else if (GROK_NUMERIC_RADIX(&s, send)) {
-+    numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */
-+    /* no digits before the radix means we need digits after it */
-+    if (s < send && isDIGIT(*s)) {
-+      do {
-+        s++;
-+      } while (s < send && isDIGIT(*s));
-+      if (valuep) {
-+        /* integer approximation is valid - it's 0.  */
-+        *valuep = 0;
-+      }
-+    }
-+    else
-+      return 0;
-+  } else if (*s == 'I' || *s == 'i') {
-+    s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
-+    s++; if (s == send || (*s != 'F' && *s != 'f')) return 0;
-+    s++; if (s < send && (*s == 'I' || *s == 'i')) {
-+      s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
-+      s++; if (s == send || (*s != 'I' && *s != 'i')) return 0;
-+      s++; if (s == send || (*s != 'T' && *s != 't')) return 0;
-+      s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0;
-+      s++;
-+    }
-+    sawinf = 1;
-+  } else if (*s == 'N' || *s == 'n') {
-+    /* XXX TODO: There are signaling NaNs and quiet NaNs. */
-+    s++; if (s == send || (*s != 'A' && *s != 'a')) return 0;
-+    s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
-+    s++;
-+    sawnan = 1;
-+  } else
-+    return 0;
-+
-+  if (sawinf) {
-+    numtype &= IS_NUMBER_NEG; /* Keep track of sign  */
-+    numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
-+  } else if (sawnan) {
-+    numtype &= IS_NUMBER_NEG; /* Keep track of sign  */
-+    numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;
-+  } else if (s < send) {
-+    /* we can have an optional exponent part */
-+    if (*s == 'e' || *s == 'E') {
-+      /* The only flag we keep is sign.  Blow away any "it's UV"  */
-+      numtype &= IS_NUMBER_NEG;
-+      numtype |= IS_NUMBER_NOT_INT;
-+      s++;
-+      if (s < send && (*s == '-' || *s == '+'))
-+        s++;
-+      if (s < send && isDIGIT(*s)) {
-+        do {
-+          s++;
-+        } while (s < send && isDIGIT(*s));
-+      }
-+      else
-+      return 0;
-+    }
-+  }
-+  while (s < send && isSPACE(*s))
-+    s++;
-+  if (s >= send)
-+    return numtype;
-+  if (len == 10 && memEQ(pv, "0 but true", 10)) {
-+    if (valuep)
-+      *valuep = 0;
-+    return IS_NUMBER_IN_UV;
-+  }
-+  return 0;
-+}
-+#endif
-+#endif
-+
-+/*
-+ * The grok_* routines have been modified to use warn() instead of
-+ * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit,
-+ * which is why the stack variable has been renamed to 'xdigit'.
-+ */
-+
-+#ifndef grok_bin
-+#if defined(NEED_grok_bin)
-+static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
-+static
-+#else
-+extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
-+#endif
-+
-+#ifdef grok_bin
-+#  undef grok_bin
-+#endif
-+#define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d)
-+#define Perl_grok_bin DPPP_(my_grok_bin)
-+
-+#if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL)
-+UV
-+DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
-+{
-+    const char *s = start;
-+    STRLEN len = *len_p;
-+    UV value = 0;
-+    NV value_nv = 0;
-+
-+    const UV max_div_2 = UV_MAX / 2;
-+    bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
-+    bool overflowed = FALSE;
-+
-+    if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
-+        /* strip off leading b or 0b.
-+           for compatibility silently suffer "b" and "0b" as valid binary
-+           numbers. */
-+        if (len >= 1) {
-+            if (s[0] == 'b') {
-+                s++;
-+                len--;
-+            }
-+            else if (len >= 2 && s[0] == '0' && s[1] == 'b') {
-+                s+=2;
-+                len-=2;
-+            }
-+        }
-+    }
-+
-+    for (; len-- && *s; s++) {
-+        char bit = *s;
-+        if (bit == '0' || bit == '1') {
-+            /* Write it in this wonky order with a goto to attempt to get the
-+               compiler to make the common case integer-only loop pretty tight.
-+               With gcc seems to be much straighter code than old scan_bin.  */
-+          redo:
-+            if (!overflowed) {
-+                if (value <= max_div_2) {
-+                    value = (value << 1) | (bit - '0');
-+                    continue;
-+                }
-+                /* Bah. We're just overflowed.  */
-+                warn("Integer overflow in binary number");
-+                overflowed = TRUE;
-+                value_nv = (NV) value;
-+            }
-+            value_nv *= 2.0;
-+            /* If an NV has not enough bits in its mantissa to
-+             * represent a UV this summing of small low-order numbers
-+             * is a waste of time (because the NV cannot preserve
-+             * the low-order bits anyway): we could just remember when
-+             * did we overflow and in the end just multiply value_nv by the
-+             * right amount. */
-+            value_nv += (NV)(bit - '0');
-+            continue;
-+        }
-+        if (bit == '_' && len && allow_underscores && (bit = s[1])
-+            && (bit == '0' || bit == '1'))
-+            {
-+                --len;
-+                ++s;
-+                goto redo;
-+            }
-+        if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
-+            warn("Illegal binary digit '%c' ignored", *s);
-+        break;
-+    }
-+
-+    if (   ( overflowed && value_nv > 4294967295.0)
-+#if UVSIZE > 4
-+        || (!overflowed && value > 0xffffffff  )
-+#endif
-+        ) {
-+        warn("Binary number > 0b11111111111111111111111111111111 non-portable");
-+    }
-+    *len_p = s - start;
-+    if (!overflowed) {
-+        *flags = 0;
-+        return value;
-+    }
-+    *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
-+    if (result)
-+        *result = value_nv;
-+    return UV_MAX;
-+}
-+#endif
-+#endif
-+
-+#ifndef grok_hex
-+#if defined(NEED_grok_hex)
-+static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
-+static
-+#else
-+extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
-+#endif
-+
-+#ifdef grok_hex
-+#  undef grok_hex
-+#endif
-+#define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d)
-+#define Perl_grok_hex DPPP_(my_grok_hex)
-+
-+#if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL)
-+UV
-+DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
-+{
-+    const char *s = start;
-+    STRLEN len = *len_p;
-+    UV value = 0;
-+    NV value_nv = 0;
-+
-+    const UV max_div_16 = UV_MAX / 16;
-+    bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
-+    bool overflowed = FALSE;
-+    const char *xdigit;
-+
-+    if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
-+        /* strip off leading x or 0x.
-+           for compatibility silently suffer "x" and "0x" as valid hex numbers.
-+        */
-+        if (len >= 1) {
-+            if (s[0] == 'x') {
-+                s++;
-+                len--;
-+            }
-+            else if (len >= 2 && s[0] == '0' && s[1] == 'x') {
-+                s+=2;
-+                len-=2;
-+            }
-+        }
-+    }
-+
-+    for (; len-- && *s; s++) {
-+        xdigit = strchr((char *) PL_hexdigit, *s);
-+        if (xdigit) {
-+            /* Write it in this wonky order with a goto to attempt to get the
-+               compiler to make the common case integer-only loop pretty tight.
-+               With gcc seems to be much straighter code than old scan_hex.  */
-+          redo:
-+            if (!overflowed) {
-+                if (value <= max_div_16) {
-+                    value = (value << 4) | ((xdigit - PL_hexdigit) & 15);
-+                    continue;
-+                }
-+                warn("Integer overflow in hexadecimal number");
-+                overflowed = TRUE;
-+                value_nv = (NV) value;
-+            }
-+            value_nv *= 16.0;
-+            /* If an NV has not enough bits in its mantissa to
-+             * represent a UV this summing of small low-order numbers
-+             * is a waste of time (because the NV cannot preserve
-+             * the low-order bits anyway): we could just remember when
-+             * did we overflow and in the end just multiply value_nv by the
-+             * right amount of 16-tuples. */
-+            value_nv += (NV)((xdigit - PL_hexdigit) & 15);
-+            continue;
-+        }
-+        if (*s == '_' && len && allow_underscores && s[1]
-+                && (xdigit = strchr((char *) PL_hexdigit, s[1])))
-+            {
-+                --len;
-+                ++s;
-+                goto redo;
-+            }
-+        if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
-+            warn("Illegal hexadecimal digit '%c' ignored", *s);
-+        break;
-+    }
-+
-+    if (   ( overflowed && value_nv > 4294967295.0)
-+#if UVSIZE > 4
-+        || (!overflowed && value > 0xffffffff  )
-+#endif
-+        ) {
-+        warn("Hexadecimal number > 0xffffffff non-portable");
-+    }
-+    *len_p = s - start;
-+    if (!overflowed) {
-+        *flags = 0;
-+        return value;
-+    }
-+    *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
-+    if (result)
-+        *result = value_nv;
-+    return UV_MAX;
-+}
-+#endif
-+#endif
-+
-+#ifndef grok_oct
-+#if defined(NEED_grok_oct)
-+static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
-+static
-+#else
-+extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
-+#endif
-+
-+#ifdef grok_oct
-+#  undef grok_oct
-+#endif
-+#define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d)
-+#define Perl_grok_oct DPPP_(my_grok_oct)
-+
-+#if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL)
-+UV
-+DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
-+{
-+    const char *s = start;
-+    STRLEN len = *len_p;
-+    UV value = 0;
-+    NV value_nv = 0;
-+
-+    const UV max_div_8 = UV_MAX / 8;
-+    bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
-+    bool overflowed = FALSE;
-+
-+    for (; len-- && *s; s++) {
-+         /* gcc 2.95 optimiser not smart enough to figure that this subtraction
-+            out front allows slicker code.  */
-+        int digit = *s - '0';
-+        if (digit >= 0 && digit <= 7) {
-+            /* Write it in this wonky order with a goto to attempt to get the
-+               compiler to make the common case integer-only loop pretty tight.
-+            */
-+          redo:
-+            if (!overflowed) {
-+                if (value <= max_div_8) {
-+                    value = (value << 3) | digit;
-+                    continue;
-+                }
-+                /* Bah. We're just overflowed.  */
-+                warn("Integer overflow in octal number");
-+                overflowed = TRUE;
-+                value_nv = (NV) value;
-+            }
-+            value_nv *= 8.0;
-+            /* If an NV has not enough bits in its mantissa to
-+             * represent a UV this summing of small low-order numbers
-+             * is a waste of time (because the NV cannot preserve
-+             * the low-order bits anyway): we could just remember when
-+             * did we overflow and in the end just multiply value_nv by the
-+             * right amount of 8-tuples. */
-+            value_nv += (NV)digit;
-+            continue;
-+        }
-+        if (digit == ('_' - '0') && len && allow_underscores
-+            && (digit = s[1] - '0') && (digit >= 0 && digit <= 7))
-+            {
-+                --len;
-+                ++s;
-+                goto redo;
-+            }
-+        /* Allow \octal to work the DWIM way (that is, stop scanning
-+         * as soon as non-octal characters are seen, complain only iff
-+         * someone seems to want to use the digits eight and nine). */
-+        if (digit == 8 || digit == 9) {
-+            if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
-+                warn("Illegal octal digit '%c' ignored", *s);
-+        }
-+        break;
-+    }
-+
-+    if (   ( overflowed && value_nv > 4294967295.0)
-+#if UVSIZE > 4
-+        || (!overflowed && value > 0xffffffff  )
-+#endif
-+        ) {
-+        warn("Octal number > 037777777777 non-portable");
-+    }
-+    *len_p = s - start;
-+    if (!overflowed) {
-+        *flags = 0;
-+        return value;
-+    }
-+    *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
-+    if (result)
-+        *result = value_nv;
-+    return UV_MAX;
-+}
-+#endif
-+#endif
-+
-+#if !defined(my_snprintf)
-+#if defined(NEED_my_snprintf)
-+static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
-+static
-+#else
-+extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
-+#endif
-+
-+#define my_snprintf DPPP_(my_my_snprintf)
-+#define Perl_my_snprintf DPPP_(my_my_snprintf)
-+
-+#if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL)
-+
-+int
-+DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...)
-+{
-+    dTHX;
-+    int retval;
-+    va_list ap;
-+    va_start(ap, format);
-+#ifdef HAS_VSNPRINTF
-+    retval = vsnprintf(buffer, len, format, ap);
-+#else
-+    retval = vsprintf(buffer, format, ap);
-+#endif
-+    va_end(ap);
-+    if (retval < 0 || (len > 0 && (Size_t)retval >= len))
-+        Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
-+    return retval;
-+}
-+
-+#endif
-+#endif
-+
-+#if !defined(my_sprintf)
-+#if defined(NEED_my_sprintf)
-+static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
-+static
-+#else
-+extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
-+#endif
-+
-+#define my_sprintf DPPP_(my_my_sprintf)
-+#define Perl_my_sprintf DPPP_(my_my_sprintf)
-+
-+#if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL)
-+
-+int
-+DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...)
-+{
-+    va_list args;
-+    va_start(args, pat);
-+    vsprintf(buffer, pat, args);
-+    va_end(args);
-+    return strlen(buffer);
-+}
-+
-+#endif
-+#endif
-+
-+#ifdef NO_XSLOCKS
-+#  ifdef dJMPENV
-+#    define dXCPT             dJMPENV; int rEtV = 0
-+#    define XCPT_TRY_START    JMPENV_PUSH(rEtV); if (rEtV == 0)
-+#    define XCPT_TRY_END      JMPENV_POP;
-+#    define XCPT_CATCH        if (rEtV != 0)
-+#    define XCPT_RETHROW      JMPENV_JUMP(rEtV)
-+#  else
-+#    define dXCPT             Sigjmp_buf oldTOP; int rEtV = 0
-+#    define XCPT_TRY_START    Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
-+#    define XCPT_TRY_END      Copy(oldTOP, top_env, 1, Sigjmp_buf);
-+#    define XCPT_CATCH        if (rEtV != 0)
-+#    define XCPT_RETHROW      Siglongjmp(top_env, rEtV)
-+#  endif
-+#endif
-+
-+#if !defined(my_strlcat)
-+#if defined(NEED_my_strlcat)
-+static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
-+static
-+#else
-+extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
-+#endif
-+
-+#define my_strlcat DPPP_(my_my_strlcat)
-+#define Perl_my_strlcat DPPP_(my_my_strlcat)
-+
-+#if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL)
-+
-+Size_t
-+DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size)
-+{
-+    Size_t used, length, copy;
-+
-+    used = strlen(dst);
-+    length = strlen(src);
-+    if (size > 0 && used < size - 1) {
-+        copy = (length >= size - used) ? size - used - 1 : length;
-+        memcpy(dst + used, src, copy);
-+        dst[used + copy] = '\0';
-+    }
-+    return used + length;
-+}
-+#endif
-+#endif
-+
-+#if !defined(my_strlcpy)
-+#if defined(NEED_my_strlcpy)
-+static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
-+static
-+#else
-+extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
-+#endif
-+
-+#define my_strlcpy DPPP_(my_my_strlcpy)
-+#define Perl_my_strlcpy DPPP_(my_my_strlcpy)
-+
-+#if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL)
-+
-+Size_t
-+DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size)
-+{
-+    Size_t length, copy;
-+
-+    length = strlen(src);
-+    if (size > 0) {
-+        copy = (length >= size) ? size - 1 : length;
-+        memcpy(dst, src, copy);
-+        dst[copy] = '\0';
-+    }
-+    return length;
-+}
-+
-+#endif
-+#endif
-+#ifndef PERL_PV_ESCAPE_QUOTE
-+#  define PERL_PV_ESCAPE_QUOTE           0x0001
-+#endif
-+
-+#ifndef PERL_PV_PRETTY_QUOTE
-+#  define PERL_PV_PRETTY_QUOTE           PERL_PV_ESCAPE_QUOTE
-+#endif
-+
-+#ifndef PERL_PV_PRETTY_ELLIPSES
-+#  define PERL_PV_PRETTY_ELLIPSES        0x0002
-+#endif
-+
-+#ifndef PERL_PV_PRETTY_LTGT
-+#  define PERL_PV_PRETTY_LTGT            0x0004
-+#endif
-+
-+#ifndef PERL_PV_ESCAPE_FIRSTCHAR
-+#  define PERL_PV_ESCAPE_FIRSTCHAR       0x0008
-+#endif
-+
-+#ifndef PERL_PV_ESCAPE_UNI
-+#  define PERL_PV_ESCAPE_UNI             0x0100
-+#endif
-+
-+#ifndef PERL_PV_ESCAPE_UNI_DETECT
-+#  define PERL_PV_ESCAPE_UNI_DETECT      0x0200
-+#endif
-+
-+#ifndef PERL_PV_ESCAPE_ALL
-+#  define PERL_PV_ESCAPE_ALL             0x1000
-+#endif
-+
-+#ifndef PERL_PV_ESCAPE_NOBACKSLASH
-+#  define PERL_PV_ESCAPE_NOBACKSLASH     0x2000
-+#endif
-+
-+#ifndef PERL_PV_ESCAPE_NOCLEAR
-+#  define PERL_PV_ESCAPE_NOCLEAR         0x4000
-+#endif
-+
-+#ifndef PERL_PV_ESCAPE_RE
-+#  define PERL_PV_ESCAPE_RE              0x8000
-+#endif
-+
-+#ifndef PERL_PV_PRETTY_NOCLEAR
-+#  define PERL_PV_PRETTY_NOCLEAR         PERL_PV_ESCAPE_NOCLEAR
-+#endif
-+#ifndef PERL_PV_PRETTY_DUMP
-+#  define PERL_PV_PRETTY_DUMP            PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE
-+#endif
-+
-+#ifndef PERL_PV_PRETTY_REGPROP
-+#  define PERL_PV_PRETTY_REGPROP         PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE
-+#endif
-+
-+/* Hint: pv_escape
-+ * Note that unicode functionality is only backported to
-+ * those perl versions that support it. For older perl
-+ * versions, the implementation will fall back to bytes.
-+ */
-+
-+#ifndef pv_escape
-+#if defined(NEED_pv_escape)
-+static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags);
-+static
-+#else
-+extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags);
-+#endif
-+
-+#ifdef pv_escape
-+#  undef pv_escape
-+#endif
-+#define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f)
-+#define Perl_pv_escape DPPP_(my_pv_escape)
-+
-+#if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL)
-+
-+char *
-+DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str,
-+  const STRLEN count, const STRLEN max,
-+  STRLEN * const escaped, const U32 flags)
-+{
-+    const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\';
-+    const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc;
-+    char octbuf[32] = "%123456789ABCDF";
-+    STRLEN wrote = 0;
-+    STRLEN chsize = 0;
-+    STRLEN readsize = 1;
-+#if defined(is_utf8_string) && defined(utf8_to_uvchr)
-+    bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0;
-+#endif
-+    const char *pv  = str;
-+    const char * const end = pv + count;
-+    octbuf[0] = esc;
-+
-+    if (!(flags & PERL_PV_ESCAPE_NOCLEAR))
-+        sv_setpvs(dsv, "");
-+
-+#if defined(is_utf8_string) && defined(utf8_to_uvchr)
-+    if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count))
-+        isuni = 1;
-+#endif
-+
-+    for (; pv < end && (!max || wrote < max) ; pv += readsize) {
-+        const UV u =
-+#if defined(is_utf8_string) && defined(utf8_to_uvchr)
-+                     isuni ? utf8_to_uvchr((U8*)pv, &readsize) :
-+#endif
-+                             (U8)*pv;
-+        const U8 c = (U8)u & 0xFF;
-+
-+        if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) {
-+            if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
-+                chsize = my_snprintf(octbuf, sizeof octbuf,
-+                                      "%"UVxf, u);
-+            else
-+                chsize = my_snprintf(octbuf, sizeof octbuf,
-+                                      "%cx{%"UVxf"}", esc, u);
-+        } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) {
-+            chsize = 1;
-+        } else {
-+            if (c == dq || c == esc || !isPRINT(c)) {
-+                chsize = 2;
-+                switch (c) {
-+                case '\\' : /* fallthrough */
-+                case '%'  : if (c == esc)
-+                                octbuf[1] = esc;
-+                            else
-+                                chsize = 1;
-+                            break;
-+                case '\v' : octbuf[1] = 'v'; break;
-+                case '\t' : octbuf[1] = 't'; break;
-+                case '\r' : octbuf[1] = 'r'; break;
-+                case '\n' : octbuf[1] = 'n'; break;
-+                case '\f' : octbuf[1] = 'f'; break;
-+                case '"'  : if (dq == '"')
-+                                octbuf[1] = '"';
-+                            else
-+                                chsize = 1;
-+                            break;
-+                default:    chsize = my_snprintf(octbuf, sizeof octbuf,
-+                                pv < end && isDIGIT((U8)*(pv+readsize))
-+                                ? "%c%03o" : "%c%o", esc, c);
-+                }
-+            } else {
-+                chsize = 1;
-+            }
-+        }
-+        if (max && wrote + chsize > max) {
-+            break;
-+        } else if (chsize > 1) {
-+            sv_catpvn(dsv, octbuf, chsize);
-+            wrote += chsize;
-+        } else {
-+            char tmp[2];
-+            my_snprintf(tmp, sizeof tmp, "%c", c);
-+            sv_catpvn(dsv, tmp, 1);
-+            wrote++;
-+        }
-+        if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
-+            break;
-+    }
-+    if (escaped != NULL)
-+        *escaped= pv - str;
-+    return SvPVX(dsv);
-+}
-+
-+#endif
-+#endif
-+
-+#ifndef pv_pretty
-+#if defined(NEED_pv_pretty)
-+static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags);
-+static
-+#else
-+extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags);
-+#endif
-+
-+#ifdef pv_pretty
-+#  undef pv_pretty
-+#endif
-+#define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g)
-+#define Perl_pv_pretty DPPP_(my_pv_pretty)
-+
-+#if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL)
-+
-+char *
-+DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count,
-+  const STRLEN max, char const * const start_color, char const * const end_color,
-+  const U32 flags)
-+{
-+    const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%';
-+    STRLEN escaped;
-+
-+    if (!(flags & PERL_PV_PRETTY_NOCLEAR))
-+        sv_setpvs(dsv, "");
-+
-+    if (dq == '"')
-+        sv_catpvs(dsv, "\"");
-+    else if (flags & PERL_PV_PRETTY_LTGT)
-+        sv_catpvs(dsv, "<");
-+
-+    if (start_color != NULL)
-+        sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color));
-+
-+    pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR);
-+
-+    if (end_color != NULL)
-+        sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color));
-+
-+    if (dq == '"')
-+        sv_catpvs(dsv, "\"");
-+    else if (flags & PERL_PV_PRETTY_LTGT)
-+        sv_catpvs(dsv, ">");
-+
-+    if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count)
-+        sv_catpvs(dsv, "...");
-+
-+    return SvPVX(dsv);
-+}
-+
-+#endif
-+#endif
-+
-+#ifndef pv_display
-+#if defined(NEED_pv_display)
-+static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
-+static
-+#else
-+extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
-+#endif
-+
-+#ifdef pv_display
-+#  undef pv_display
-+#endif
-+#define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e)
-+#define Perl_pv_display DPPP_(my_pv_display)
-+
-+#if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL)
-+
-+char *
-+DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
-+{
-+    pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP);
-+    if (len > cur && pv[cur] == '\0')
-+        sv_catpvs(dsv, "\\0");
-+    return SvPVX(dsv);
-+}
-+
-+#endif
-+#endif
-+
-+#endif /* _P_P_PORTABILITY_H_ */
-+
-+/* End of File ppport.h */
diff --git a/lang/perl-xml-parser/patches/020-xml-parser-expat-lib-inc-path-anchor.patch b/lang/perl-xml-parser/patches/020-xml-parser-expat-lib-inc-path-anchor.patch
deleted file mode 100644 (file)
index 4e17daa..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/Expat/Makefile.PL
-+++ b/Expat/Makefile.PL
-@@ -2,6 +2,9 @@ use ExtUtils::MakeMaker;
- use Config;
- use English;
-+$expat_libpath = '%%EXPAT_LIBPATH%%';
-+$expat_incpath = '%%EXPAT_INCPATH%%';
-+
- my $libs = "-lexpat";
- my @extras = ();
diff --git a/lang/perl-xml-parser/patches/030-expat.patch b/lang/perl-xml-parser/patches/030-expat.patch
deleted file mode 100644 (file)
index 12a7fb8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/Makefile.PL
-+++ b/Makefile.PL
-@@ -65,7 +65,7 @@ Expat_Not_Installed;
-     # exiting before Makefile generation silences CPANTesters reports
-     # when expat is not available.
--    exit 0;
-+#    exit 0;
- }
- if ( not $expat_libpath and $] >= 5.006001 and $^O ne 'MSWin32' ) {
diff --git a/lang/perl-xs-parse-keyword/Makefile b/lang/perl-xs-parse-keyword/Makefile
deleted file mode 100644 (file)
index a932bae..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-xs-parse-keyword
-PKG_VERSION:=0.48
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=XS-Parse-Keyword
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=857a070ba465ab5b89d4d8d36d92358edd66e5e7b4a91584611d85125ac9a9c7
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-xs-parse-keyword
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=XS functions to assist in parsing keyword syntax
-  URL:=https://metacpan.org/pod/XS::Parse::Keyword
-  DEPENDS:=perl +perlbase-essential +perlbase-xsloader
-endef
-
-define Package/perl-xs-parse-keyword/description
-  This module provides some XS functions to assist in writing syntax
-  modules that provide new Perl-visible syntax, primarily for authors
-  of keyword plugins using the PL_keyword_plugin hook mechanism.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-xs-parse-keyword/install
-       $(call perlmod/Install,$(1),XS auto/XS)
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/share/perl/include
-       $(CP) $(PKG_BUILD_DIR)/share-infix/include/XSParseInfix.h $(1)/usr/share/perl/include/
-       $(CP) $(PKG_BUILD_DIR)/share-keyword/include/XSParseKeyword.h $(1)/usr/share/perl/include/
-endef
-
-$(eval $(call BuildPackage,perl-xs-parse-keyword))
diff --git a/lang/perl-xs-parse-keyword/src/Makefile.PL b/lang/perl-xs-parse-keyword/src/Makefile.PL
deleted file mode 100644 (file)
index 89a1350..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-require 5.014;
-use ExtUtils::MakeMaker;
-if ( ! -e "Keyword.xs" ) {
-  die $! unless open SRC, "<lib/XS/Parse/Keyword.xs";
-  my $xs = join "", <SRC>;
-  close SRC;
-  die $! unless open DST, ">Keyword.xs";
-  print DST $xs;
-  close DST;
-}
-WriteMakefile
-(
-  'NAME' => 'XS::Parse::Keyword',
-  'VERSION_FROM' => 'lib/XS/Parse/Keyword.pm',
-  'PREREQ_PM' => {
-                   'ExtUtils::CBuilder' => 0,
-                   'ExtUtils::ParseXS' => '3.16',
-                   'File::ShareDir' => '1.00'
-                 },
-  'INSTALLDIRS' => 'site',
-  'EXE_FILES' => [],
-  'PL_FILES' => {},
-  'INC' => '-I. -I./hax -I./src -Ishare-infix/include -Ishare-keyword/include',
-  'C' => ["Keyword.c", glob('src/*.c')],
-  'OBJECT' =>'$(O_FILES)',
-  'DEFINE' =>'-o $@',
-)
-;
-
diff --git a/lang/perl-xs-parse-sublike/Makefile b/lang/perl-xs-parse-sublike/Makefile
deleted file mode 100644 (file)
index 071a91a..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=perl-xs-parse-sublike
-PKG_VERSION:=0.37
-PKG_RELEASE:=1
-
-PKG_SOURCE_NAME:=XS-Parse-Sublike
-PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
-PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
-PKG_HASH:=736528c888ea7b6a6191011e5d5a7824ec38a5620507de6ef45e4bc6e1cf0da9
-PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
-
-PKG_MAINTAINER:=Jens Wagner <[email protected]>
-PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
-PKG_LICENSE_FILES:=LICENSE
-
-include $(INCLUDE_DIR)/package.mk
-include ../perl/perlmod.mk
-
-define Package/perl-xs-parse-sublike
-  SUBMENU:=Perl
-  SECTION:=lang
-  CATEGORY:=Languages
-  TITLE:=XS functions to assist in parsing sub-like syntax
-  URL:=https://metacpan.org/pod/XS::Parse::Sublike
-  DEPENDS:=perl +perlbase-essential +perlbase-xsloader
-endef
-
-define Package/perl-xs-parse-sublike/description
-  This module provides some XS functions to assist in writing parsers for
-  sub-like syntax, primarily for authors of keyword plugins using the
-  PL_keyword_plugin hook mechanism.
-endef
-
-define Build/Configure
-       $(call perlmod/Configure,,)
-endef
-
-define Build/Compile
-       $(call perlmod/Compile,,)
-endef
-
-define Package/perl-xs-parse-sublike/install
-       $(call perlmod/Install,$(1),Sublike XS auto/XS)
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(1)/usr/share/perl/include
-       $(CP) $(PKG_BUILD_DIR)/share/include/XSParseSublike.h $(1)/usr/share/perl/include/
-endef
-
-$(eval $(call BuildPackage,perl-xs-parse-sublike))
diff --git a/lang/perl-xs-parse-sublike/src/Makefile.PL b/lang/perl-xs-parse-sublike/src/Makefile.PL
deleted file mode 100644 (file)
index ee2d1c0..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-require 5.016;
-use ExtUtils::MakeMaker;
-if ( ! -e "Sublike.xs" ) {
-  die $! unless open SRC, "<lib/XS/Parse/Sublike.xs";
-  my $xs = join "", <SRC>;
-  close SRC;
-  die $! unless open DST, ">Sublike.xs";
-  print DST $xs;
-  close DST;
-}
-WriteMakefile
-(
-  'NAME' => 'XS::Parse::Sublike',
-  'VERSION_FROM' => 'lib/XS/Parse/Sublike.pm',
-  'PREREQ_PM' => {
-                   'ExtUtils::CBuilder' => 0,
-                   'File::ShareDir' => '1.00'
-                 },
-  'INSTALLDIRS' => 'site',
-  'EXE_FILES' => [],
-  'PL_FILES' => {},
-  'INC' => '-I. -Ishare/include -Iinclude -Ihax',
-  'C' => ["Sublike.c", glob('src/*.c')],
-  'OBJECT' =>'$(O_FILES)',
-  'DEFINE' =>'-o $@',
-)
-;
-
diff --git a/lang/perl/perl-ack/Makefile b/lang/perl/perl-ack/Makefile
new file mode 100644 (file)
index 0000000..2f393d7
--- /dev/null
@@ -0,0 +1,63 @@
+# SPDX-License-Identifier: GPL-3.0-only
+#
+# Copyright (C) 2021 ImmortalWrt.org
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-ack
+PKG_VERSION:=3.8.2
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/P/PE/PETDANCE/
+PKG_SOURCE:=ack-v$(PKG_VERSION).tar.gz
+PKG_HASH:=a5239f5a2c12e0c7b4e432ffd7e936feef945a9621a41591c77d3b0cf458560b
+
+PKG_LICENSE:=Artistic-2.0
+PKG_LICENSE_FILE:=LICENSE.md
+PKG_MAINTAINER:=Tianling Shen <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/ack-v$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/ack
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=A grep-like source code search tool
+  URL:=https://beyondgrep.com
+  DEPENDS:=+perl +perl-ack
+  PROVIDES:=ack-grep
+endef
+
+define Package/perl-ack
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=grep-like text finder
+  URL:=http://search.cpan.org/dist/ack/
+  DEPENDS:=perl +perl-file-next +perlbase-filetest +perlbase-if \
+    +perlbase-list +perlbase-pod +perlbase-test +perlbase-text \
+    +perlbase-term
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/ack/install
+       $(INSTALL_DIR) $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ack $(1)/usr/bin/
+       $(SED) "1"'!'"b;s,^#"'!'".*perl.*,#"'!'"/usr/bin/perl," -i --follow-symlinks $(1)/usr/bin/ack
+endef
+
+define Package/perl-ack/install
+       $(call perlmod/Install,$(1),App auto/ack)
+endef
+
+$(eval $(call BuildPackage,ack))
+$(eval $(call BuildPackage,perl-ack))
diff --git a/lang/perl/perl-ack/test.sh b/lang/perl/perl-ack/test.sh
new file mode 100644 (file)
index 0000000..823c80e
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+case "$1" in
+       "ack")
+               ack --version | grep "$PKG_VERSION"
+               ;;
+esac
diff --git a/lang/perl/perl-authen-sasl-xs/Makefile b/lang/perl/perl-authen-sasl-xs/Makefile
new file mode 100644 (file)
index 0000000..bbc4393
--- /dev/null
@@ -0,0 +1,55 @@
+#
+# Copyright (C) 2017 Philip Prindeville <[email protected]>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-authen-sasl-xs
+PKG_VERSION:=1.00
+PKG_RELEASE:=3
+
+PKG_SOURCE_NAME:=Authen-SASL-XS
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GB/GBARR/
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=1b0eaa0e7ac3a45857147d837e3d34c80c6eca1d9fdcb826a213c2a105454234
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Philip Prindeville <[email protected]>, Jens Wagner <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-authen-sasl-xs
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Authen::XS hooks into libsasl.
+  URL:=http://search.cpan.org/dist/$(PKG_SOURCE_NAME)/
+  DEPENDS:=perl +perlbase-dynaloader +perl-authen-sasl +libsasl2
+endef
+
+define Package/perl-authen-sasl-xs/description
+  SASL is a generic mechanism for authentication used by several
+  network protocols. Authen::SASL::XS provides an implementation
+  framework that all protocols should be able to share.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-authen-sasl-xs/install
+       $(call perlmod/Install,$(1),Authen auto/Authen)
+endef
+
+
+$(eval $(call BuildPackage,perl-authen-sasl-xs))
diff --git a/lang/perl/perl-authen-sasl-xs/patches/100-remove-devel-checklib-checks.patch b/lang/perl/perl-authen-sasl-xs/patches/100-remove-devel-checklib-checks.patch
new file mode 100644 (file)
index 0000000..da61f4f
--- /dev/null
@@ -0,0 +1,48 @@
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -1,7 +1,6 @@
+ # Do yourself a favour, and don't edit this file, see README for build instructions
+ use ExtUtils::MakeMaker;
+-use Devel::CheckLib;
+ my @inc_search = qw(/opt/local/include /usr/local/include);
+ my @lib_search = qw(/opt/local/lib64 /usr/local/lib64 /opt/local/lib /usr/local/lib);
+@@ -13,28 +12,13 @@ unless (exists $args{INC} or exists $arg
+   my @incpath = grep {-d} @inc_search;
+   my @libpath = grep {-d} @lib_search;
+-  my $have_sasl2 = eval {
+-    assert_lib(
+-      lib     => "sasl2",
+-      header  => "sasl/sasl.h",
+-      libpath => \@libpath,
+-      incpath => \@incpath
+-    );
+-    1;
+-  };
++  my $have_sasl2 = 1;
+   if ($have_sasl2) {
+     $mmopt{DEFINE} = "-DSASL2" unless $use_sasl2;
+   }
+   else {
+     exit(0) if $use_sasl2;
+-    @incpath = grep {-d} map { ("$_/sasl", $_) } @inc_search;
+-    check_lib_or_exit(
+-      lib     => "sasl",
+-      header  => "sasl.h",
+-      libpath => \@libpath,
+-      incpath => \@incpath
+-    );
+   }
+   $mmopt{INC}  = join " ", map {"-I$_"} @incpath;
+@@ -58,7 +42,6 @@ WriteMakefile(
+           repository => 'http://github.com/gbarr/perl-authen-sasl-xs',
+         },
+         build_requires => {
+-          'Devel::CheckLib' => 0,
+         },
+       }
+       )
diff --git a/lang/perl/perl-authen-sasl-xs/patches/102-strlen-size.patch b/lang/perl/perl-authen-sasl-xs/patches/102-strlen-size.patch
new file mode 100644 (file)
index 0000000..06c27ac
--- /dev/null
@@ -0,0 +1,24 @@
+Description: Fix type mismatches on 64-bit platforms
+Author: Russ Allbery <[email protected]>
+Reviewed-by: gregor herrmann <[email protected]>
+Last-Update: 2023-10-25
+
+Change the data types used in the XS code for the module to ensure data
+types match Perl's expectations on 64-bit platforms.
+
+Note:
+(libauthen-sasl-xs-perl is the successor of libauthen-sasl-cyrus-perl)
+Most of the original changes are applied upstream, one remains.
+[gregor 2023-10-25]
+
+--- a/XS.xs
++++ b/XS.xs
+@@ -946,7 +946,7 @@ void ExtractParentCallbacks(SV *parent,
+ {
+       char *key;
+       int count=0,i;
+-      long l;
++      I32 l;
+ #ifndef SASL2
+       // Missing SASL1 canonuser workaround
+       int canon=-1,auth=-1;
diff --git a/lang/perl/perl-authen-sasl-xs/patches/104-use-int2ptr.patch b/lang/perl/perl-authen-sasl-xs/patches/104-use-int2ptr.patch
new file mode 100644 (file)
index 0000000..c839f62
--- /dev/null
@@ -0,0 +1,25 @@
+Description: Use INT2PTR to map objects to Cyrus SASL pointers
+Author: Russ Allbery <[email protected]>
+Reviewed-by: gregor herrmann <[email protected]>
+Last-Update: 2023-10-25
+
+Rather than directly casting the IV to the target pointer, use
+Perl's standard INT2PTR macro.  This shouldn't change the resulting
+code, but it will suppress build warnings and make it easier to
+spot real build issues.
+
+Note:
+(libauthen-sasl-xs-perl is the successor of libauthen-sasl-cyrus-perl)
+[gregor 2023-10-25]
+
+--- a/typemap
++++ b/typemap
+@@ -6,7 +6,7 @@ INPUT
+ T_PTROBJ_SPECIAL
+       if (sv_derived_from($arg, \"${(my $ntt=$ntype)=~s/_/::/g; \$ntt}\")) {
+               IV tmp = SvIV((SV*)SvRV($arg));
+-              $var = ($type) tmp;
++              $var = INT2PTR($type, tmp);
+       }
+       else
+               croak(\"$var is not of type ${(my $ntt=$ntype)=~s /_/::/g;\$ntt}\")
diff --git a/lang/perl/perl-authen-sasl-xs/patches/105-gcc-14.patch b/lang/perl/perl-authen-sasl-xs/patches/105-gcc-14.patch
new file mode 100644 (file)
index 0000000..1642e27
--- /dev/null
@@ -0,0 +1,88 @@
+Description: fix multiple build issues with gcc 14.
+ Multiple callbacks are cast due to otherwise incompatible pointer
+ types.  The target pointer cb->proc cannot really see its type adjusted
+ for two reasons.  First, it is declared in the libsasl2, and changing
+ it might cause an ABI/API breakage.  Second, the different callbacks
+ also have different function signatures anyway.
+ .
+ Another issue seems to be a casting error while trying to set an IV:
+ .
+       XS.xs:1886:40: error:
+               initialization of â€˜IV’ {aka â€˜long int’} from â€˜int *’
+                makes integer from pointer without a cast [-Wint-conversion]
+        1886 |                                 XPUSHi((int *)value);
+             |                                        ^
+       /usr/lib/x86_64-linux-gnu/perl/5.38/CORE/pp.h:428:23: note: in definition of macro â€˜TARGi’
+         428 |         IV TARGi_iv = i;                                                \
+             |                       ^
+       XS.xs:1886:33: note: in expansion of macro â€˜XPUSHi’
+        1886 |                                 XPUSHi((int *)value);
+             |                                 ^~~~~~
+ .
+ It is unclear to me what was the motivation for the initial wrong type.
+
+Author: Ã‰tienne Mollier <[email protected]>
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1075146
+Forwarded: no
+Last-Update: 2024-07-26
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/XS.xs
++++ b/XS.xs
+@@ -892,39 +892,39 @@ void AddCallback(SV *action, struct _per
+               case SASL_CB_USER:
+               case SASL_CB_AUTHNAME:
+               case SASL_CB_LANGUAGE:
+-                               cb->proc = PerlCallback;
++                               cb->proc = (int (*)(void))PerlCallback;
+                       break;
+               case SASL_CB_PASS:
+-                              cb->proc = PerlCallbackSecret;
++                              cb->proc = (int (*)(void))PerlCallbackSecret;
+                       break;
+               case SASL_CB_GETREALM:
+-                              cb->proc = PerlCallbackRealm;
++                              cb->proc = (int (*)(void))PerlCallbackRealm;
+                       break;
+               case SASL_CB_ECHOPROMPT:
+               case SASL_CB_NOECHOPROMPT:
+                       break;
+               case SASL_CB_PROXY_POLICY:
+-                              cb->proc = PerlCallbackAuthorize;
++                              cb->proc = (int (*)(void))PerlCallbackAuthorize;
+                       break;
+               case SASL_CB_CANON_USER:
+-                              cb->proc = PerlCallbackCanonUser;
++                              cb->proc = (int (*)(void))PerlCallbackCanonUser;
+                       break;
+ #ifdef SASL2
+               case SASL_CB_SERVER_USERDB_CHECKPASS:
+-                              cb->proc = PerlCallbackServerCheckPass;
++                              cb->proc = (int (*)(void))PerlCallbackServerCheckPass;
+                       break;
+               case SASL_CB_SERVER_USERDB_SETPASS:
+-                              cb->proc = PerlCallbackServerSetPass;
++                              cb->proc = (int (*)(void))PerlCallbackServerSetPass;
+                       break;
+ #else
+               // SASL 1 Servercallbacks:
+               case SASL_CB_SERVER_GETSECRET:
+-                              cb->proc = PerlCallbackGetSecret;
++                              cb->proc = (int (*)(void))PerlCallbackGetSecret;
+                       break;
+               case SASL_CB_SERVER_PUTSECRET:
+                               // Not implemented yet maybe TODO, if ever needed
+@@ -1883,7 +1883,7 @@ PPCODE:
+                       break;
+                       case SASL_SSF:
+                       case SASL_MAXOUTBUF:
+-                              XPUSHi((int *)value);
++                              XPUSHi((long int)value);
+                       break;
+ #ifdef SASL2
+                       case SASL_IPLOCALPORT:
diff --git a/lang/perl/perl-authen-sasl-xs/patches/106-fix-sasl_ssf-and-sasl_maxoutbuf-property.patch b/lang/perl/perl-authen-sasl-xs/patches/106-fix-sasl_ssf-and-sasl_maxoutbuf-property.patch
new file mode 100644 (file)
index 0000000..749d1ec
--- /dev/null
@@ -0,0 +1,23 @@
+From: Niko Tyni <[email protected]>
+Date: Mon, 5 Aug 2024 16:50:56 +0100
+X-Dgit-Generated: 1.00-2 fe76997d50267530dd5a5f73995d11987547ac4d
+Subject: Fix SASL_SSF and SASL_MAXOUTBUF property handling
+
+sasl_getprop() returns a pointer which needs to be dereferenced to get
+the actual value.
+
+Bug-Debian: https://bugs.debian.org/1075146
+
+---
+
+--- a/XS.xs
++++ b/XS.xs
+@@ -1883,7 +1883,7 @@ PPCODE:
+                       break;
+                       case SASL_SSF:
+                       case SASL_MAXOUTBUF:
+-                              XPUSHi((long int)value);
++                              XPUSHi(*((IV *)value));
+                       break;
+ #ifdef SASL2
+                       case SASL_IPLOCALPORT:
diff --git a/lang/perl/perl-authen-sasl/Makefile b/lang/perl/perl-authen-sasl/Makefile
new file mode 100644 (file)
index 0000000..2122287
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2017 Philip Prindeville <[email protected]>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-authen-sasl
+PKG_VERSION:=2.16
+PKG_RELEASE:=2
+
+PKG_SOURCE_NAME:=Authen-SASL
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GB/GBARR/
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=6614fa7518f094f853741b63c73f3627168c5d3aca89b1d02b1016dc32854e09
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Philip Prindeville <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-authen-sasl
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Generic network authentication protocol framework.
+  URL:=http://search.cpan.org/dist/$(PKG_SOURCE_NAME)/
+  DEPENDS:=perl +perlbase-digest
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-authen-sasl/install
+       $(call perlmod/Install,$(1),Authen)
+endef
+
+
+$(eval $(call BuildPackage,perl-authen-sasl))
diff --git a/lang/perl/perl-cgi/Makefile b/lang/perl/perl-cgi/Makefile
new file mode 100644 (file)
index 0000000..03eb093
--- /dev/null
@@ -0,0 +1,52 @@
+#
+# Copyright (C) 2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-cgi
+PKG_VERSION:=4.66
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/L/LE/LEEJO
+PKG_SOURCE:=CGI-$(PKG_VERSION).tar.gz
+PKG_HASH:=4697437688a193e3f02556e1d223015590c1f2800b40becf83dc12d5cc5ed8e1
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/CGI-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>, \
+               Philip Prindeville <[email protected]>
+PKG_LICENSE:=Artistic-2.0
+PKG_LICENSE_FILES:=LICENSE
+
+# don't strip comments because that will mangle this module
+PKG_LEAVE_COMMENTS:=1
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-cgi
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Handle Common Gateway Interface requests and responses
+  URL:=https://search.cpan.org/dist/CGI/
+  DEPENDS:=perl +perl-html-parser +perlbase-base +perlbase-config +perlbase-encode +perlbase-essential +perlbase-file +perlbase-if +perlbase-utf8
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-cgi/install
+        $(call perlmod/Install,$(1),CGI CGI.pm auto/CGI)
+endef
+
+
+$(eval $(call BuildPackage,perl-cgi))
diff --git a/lang/perl/perl-class-inspector/Makefile b/lang/perl/perl-class-inspector/Makefile
new file mode 100644 (file)
index 0000000..035ce59
--- /dev/null
@@ -0,0 +1,48 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-class-inspector
+PKG_VERSION:=1.36
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=Class-Inspector
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=cc295d23a472687c24489d58226ead23b9fdc2588e522f0b5f0747741700694e
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-class-inspector
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Get information about a class and its structure
+  URL:=https://metacpan.org/pod/Class::Inspector
+  DEPENDS:=perl +perlbase-essential +perlbase-file +perlbase-base
+endef
+
+define Package/perl-class-inspector/description
+  Class::Inspector allows you to get information about a loaded class.
+  While most or all of this information can be found in other ways,
+  Class::Inspector provides an easier interface to this information.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-class-inspector/install
+       $(call perlmod/Install,$(1),Class)
+endef
+
+
+$(eval $(call BuildPackage,perl-class-inspector))
diff --git a/lang/perl/perl-compress-bzip2/Makefile b/lang/perl/perl-compress-bzip2/Makefile
new file mode 100644 (file)
index 0000000..3636a1b
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2014, 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-compress-bzip2
+PKG_VERSION:=2.28
+PKG_RELEASE:=1
+
+PKG_SOURCE:=Compress-Bzip2-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/R/RU/RURBAN/
+PKG_HASH:=859f835c3f5c998810d8b2a6f9e282ff99d6cb66ccfa55cae7e66dafb035116e
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Compress-Bzip2-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=COPYING
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-compress-bzip2
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl interface to bzip2 compression library
+  URL:=https://search.cpan.org/dist/Compress-Bzip2/
+  DEPENDS:=perl +libbz2 +perlbase-autoloader +perlbase-config +perlbase-essential +perlbase-fcntl +perlbase-file +perlbase-getopt +perlbase-test +perlbase-xsloader
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,BUILD_BZLIB=0)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-compress-bzip2/install
+       $(call perlmod/Install,$(1),Compress auto/Compress)
+endef
+
+
+$(eval $(call BuildPackage,perl-compress-bzip2))
diff --git a/lang/perl/perl-dbi/Makefile b/lang/perl/perl-dbi/Makefile
new file mode 100644 (file)
index 0000000..4ec1aeb
--- /dev/null
@@ -0,0 +1,65 @@
+#
+# Copyright (C) 2014, 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-dbi
+PKG_VERSION:=1.643
+PKG_RELEASE:=1
+
+PKG_SOURCE:=DBI-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/T/TI/TIMB/
+PKG_HASH:=8a2b993db560a2c373c174ee976a51027dd780ec766ae17620c20393d2e836fa
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/DBI-$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/DBI-$(PKG_VERSION)
+HOST_BUILD_DEPENDS:=perl/host
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-dbi
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Database independent interface for Perl
+  URL:=https://search.cpan.org/dist/DBI/
+  DEPENDS:=perl +perlbase-base +perlbase-config +perlbase-cwd +perlbase-data +perlbase-dynaloader +perlbase-errno +perlbase-essential +perlbase-fcntl +perlbase-file +perlbase-io +perlbase-ipc +perlbase-scalar +perlbase-storable +perlbase-symbol +perlbase-tie +perlbase-universal +perlbase-utf8
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Host/Configure
+       $(call perlmod/host/Configure,,)
+endef
+
+define Host/Compile
+       $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+       $(call perlmod/host/Install,$(1),)
+endef
+
+define Package/perl-dbi/install
+       $(call perlmod/Install,$(1),DB* auto/DBI,DBI/W32ODBC.pm auto/DBI/*.h)
+endef
+
+
+$(eval $(call BuildPackage,perl-dbi))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-device-serialport/Makefile b/lang/perl/perl-device-serialport/Makefile
new file mode 100644 (file)
index 0000000..de37a08
--- /dev/null
@@ -0,0 +1,66 @@
+#
+# Copyright (C) 2014, 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-device-serialport
+PKG_VERSION:=1.04
+PKG_RELEASE:=4
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/C/CO/COOK/
+PKG_SOURCE:=Device-SerialPort-$(PKG_VERSION).tar.gz
+PKG_HASH:=d392567cb39b4ea606c0e0acafd8ed72320311b995336ece5fcefcf9b150e9d7
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Paul Oranje <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Device-SerialPort-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-device-serialport
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=A POSIX-based version of the Win32::SerialPort module
+  URL:=http://search.cpan.org/dist/Device-SerialPort/
+  DEPENDS:=perl +perlbase-essential +perlbase-io +perlbase-posix +perlbase-test +perlbase-xsloader
+endef
+
+define Package/perl-device-serialport/description
+  A POSIX-based version of the Win32::SerialPort module
+  that provides modem support to Perl applications
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+MOD_CFLAGS_PERL += $(if $(CONFIG_HOST_OS_MACOS),-I$(PKG_BUILD_DIR)/macos_compat,)
+
+define Build/Compile
+
+ifeq ($(CONFIG_HOST_OS_MACOS),y)
+       #Zeroize macos specific system headers found by ./configure
+       mkdir -p $(PKG_BUILD_DIR)/macos_compat
+       mkdir -p $(PKG_BUILD_DIR)/macos_compat/sys
+       mkdir -p $(PKG_BUILD_DIR)/macos_compat/IOKit
+       mkdir -p $(PKG_BUILD_DIR)/macos_compat/IOKit/serial
+       echo '' > $(PKG_BUILD_DIR)/macos_compat/sys/ttycom.h
+       echo '' > $(PKG_BUILD_DIR)/macos_compat/IOKit/serial/ioss.h
+endif
+
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-device-serialport/install
+        $(call perlmod/Install,$(1),Device auto/Device)
+endef
+
+
+$(eval $(call BuildPackage,perl-device-serialport))
diff --git a/lang/perl/perl-device-usb/Makefile b/lang/perl/perl-device-usb/Makefile
new file mode 100644 (file)
index 0000000..9757037
--- /dev/null
@@ -0,0 +1,73 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-device-usb
+PKG_VERSION:=0.38
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GW/GWADEJ/
+PKG_SOURCE:=Device-USB-$(PKG_VERSION).tar.gz
+PKG_HASH:=f0c36379db4913406dc9bd546a6cfd4da20d58f7c2cc085893a2fe67a43465dc
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Device-USB-$(PKG_VERSION)
+PKG_BUILD_DEPENDS:=perl-inline-c/host
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-device-usb
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=libusb library wrapper
+  URL:=https://search.cpan.org/dist/Device-USB/
+  DEPENDS:=perl +libusb-compat +perl-inline +perl-inline-c +perlbase-essential +perlbase-test
+endef
+
+# Device::USB will generate a second Makefile.PL to build it's native code
+# using Inline::C under _Inline/. The goal here is to prevent Inline::C from
+# running that one automatically, as we need to supply a bunch of overrides via
+# perlmod/Configure.
+# _INLINE_C_NO_COMPILE_ is an OpenWRT-specific environment variable to Inline::C
+# that does just that.
+define Build/Configure
+       $(call perlmod/Configure,,)
+       
+       # Prepare a library directory where we can link againt lusb-0.1(as
+       # opposed to -lusb) to avoid confusion at runtime
+       mkdir $(PKG_BUILD_DIR)/syslib
+       $(LN) $(STAGING_DIR)/usr/lib/libusb.so $(PKG_BUILD_DIR)/syslib/libusb-0.1.so
+       
+       # Generate _Inline
+       $(call perlmod/Compile,config,LIBUSB_LIBDIR=$(PKG_BUILD_DIR)/syslib \
+                                     _INLINE_C_NO_COMPILE_=1 \
+                                     _INLINE_C_SYSTEM_TYPEMAP_=$(STAGING_DIR)/usr/lib/perl5/$(PERL_VERSION)/ExtUtils/typemap)
+       $(call perlmod/Compile,dynamic,_INLINE_C_NO_COMPILE_=1)
+       
+       # Configure _Inline
+       $(call perlmod/Configure,,,$(PKG_BUILD_DIR)/_Inline/build/Device/USB)
+       
+       # Prevent re-configuring Inline code
+       sed 's/^dynamic :: D.*$$$$//' -i $(PKG_BUILD_DIR)/Makefile
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,,$(PKG_BUILD_DIR)/_Inline/build/Device/USB)
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-device-usb/install
+        $(call perlmod/Install,$(1),Device auto/Device)
+endef
+
+
+$(eval $(call BuildPackage,perl-device-usb))
diff --git a/lang/perl/perl-device-usb/README.patches b/lang/perl/perl-device-usb/README.patches
new file mode 100644 (file)
index 0000000..66ece00
--- /dev/null
@@ -0,0 +1,8 @@
+This package contains some patches taken directly from Debian Jessie(stable at 
+the time of writing). 
+Namely, these are:
+- 100-fix_buildsystem.patch
+- 110-just_assume_libusb_is_there.diff
+
+The other patches are specific to OpenWRT, fixing bugs and resolving conflicts
+where necessary.
\ No newline at end of file
diff --git a/lang/perl/perl-device-usb/patches/100-fix_buildsystem.patch b/lang/perl/perl-device-usb/patches/100-fix_buildsystem.patch
new file mode 100644 (file)
index 0000000..30f7d6a
--- /dev/null
@@ -0,0 +1,20 @@
+Description: Ignore files we do not want installed.
+Forwarded: not-needed
+Author: Tim Retout <[email protected]>
+Reviewed-by: gregor herrmann <[email protected]>
+Last-Update: 2013-10-28
+
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -2,6 +2,11 @@ use strict;
+ use warnings;
+ use Inline::MakeMaker;
++sub MY::libscan {
++      return if ($_[1] eq 'USB.pm' or $_[1] eq 'dump_usb.pl');
++      return $_[1];
++}
++
+ if($^O eq 'MSWin32')
+ {
+     if(!$ENV{LIBUSB_LIBDIR} or !$ENV{LIBUSB_INCDIR})
diff --git a/lang/perl/perl-device-usb/patches/110-just_assume_libusb_is_there.patch b/lang/perl/perl-device-usb/patches/110-just_assume_libusb_is_there.patch
new file mode 100644 (file)
index 0000000..dddd23a
--- /dev/null
@@ -0,0 +1,30 @@
+Subject: Just assume libusb is out there
+ Makefile.PL should not try to check for libusb in a given list of directories
+ as the compiler might look in other places as well.
+Origin: vendor
+Bug-Debian: http://bugs.debian.org/639677
+Forwarded: not-needed
+From: Ansgar Burchardt <[email protected]>
+Reviewed-by: gregor herrmann <[email protected]>
+Last-Update: 2013-10-28
+
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -21,7 +21,7 @@ END
+     }
+ }
+-unless(header_found())
++unless(1 || header_found())
+ {
+     die <<"END";
+ ERROR: Can't find usb.h header.
+@@ -36,7 +36,7 @@ following environment variables:
+ END
+ }
+-unless(lib_found())
++unless(1 || lib_found())
+ {
+     die <<"END";
+ ERROR: Can't find libusb library.
diff --git a/lang/perl/perl-device-usb/patches/120-use_libusb_0_1.patch b/lang/perl/perl-device-usb/patches/120-use_libusb_0_1.patch
new file mode 100644 (file)
index 0000000..7d43e73
--- /dev/null
@@ -0,0 +1,13 @@
+--- a/lib/Device/USB.pm
++++ b/lib/Device/USB.pm
+@@ -9,8 +9,8 @@ use Inline (
+         C => "DATA",
+         ($ENV{LIBUSB_LIBDIR}
+             ? ( LIBS => "-L\"$ENV{LIBUSB_LIBDIR}\" " .
+-                        ($^O eq 'MSWin32' ? ' -llibusb -L\"$ENV{WINDDK}\\lib\\crt\\i386\" -lmsvcrt ' : '-lusb') )
+-            : ( LIBS => '-lusb', )
++                        ($^O eq 'MSWin32' ? ' -llibusb -L\"$ENV{WINDDK}\\lib\\crt\\i386\" -lmsvcrt ' : '-lusb-0.1') )
++            : ( LIBS => '-lusb-0.1', )
+         ),
+         ($ENV{LIBUSB_INCDIR} ? ( INC => "-I\"$ENV{LIBUSB_INCDIR}\"" ) : () ),
+         NAME => 'Device::USB',
diff --git a/lang/perl/perl-device-usb/patches/130-provide-proper-library-paths.patch b/lang/perl/perl-device-usb/patches/130-provide-proper-library-paths.patch
new file mode 100644 (file)
index 0000000..3fce75a
--- /dev/null
@@ -0,0 +1,13 @@
+--- a/lib/Device/USB.pm
++++ b/lib/Device/USB.pm
+@@ -8,8 +8,8 @@ use Carp;
+ use Inline (
+         C => "DATA",
+         ($ENV{LIBUSB_LIBDIR}
+-            ? ( LIBS => "-L\"$ENV{LIBUSB_LIBDIR}\" " .
+-                        ($^O eq 'MSWin32' ? ' -llibusb -L\"$ENV{WINDDK}\\lib\\crt\\i386\" -lmsvcrt ' : '-lusb-0.1') )
++            ? ( LIBS => "-L$ENV{LIBUSB_LIBDIR} " .
++                        ($^O eq 'MSWin32' ? ' -llibusb -L$ENV{WINDDK}\\lib\\crt\\i386 -lmsvcrt ' : '-lusb-0.1') )
+             : ( LIBS => '-lusb-0.1', )
+         ),
+         ($ENV{LIBUSB_INCDIR} ? ( INC => "-I\"$ENV{LIBUSB_INCDIR}\"" ) : () ),
diff --git a/lang/perl/perl-device-usb/patches/140-avoid-libusb-name-conflicts.patch b/lang/perl/perl-device-usb/patches/140-avoid-libusb-name-conflicts.patch
new file mode 100644 (file)
index 0000000..535579d
--- /dev/null
@@ -0,0 +1,219 @@
+--- a/lib/Device/USB.pm
++++ b/lib/Device/USB.pm
+@@ -15,6 +15,7 @@ use Inline (
+         ($ENV{LIBUSB_INCDIR} ? ( INC => "-I\"$ENV{LIBUSB_INCDIR}\"" ) : () ),
+         NAME => 'Device::USB',
+         VERSION => '0.38',
++        PREFIX => 'deviceusb_',
+    );
+ Inline->init();
+@@ -657,74 +658,74 @@ unsigned DeviceUSBDebugLevel()
+     return debugLevel;
+ }
+-void libusb_init()
++void deviceusb_libusb_init()
+ {
+     usb_init();
+ }
+-int libusb_find_busses()
++int deviceusb_libusb_find_busses()
+ {
+     return usb_find_busses();
+ }
+-int libusb_find_devices()
++int deviceusb_libusb_find_devices()
+ {
+     return usb_find_devices();
+ }
+-void *libusb_get_busses()
++void *deviceusb_libusb_get_busses()
+ {
+     return usb_get_busses();
+ }
+-void *libusb_open(void *dev)
++void *deviceusb_libusb_open(void *dev)
+ {
+     return usb_open( (struct usb_device*)dev );
+ }
+-int libusb_close(void *dev)
++int deviceusb_libusb_close(void *dev)
+ {
+     return usb_close((usb_dev_handle *)dev);
+ }
+-int libusb_set_configuration(void *dev, int configuration)
++int deviceusb_libusb_set_configuration(void *dev, int configuration)
+ {
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_set_configuration( %d )\n", configuration );
++        printf( "deviceusb_libusb_set_configuration( %d )\n", configuration );
+     }
+     return usb_set_configuration((usb_dev_handle *)dev, configuration);
+ }
+-int libusb_set_altinterface(void *dev, int alternate)
++int deviceusb_libusb_set_altinterface(void *dev, int alternate)
+ {
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_set_altinterface( %d )\n", alternate );
++        printf( "deviceusb_libusb_set_altinterface( %d )\n", alternate );
+     }
+     return usb_set_altinterface((usb_dev_handle *)dev, alternate);
+ }
+-int libusb_clear_halt(void *dev, unsigned int ep)
++int deviceusb_libusb_clear_halt(void *dev, unsigned int ep)
+ {
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_clear_halt( %d )\n", ep );
++        printf( "deviceusb_libusb_clear_halt( %d )\n", ep );
+     }
+     return usb_clear_halt((usb_dev_handle *)dev, ep);
+ }
+-int libusb_reset(void *dev)
++int deviceusb_libusb_reset(void *dev)
+ {
+     return usb_reset((usb_dev_handle *)dev);
+ }
+-int libusb_get_driver_np(void *dev, int interface, char *name, unsigned int namelen)
++int deviceusb_libusb_get_driver_np(void *dev, int interface, char *name, unsigned int namelen)
+ {
+     int ret = 0;
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_get_driver_np( %d )\n", interface );
++        printf( "deviceusb_libusb_get_driver_np( %d )\n", interface );
+     }
+ #if LIBUSB_HAS_GET_DRIVER_NP
+     ret = usb_get_driver_np((usb_dev_handle *)dev, interface, name, namelen);
+@@ -735,11 +736,11 @@ int libusb_get_driver_np(void *dev, int
+ #endif
+ }
+-int libusb_detach_kernel_driver_np(void *dev, int interface)
++int deviceusb_libusb_detach_kernel_driver_np(void *dev, int interface)
+ {
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_detach_kernel_driver_np( %d )\n", interface );
++        printf( "deviceusb_libusb_detach_kernel_driver_np( %d )\n", interface );
+     }
+ #if LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP
+     return usb_detach_kernel_driver_np((usb_dev_handle *)dev, interface);
+@@ -748,25 +749,25 @@ int libusb_detach_kernel_driver_np(void
+ #endif
+ }
+-int libusb_claim_interface(void *dev, int interface)
++int deviceusb_libusb_claim_interface(void *dev, int interface)
+ {
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_claim_interface( %d )\n", interface );
++        printf( "deviceusb_libusb_claim_interface( %d )\n", interface );
+     }
+     return usb_claim_interface((usb_dev_handle *)dev, interface);
+ }
+-int libusb_release_interface(void *dev, int interface)
++int deviceusb_libusb_release_interface(void *dev, int interface)
+ {
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_release_interface( %d )\n", interface );
++        printf( "deviceusb_libusb_release_interface( %d )\n", interface );
+     }
+     return usb_release_interface((usb_dev_handle *)dev, interface);
+ }
+-void libusb_control_msg(void *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout)
++void deviceusb_libusb_control_msg(void *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout)
+ {
+     int i = 0;
+     int retval = 0;
+@@ -775,7 +776,7 @@ void libusb_control_msg(void *dev, int r
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_control_msg( %#04x, %#04x, %#04x, %#04x, %p, %d, %d )\n",
++        printf( "deviceusb_libusb_control_msg( %#04x, %#04x, %#04x, %#04x, %p, %d, %d )\n",
+             requesttype, request, value, index, bytes, size, timeout
+         );
+         /* maybe need to add support for printing the bytes string. */
+@@ -808,54 +809,54 @@ void libusb_control_msg(void *dev, int r
+     Inline_Stack_Done;
+ }
+-int libusb_get_string(void *dev, int index, int langid, char *buf, size_t buflen)
++int deviceusb_libusb_get_string(void *dev, int index, int langid, char *buf, size_t buflen)
+ {
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_get_string( %d, %d, %p, %lu )\n",
++        printf( "deviceusb_libusb_get_string( %d, %d, %p, %lu )\n",
+             index, langid, buf, (unsigned long)buflen
+         );
+     }
+     return usb_get_string((usb_dev_handle *)dev, index, langid, buf, buflen);
+ }
+-int libusb_get_string_simple(void *dev, int index, char *buf, size_t buflen)
++int deviceusb_libusb_get_string_simple(void *dev, int index, char *buf, size_t buflen)
+ {
+     if(DeviceUSBDebugLevel())
+     {
+-        printf( "libusb_get_string_simple( %d, %p, %lu )\n",
++        printf( "deviceusb_libusb_get_string_simple( %d, %p, %lu )\n",
+             index, buf, (unsigned long)buflen
+         );
+     }
+     return usb_get_string_simple((usb_dev_handle *)dev, index, buf, buflen);
+ }
+-int libusb_get_descriptor(void *dev, unsigned char type, unsigned char index, char *buf, int size)
++int deviceusb_libusb_get_descriptor(void *dev, unsigned char type, unsigned char index, char *buf, int size)
+ {
+     return usb_get_descriptor((usb_dev_handle *)dev, type, index, buf, size);
+ }
+-int libusb_get_descriptor_by_endpoint(void *dev, int ep, unsigned char type, unsigned char index, char *buf, int size)
++int deviceusb_libusb_get_descriptor_by_endpoint(void *dev, int ep, unsigned char type, unsigned char index, char *buf, int size)
+ {
+     return usb_get_descriptor_by_endpoint((usb_dev_handle *)dev, ep, type, index, buf, size);
+ }
+-int libusb_bulk_write(void *dev, int ep, char *bytes, int size, int timeout)
++int deviceusb_libusb_bulk_write(void *dev, int ep, char *bytes, int size, int timeout)
+ {
+     return usb_bulk_write((usb_dev_handle *)dev, ep, bytes, size, timeout);
+ }
+-int libusb_bulk_read(void *dev, int ep, char *bytes, int size, int timeout)
++int deviceusb_libusb_bulk_read(void *dev, int ep, char *bytes, int size, int timeout)
+ {
+     return usb_bulk_read((usb_dev_handle *)dev, ep, bytes, size, timeout);
+ }
+-int libusb_interrupt_write(void *dev, int ep, char *bytes, int size, int timeout)
++int deviceusb_libusb_interrupt_write(void *dev, int ep, char *bytes, int size, int timeout)
+ {
+     return usb_interrupt_write((usb_dev_handle *)dev, ep, bytes, size, timeout);
+ }
+-int libusb_interrupt_read(void *dev, int ep, char *bytes, int size, int timeout)
++int deviceusb_libusb_interrupt_read(void *dev, int ep, char *bytes, int size, int timeout)
+ {
+     return usb_interrupt_read((usb_dev_handle *)dev, ep, bytes, size, timeout);
+ }
diff --git a/lang/perl/perl-encode-locale/Makefile b/lang/perl/perl-encode-locale/Makefile
new file mode 100644 (file)
index 0000000..73c6619
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-encode-locale
+PKG_VERSION:=1.05
+PKG_RELEASE:=2
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GA/GAAS
+PKG_SOURCE:=Encode-Locale-$(PKG_VERSION).tar.gz
+PKG_HASH:=176fa02771f542a4efb1dbc2a4c928e8f4391bf4078473bd6040d8f11adb0ec1
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Encode-Locale-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-encode-locale
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Determine the locale encoding
+  URL:=http://search.cpan.org/dist/Encode-Locale/
+  DEPENDS:=perl +perlbase-base +perlbase-encode +perlbase-essential
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-encode-locale/install
+        $(call perlmod/Install,$(1),Encode auto/Encode)
+endef
+
+
+$(eval $(call BuildPackage,perl-encode-locale))
diff --git a/lang/perl/perl-file-listing/Makefile b/lang/perl/perl-file-listing/Makefile
new file mode 100644 (file)
index 0000000..9fd6fe7
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-file-listing
+PKG_VERSION:=6.04
+PKG_RELEASE:=2
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GA/GAAS
+PKG_SOURCE:=File-Listing-$(PKG_VERSION).tar.gz
+PKG_HASH:=1e0050fcd6789a2179ec0db282bf1e90fb92be35d1171588bd9c47d52d959cf5
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/File-Listing-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-file-listing
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Parse directory listing
+  URL:=http://search.cpan.org/dist/File-Listing/
+  DEPENDS:=perl +perl-http-date +perlbase-essential
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-file-listing/install
+        $(call perlmod/Install,$(1),File auto/File)
+endef
+
+
+$(eval $(call BuildPackage,perl-file-listing))
diff --git a/lang/perl/perl-file-next/Makefile b/lang/perl/perl-file-next/Makefile
new file mode 100644 (file)
index 0000000..085c613
--- /dev/null
@@ -0,0 +1,44 @@
+# SPDX-License-Identifier: GPL-3.0-only
+#
+# Copyright (C) 2021 ImmortalWrt.org
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-file-next
+PKG_VERSION:=1.18
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/P/PE/PETDANCE/
+PKG_SOURCE:=File-Next-$(PKG_VERSION).tar.gz
+PKG_HASH:=f900cb39505eb6e168a9ca51a10b73f1bbde1914b923a09ecd72d9c02e6ec2ef
+
+PKG_LICENSE:=Artistic-2.0
+PKG_MAINTAINER:=Tianling Shen <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/File-Next-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-file-next
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=File finding module
+  URL:=http://search.cpan.org/dist/File-Next/
+  DEPENDS:=perl +perlbase-file
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-file-next/install
+       $(call perlmod/Install,$(1),File auto/File)
+endef
+
+$(eval $(call BuildPackage,perl-file-next))
diff --git a/lang/perl/perl-file-rsyncp/Makefile b/lang/perl/perl-file-rsyncp/Makefile
new file mode 100644 (file)
index 0000000..588cb1d
--- /dev/null
@@ -0,0 +1,57 @@
+# Copyright (C) 2018 OpenWrt
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-file-rsyncp
+PKG_VERSION:=0.74
+PKG_RELEASE:=1
+
+PKG_SOURCE:=File-RsyncP-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://search.cpan.org/CPAN/authors/id/C/CB/CBARRATT/
+PKG_HASH:=ba4df5f9b0db6c9d86a6c5cf9861cf00d17b18e77cfa028e7a9157c0015a5aa3
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/File-RsyncP-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Carsten Wolff <[email protected]>
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_LICENSE_FILES:=LICENSE README
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-file-rsyncp
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl Rsync client
+  URL:=http://search.cpan.org/~cbarratt/File-RsyncP/
+  DEPENDS:=perl +perlbase-autoloader +perlbase-socket +perlbase-getopt +perlbase-data +perlbase-config +perlbase-encode +perlbase-fcntl +perlbase-file
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+       $(call perlmod/Configure,,,$(PKG_BUILD_DIR)/Digest)
+       $(call perlmod/Configure,,,$(PKG_BUILD_DIR)/FileList)
+       $(call Build/Configure/Default,,rsync_cv_HAVE_LONGLONG=yes,FileList)
+endef
+
+define Build/Compile
+       PERL5LIB=$(PERL_LIB) $(MAKE) -C $(PKG_BUILD_DIR)/Digest
+       PERL5LIB=$(PERL_LIB) $(MAKE) -C $(PKG_BUILD_DIR)/FileList
+       PERL5LIB=$(PERL_LIB) $(MAKE) -C $(PKG_BUILD_DIR)
+endef
+
+define Package/perl-file-rsyncp/install
+       $(INSTALL_DIR) $(strip $(1))$(PERL_SITELIB)/File/RsyncP
+       $(INSTALL_DIR) $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/Digest
+       $(INSTALL_DIR) $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/FileList
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/lib/File/RsyncP.pm $(strip $(1))$(PERL_SITELIB)/File
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/lib/File/RsyncP/FileIO.pm $(strip $(1))$(PERL_SITELIB)/File/RsyncP
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/Digest/Digest.pm $(strip $(1))$(PERL_SITELIB)/File/RsyncP
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/FileList/FileList.pm $(strip $(1))$(PERL_SITELIB)/File/RsyncP
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/Digest/blib/lib/auto/File/RsyncP/Digest/autosplit.ix $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/Digest
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/Digest/blib/arch/auto/File/RsyncP/Digest/Digest.so $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/Digest
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/FileList/blib/lib/auto/File/RsyncP/FileList/autosplit.ix $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/FileList
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/FileList/blib/arch/auto/File/RsyncP/FileList/FileList.so $(strip $(1))$(PERL_SITELIB)/auto/File/RsyncP/FileList
+endef
+
+$(eval $(call BuildPackage,perl-file-rsyncp))
diff --git a/lang/perl/perl-file-rsyncp/patches/001-no-subdirs.patch b/lang/perl/perl-file-rsyncp/patches/001-no-subdirs.patch
new file mode 100644 (file)
index 0000000..746029a
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -8,7 +8,7 @@ WriteMakefile(
+                             Getopt::Long => 2.24,     # need OO interface
+                          },
+     'PMLIBDIRS'       => ['lib'],
+-    'DIR'             => ['Digest', 'FileList'],
++    'DIR'             => [],
+     ($] >= 5.005 ?    ## Add these new keywords supported since 5.005
+       (ABSTRACT_FROM  => 'lib/File/RsyncP.pm', # retrieve abstract from module
+        AUTHOR         => 'Craig Barratt <[email protected]>')
diff --git a/lang/perl/perl-file-sharedir-install/Makefile b/lang/perl/perl-file-sharedir-install/Makefile
new file mode 100644 (file)
index 0000000..1294b37
--- /dev/null
@@ -0,0 +1,65 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-file-sharedir-install
+PKG_VERSION:=0.13
+PKG_RELEASE:=1
+
+PKG_SOURCE:=File-ShareDir-Install-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/E/ET/ETHER
+PKG_HASH:=45befdf0d95cbefe7c25a1daf293d85f780d6d2576146546e6828aad26e580f9
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/File-ShareDir-Install-$(PKG_VERSION)
+HOST_BUILD_DEPENDS:=perl/host
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/File-ShareDir-Install-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-file-sharedir-install
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Install read-only data files
+  URL:=https://search.cpan.org/dist/File-ShareDir-Install/
+  DEPENDS:=perl +perlbase-essential +perlbase-extutils +perlbase-file +perlbase-io
+endef
+
+define Host/Configure
+        $(call perlmod/host/Configure,,,)
+endef
+
+define Host/Compile
+        $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+        $(call perlmod/host/Install,$(1),)
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-file-sharedir-install/install
+        $(call perlmod/Install,$(1),File auto/File)
+endef
+
+
+$(eval $(call BuildPackage,perl-file-sharedir-install))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-file-sharedir/Makefile b/lang/perl/perl-file-sharedir/Makefile
new file mode 100644 (file)
index 0000000..21a6673
--- /dev/null
@@ -0,0 +1,47 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-file-sharedir
+PKG_VERSION:=1.118
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=File-ShareDir
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/R/RE/REHSACK/
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=3bb2a20ba35df958dc0a4f2306fc05d903d8b8c4de3c8beefce17739d281c958
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-file-sharedir
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Locate per-dist and per-module shared files
+  URL:=https://metacpan.org/pod/File::ShareDir
+  DEPENDS:=perl +perlbase-essential +perlbase-file +perl-class-inspector
+endef
+
+define Package/perl-file-sharedir/description
+  File::ShareDir locates shared files distributed with a Perl distribution
+  or module.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-file-sharedir/install
+       $(call perlmod/Install,$(1),File)
+endef
+
+
+$(eval $(call BuildPackage,perl-file-sharedir))
diff --git a/lang/perl/perl-future-asyncawait/Makefile b/lang/perl/perl-future-asyncawait/Makefile
new file mode 100644 (file)
index 0000000..8a9e9d9
--- /dev/null
@@ -0,0 +1,48 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-future-asyncawait
+PKG_VERSION:=0.70
+PKG_RELEASE:=2
+
+PKG_SOURCE_NAME:=Future-AsyncAwait
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=842899049c977fb2326a8096926441e57beca912bb2b4918d5ce090df4d4a6b7
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-future-asyncawait
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Deferred subroutine syntax for futures in Perl
+  URL:=https://metacpan.org/pod/Future::AsyncAwait
+  DEPENDS:=perl +perl-future +perl-xs-parse-keyword +perl-xs-parse-sublike +perlbase-xsloader +perlbase-scalar
+endef
+
+define Package/perl-future-asyncawait/description
+  This module provides syntax for deferring and resuming subroutines while
+  waiting for Futures to complete.
+  The new syntax takes the form of two new keywords, async and await.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-future-asyncawait/install
+       $(call perlmod/Install,$(1),Future auto/Future)
+endef
+
+
+$(eval $(call BuildPackage,perl-future-asyncawait))
diff --git a/lang/perl/perl-future-asyncawait/src/Makefile.PL b/lang/perl/perl-future-asyncawait/src/Makefile.PL
new file mode 100644 (file)
index 0000000..22882af
--- /dev/null
@@ -0,0 +1,19 @@
+require 5.016;
+use ExtUtils::MakeMaker;
+WriteMakefile
+(
+  'NAME' => 'Future::AsyncAwait',
+  'VERSION_FROM' => 'lib/Future/AsyncAwait.pm',
+  'PREREQ_PM' => {
+                   'Future' => '0.50',
+                   'XS::Parse::Keyword' => '0.13',
+                   'XS::Parse::Sublike' => '0.31',
+                 },
+  'INSTALLDIRS' => 'site',
+  'EXE_FILES' => [],
+  'PL_FILES' => {},
+  'INC' => '-I. -Ishare/include -Ihax -I'.$ENV{STAGING_PREFIX}.'/share/perl/include',
+  'XSMULTI' => 1,
+)
+;
+
diff --git a/lang/perl/perl-future/Makefile b/lang/perl/perl-future/Makefile
new file mode 100644 (file)
index 0000000..4b11369
--- /dev/null
@@ -0,0 +1,48 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-future
+PKG_VERSION:=0.51
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=Future
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=563ce37383a000ecfd6b7942dd0f4b9fafb2b2c45e0b731029361f261c2f4a36
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-future
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Future represents an operation awaiting completion
+  URL:=https://metacpan.org/pod/Future
+  DEPENDS:=perl +perlbase-essential +perlbase-b +perlbase-time +perlbase-list
+endef
+
+define Package/perl-future/description
+  A Future object represents an operation that is currently in progress,
+  or has recently completed. It can be used in a variety of ways to manage
+  the flow of control, and data, through an asynchronous program.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-future/install
+       $(call perlmod/Install,$(1),Future.pm Future)
+endef
+
+
+$(eval $(call BuildPackage,perl-future))
diff --git a/lang/perl/perl-future/src/Makefile.PL b/lang/perl/perl-future/src/Makefile.PL
new file mode 100644 (file)
index 0000000..e1a78d8
--- /dev/null
@@ -0,0 +1,17 @@
+require 5.014;
+use ExtUtils::MakeMaker;
+WriteMakefile
+(
+  'NAME' => 'Future',
+  'VERSION_FROM' => 'lib/Future.pm',
+  'PREREQ_PM' => {
+                   'Carp' => '1.25',
+                   'List::Util' => '1.29',
+                   'Time::HiRes' => 0,
+                 },
+  'INSTALLDIRS' => 'site',
+  'EXE_FILES' => [],
+  'PL_FILES' => {}
+)
+;
+
diff --git a/lang/perl/perl-html-form/Makefile b/lang/perl/perl-html-form/Makefile
new file mode 100644 (file)
index 0000000..04cc084
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-html-form
+PKG_VERSION:=6.07
+PKG_RELEASE:=1
+
+PKG_SOURCE:=HTML-Form-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_HASH:=7daa8c7eaff4005501c3431c8bf478d58bbee7b836f863581aa14afe1b4b6227
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTML-Form-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-html-form
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Class that represents an HTML form element
+  URL:=https://search.cpan.org/dist/HTML-Form/
+  DEPENDS:=perl +perl-html-parser +perl-http-message +perl-uri +perlbase-encode +perlbase-essential
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-html-form/install
+        $(call perlmod/Install,$(1),HTML auto/HTML)
+endef
+
+
+$(eval $(call BuildPackage,perl-html-form))
diff --git a/lang/perl/perl-html-parser/Makefile b/lang/perl/perl-html-parser/Makefile
new file mode 100644 (file)
index 0000000..c956b2f
--- /dev/null
@@ -0,0 +1,64 @@
+#
+# Copyright (C) 2014 - 2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-html-parser
+PKG_VERSION:=3.75
+PKG_RELEASE:=1
+
+PKG_SOURCE:=HTML-Parser-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/C/CA/CAPOEIRAB
+PKG_HASH:=ac6b5e25a8df7af54885201e91c45fb9ab6744c08cedc1a38fcc7d95d21193a9
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_CPE_ID:=cpe:/a:derrick_oswald:html-parser
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTML-Parser-$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/HTML-Parser-$(PKG_VERSION)
+HOST_BUILD_DEPENDS:=perl/host
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perl/perlmod.mk
+
+define Package/perl-html-parser
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=A collection of modules that parse HTML text documents
+  URL:=http://search.cpan.org/dist/HTML-Parser/
+  DEPENDS:=perl +perl-html-tagset +perlbase-essential +perlbase-xsloader
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-html-parser/install
+       $(call perlmod/Install,$(1),HTML auto/HTML)
+endef
+
+define Host/Configure
+       $(call perlmod/host/Configure,,,)
+endef
+
+define Host/Compile
+       $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+       $(call perlmod/host/Install,$(1),)
+endef
+
+$(eval $(call BuildPackage,perl-html-parser))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-html-tagset/Makefile b/lang/perl/perl-html-tagset/Makefile
new file mode 100644 (file)
index 0000000..ce5e5ac
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-html-tagset
+PKG_VERSION:=3.20
+PKG_RELEASE:=4
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/P/PE/PETDANCE/
+PKG_SOURCE:=HTML-Tagset-$(PKG_VERSION).tar.gz
+PKG_HASH:=adb17dac9e36cd011f5243881c9739417fd102fce760f8de4e9be4c7131108e2
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTML-Tagset-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-html-tagset
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Data tables pertaining to HTML
+  URL:=http://search.cpan.org/dist/HTML-Tagset/
+  DEPENDS:=perl +perlbase-essential
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-html-tagset/install
+       $(call perlmod/Install,$(1),HTML)
+endef
+
+
+$(eval $(call BuildPackage,perl-html-tagset))
diff --git a/lang/perl/perl-html-tree/Makefile b/lang/perl/perl-html-tree/Makefile
new file mode 100644 (file)
index 0000000..b0eceea
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-html-tree
+PKG_VERSION:=3.23
+PKG_RELEASE:=5
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/P/PE/PETEK/
+PKG_SOURCE:=HTML-Tree-$(PKG_VERSION).tar.gz
+PKG_HASH:=f5175acf262f3710dce899796ea3e353049939400b100706d03df2f08803c8de
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTML-Tree-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-html-tree
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Represent and create HTML syntax trees
+  URL:=http://search.cpan.org/dist/HTML-Tree/
+  DEPENDS:=perl +perl-html-parser +perl-html-tagset +perlbase-essential +perlbase-integer
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-html-tree/install
+       $(call perlmod/Install,$(1),HTML)
+endef
+
+
+$(eval $(call BuildPackage,perl-html-tree))
diff --git a/lang/perl/perl-http-cookies/Makefile b/lang/perl/perl-http-cookies/Makefile
new file mode 100644 (file)
index 0000000..0bdaf13
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-http-cookies
+PKG_VERSION:=6.08
+PKG_RELEASE:=1
+
+PKG_SOURCE:=HTTP-Cookies-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_HASH:=49ebb73576eb41063c04bc079477df094496deec805ae033f3be338c23c3af59
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Cookies-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-http-cookies
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=HTTP cookie jars
+  URL:=https://search.cpan.org/dist/HTTP-Cookies/
+  DEPENDS:=perl +perl-http-date +perl-http-message +perlbase-essential +perlbase-time
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-http-cookies/install
+        $(call perlmod/Install,$(1),HTTP auto/HTTP)
+endef
+
+
+$(eval $(call BuildPackage,perl-http-cookies))
diff --git a/lang/perl/perl-http-daemon/Makefile b/lang/perl/perl-http-daemon/Makefile
new file mode 100644 (file)
index 0000000..fbecb42
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-http-daemon
+PKG_VERSION:=6.06
+PKG_RELEASE:=1
+
+PKG_SOURCE:=HTTP-Daemon-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_HASH:=fc03a161b54553f766457a4267e7066767f54ad01cacfe9a91d7caa2a0319bad
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Daemon-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENCE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-http-daemon
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=A simple http server class
+  URL:=http://search.cpan.org/dist/HTTP-Daemon/
+  DEPENDS:=perl +perl-http-date +perl-http-message +perl-lwp-mediatypes +perlbase-essential +perlbase-io +perlbase-sys
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-http-daemon/install
+        $(call perlmod/Install,$(1),HTTP auto/HTTP)
+endef
+
+
+$(eval $(call BuildPackage,perl-http-daemon))
diff --git a/lang/perl/perl-http-date/Makefile b/lang/perl/perl-http-date/Makefile
new file mode 100644 (file)
index 0000000..916a0b8
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-http-date
+PKG_VERSION:=6.05
+PKG_RELEASE:=2
+
+PKG_SOURCE:=HTTP-Date-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_HASH:=365d6294dfbd37ebc51def8b65b81eb79b3934ecbc95a2ec2d4d827efe6a922b
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Date-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-http-date
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Date conversion routines
+  URL:=http://search.cpan.org/dist/HTTP-Date/
+  DEPENDS:=perl +perlbase-essential +perlbase-time
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-http-date/install
+        $(call perlmod/Install,$(1),HTTP auto/HTTP)
+endef
+
+
+$(eval $(call BuildPackage,perl-http-date))
diff --git a/lang/perl/perl-http-message/Makefile b/lang/perl/perl-http-message/Makefile
new file mode 100644 (file)
index 0000000..cc0d965
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-http-message
+PKG_VERSION:=6.22
+PKG_RELEASE:=1
+
+PKG_SOURCE:=HTTP-Message-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_HASH:=970efd151b81c95831d2a5f9e117f8032b63a1768cd2cd3f092ad634c85175c3
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Message-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-http-message
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=HTTP style messages
+  URL:=https://search.cpan.org/dist/HTTP-Message/
+  DEPENDS:=perl +perl-encode-locale +perl-http-date +perl-io-html +perl-lwp-mediatypes +perl-uri +perlbase-base +perlbase-compress +perlbase-encode +perlbase-essential +perlbase-io +perlbase-mime
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-http-message/install
+        $(call perlmod/Install,$(1),HTTP auto/HTTP)
+endef
+
+
+$(eval $(call BuildPackage,perl-http-message))
diff --git a/lang/perl/perl-http-negotiate/Makefile b/lang/perl/perl-http-negotiate/Makefile
new file mode 100644 (file)
index 0000000..bc21831
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-http-negotiate
+PKG_VERSION:=6.01
+PKG_RELEASE:=2
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GA/GAAS
+PKG_SOURCE:=HTTP-Negotiate-$(PKG_VERSION).tar.gz
+PKG_HASH:=1c729c1ea63100e878405cda7d66f9adfd3ed4f1d6cacaca0ee9152df728e016
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Negotiate-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-http-negotiate
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Choose a variant to serve
+  URL:=http://search.cpan.org/dist/HTTP-Negotiate/
+  DEPENDS:=perl +perl-http-message +perlbase-essential
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-http-negotiate/install
+        $(call perlmod/Install,$(1),HTTP auto/HTTP)
+endef
+
+
+$(eval $(call BuildPackage,perl-http-negotiate))
diff --git a/lang/perl/perl-http-server-simple/Makefile b/lang/perl/perl-http-server-simple/Makefile
new file mode 100644 (file)
index 0000000..d0fb2d6
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-http-server-simple
+PKG_VERSION:=0.52
+PKG_RELEASE:=1
+
+PKG_SOURCE:=HTTP-Server-Simple-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/B/BP/BPS
+PKG_HASH:=d8939fa4f12bd6b8c043537fd0bf96b055ac3686b9cdd9fa773dca6ae679cb4c
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/HTTP-Server-Simple-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-http-server-simple
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Lightweight HTTP server
+  URL:=https://search.cpan.org/dist/HTTP-Server-Simple/
+  DEPENDS:=perl +perl-cgi +perlbase-base +perlbase-essential +perlbase-filehandle +perlbase-socket +perlbase-test
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-http-server-simple/install
+        $(call perlmod/Install,$(1),HTTP auto/HTTP)
+endef
+
+
+$(eval $(call BuildPackage,perl-http-server-simple))
diff --git a/lang/perl/perl-inline-c/Makefile b/lang/perl/perl-inline-c/Makefile
new file mode 100644 (file)
index 0000000..6c52218
--- /dev/null
@@ -0,0 +1,66 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-inline-c
+PKG_VERSION:=0.81
+PKG_RELEASE:=1
+
+PKG_SOURCE:=Inline-C-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/T/TI/TINITA
+PKG_HASH:=f185258d9050d7f79b4f00f12625cc469c2f700ff62d3e831cb18d80d2c87aac
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/Inline-C-$(PKG_VERSION)
+HOST_BUILD_DEPENDS:=perl/host perl-inline/host perl-parse-recdescent/host perl-file-sharedir-install/host
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Inline-C-$(PKG_VERSION)
+PKG_BUILD_DEPENDS:=perl-inline/host perl-parse-recdescent/host perl-file-sharedir-install/host
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-inline-c
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=C Language Support for Inline
+  URL:=https://search.cpan.org/dist/Inline-C/
+  DEPENDS:=perl +perl-inline +perl-parse-recdescent +perlbase-config +perlbase-cwd +perlbase-data +perlbase-essential +perlbase-file +perlbase-if
+endef
+
+define Host/Configure
+        $(call perlmod/host/Configure,,,)
+endef
+
+define Host/Compile
+        $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+        $(call perlmod/host/Install,$(1),)
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-inline-c/install
+        $(call perlmod/Install,$(1),Inline auto/Inline)
+endef
+
+
+$(eval $(call BuildPackage,perl-inline-c))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-inline-c/patches/100-inline_c-no_compile_hack.patch b/lang/perl/perl-inline-c/patches/100-inline_c-no_compile_hack.patch
new file mode 100644 (file)
index 0000000..b001c20
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/lib/Inline/C.pm
++++ b/lib/Inline/C.pm
+@@ -380,7 +380,7 @@ sub build {
+     $o->call('write_XS', 'Build Glue 1');
+     $o->call('write_Inline_headers', 'Build Glue 2');
+     $o->call('write_Makefile_PL', 'Build Glue 3');
+-    $o->call('compile', 'Build Compile');
++    $o->call('compile', 'Build Compile') unless $ENV{'_INLINE_C_NO_COMPILE_'};
+     if (IS_WIN32) {
+         $lockfh->release or die "releasemutex $file: $^E";
+     }
diff --git a/lang/perl/perl-inline-c/patches/110-inline_c-make_system_typemap_overridable.patch b/lang/perl/perl-inline-c/patches/110-inline_c-make_system_typemap_overridable.patch
new file mode 100644 (file)
index 0000000..d26318a
--- /dev/null
@@ -0,0 +1,46 @@
+--- a/lib/Inline/C.pm
++++ b/lib/Inline/C.pm
+@@ -457,22 +457,28 @@ sub get_maps {
+     print STDERR "get_maps Stage\n" if $o->{CONFIG}{BUILD_NOISY};
+     my $typemap = '';
+     my $file;
+-    $file = File::Spec->catfile(
+-        $Config::Config{installprivlib},
+-        "ExtUtils",
+-        "typemap",
+-    );
+-    $typemap = $file if -f $file;
+-    $file = File::Spec->catfile(
+-        $Config::Config{privlibexp}
+-        ,"ExtUtils","typemap"
+-    );
+-    $typemap = $file
+-        if (not $typemap and -f $file);
+-    warn "Can't find the default system typemap file"
+-        if (not $typemap and $^W);
++    
++    unless ($ENV{'_INLINE_C_SYSTEM_TYPEMAP_'}) {
++        $file = File::Spec->catfile(
++            $Config::Config{installprivlib},
++            "ExtUtils",
++            "typemap",
++        );
++        $typemap = $file if -f $file;
++        $file = File::Spec->catfile(
++            $Config::Config{privlibexp}
++            ,"ExtUtils","typemap"
++        );
++        $typemap = $file
++            if (not $typemap and -f $file);
++        warn "Can't find the default system typemap file"
++            if (not $typemap and $^W);
+-    unshift(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, $typemap) if $typemap;
++        unshift(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, $typemap) if $typemap;
++    }
++    else {
++        unshift(@{$o->{ILSM}{MAKEFILE}{TYPEMAPS}}, $ENV{'_INLINE_C_SYSTEM_TYPEMAP_'});
++    }
+     if (not $o->UNTAINT) {
+         require FindBin;
diff --git a/lang/perl/perl-inline/Makefile b/lang/perl/perl-inline/Makefile
new file mode 100644 (file)
index 0000000..fcbbc57
--- /dev/null
@@ -0,0 +1,66 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-inline
+PKG_VERSION:=0.86
+PKG_RELEASE:=1
+
+PKG_SOURCE:=Inline-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/I/IN/INGY
+PKG_HASH:=510a7de2d011b0db80b0874e8c0f7390010991000ae135cff7474df1e6d51e3a
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Inline-$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/Inline-$(PKG_VERSION)
+
+HOST_BUILD_DEPENDS:=perl/host
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-inline
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Write subroutines in other languages
+  URL:=https://search.cpan.org/dist/Inline/
+  DEPENDS:=perl +perlbase-base +perlbase-config +perlbase-cwd +perlbase-digest +perlbase-essential +perlbase-fcntl +perlbase-file
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-inline/install
+        $(call perlmod/Install,$(1),Inline.pm Inline auto/Inline)
+endef
+
+define Host/Configure
+       $(call perlmod/host/Configure,,,)
+endef
+
+define Host/Compile
+       $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+       $(call perlmod/host/Install,$(1),)
+endef
+
+
+$(eval $(call BuildPackage,perl-inline))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-io-async-ssl/Makefile b/lang/perl/perl-io-async-ssl/Makefile
new file mode 100644 (file)
index 0000000..0cd8ec9
--- /dev/null
@@ -0,0 +1,46 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-io-async-ssl
+PKG_VERSION:=0.25
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=IO-Async-SSL
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=4def485db1eff4e139b4b5912202c0fd61c3aed2cec35bd5ab8bf7bbd83f5a75
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-io-async-ssl
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=SSL/TLS with IO::Async
+  URL:=https://metacpan.org/pod/IO::Async::SSL
+  DEPENDS:=perl +perlbase-io +perl-future +perl-io-async
+endef
+
+define Package/perl-io-async-ssl/description
+  This module extends existing IO::Async classes with extra methods to
+  allow the use of SSL or TLS-based connections using IO::Socket::SSL.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-io-async-ssl/install
+       $(call perlmod/Install,$(1),IO)
+endef
+
+$(eval $(call BuildPackage,perl-io-async-ssl))
diff --git a/lang/perl/perl-io-async-ssl/src/Makefile.PL b/lang/perl/perl-io-async-ssl/src/Makefile.PL
new file mode 100644 (file)
index 0000000..2f948c2
--- /dev/null
@@ -0,0 +1,20 @@
+use 5.014;
+use ExtUtils::MakeMaker;
+WriteMakefile
+(
+  'NAME' => 'IO::Async::SSL',
+  'VERSION_FROM' => 'lib/IO/Async/SSL.pm',
+  'PREREQ_PM' => {
+                   'Future' => '0.33',
+                   'IO::Async::Loop' => '0.66',
+                   'IO::Async::Handle' => '0.29',
+                   'IO::Async::Protocol::Stream' => 0,
+                   'IO::Async::Stream' => '0.59',
+                   'IO::Socket::SSL' => '2.003',
+                 },
+  'INSTALLDIRS' => 'site',
+  'EXE_FILES' => [],
+  'PL_FILES' => {}
+)
+;
+
diff --git a/lang/perl/perl-io-async/Makefile b/lang/perl/perl-io-async/Makefile
new file mode 100644 (file)
index 0000000..00838fa
--- /dev/null
@@ -0,0 +1,47 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-io-async
+PKG_VERSION:=0.804
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=IO-Async
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=90615432918164cd6f9e6dc2521195a4589606ffd017e03d5aa97f407d39c494
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-io-async
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Asynchronous event-driven programming for Perl
+  URL:=https://metacpan.org/pod/Net::SSLeay
+  DEPENDS:=perl +perlbase-essential +perlbase-file +perlbase-io +perlbase-list +perlbase-socket +perlbase-storable +perlbase-time +perlbase-encode +perlbase-experimental +perl-future +perl-struct-dumb
+endef
+
+define Package/perl-io-async/description
+  This collection of modules allows programs to be written that perform
+  asynchronous filehandle IO operations.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-io-async/install
+       $(call perlmod/Install,$(1),IO Future)
+endef
+
+$(eval $(call BuildPackage,perl-io-async))
+
diff --git a/lang/perl/perl-io-async/src/Makefile.PL b/lang/perl/perl-io-async/src/Makefile.PL
new file mode 100644 (file)
index 0000000..1c08060
--- /dev/null
@@ -0,0 +1,24 @@
+require 5.014;
+use ExtUtils::MakeMaker;
+WriteMakefile
+(
+  'NAME' => 'IO::Async',
+  'VERSION_FROM' => 'lib/IO/Async.pm',
+  'PREREQ_PM' => {
+                   'Future' => '0.44',
+                   'Future::Utils' => '0.18',
+                   'Exporter' => '5.57',
+                   'File::stat' => 0,
+                   'IO::Poll' => 0,
+                   'List::Util' => 0,
+                   'Socket' => '2.007',
+                   'Storable' => 0,
+                   'Struct::Dumb' => 0,
+                   'Time::HiRes' => 0,
+                 },
+  'INSTALLDIRS' => 'site',
+  'EXE_FILES' => [],
+  'PL_FILES' => {}
+)
+;
+
diff --git a/lang/perl/perl-io-html/Makefile b/lang/perl/perl-io-html/Makefile
new file mode 100644 (file)
index 0000000..5b94a5b
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-io-html
+PKG_VERSION:=1.001
+PKG_RELEASE:=2
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/C/CJ/CJM
+PKG_SOURCE:=IO-HTML-$(PKG_VERSION).tar.gz
+PKG_HASH:=ea78d2d743794adc028bc9589538eb867174b4e165d7d8b5f63486e6b828e7e0
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/IO-HTML-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-io-html
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Open an HTML file with automatic charset detection
+  URL:=http://search.cpan.org/dist/IO-HTML/
+  DEPENDS:=perl +perlbase-encode +perlbase-essential
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-io-html/install
+        $(call perlmod/Install,$(1),IO auto/IO)
+endef
+
+
+$(eval $(call BuildPackage,perl-io-html))
diff --git a/lang/perl/perl-io-socket-ssl/Makefile b/lang/perl/perl-io-socket-ssl/Makefile
new file mode 100644 (file)
index 0000000..a7275b9
--- /dev/null
@@ -0,0 +1,48 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-io-socket-ssl
+PKG_VERSION:=2.090
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=IO-Socket-SSL
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/S/SU/SULLR
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=fdda17888df9f88251b62856f17fcac8f144858c72d7e01d1c4b437d23383d97
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-io-socket-ssl
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl SSL sockets with IO::Socket interface
+  URL:=https://metacpan.org/pod/Net::SSLeay
+  DEPENDS:=perl +perlbase-autoloader +perlbase-io +perlbase-list +perl-net-ssleay
+endef
+
+define Package/perl-io-socket-ssl/description
+  IO::Socket::SSL makes using SSL/TLS much easier by wrapping the
+  functionality into the familiar IO::Socket interface and providing
+  secure defaults whenever possible.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-io-socket-ssl/install
+       $(call perlmod/Install,$(1),IO)
+endef
+
+$(eval $(call BuildPackage,perl-io-socket-ssl))
+
diff --git a/lang/perl/perl-lockfile-simple/Makefile b/lang/perl/perl-lockfile-simple/Makefile
new file mode 100644 (file)
index 0000000..aa69758
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-lockfile-simple
+PKG_VERSION:=0.208
+PKG_RELEASE:=4
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/S/SC/SCHWIGON/lockfile-simple/
+PKG_SOURCE:=LockFile-Simple-$(PKG_VERSION).tar.gz
+PKG_HASH:=45c77896b2a5a0a45f6202a6f813f437ff8b283f84a1c60d0c4f3730802af3a2
+
+PKG_LICENSE:=GPL-2.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/LockFile-Simple-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-lockfile-simple
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Simple advisory file locking
+  URL:=http://search.cpan.org/dist/LockFile-Simple/
+  DEPENDS:=perl +perlbase-essential +perlbase-sys
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-lockfile-simple/install
+       $(call perlmod/Install,$(1),LockFile auto/LockFile)
+endef
+
+
+$(eval $(call BuildPackage,perl-lockfile-simple))
diff --git a/lang/perl/perl-lwp-mediatypes/Makefile b/lang/perl/perl-lwp-mediatypes/Makefile
new file mode 100644 (file)
index 0000000..9b6d824
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-lwp-mediatypes
+PKG_VERSION:=6.04
+PKG_RELEASE:=1
+
+PKG_SOURCE:=LWP-MediaTypes-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_HASH:=8f1bca12dab16a1c2a7c03a49c5e58cce41a6fec9519f0aadfba8dad997919d9
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/LWP-MediaTypes-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-lwp-mediatypes
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Guess media type for a file or a URL
+  URL:=https://search.cpan.org/dist/LWP-MediaTypes/
+  DEPENDS:=perl +perlbase-essential
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-lwp-mediatypes/install
+        $(call perlmod/Install,$(1),LWP auto/LWP)
+endef
+
+
+$(eval $(call BuildPackage,perl-lwp-mediatypes))
diff --git a/lang/perl/perl-mail-spamassassin/Makefile b/lang/perl/perl-mail-spamassassin/Makefile
new file mode 100644 (file)
index 0000000..272f4a2
--- /dev/null
@@ -0,0 +1,101 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-mail-spamassassin
+PKG_RELEASE:=1
+PKG_VERSION:=4.0.1
+PKG_HASH:=5c6bb222e18405f1a276816d04e1ffc5cc90785e1265714b4506c2b541d6d5e5
+
+PKG_SOURCE_NAME:=Mail-SpamAssassin
+PKG_SOURCE_URL:=@APACHE/spamassassin/source
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+PKG_MAINTAINER:=Daniel Golle <[email protected]>
+PKG_LICENSE:=Apache-2.0
+PKG_LICENSE_FILES:=LICENSE
+PKG_CPE_ID:=cpe:/a:apache:spamassassin
+
+PKG_BUILD_DEPENDS:=perl-dbi/host perl-html-parser/host perl-net-dns/host perl-netaddr-ip/host
+PKG_INSTALL:=1
+PKG_SOURCE_VERSION:=$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+CONFIGURE_PATH:=spamc
+
+define Package/spamassassin
+  SECTION:=mail
+  CATEGORY:=Mail
+  TITLE:=SpamAssassin
+  URL:=https://spamassassin.apache.org/
+  DEPENDS:=perl +perlbase-autoloader +perlbase-config +perlbase-data +perlbase-digest \
+          +perlbase-encode +perlbase-essential +perlbase-file +perlbase-getopt \
+          +perlbase-hash +perlbase-mime +perlbase-net +perlbase-socket \
+          +perl-dbi +perl-html-parser +perl-net-dns +perl-netaddr-ip
+  VARIANT:=ssl
+endef
+
+define Package/spamc/Default
+  SECTION:=mail
+  CATEGORY:=Mail
+  TITLE:=SpamAssassin client binary
+  URL:=https://spamassassin.apache.org/
+  DEPENDS:=+zlib
+endef
+
+define Package/spamc
+  $(call Package/spamc/Default)
+  VARIANT:=nossl
+endef
+
+define Package/spamc-ssl
+  $(call Package/spamc/Default)
+  TITLE+= (with SSL)
+  DEPENDS+=+libopenssl
+  VARIANT:=ssl
+endef
+
+ifeq ($(BUILD_VARIANT),ssl)
+TARGET_CFLAGS += -DSPAMC_SSL
+CONFIGURE_ARGS += --enable-ssl
+endif
+
+define Package/spamassassin/conffiles
+/etc/mail/spamassassin
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+       $(call Build/Configure/Default)
+       ( cd "$(PKG_BUILD_DIR)/$(CONFIGURE_PATH)" && ./version.h.pl --with-version=$(PKG_SOURCE_VERSION) )
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+       $(call Build/Compile/Default,,,spamc)
+endef
+
+define Package/spamassassin/install
+       $(call perlmod/Install,$(1),Mail/SpamAssassin auto/Mail/SpamAssassin)
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-awl $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-learn $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-compile $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/spamassassin $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-update $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/spamd $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sa-check_spamd $(1)/usr/bin
+       $(INSTALL_DIR) $(1)/etc/mail/spamassassin
+       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/mail/spamassassin/* $(1)/etc/mail/spamassassin
+endef
+
+define Package/spamc/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/spamc $(1)/usr/bin
+endef
+
+Package/spamc-ssl/install = $(Package/spamc/install)
+
+$(eval $(call BuildPackage,spamassassin))
+$(eval $(call BuildPackage,spamc))
+$(eval $(call BuildPackage,spamc-ssl))
diff --git a/lang/perl/perl-metrics-any/Makefile b/lang/perl/perl-metrics-any/Makefile
new file mode 100644 (file)
index 0000000..bf2d06c
--- /dev/null
@@ -0,0 +1,45 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-metrics-any
+PKG_VERSION:=0.10
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=Metrics-Any
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=a90eadf9c8af24a516bb9a1b67061f641853f90b8fee9ffc24d2bb9720e8b99b
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-metrics-any
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Abstract collection of monitoring metrics
+  URL:=https://metacpan.org/pod/Metrics::Any
+  DEPENDS:=perl +perlbase-list
+endef
+
+define Package/perl-metrics-any/description
+  Provides a central location for modules to report monitoring metrics.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-metrics-any/install
+       $(call perlmod/Install,$(1),Metrics)
+endef
+
+$(eval $(call BuildPackage,perl-metrics-any))
diff --git a/lang/perl/perl-metrics-any/src/Makefile.PL b/lang/perl/perl-metrics-any/src/Makefile.PL
new file mode 100644 (file)
index 0000000..7a0d317
--- /dev/null
@@ -0,0 +1,15 @@
+use 5.014;
+use ExtUtils::MakeMaker;
+WriteMakefile
+(
+  'NAME' => 'Metrics::Any',
+  'VERSION_FROM' => 'lib/Metrics/Any.pm',
+  'PREREQ_PM' => {
+                   'List::Util' => '1.29',
+                 },
+  'INSTALLDIRS' => 'site',
+  'EXE_FILES' => [],
+  'PL_FILES' => {}
+)
+;
+
diff --git a/lang/perl/perl-net-async-http/Makefile b/lang/perl/perl-net-async-http/Makefile
new file mode 100644 (file)
index 0000000..6d36bb9
--- /dev/null
@@ -0,0 +1,46 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-net-async-http
+PKG_VERSION:=0.50
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=Net-Async-HTTP
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=92845b8ffdd2dc81decbe8a7b99203e4e34971de6624acb5c10aa9ff07885b87
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-net-async-http
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=HTTP with IO::Async
+  URL:=https://metacpan.org/pod/Net::Async::HTTP
+  DEPENDS:=perl +perlbase-list +perlbase-socket +perlbase-time +perl-future +perl-http-message +perl-io-async +perl-metrics-any +perl-struct-dumb +perl-uri
+endef
+
+define Package/perl-net-async-http/description
+  This object class implements an asynchronous HTTP user agent.
+  Similar to LWP::UserAgent, but for IO::Async.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-net-async-http/install
+       $(call perlmod/Install,$(1),Net)
+endef
+
+$(eval $(call BuildPackage,perl-net-async-http))
diff --git a/lang/perl/perl-net-async-http/src/Makefile.PL b/lang/perl/perl-net-async-http/src/Makefile.PL
new file mode 100644 (file)
index 0000000..77be2c2
--- /dev/null
@@ -0,0 +1,28 @@
+use 5.014;
+use ExtUtils::MakeMaker;
+WriteMakefile
+(
+  'NAME' => 'Net::Async::HTTP',
+  'VERSION_FROM' => 'lib/Net/Async/HTTP.pm',
+  'PREREQ_PM' => {
+                   'Future' => '0.28',
+                   'Future::Utils' => '0.16',
+                   'HTTP::Request' => 0,
+                   'HTTP::Request::Common' => 0,
+                   'HTTP::Response' => 0,
+                   'IO::Async::Loop' => '0.59',
+                   'IO::Async::Stream' => '0.59',
+                   'IO::Async::Timer::Countdown' => 0,
+                   'List::Util' => "1.29",
+                   'Metrics::Any' => '0.05',
+                   'Socket' => '2.010',
+                   'Struct::Dumb' => '0.07',
+                   'Time::HiRes' => 0,
+                   'URI' => 0,
+                 },
+  'INSTALLDIRS' => 'site',
+  'EXE_FILES' => [],
+  'PL_FILES' => {}
+)
+;
+
diff --git a/lang/perl/perl-net-cidr-lite/Makefile b/lang/perl/perl-net-cidr-lite/Makefile
new file mode 100644 (file)
index 0000000..f0d8175
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2020 Philip Prindeville, Redfish Solutions, LLC
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-net-cidr-lite
+PKG_VERSION:=0.21
+PKG_RELEASE:=1
+
+PKG_SOURCE:=Net-CIDR-Lite-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/D/DO/DOUGW
+PKG_HASH:=cfa125e8a2aef9259bc3a44e07cbdfb7894b64d22e7c0cee92aee2f5c7915093
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Net-CIDR-Lite-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Philip Prindeville <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-net-cidr-lite
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl extension for merging IPv4 or IPv6 CIDR addresses
+  URL:=https://search.cpan.org/dist/Net-CIDR-Lite/
+  DEPENDS:=perl +perlbase-essential +perlbase-config +perlbase-io +perlbase-dynaloader
+  PKGARCH:=all
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-net-cidr-lite/install
+        $(call perlmod/Install,$(1),Net Net/CIDR Net/CIDR/Lite.pm)
+endef
+
+
+$(eval $(call BuildPackage,perl-net-cidr-lite))
diff --git a/lang/perl/perl-net-dns-sec/Makefile b/lang/perl/perl-net-dns-sec/Makefile
new file mode 100644 (file)
index 0000000..2c81fbf
--- /dev/null
@@ -0,0 +1,45 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-net-dns-sec
+PKG_VERSION:=1.26
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=Net-DNS-SEC
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/N/NL/NLNETLABS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=88592c65487fb7b4d05134f2f9c48e649a9cd533a8493c50189b649b4ea711a6
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-net-dns-sec
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=DNSSEC extensions to Net::DNS
+  URL:=https://metacpan.org/pod/Net::DNS::SEC
+  DEPENDS:=perl +perlbase-essential +perlbase-dynaloader +perlbase-file +perlbase-io +perlbase-mime +perl-net-dns +libopenssl
+endef
+
+define Package/perl-net-dns-sec/description
+  This module extends Net::DNS to support DNSSEC
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-net-dns-sec/install
+       $(call perlmod/Install,$(1),Net auto/Net)
+endef
+
+$(eval $(call BuildPackage,perl-net-dns-sec))
diff --git a/lang/perl/perl-net-dns/Makefile b/lang/perl/perl-net-dns/Makefile
new file mode 100644 (file)
index 0000000..c14e813
--- /dev/null
@@ -0,0 +1,56 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-net-dns
+PKG_VERSION:=1.50
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=Net-DNS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://www.net-dns.org/download
+PKG_HASH:=c660500b9d96e5aa2b16d9f4260b6f9f05b5602d3c4bea0ca39b45bcd02ba993
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Daniel Golle <[email protected]>
+PKG_LICENSE:=MIT
+HOST_BUILD_DEPENDS:=perl/host
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-net-dns
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Net::DNS DNS resolver implemented in Perl
+  URL:=https://www.net-dns.org/
+  DEPENDS:=perl +perlbase-essential +perlbase-io
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-net-dns/install
+        $(call perlmod/Install,$(1),Net auto/Net)
+endef
+
+define Host/Configure
+        $(call perlmod/host/Configure,,,)
+endef
+
+define Host/Compile
+        $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+        $(call perlmod/host/Install,$(1),)
+endef
+
+$(eval $(call BuildPackage,perl-net-dns))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-net-http/Makefile b/lang/perl/perl-net-http/Makefile
new file mode 100644 (file)
index 0000000..c8e0240
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-net-http
+PKG_VERSION:=6.19
+PKG_RELEASE:=1
+
+PKG_SOURCE:=Net-HTTP-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_HASH:=52b76ec13959522cae64d965f15da3d99dcb445eddd85d2ce4e4f4df385b2fc4
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Net-HTTP-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-net-http
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Low-level HTTP connection (client)
+  URL:=https://search.cpan.org/dist/Net-HTTP/
+  DEPENDS:=perl +perl-uri +perlbase-compress +perlbase-essential +perlbase-io
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-net-http/install
+        $(call perlmod/Install,$(1),Net auto/Net)
+endef
+
+
+$(eval $(call BuildPackage,perl-net-http))
diff --git a/lang/perl/perl-net-ssleay/Makefile b/lang/perl/perl-net-ssleay/Makefile
new file mode 100644 (file)
index 0000000..3306b7b
--- /dev/null
@@ -0,0 +1,47 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-net-ssleay
+PKG_VERSION:=1.94
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=Net-SSLeay
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/C/CH/CHRISN
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=9d7be8a56d1bedda05c425306cc504ba134307e0c09bda4a788c98744ebcd95d
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-net-ssleay
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl bindings for OpenSSL and LibreSSL
+  URL:=https://metacpan.org/pod/Net::SSLeay
+  DEPENDS:=perl +perlbase-essential +perlbase-mime +libopenssl +zlib
+endef
+
+define Package/perl-net-ssleay/description
+  This module provides Perl bindings for libssl (an SSL/TLS API)
+  and libcrypto (a cryptography API).
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-net-ssleay/install
+       $(call perlmod/Install,$(1),Net auto/Net)
+endef
+
+$(eval $(call BuildPackage,perl-net-ssleay))
+
diff --git a/lang/perl/perl-net-ssleay/patches/001-prefix.patch b/lang/perl/perl-net-ssleay/patches/001-prefix.patch
new file mode 100644 (file)
index 0000000..7b85d46
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -12,6 +12,8 @@ use File::Spec::Functions qw(catfile);
+ use Symbol qw(gensym);
+ use Text::Wrap;
++$ENV{OPENSSL_PREFIX} = $ENV{STAGING_PREFIX};
++
+ # According to http://cpanwiki.grango.org/wiki/CPANAuthorNotes, the ideal
+ # behaviour to exhibit when a prerequisite does not exist is to use exit code 0
+ # to ensure smoke testers stop immediately without reporting a FAIL; in all
diff --git a/lang/perl/perl-net-telnet/Makefile b/lang/perl/perl-net-telnet/Makefile
new file mode 100644 (file)
index 0000000..9c6ea04
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2011-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-net-telnet
+PKG_VERSION:=3.04
+PKG_RELEASE:=4
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/J/JR/JROGERS/
+PKG_SOURCE:=Net-Telnet-$(PKG_VERSION).tar.gz
+PKG_HASH:=e64d567a4e16295ecba949368e7a6b8b5ae2a16b3ad682121d9b007dc5d2a37a
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Net-Telnet-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-net-telnet
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Telnet client
+  URL:=http://search.cpan.org/dist/Net-Telnet/
+  DEPENDS:=perl +perlbase-essential +perlbase-socket +perlbase-symbol
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-net-telnet/install
+       $(call perlmod/Install,$(1),Net auto/Net)
+endef
+
+
+$(eval $(call BuildPackage,perl-net-telnet))
diff --git a/lang/perl/perl-netaddr-ip/Makefile b/lang/perl/perl-netaddr-ip/Makefile
new file mode 100644 (file)
index 0000000..16f16e3
--- /dev/null
@@ -0,0 +1,62 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-netaddr-ip
+PKG_VERSION:=4.079
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=NetAddr-IP
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/M/MI/MIKER/
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=ec5a82dfb7028bcd28bb3d569f95d87dd4166cc19867f2184ed3a59f6d6ca0e7
+
+PKG_LICENSE:=GPL-2.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=Copying
+PKG_MAINTAINER:=Daniel Golle <[email protected]>
+
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/NetAddr-IP-$(PKG_VERSION)
+HOST_BUILD_DEPENDS:=perl/host
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/NetAddr-IP-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-netaddr-ip
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=NetAddr::IP - Manages IPv4 and IPv6 addresses and subnets
+  URL:=http://search.cpan.org/dist/NetAddr::IP/
+  DEPENDS:=perl +perlbase-essential +perlbase-test
+endef
+
+define Host/Configure
+       $(call perlmod/host/Configure,-noxs,,)
+       $(call Host/Configure/Default,,,Lite/Util)
+endef
+
+define Host/Compile
+       $(call Host/Compile/Default,,,Lite/Util)
+       $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+       $(call perlmod/host/Install,$(1),)
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,-noxs,)
+       $(call Build/Configure/Default,,,Lite/Util)
+endef
+
+define Build/Compile
+       $(call Build/Compile/Default,,,Lite/Util)
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-netaddr-ip/install
+       $(call perlmod/Install,$(1),NetAddr auto/NetAddr)
+endef
+
+$(eval $(call BuildPackage,perl-netaddr-ip))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-parse-recdescent/Makefile b/lang/perl/perl-parse-recdescent/Makefile
new file mode 100644 (file)
index 0000000..378c347
--- /dev/null
@@ -0,0 +1,64 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-parse-recdescent
+PKG_VERSION:=1.967015
+PKG_RELEASE:=2
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/J/JT/JTBRAUN
+PKG_SOURCE:=Parse-RecDescent-$(PKG_VERSION).tar.gz
+PKG_HASH:=1943336a4cb54f1788a733f0827c0c55db4310d5eae15e542639c9dd85656e37
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/Parse-RecDescent-$(PKG_VERSION)
+HOST_BUILD_DEPENDS:=perl/host
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Parse-RecDescent-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-parse-recdescent
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Generate Recursive-Descent Parsers
+  URL:=http://search.cpan.org/dist/Parse-RecDescent/
+  DEPENDS:=perl +perlbase-essential +perlbase-test +perlbase-text
+endef
+
+define Host/Configure
+        $(call perlmod/host/Configure,,,)
+endef
+
+define Host/Compile
+        $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+        $(call perlmod/host/Install,$(1),)
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-parse-recdescent/install
+        $(call perlmod/Install,$(1),Parse auto/Parse)
+endef
+
+
+$(eval $(call BuildPackage,perl-parse-recdescent))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-parse-yapp/Makefile b/lang/perl/perl-parse-yapp/Makefile
new file mode 100644 (file)
index 0000000..750dc07
--- /dev/null
@@ -0,0 +1,63 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-parse-yapp
+PKG_VERSION:=1.21
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/W/WB/WBRASWELL/
+PKG_SOURCE:=Parse-Yapp-$(PKG_VERSION).tar.gz
+PKG_HASH:=3810e998308fba2e0f4f26043035032b027ce51ce5c8a52a8b8e340ca65f13e5
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/Parse-Yapp-$(PKG_VERSION)
+HOST_BUILD_DEPENDS:=perl/host
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Parse-Yapp-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-parse-yapp
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Yet Another Parser Parser For Perl
+  URL:=http://search.cpan.org/dist/Parse-Yapp/
+  DEPENDS:=perl +perlbase-essential +perlbase-test
+endef
+
+define Host/Configure
+        $(call perlmod/host/Configure,,,)
+endef
+
+define Host/Compile
+        $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+        $(call perlmod/host/Install,$(1),)
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-parse-yapp/install
+        $(call perlmod/Install,$(1),Parse auto/Parse)
+endef
+
+
+$(eval $(call BuildPackage,perl-parse-yapp))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-struct-dumb/Makefile b/lang/perl/perl-struct-dumb/Makefile
new file mode 100644 (file)
index 0000000..37699ef
--- /dev/null
@@ -0,0 +1,47 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-struct-dumb
+PKG_VERSION:=0.14
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=Struct-Dumb
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=13c148536b10e28c6e0b4e132f29e4ca6e69b5749059c44157a27e84a5459436
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-struct-dumb
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Make simple lightweight record-like structures
+  URL:=https://metacpan.org/pod/Struct::Dumb
+  DEPENDS:=perl +perlbase-essential +perlbase-scalar
+endef
+
+define Package/perl-struct-dumb/description
+  Struct::Dumb creates record-like structure types,
+  similar to the struct keyword in C, C++ or Record in Pascal.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-struct-dumb/install
+       $(call perlmod/Install,$(1),Struct)
+endef
+
+$(eval $(call BuildPackage,perl-struct-dumb))
+
diff --git a/lang/perl/perl-struct-dumb/src/Makefile.PL b/lang/perl/perl-struct-dumb/src/Makefile.PL
new file mode 100644 (file)
index 0000000..aea8a7f
--- /dev/null
@@ -0,0 +1,15 @@
+require 5.014;
+use ExtUtils::MakeMaker;
+WriteMakefile
+(
+  'NAME' => 'Struct::Dumb',
+  'VERSION_FROM' => 'lib/Struct/Dumb.pm',
+  'PREREQ_PM' => {
+                   'Scalar::Util' => 0,
+                 },
+  'INSTALLDIRS' => 'site',
+  'EXE_FILES' => [],
+  'PL_FILES' => {}
+)
+;
+
diff --git a/lang/perl/perl-sub-uplevel/Makefile b/lang/perl/perl-sub-uplevel/Makefile
new file mode 100644 (file)
index 0000000..0b902cc
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-sub-uplevel
+PKG_VERSION:=0.2800
+PKG_RELEASE:=1
+
+PKG_SOURCE:=Sub-Uplevel-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/D/DA/DAGOLDEN
+PKG_HASH:=b4f3f63b80f680a421332d8851ddbe5a8e72fcaa74d5d1d98f3c8cc4a3ece293
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Sub-Uplevel-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-sub-uplevel
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Apparently run a function in a higher stack frame
+  URL:=https://search.cpan.org/dist/Sub-Uplevel/
+  DEPENDS:=perl +perlbase-essential
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-sub-uplevel/install
+        $(call perlmod/Install,$(1),Sub auto/Sub)
+endef
+
+
+$(eval $(call BuildPackage,perl-sub-uplevel))
diff --git a/lang/perl/perl-test-harness/Makefile b/lang/perl/perl-test-harness/Makefile
new file mode 100644 (file)
index 0000000..e667b45
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2014 - 2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-test-harness
+PKG_VERSION:=3.42
+PKG_RELEASE:=1
+
+PKG_SOURCE:=Test-Harness-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/L/LE/LEONT
+PKG_HASH:=0fd90d4efea82d6e262e6933759e85d27cbcfa4091b14bf4042ae20bab528e53
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Test-Harness-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-test-harness
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl Test Harness
+  URL:=https://search.cpan.org/dist/Test-Harness/
+  DEPENDS:=perl +perlbase-base +perlbase-benchmark +perlbase-config +perlbase-essential +perlbase-file +perlbase-getopt +perlbase-io +perlbase-posix +perlbase-text
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-test-harness/install
+       $(call perlmod/Install,$(1),App auto/Test TAP Test)
+endef
+
+
+$(eval $(call BuildPackage,perl-test-harness))
diff --git a/lang/perl/perl-test-warn/Makefile b/lang/perl/perl-test-warn/Makefile
new file mode 100644 (file)
index 0000000..110459a
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-test-warn
+PKG_VERSION:=0.36
+PKG_RELEASE:=1
+
+PKG_SOURCE:=Test-Warn-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/B/BI/BIGJ
+PKG_HASH:=ecbca346d379cef8d3c0e4ac0c8eb3b2613d737ffaaeae52271c38d7bf3c6cda
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Test-Warn-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-test-warn
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl extension to test methods for warnings
+  URL:=https://search.cpan.org/dist/Test-Warn/
+  DEPENDS:=perl +perl-sub-uplevel +perlbase-essential +perlbase-test
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-test-warn/install
+        $(call perlmod/Install,$(1),Test auto/Test)
+endef
+
+
+$(eval $(call BuildPackage,perl-test-warn))
diff --git a/lang/perl/perl-text-csv_xs/Makefile b/lang/perl/perl-text-csv_xs/Makefile
new file mode 100644 (file)
index 0000000..5de3cc5
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2017 Philip Prindeville, Redfish Solutions, LLC
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-text-csv_xs
+PKG_VERSION:=1.55
+PKG_RELEASE:=1
+
+PKG_SOURCE:=Text-CSV_XS-$(PKG_VERSION).tgz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/H/HM/HMBRAND
+PKG_HASH:=e4b623b31b4ac35e99d7b797d5b7c2205a5b984bcd88dee1a9460a6a39d40b5e
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Text-CSV_XS-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Philip Prindeville <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-text-csv_xs
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Text comma-separated values manipulation routines
+  URL:=https://search.cpan.org/dist/Text-CSV_XS/
+  DEPENDS:=perl +perlbase-essential +perlbase-config +perlbase-io +perlbase-dynaloader
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-text-csv_xs/install
+        $(call perlmod/Install,$(1),Text Text/CSV_XS.pm auto/Text/CSV_XS)
+endef
+
+
+$(eval $(call BuildPackage,perl-text-csv_xs))
diff --git a/lang/perl/perl-text-csv_xs/patches/900-fix-format-warnings.patch b/lang/perl/perl-text-csv_xs/patches/900-fix-format-warnings.patch
new file mode 100644 (file)
index 0000000..4885bb2
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/CSV_XS.xs
++++ b/CSV_XS.xs
+@@ -1235,14 +1235,14 @@ static void cx_ErrorDiag (pTHX_ csv_t *c
+     SV **svp;
+     if ((svp = hv_fetchs (csv->self, "_ERROR_DIAG", FALSE)) && *svp) {
+-      if (SvIOK (*svp)) (void)fprintf (stderr, "ERR: %d\n", SvIV (*svp));
++      if (SvIOK (*svp)) (void)fprintf (stderr, "ERR: %ld\n", SvIV (*svp));
+       if (SvPOK (*svp)) (void)fprintf (stderr, "ERR: %s\n", SvPV_nolen (*svp));
+       }
+     if ((svp = hv_fetchs (csv->self, "_ERROR_POS", FALSE)) && *svp) {
+-      if (SvIOK (*svp)) (void)fprintf (stderr, "POS: %d\n", SvIV (*svp));
++      if (SvIOK (*svp)) (void)fprintf (stderr, "POS: %ld\n", SvIV (*svp));
+       }
+     if ((svp = hv_fetchs (csv->self, "_ERROR_FLD", FALSE)) && *svp) {
+-      if (SvIOK (*svp)) (void)fprintf (stderr, "FLD: %d\n", SvIV (*svp));
++      if (SvIOK (*svp)) (void)fprintf (stderr, "FLD: %ld\n", SvIV (*svp));
+       }
+     } /* ErrorDiag */
diff --git a/lang/perl/perl-time-moment/Makefile b/lang/perl/perl-time-moment/Makefile
new file mode 100644 (file)
index 0000000..ff3dffb
--- /dev/null
@@ -0,0 +1,56 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-time-moment
+PKG_VERSION:=0.44
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=Time-Moment
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/C/CH/CHANSEN
+PKG_HASH:=64acfa042f634fcef8dadf55e7f42ba4eaab8aaeb7d5212eb89815a31f78f6fd
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Timothy Ace <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+HOST_BUILD_DEPENDS:=perl/host
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-time-moment
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Time::Moment Represents a date and time of day with an offset from UTC
+  URL:=https://github.com/chansen/p5-time-moment
+  DEPENDS:=perl +perlbase-essential +perlbase-time +perlbase-xsloader
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-time-moment/install
+        $(call perlmod/Install,$(1),Time auto/Time)
+endef
+
+define Host/Configure
+        $(call perlmod/host/Configure,,,)
+endef
+
+define Host/Compile
+        $(call perlmod/host/Compile,,)
+endef
+
+define Host/Install
+        $(call perlmod/host/Install,$(1),)
+endef
+
+$(eval $(call BuildPackage,perl-time-moment))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-try-tiny/Makefile b/lang/perl/perl-try-tiny/Makefile
new file mode 100644 (file)
index 0000000..81c3ebf
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2021 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-try-tiny
+PKG_VERSION:=0.32
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/E/ET/ETHER/
+PKG_SOURCE:=Try-Tiny-$(PKG_VERSION).tar.gz
+PKG_HASH:=ef2d6cab0bad18e3ab1c4e6125cc5f695c7e459899f512451c8fa3ef83fa7fc0
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/Try-Tiny-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Matt Merhar <[email protected]>
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-try-tiny
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Minimal try/catch with proper preservation of $$$$@
+  URL:=https://metacpan.org/pod/Try::Tiny
+  DEPENDS:=perl +perlbase-essential
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-try-tiny/install
+       $(call perlmod/Install,$(1),Try auto/Try)
+endef
+
+$(eval $(call BuildPackage,perl-try-tiny))
diff --git a/lang/perl/perl-uri/Makefile b/lang/perl/perl-uri/Makefile
new file mode 100644 (file)
index 0000000..c4f76e5
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 - 2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-uri
+PKG_VERSION:=1.76
+PKG_RELEASE:=1
+
+PKG_SOURCE:=URI-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_HASH:=b2c98e1d50d6f572483ee538a6f4ccc8d9185f91f0073fd8af7390898254413e
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/URI-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-uri
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Manipulates and accesses URI strings
+  URL:=https://search.cpan.org/dist/URI/
+  DEPENDS:=perl +perlbase-essential +perlbase-integer +perlbase-mime +perlbase-scalar +perlbase-utf8
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-uri/install
+       $(call perlmod/Install,$(1),URI URI.pm)
+endef
+
+
+$(eval $(call BuildPackage,perl-uri))
diff --git a/lang/perl/perl-www-curl/Makefile b/lang/perl/perl-www-curl/Makefile
new file mode 100644 (file)
index 0000000..ae6846d
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-www-curl
+PKG_VERSION:=4.17
+PKG_RELEASE:=7
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/S/SZ/SZBALINT/
+PKG_SOURCE:=WWW-Curl-$(PKG_VERSION).tar.gz
+PKG_HASH:=52ffab110e32348d775f241c973eb56f96b08eedbc110d77d257cdb0a24ab7ba
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/WWW-Curl-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-www-curl
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl bindings to libcurl
+  URL:=http://search.cpan.org/dist/WWW-Curl/
+  DEPENDS:=perl +libcurl +perlbase-essential +perlbase-xsloader
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,$(STAGING_DIR)/usr/include,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-www-curl/install
+       $(call perlmod/Install,$(1),WWW/Curl WWW/Curl.pm auto/WWW/Curl)
+endef
+
+
+$(eval $(call BuildPackage,perl-www-curl))
diff --git a/lang/perl/perl-www-curl/patches/100-perl-www-curl_disable_curl-config_hack.patch b/lang/perl/perl-www-curl/patches/100-perl-www-curl_disable_curl-config_hack.patch
new file mode 100644 (file)
index 0000000..568b65c
--- /dev/null
@@ -0,0 +1,74 @@
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -12,31 +12,31 @@ no_index           directory => 'template';
+ repository            'http://github.com/szbalint/WWW--Curl';
+ # This is a hack. If you have libcurl installed, just specify curl.h below
+ # and comment out this line.
+-if ($^O ne 'MSWin32') {
+-    if (!$ENV{CURL_CONFIG}) {
+-          requires_external_bin       'curl-config';
+-    }
+-} else {
+-      print   "Sorry, no automated install is available on Windows,\n".
+-              "please see the README.Win32 file on instructions for a manual install.\n";
+-      exit(0);
+-}
+-
+-my $curl_config = $ENV{CURL_CONFIG} || 'curl-config';
+-
+-my $vernum = `${curl_config} --vernum`; chomp $vernum;
+-my $version = `${curl_config} --version`; chomp $version; 
+-
+-my $minimum_ver = hex("070a08");
+-
+-if ($vernum && hex($vernum) <= $minimum_ver) {
+-      print   "Your currently installed libcurl version - $version - is too old.\n".
+-              "This module doesn't seek compatibility with versions older than 7.10.8\n".
+-              "Proceed manually if you know what you're doing.\n";
+-      exit(0);
+-}
+-
+-print "The version is $version\n";
++#if ($^O ne 'MSWin32') {
++#    if (!$ENV{CURL_CONFIG}) {
++#         requires_external_bin       'curl-config';
++#    }
++#} else {
++#     print   "Sorry, no automated install is available on Windows,\n".
++#             "please see the README.Win32 file on instructions for a manual install.\n";
++#     exit(0);
++#}
++#
++#my $curl_config = $ENV{CURL_CONFIG} || 'curl-config';
++#
++#my $vernum = `${curl_config} --vernum`; chomp $vernum;
++#my $version = `${curl_config} --version`; chomp $version; 
++#
++#my $minimum_ver = hex("070a08");
++#
++#if ($vernum && hex($vernum) <= $minimum_ver) {
++#     print   "Your currently installed libcurl version - $version - is too old.\n".
++#             "This module doesn't seek compatibility with versions older than 7.10.8\n".
++#             "Proceed manually if you know what you're doing.\n";
++#     exit(0);
++#}
++#
++#print "The version is $version\n";
+ my @includes = qw();
+ my ($cflags,$lflags, $ldflags) = ('','','');
+@@ -58,10 +58,10 @@ if ($^O ne 'MSWin32') {
+ # Get curl to tell us where it is, if we can.
+ #
+-if ($^O ne 'MSWin32') {
+-      $cflags = `${curl_config} --cflags`;
+-      $lflags = `${curl_config} --libs`;
+-}
++#if ($^O ne 'MSWin32') {
++#     $cflags = `${curl_config} --cflags`;
++#     $lflags = `${curl_config} --libs`;
++#}
+ # can't find link flags, make some guesses
+ if (!defined($lflags)) {
diff --git a/lang/perl/perl-www-curl/patches/101-skip-preprocessor-symbol.path b/lang/perl/perl-www-curl/patches/101-skip-preprocessor-symbol.path
new file mode 100644 (file)
index 0000000..8a46f5d
--- /dev/null
@@ -0,0 +1,29 @@
+From 0be0223422e6e5f4091c6e4e058d213623eed105 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <[email protected]>
+Date: Mon, 12 Sep 2016 14:40:44 +0200
+Subject: [PATCH] Skip preprocessor symbol only CURL_STRICTER
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+CURL_STRICTER leaked into curl-constants.c when building against
+curl-7.50.2. This is a preprocessor only macro without a value.
+
+CPAN RT#117793
+
+Signed-off-by: Petr PísaÅ™ <[email protected]>
+---
+ Makefile.PL | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -127,7 +127,7 @@ if (!defined($curl_h)) {
+     close H;
+     for my $e (sort @syms) {
+-       if($e =~ /(OBSOLETE|^CURL_EXTERN|_LAST\z|_LASTENTRY\z)/) {
++       if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z)/) {
+           next;
+        }
+        my ($group) = $e =~ m/^([^_]+_)/;
diff --git a/lang/perl/perl-www-curl/patches/200-fix_default_lflags.patch b/lang/perl/perl-www-curl/patches/200-fix_default_lflags.patch
new file mode 100644 (file)
index 0000000..f51eaf5
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -39,7 +39,7 @@ repository           'http://github.com/szbalint/
+ #print "The version is $version\n";
+ my @includes = qw();
+-my ($cflags,$lflags, $ldflags) = ('','','');
++my ($cflags,$lflags, $ldflags) = ('','-lcurl','');
+ # You may need to specify where to find curl.h on your platform
+ # These are guesses only, in case curl-config is not telling us.
diff --git a/lang/perl/perl-www-curl/patches/210-curl_7.66_compat.patch b/lang/perl/perl-www-curl/patches/210-curl_7.66_compat.patch
new file mode 100644 (file)
index 0000000..0ef5f65
--- /dev/null
@@ -0,0 +1,56 @@
+--- a/Curl.xs
++++ b/Curl.xs
+@@ -70,7 +70,7 @@ typedef struct {
+ typedef struct {
+-#ifdef __CURL_MULTI_H
++#ifdef CURLINC_MULTI_H
+     struct CURLM *curlm;
+ #else
+     struct void *curlm;
+@@ -234,7 +234,7 @@ static perl_curl_multi * perl_curl_multi
+ {
+     perl_curl_multi *self;
+     Newz(1, self, 1, perl_curl_multi);
+-#ifdef __CURL_MULTI_H
++#ifdef CURLINC_MULTI_H
+     self->curlm=curl_multi_init();
+ #else
+     croak("curl version too old to support curl_multi_init()");
+@@ -245,7 +245,7 @@ static perl_curl_multi * perl_curl_multi
+ /* delete the multi */
+ static void perl_curl_multi_delete(perl_curl_multi *self)
+ {
+-#ifdef __CURL_MULTI_H
++#ifdef CURLINC_MULTI_H
+     if (self->curlm) 
+         curl_multi_cleanup(self->curlm);
+     Safefree(self);
+@@ -1065,7 +1065,7 @@ curl_multi_add_handle(curlm, curl)
+     WWW::Curl::Multi curlm
+     WWW::Curl::Easy curl
+     CODE:
+-#ifdef __CURL_MULTI_H
++#ifdef CURLINC_MULTI_H
+         curl_multi_add_handle(curlm->curlm, curl->curl);
+ #endif
+@@ -1074,7 +1074,7 @@ curl_multi_remove_handle(curlm, curl)
+     WWW::Curl::Multi curlm
+     WWW::Curl::Easy curl
+     CODE:
+-#ifdef __CURL_MULTI_H
++#ifdef CURLINC_MULTI_H
+         curl_multi_remove_handle(curlm->curlm, curl->curl);
+ #endif
+@@ -1149,7 +1149,7 @@ curl_multi_perform(self)
+     PREINIT:
+         int remaining;
+     CODE:
+-#ifdef __CURL_MULTI_H
++#ifdef CURLINC_MULTI_H
+         while(CURLM_CALL_MULTI_PERFORM ==
+             curl_multi_perform(self->curlm, &remaining));
+           RETVAL = remaining;
diff --git a/lang/perl/perl-www-curl/patches/220-curl_7.69_compat.patch b/lang/perl/perl-www-curl/patches/220-curl_7.69_compat.patch
new file mode 100644 (file)
index 0000000..bfedb91
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -127,7 +127,7 @@ if (!defined($curl_h)) {
+     close H;
+     for my $e (sort @syms) {
+-       if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z)/) {
++       if($e =~ /(OBSOLETE|^CURL_EXTERN|CURLOPT\z|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z|WIN32)/) {
+           next;
+        }
+        my ($group) = $e =~ m/^([^_]+_)/;
diff --git a/lang/perl/perl-www-curl/patches/230-curl_7.88_compat.patch b/lang/perl/perl-www-curl/patches/230-curl_7.88_compat.patch
new file mode 100644 (file)
index 0000000..58a6160
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -127,7 +127,7 @@ if (!defined($curl_h)) {
+     close H;
+     for my $e (sort @syms) {
+-       if($e =~ /(OBSOLETE|^CURL_EXTERN|CURLOPT\z|^CURL_STRICTER\z|_LAST\z|_LASTENTRY\z|WIN32)/) {
++      if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURL_STRICTER\z|^CURL_DID_MEMORY_FUNC_TYPEDEFS\z|_LAST\z|_LASTENTRY\z|^CURLINC_|^CURL_WIN32\z|^CURL_DEPRECATED\z|^CURL_IGNORE_DEPRECATION\z|^CURLOPTDEPRECATED\z|^CURLOPT\z)/) {
+           next;
+        }
+        my ($group) = $e =~ m/^([^_]+_)/;
diff --git a/lang/perl/perl-www-mechanize/Makefile b/lang/perl/perl-www-mechanize/Makefile
new file mode 100644 (file)
index 0000000..bb72a91
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2010-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-www-mechanize
+PKG_VERSION:=1.96
+PKG_RELEASE:=1
+
+PKG_SOURCE:=WWW-Mechanize-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_HASH:=a79a613452287433a88e689195b09951a06c2df6d7fd40c15aa556452de9ab04
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/WWW-Mechanize-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-www-mechanize
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl WWW Mechanize
+  URL:=https://search.cpan.org/dist/WWW-Mechanize/
+  DEPENDS:=perl +perl-cgi +perl-html-form +perl-html-parser +perl-html-tree +perl-http-daemon +perl-http-message +perl-http-server-simple +perl-test-warn +perl-uri +perl-www +perlbase-base +perlbase-essential +perlbase-file +perlbase-findbin +perlbase-getopt +perlbase-pod +perlbase-test
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,$(STAGING_DIR)/usr/include,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-www-mechanize/install
+       $(call perlmod/Install,$(1),WWW/Mechanize WWW/Mechanize.pm)
+endef
+
+
+$(eval $(call BuildPackage,perl-www-mechanize))
diff --git a/lang/perl/perl-www-robotrules/Makefile b/lang/perl/perl-www-robotrules/Makefile
new file mode 100644 (file)
index 0000000..8c104c2
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-www-robotrules
+PKG_VERSION:=6.02
+PKG_RELEASE:=2
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/G/GA/GAAS
+PKG_SOURCE:=WWW-RobotRules-$(PKG_VERSION).tar.gz
+PKG_HASH:=46b502e7a288d559429891eeb5d979461dd3ecc6a5c491ead85d165b6e03a51e
+
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/WWW-RobotRules-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-www-robotrules
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=database of robots.txt-derived permissions
+  URL:=http://search.cpan.org/dist/WWW-RobotRules/
+  DEPENDS:=perl +perl-uri +perlbase-anydbm-file +perlbase-essential +perlbase-fcntl
+endef
+
+define Build/Configure
+        $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+        $(call perlmod/Compile,,)
+endef
+
+define Package/perl-www-robotrules/install
+        $(call perlmod/Install,$(1),WWW auto/WWW)
+endef
+
+
+$(eval $(call BuildPackage,perl-www-robotrules))
diff --git a/lang/perl/perl-www/Makefile b/lang/perl/perl-www/Makefile
new file mode 100644 (file)
index 0000000..ddd707f
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2013-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-www
+PKG_VERSION:=6.43
+PKG_RELEASE:=2
+
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/O/OA/OALDERS
+PKG_SOURCE:=libwww-perl-$(PKG_VERSION).tar.gz
+PKG_HASH:=e9849d7ee6fd0e89cc999e63d7612c951afd6aeea6bc721b767870d9df4ac40d
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/libwww-perl-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+PKG_CPE_ID:=cpe:/a:search.cpan:libwww-perl
+
+include $(INCLUDE_DIR)/package.mk
+include ../perl/perlmod.mk
+
+define Package/perl-www
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=WWW client/server library for Perl (aka LWP)
+  URL:=https://search.cpan.org/dist/libwww-perl/
+  DEPENDS:=perl +perl-encode-locale +perl-file-listing +perl-html-parser +perl-http-cookies +perl-http-daemon +perl-http-date +perl-http-message +perl-http-negotiate +perl-lwp-mediatypes +perl-net-http +perl-try-tiny +perl-uri +perl-www-robotrules +perlbase-base +perlbase-digest +perlbase-encode +perlbase-essential +perlbase-io +perlbase-mime +perlbase-net
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-www/install
+       $(call perlmod/Install,$(1),LWP.pm LWP LWP)
+endef
+
+
+$(eval $(call BuildPackage,perl-www))
diff --git a/lang/perl/perl-xml-parser/Makefile b/lang/perl/perl-xml-parser/Makefile
new file mode 100644 (file)
index 0000000..093057b
--- /dev/null
@@ -0,0 +1,86 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-xml-parser
+PKG_VERSION:=2.46
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=https://www.cpan.org/authors/id/T/TO/TODDR/
+PKG_SOURCE:=XML-Parser-$(PKG_VERSION).tar.gz
+PKG_HASH:=d331332491c51cccfb4cb94ffc44f9cd73378e618498d4a37df9e043661c515d
+
+PKG_MAINTAINER:=Marcel Denia <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/XML-Parser-$(PKG_VERSION)
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/perl/XML-Parser-$(PKG_VERSION)
+
+HOST_BUILD_DEPENDS:=perl/host
+
+EXPAT_LIBPATH:=$(STAGING_DIR)/usr/lib
+EXPAT_INCPATH:=$(STAGING_DIR)/usr/include
+HOST_EXPAT_LIBPATH:=$(STAGING_DIR_HOSTPKG)/lib
+HOST_EXPAT_INCPATH:=$(STAGING_DIR_HOSTPKG)/include
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+include ../perlmod.mk
+
+define Package/perl-xml-parser
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=Perl XML Parser
+  URL:=http://search.cpan.org/dist/XML-Parser/
+  DEPENDS:=perl +libexpat +perlbase-dynaloader +perlbase-essential
+endef
+
+define FixupExpat
+       # Manually reconfigure XML::Parser::Expat, as some overrides we provide will not have any effect otherwise
+       # Force usage of OpenWRT's expat
+       sed \
+               -e 's!%%EXPAT_LIBPATH%%!$(2)!g' \
+               -e 's!%%EXPAT_INCPATH%%!$(3)!g' \
+               -i $(1)/Expat/Makefile.PL
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,EXPATLIBPATH=$(EXPAT_LIBPATH) EXPATINCPATH=$(EXPAT_INCPATH),,)
+
+       $(call FixupExpat,$(PKG_BUILD_DIR),$(EXPAT_LIBPATH),$(EXPAT_INCPATH))
+       $(call perlmod/Configure,,,$(PKG_BUILD_DIR)/Expat)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+       $(call perlmod/Compile,,,$(PKG_BUILD_DIR)/Expat)
+endef
+
+define Host/Configure
+       $(call perlmod/host/Configure,EXPATLIBPATH=$(HOST_EXPAT_LIBPATH) EXPATINCPATH=$(HOST_EXPAT_INCPATH),,)
+       $(call FixupExpat,$(HOST_BUILD_DIR),$(HOST_EXPAT_LIBPATH),$(HOST_EXPAT_INCPATH))
+       $(call perlmod/host/Configure,,,$(HOST_BUILD_DIR)/Expat)
+endef
+
+define Host/Compile
+       $(call perlmod/host/Compile,,)
+       $(call perlmod/host/Compile,,,$(HOST_BUILD_DIR)/Expat)
+endef
+
+define Host/Install
+       $(call perlmod/host/Install,$(1),)
+endef
+
+define Package/perl-xml-parser/install
+       $(call perlmod/Install,$(1),auto/XML XML)
+endef
+
+
+$(eval $(call BuildPackage,perl-xml-parser))
+$(eval $(call HostBuild))
diff --git a/lang/perl/perl-xml-parser/patches/010-xml-parser-expat-use-ppport.h b/lang/perl/perl-xml-parser/patches/010-xml-parser-expat-use-ppport.h
new file mode 100644 (file)
index 0000000..e2aad83
--- /dev/null
@@ -0,0 +1,7476 @@
+--- a/Expat/Expat.xs
++++ b/Expat/Expat.xs
+@@ -20,17 +20,7 @@
+ #include "patchlevel.h"
+ #include "encoding.h"
+-
+-/* Version 5.005_5x (Development version for 5.006) doesn't like sv_...
+-   anymore, but 5.004 doesn't know about PL_sv..
+-   Don't want to push up required version just for this. */
+-
+-#if PATCHLEVEL < 5
+-#define PL_sv_undef   sv_undef
+-#define PL_sv_no      sv_no
+-#define PL_sv_yes     sv_yes
+-#define PL_na         na
+-#endif
++#include "ppport.h"
+ #define BUFSIZE 32768
+--- /dev/null
++++ b/Expat/ppport.h
+@@ -0,0 +1,7452 @@
++#if 0
++<<'SKIP';
++#endif
++/*
++----------------------------------------------------------------------
++
++    ppport.h -- Perl/Pollution/Portability Version 3.21
++
++    Automatically created by Devel::PPPort running under perl 5.020002.
++
++    Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
++    includes in parts/inc/ instead.
++
++    Use 'perldoc ppport.h' to view the documentation below.
++
++----------------------------------------------------------------------
++
++SKIP
++
++=pod
++
++=head1 NAME
++
++ppport.h - Perl/Pollution/Portability version 3.21
++
++=head1 SYNOPSIS
++
++  perl ppport.h [options] [source files]
++
++  Searches current directory for files if no [source files] are given
++
++  --help                      show short help
++
++  --version                   show version
++
++  --patch=file                write one patch file with changes
++  --copy=suffix               write changed copies with suffix
++  --diff=program              use diff program and options
++
++  --compat-version=version    provide compatibility with Perl version
++  --cplusplus                 accept C++ comments
++
++  --quiet                     don't output anything except fatal errors
++  --nodiag                    don't show diagnostics
++  --nohints                   don't show hints
++  --nochanges                 don't suggest changes
++  --nofilter                  don't filter input files
++
++  --strip                     strip all script and doc functionality from
++                              ppport.h
++
++  --list-provided             list provided API
++  --list-unsupported          list unsupported API
++  --api-info=name             show Perl API portability information
++
++=head1 COMPATIBILITY
++
++This version of F<ppport.h> is designed to support operation with Perl
++installations back to 5.003, and has been tested up to 5.11.5.
++
++=head1 OPTIONS
++
++=head2 --help
++
++Display a brief usage summary.
++
++=head2 --version
++
++Display the version of F<ppport.h>.
++
++=head2 --patch=I<file>
++
++If this option is given, a single patch file will be created if
++any changes are suggested. This requires a working diff program
++to be installed on your system.
++
++=head2 --copy=I<suffix>
++
++If this option is given, a copy of each file will be saved with
++the given suffix that contains the suggested changes. This does
++not require any external programs. Note that this does not
++automagially add a dot between the original filename and the
++suffix. If you want the dot, you have to include it in the option
++argument.
++
++If neither C<--patch> or C<--copy> are given, the default is to
++simply print the diffs for each file. This requires either
++C<Text::Diff> or a C<diff> program to be installed.
++
++=head2 --diff=I<program>
++
++Manually set the diff program and options to use. The default
++is to use C<Text::Diff>, when installed, and output unified
++context diffs.
++
++=head2 --compat-version=I<version>
++
++Tell F<ppport.h> to check for compatibility with the given
++Perl version. The default is to check for compatibility with Perl
++version 5.003. You can use this option to reduce the output
++of F<ppport.h> if you intend to be backward compatible only
++down to a certain Perl version.
++
++=head2 --cplusplus
++
++Usually, F<ppport.h> will detect C++ style comments and
++replace them with C style comments for portability reasons.
++Using this option instructs F<ppport.h> to leave C++
++comments untouched.
++
++=head2 --quiet
++
++Be quiet. Don't print anything except fatal errors.
++
++=head2 --nodiag
++
++Don't output any diagnostic messages. Only portability
++alerts will be printed.
++
++=head2 --nohints
++
++Don't output any hints. Hints often contain useful portability
++notes. Warnings will still be displayed.
++
++=head2 --nochanges
++
++Don't suggest any changes. Only give diagnostic output and hints
++unless these are also deactivated.
++
++=head2 --nofilter
++
++Don't filter the list of input files. By default, files not looking
++like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
++
++=head2 --strip
++
++Strip all script and documentation functionality from F<ppport.h>.
++This reduces the size of F<ppport.h> dramatically and may be useful
++if you want to include F<ppport.h> in smaller modules without
++increasing their distribution size too much.
++
++The stripped F<ppport.h> will have a C<--unstrip> option that allows
++you to undo the stripping, but only if an appropriate C<Devel::PPPort>
++module is installed.
++
++=head2 --list-provided
++
++Lists the API elements for which compatibility is provided by
++F<ppport.h>. Also lists if it must be explicitly requested,
++if it has dependencies, and if there are hints or warnings for it.
++
++=head2 --list-unsupported
++
++Lists the API elements that are known not to be supported by
++F<ppport.h> and below which version of Perl they probably
++won't be available or work.
++
++=head2 --api-info=I<name>
++
++Show portability information for API elements matching I<name>.
++If I<name> is surrounded by slashes, it is interpreted as a regular
++expression.
++
++=head1 DESCRIPTION
++
++In order for a Perl extension (XS) module to be as portable as possible
++across differing versions of Perl itself, certain steps need to be taken.
++
++=over 4
++
++=item *
++
++Including this header is the first major one. This alone will give you
++access to a large part of the Perl API that hasn't been available in
++earlier Perl releases. Use
++
++    perl ppport.h --list-provided
++
++to see which API elements are provided by ppport.h.
++
++=item *
++
++You should avoid using deprecated parts of the API. For example, using
++global Perl variables without the C<PL_> prefix is deprecated. Also,
++some API functions used to have a C<perl_> prefix. Using this form is
++also deprecated. You can safely use the supported API, as F<ppport.h>
++will provide wrappers for older Perl versions.
++
++=item *
++
++If you use one of a few functions or variables that were not present in
++earlier versions of Perl, and that can't be provided using a macro, you
++have to explicitly request support for these functions by adding one or
++more C<#define>s in your source code before the inclusion of F<ppport.h>.
++
++These functions or variables will be marked C<explicit> in the list shown
++by C<--list-provided>.
++
++Depending on whether you module has a single or multiple files that
++use such functions or variables, you want either C<static> or global
++variants.
++
++For a C<static> function or variable (used only in a single source
++file), use:
++
++    #define NEED_function
++    #define NEED_variable
++
++For a global function or variable (used in multiple source files),
++use:
++
++    #define NEED_function_GLOBAL
++    #define NEED_variable_GLOBAL
++
++Note that you mustn't have more than one global request for the
++same function or variable in your project.
++
++    Function / Variable       Static Request               Global Request
++    -----------------------------------------------------------------------------------------
++    PL_parser                 NEED_PL_parser               NEED_PL_parser_GLOBAL
++    PL_signals                NEED_PL_signals              NEED_PL_signals_GLOBAL
++    eval_pv()                 NEED_eval_pv                 NEED_eval_pv_GLOBAL
++    grok_bin()                NEED_grok_bin                NEED_grok_bin_GLOBAL
++    grok_hex()                NEED_grok_hex                NEED_grok_hex_GLOBAL
++    grok_number()             NEED_grok_number             NEED_grok_number_GLOBAL
++    grok_numeric_radix()      NEED_grok_numeric_radix      NEED_grok_numeric_radix_GLOBAL
++    grok_oct()                NEED_grok_oct                NEED_grok_oct_GLOBAL
++    load_module()             NEED_load_module             NEED_load_module_GLOBAL
++    my_snprintf()             NEED_my_snprintf             NEED_my_snprintf_GLOBAL
++    my_sprintf()              NEED_my_sprintf              NEED_my_sprintf_GLOBAL
++    my_strlcat()              NEED_my_strlcat              NEED_my_strlcat_GLOBAL
++    my_strlcpy()              NEED_my_strlcpy              NEED_my_strlcpy_GLOBAL
++    newCONSTSUB()             NEED_newCONSTSUB             NEED_newCONSTSUB_GLOBAL
++    newRV_noinc()             NEED_newRV_noinc             NEED_newRV_noinc_GLOBAL
++    newSV_type()              NEED_newSV_type              NEED_newSV_type_GLOBAL
++    newSVpvn_flags()          NEED_newSVpvn_flags          NEED_newSVpvn_flags_GLOBAL
++    newSVpvn_share()          NEED_newSVpvn_share          NEED_newSVpvn_share_GLOBAL
++    pv_display()              NEED_pv_display              NEED_pv_display_GLOBAL
++    pv_escape()               NEED_pv_escape               NEED_pv_escape_GLOBAL
++    pv_pretty()               NEED_pv_pretty               NEED_pv_pretty_GLOBAL
++    sv_2pv_flags()            NEED_sv_2pv_flags            NEED_sv_2pv_flags_GLOBAL
++    sv_2pvbyte()              NEED_sv_2pvbyte              NEED_sv_2pvbyte_GLOBAL
++    sv_catpvf_mg()            NEED_sv_catpvf_mg            NEED_sv_catpvf_mg_GLOBAL
++    sv_catpvf_mg_nocontext()  NEED_sv_catpvf_mg_nocontext  NEED_sv_catpvf_mg_nocontext_GLOBAL
++    sv_pvn_force_flags()      NEED_sv_pvn_force_flags      NEED_sv_pvn_force_flags_GLOBAL
++    sv_setpvf_mg()            NEED_sv_setpvf_mg            NEED_sv_setpvf_mg_GLOBAL
++    sv_setpvf_mg_nocontext()  NEED_sv_setpvf_mg_nocontext  NEED_sv_setpvf_mg_nocontext_GLOBAL
++    vload_module()            NEED_vload_module            NEED_vload_module_GLOBAL
++    vnewSVpvf()               NEED_vnewSVpvf               NEED_vnewSVpvf_GLOBAL
++    warner()                  NEED_warner                  NEED_warner_GLOBAL
++
++To avoid namespace conflicts, you can change the namespace of the
++explicitly exported functions / variables using the C<DPPP_NAMESPACE>
++macro. Just C<#define> the macro before including C<ppport.h>:
++
++    #define DPPP_NAMESPACE MyOwnNamespace_
++    #include "ppport.h"
++
++The default namespace is C<DPPP_>.
++
++=back
++
++The good thing is that most of the above can be checked by running
++F<ppport.h> on your source code. See the next section for
++details.
++
++=head1 EXAMPLES
++
++To verify whether F<ppport.h> is needed for your module, whether you
++should make any changes to your code, and whether any special defines
++should be used, F<ppport.h> can be run as a Perl script to check your
++source code. Simply say:
++
++    perl ppport.h
++
++The result will usually be a list of patches suggesting changes
++that should at least be acceptable, if not necessarily the most
++efficient solution, or a fix for all possible problems.
++
++If you know that your XS module uses features only available in
++newer Perl releases, if you're aware that it uses C++ comments,
++and if you want all suggestions as a single patch file, you could
++use something like this:
++
++    perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
++
++If you only want your code to be scanned without any suggestions
++for changes, use:
++
++    perl ppport.h --nochanges
++
++You can specify a different C<diff> program or options, using
++the C<--diff> option:
++
++    perl ppport.h --diff='diff -C 10'
++
++This would output context diffs with 10 lines of context.
++
++If you want to create patched copies of your files instead, use:
++
++    perl ppport.h --copy=.new
++
++To display portability information for the C<newSVpvn> function,
++use:
++
++    perl ppport.h --api-info=newSVpvn
++
++Since the argument to C<--api-info> can be a regular expression,
++you can use
++
++    perl ppport.h --api-info=/_nomg$/
++
++to display portability information for all C<_nomg> functions or
++
++    perl ppport.h --api-info=/./
++
++to display information for all known API elements.
++
++=head1 BUGS
++
++If this version of F<ppport.h> is causing failure during
++the compilation of this module, please check if newer versions
++of either this module or C<Devel::PPPort> are available on CPAN
++before sending a bug report.
++
++If F<ppport.h> was generated using the latest version of
++C<Devel::PPPort> and is causing failure of this module, please
++file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
++
++Please include the following information:
++
++=over 4
++
++=item 1.
++
++The complete output from running "perl -V"
++
++=item 2.
++
++This file.
++
++=item 3.
++
++The name and version of the module you were trying to build.
++
++=item 4.
++
++A full log of the build that failed.
++
++=item 5.
++
++Any other information that you think could be relevant.
++
++=back
++
++For the latest version of this code, please get the C<Devel::PPPort>
++module from CPAN.
++
++=head1 COPYRIGHT
++
++Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz.
++
++Version 2.x, Copyright (C) 2001, Paul Marquess.
++
++Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
++
++This program is free software; you can redistribute it and/or
++modify it under the same terms as Perl itself.
++
++=head1 SEE ALSO
++
++See L<Devel::PPPort>.
++
++=cut
++
++use strict;
++
++# Disable broken TRIE-optimization
++BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 }
++
++my $VERSION = 3.21;
++
++my %opt = (
++  quiet     => 0,
++  diag      => 1,
++  hints     => 1,
++  changes   => 1,
++  cplusplus => 0,
++  filter    => 1,
++  strip     => 0,
++  version   => 0,
++);
++
++my($ppport) = $0 =~ /([\w.]+)$/;
++my $LF = '(?:\r\n|[\r\n])';   # line feed
++my $HS = "[ \t]";             # horizontal whitespace
++
++# Never use C comments in this file!
++my $ccs  = '/'.'*';
++my $cce  = '*'.'/';
++my $rccs = quotemeta $ccs;
++my $rcce = quotemeta $cce;
++
++eval {
++  require Getopt::Long;
++  Getopt::Long::GetOptions(\%opt, qw(
++    help quiet diag! filter! hints! changes! cplusplus strip version
++    patch=s copy=s diff=s compat-version=s
++    list-provided list-unsupported api-info=s
++  )) or usage();
++};
++
++if ($@ and grep /^-/, @ARGV) {
++  usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
++  die "Getopt::Long not found. Please don't use any options.\n";
++}
++
++if ($opt{version}) {
++  print "This is $0 $VERSION.\n";
++  exit 0;
++}
++
++usage() if $opt{help};
++strip() if $opt{strip};
++
++if (exists $opt{'compat-version'}) {
++  my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
++  if ($@) {
++    die "Invalid version number format: '$opt{'compat-version'}'\n";
++  }
++  die "Only Perl 5 is supported\n" if $r != 5;
++  die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
++  $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
++}
++else {
++  $opt{'compat-version'} = 5;
++}
++
++my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
++                ? ( $1 => {
++                      ($2                  ? ( base     => $2 ) : ()),
++                      ($3                  ? ( todo     => $3 ) : ()),
++                      (index($4, 'v') >= 0 ? ( varargs  => 1  ) : ()),
++                      (index($4, 'p') >= 0 ? ( provided => 1  ) : ()),
++                      (index($4, 'n') >= 0 ? ( nothxarg => 1  ) : ()),
++                    } )
++                : die "invalid spec: $_" } qw(
++AvFILLp|5.004050||p
++AvFILL|||
++BhkDISABLE||5.019003|
++BhkENABLE||5.019003|
++BhkENTRY_set||5.019003|
++BhkENTRY|||
++BhkFLAGS|||
++CALL_BLOCK_HOOKS|||
++CLASS|||n
++CPERLscope|5.005000||p
++CX_CURPAD_SAVE|||
++CX_CURPAD_SV|||
++CopFILEAV|5.006000||p
++CopFILEGV_set|5.006000||p
++CopFILEGV|5.006000||p
++CopFILESV|5.006000||p
++CopFILE_set|5.006000||p
++CopFILE|5.006000||p
++CopSTASHPV_set|5.006000||p
++CopSTASHPV|5.006000||p
++CopSTASH_eq|5.006000||p
++CopSTASH_set|5.006000||p
++CopSTASH|5.006000||p
++CopyD|5.009002|5.004050|p
++Copy||5.004050|
++CvPADLIST||5.008001|
++CvSTASH|||
++CvWEAKOUTSIDE|||
++DEFSV_set|5.010001||p
++DEFSV|5.004050||p
++END_EXTERN_C|5.005000||p
++ENTER|||
++ERRSV|5.004050||p
++EXTEND|||
++EXTERN_C|5.005000||p
++F0convert|||n
++FREETMPS|||
++GIMME_V||5.004000|n
++GIMME|||n
++GROK_NUMERIC_RADIX|5.007002||p
++G_ARRAY|||
++G_DISCARD|||
++G_EVAL|||
++G_METHOD|5.006001||p
++G_NOARGS|||
++G_SCALAR|||
++G_VOID||5.004000|
++GetVars|||
++GvAV|||
++GvCV|||
++GvHV|||
++GvSVn|5.009003||p
++GvSV|||
++Gv_AMupdate||5.011000|
++HEf_SVKEY||5.004000|
++HeHASH||5.004000|
++HeKEY||5.004000|
++HeKLEN||5.004000|
++HePV||5.004000|
++HeSVKEY_force||5.004000|
++HeSVKEY_set||5.004000|
++HeSVKEY||5.004000|
++HeUTF8||5.010001|
++HeVAL||5.004000|
++HvENAMELEN||5.015004|
++HvENAMEUTF8||5.015004|
++HvENAME||5.013007|
++HvNAMELEN_get|5.009003||p
++HvNAMELEN||5.015004|
++HvNAMEUTF8||5.015004|
++HvNAME_get|5.009003||p
++HvNAME|||
++INT2PTR|5.006000||p
++IN_LOCALE_COMPILETIME|5.007002||p
++IN_LOCALE_RUNTIME|5.007002||p
++IN_LOCALE|5.007002||p
++IN_PERL_COMPILETIME|5.008001||p
++IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p
++IS_NUMBER_INFINITY|5.007002||p
++IS_NUMBER_IN_UV|5.007002||p
++IS_NUMBER_NAN|5.007003||p
++IS_NUMBER_NEG|5.007002||p
++IS_NUMBER_NOT_INT|5.007002||p
++IVSIZE|5.006000||p
++IVTYPE|5.006000||p
++IVdf|5.006000||p
++LEAVE|||
++LINKLIST||5.013006|
++LVRET|||
++MARK|||
++MULTICALL||5.019003|
++MY_CXT_CLONE|5.009002||p
++MY_CXT_INIT|5.007003||p
++MY_CXT|5.007003||p
++MoveD|5.009002|5.004050|p
++Move||5.004050|
++NOOP|5.005000||p
++NUM2PTR|5.006000||p
++NVTYPE|5.006000||p
++NVef|5.006001||p
++NVff|5.006001||p
++NVgf|5.006001||p
++Newxc|5.009003||p
++Newxz|5.009003||p
++Newx|5.009003||p
++Nullav|||
++Nullch|||
++Nullcv|||
++Nullhv|||
++Nullsv|||
++OP_CLASS||5.013007|
++OP_DESC||5.007003|
++OP_NAME||5.007003|
++ORIGMARK|||
++PAD_BASE_SV|||
++PAD_CLONE_VARS|||
++PAD_COMPNAME_FLAGS|||
++PAD_COMPNAME_GEN_set|||
++PAD_COMPNAME_GEN|||
++PAD_COMPNAME_OURSTASH|||
++PAD_COMPNAME_PV|||
++PAD_COMPNAME_TYPE|||
++PAD_RESTORE_LOCAL|||
++PAD_SAVE_LOCAL|||
++PAD_SAVE_SETNULLPAD|||
++PAD_SETSV|||
++PAD_SET_CUR_NOSAVE|||
++PAD_SET_CUR|||
++PAD_SVl|||
++PAD_SV|||
++PERLIO_FUNCS_CAST|5.009003||p
++PERLIO_FUNCS_DECL|5.009003||p
++PERL_ABS|5.008001||p
++PERL_BCDVERSION|5.019002||p
++PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
++PERL_HASH|5.004000||p
++PERL_INT_MAX|5.004000||p
++PERL_INT_MIN|5.004000||p
++PERL_LONG_MAX|5.004000||p
++PERL_LONG_MIN|5.004000||p
++PERL_MAGIC_arylen|5.007002||p
++PERL_MAGIC_backref|5.007002||p
++PERL_MAGIC_bm|5.007002||p
++PERL_MAGIC_collxfrm|5.007002||p
++PERL_MAGIC_dbfile|5.007002||p
++PERL_MAGIC_dbline|5.007002||p
++PERL_MAGIC_defelem|5.007002||p
++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.019002||p
++PERL_MAGIC_isaelem|5.007002||p
++PERL_MAGIC_isa|5.007002||p
++PERL_MAGIC_mutex|5.019002||p
++PERL_MAGIC_nkeys|5.007002||p
++PERL_MAGIC_overload_elem|5.019002||p
++PERL_MAGIC_overload_table|5.007002||p
++PERL_MAGIC_overload|5.019002||p
++PERL_MAGIC_pos|5.007002||p
++PERL_MAGIC_qr|5.007002||p
++PERL_MAGIC_regdata|5.007002||p
++PERL_MAGIC_regdatum|5.007002||p
++PERL_MAGIC_regex_global|5.007002||p
++PERL_MAGIC_shared_scalar|5.007003||p
++PERL_MAGIC_shared|5.007003||p
++PERL_MAGIC_sigelem|5.007002||p
++PERL_MAGIC_sig|5.007002||p
++PERL_MAGIC_substr|5.007002||p
++PERL_MAGIC_sv|5.007002||p
++PERL_MAGIC_taint|5.007002||p
++PERL_MAGIC_tiedelem|5.007002||p
++PERL_MAGIC_tiedscalar|5.007002||p
++PERL_MAGIC_tied|5.007002||p
++PERL_MAGIC_utf8|5.008001||p
++PERL_MAGIC_uvar_elem|5.007003||p
++PERL_MAGIC_uvar|5.007002||p
++PERL_MAGIC_vec|5.007002||p
++PERL_MAGIC_vstring|5.008001||p
++PERL_PV_ESCAPE_ALL|5.009004||p
++PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p
++PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p
++PERL_PV_ESCAPE_NOCLEAR|5.009004||p
++PERL_PV_ESCAPE_QUOTE|5.009004||p
++PERL_PV_ESCAPE_RE|5.009005||p
++PERL_PV_ESCAPE_UNI_DETECT|5.009004||p
++PERL_PV_ESCAPE_UNI|5.009004||p
++PERL_PV_PRETTY_DUMP|5.009004||p
++PERL_PV_PRETTY_ELLIPSES|5.010000||p
++PERL_PV_PRETTY_LTGT|5.009004||p
++PERL_PV_PRETTY_NOCLEAR|5.010000||p
++PERL_PV_PRETTY_QUOTE|5.009004||p
++PERL_PV_PRETTY_REGPROP|5.009004||p
++PERL_QUAD_MAX|5.004000||p
++PERL_QUAD_MIN|5.004000||p
++PERL_REVISION|5.006000||p
++PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p
++PERL_SCAN_DISALLOW_PREFIX|5.007003||p
++PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p
++PERL_SCAN_SILENT_ILLDIGIT|5.008001||p
++PERL_SHORT_MAX|5.004000||p
++PERL_SHORT_MIN|5.004000||p
++PERL_SIGNALS_UNSAFE_FLAG|5.008001||p
++PERL_SUBVERSION|5.006000||p
++PERL_SYS_INIT3||5.010000|
++PERL_SYS_INIT||5.010000|
++PERL_SYS_TERM||5.019003|
++PERL_UCHAR_MAX|5.004000||p
++PERL_UCHAR_MIN|5.004000||p
++PERL_UINT_MAX|5.004000||p
++PERL_UINT_MIN|5.004000||p
++PERL_ULONG_MAX|5.004000||p
++PERL_ULONG_MIN|5.004000||p
++PERL_UNUSED_ARG|5.009003||p
++PERL_UNUSED_CONTEXT|5.009004||p
++PERL_UNUSED_DECL|5.007002||p
++PERL_UNUSED_VAR|5.007002||p
++PERL_UQUAD_MAX|5.004000||p
++PERL_UQUAD_MIN|5.004000||p
++PERL_USE_GCC_BRACE_GROUPS|5.009004||p
++PERL_USHORT_MAX|5.004000||p
++PERL_USHORT_MIN|5.004000||p
++PERL_VERSION|5.006000||p
++PL_DBsignal|5.005000||p
++PL_DBsingle|||pn
++PL_DBsub|||pn
++PL_DBtrace|||pn
++PL_Sv|5.005000||p
++PL_bufend|5.019002||p
++PL_bufptr|5.019002||p
++PL_check||5.006000|
++PL_compiling|5.004050||p
++PL_comppad_name||5.017004|
++PL_comppad||5.008001|
++PL_copline|5.019002||p
++PL_curcop|5.004050||p
++PL_curpad||5.005000|
++PL_curstash|5.004050||p
++PL_debstash|5.004050||p
++PL_defgv|5.004050||p
++PL_diehook|5.004050||p
++PL_dirty|5.004050||p
++PL_dowarn|||pn
++PL_errgv|5.004050||p
++PL_error_count|5.019002||p
++PL_expect|5.019002||p
++PL_hexdigit|5.005000||p
++PL_hints|5.005000||p
++PL_in_my_stash|5.019002||p
++PL_in_my|5.019002||p
++PL_keyword_plugin||5.011002|
++PL_last_in_gv|||n
++PL_laststatval|5.005000||p
++PL_lex_state|5.019002||p
++PL_lex_stuff|5.019002||p
++PL_linestr|5.019002||p
++PL_modglobal||5.005000|n
++PL_na|5.004050||pn
++PL_no_modify|5.006000||p
++PL_ofsgv|||n
++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_rpeepp||5.013005|n
++PL_rsfp_filters|5.019002||p
++PL_rsfp|5.019002||p
++PL_rs|||n
++PL_signals|5.008001||p
++PL_stack_base|5.004050||p
++PL_stack_sp|5.004050||p
++PL_statcache|5.005000||p
++PL_stdingv|5.004050||p
++PL_sv_arenaroot|5.004050||p
++PL_sv_no|5.004050||pn
++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.019002||p
++POP_MULTICALL||5.019003|
++POPi|||n
++POPl|||n
++POPn|||n
++POPpbytex||5.007001|n
++POPpx||5.005030|n
++POPp|||n
++POPs|||n
++PTR2IV|5.006000||p
++PTR2NV|5.006000||p
++PTR2UV|5.006000||p
++PTR2nat|5.009003||p
++PTR2ul|5.007001||p
++PTRV|5.006000||p
++PUSHMARK|||
++PUSH_MULTICALL||5.019003|
++PUSHi|||
++PUSHmortal|5.009002||p
++PUSHn|||
++PUSHp|||
++PUSHs|||
++PUSHu|5.004000||p
++PUTBACK|||
++PadARRAY||5.019003|
++PadMAX||5.019003|
++PadlistARRAY||5.019003|
++PadlistMAX||5.019003|
++PadlistNAMESARRAY||5.019003|
++PadlistNAMESMAX||5.019003|
++PadlistNAMES||5.019003|
++PadlistREFCNT||5.017004|
++PadnameIsOUR|||
++PadnameIsSTATE|||
++PadnameLEN||5.019003|
++PadnameOURSTASH|||
++PadnameOUTER|||
++PadnamePV||5.019003|
++PadnameSV||5.019003|
++PadnameTYPE|||
++PadnameUTF8||5.019003|
++PadnamelistARRAY||5.019003|
++PadnamelistMAX||5.019003|
++PerlIO_clearerr||5.007003|
++PerlIO_close||5.007003|
++PerlIO_context_layers||5.009004|
++PerlIO_eof||5.007003|
++PerlIO_error||5.007003|
++PerlIO_fileno||5.007003|
++PerlIO_fill||5.007003|
++PerlIO_flush||5.007003|
++PerlIO_get_base||5.007003|
++PerlIO_get_bufsiz||5.007003|
++PerlIO_get_cnt||5.007003|
++PerlIO_get_ptr||5.007003|
++PerlIO_read||5.007003|
++PerlIO_seek||5.007003|
++PerlIO_set_cnt||5.007003|
++PerlIO_set_ptrcnt||5.007003|
++PerlIO_setlinebuf||5.007003|
++PerlIO_stderr||5.007003|
++PerlIO_stdin||5.007003|
++PerlIO_stdout||5.007003|
++PerlIO_tell||5.007003|
++PerlIO_unread||5.007003|
++PerlIO_write||5.007003|
++Perl_signbit||5.009005|n
++PoisonFree|5.009004||p
++PoisonNew|5.009004||p
++PoisonWith|5.009004||p
++Poison|5.008000||p
++READ_XDIGIT||5.017006|
++RETVAL|||n
++Renewc|||
++Renew|||
++SAVECLEARSV|||
++SAVECOMPPAD|||
++SAVEPADSV|||
++SAVETMPS|||
++SAVE_DEFSV|5.004050||p
++SPAGAIN|||
++SP|||
++START_EXTERN_C|5.005000||p
++START_MY_CXT|5.007003||p
++STMT_END|||p
++STMT_START|||p
++STR_WITH_LEN|5.009003||p
++ST|||
++SV_CONST_RETURN|5.009003||p
++SV_COW_DROP_PV|5.008001||p
++SV_COW_SHARED_HASH_KEYS|5.009005||p
++SV_GMAGIC|5.007002||p
++SV_HAS_TRAILING_NUL|5.009004||p
++SV_IMMEDIATE_UNREF|5.007001||p
++SV_MUTABLE_RETURN|5.009003||p
++SV_NOSTEAL|5.009002||p
++SV_SMAGIC|5.009003||p
++SV_UTF8_NO_ENCODING|5.008001||p
++SVfARG|5.009005||p
++SVf_UTF8|5.006000||p
++SVf|5.006000||p
++SVt_INVLIST||5.019002|
++SVt_IV|||
++SVt_NULL|||
++SVt_NV|||
++SVt_PVAV|||
++SVt_PVCV|||
++SVt_PVFM|||
++SVt_PVGV|||
++SVt_PVHV|||
++SVt_PVIO|||
++SVt_PVIV|||
++SVt_PVLV|||
++SVt_PVMG|||
++SVt_PVNV|||
++SVt_PV|||
++SVt_REGEXP||5.011000|
++Safefree|||
++Slab_Alloc|||
++Slab_Free|||
++Slab_to_ro|||
++Slab_to_rw|||
++StructCopy|||
++SvCUR_set|||
++SvCUR|||
++SvEND|||
++SvGAMAGIC||5.006001|
++SvGETMAGIC|5.004050||p
++SvGROW|||
++SvIOK_UV||5.006000|
++SvIOK_notUV||5.006000|
++SvIOK_off|||
++SvIOK_only_UV||5.006000|
++SvIOK_only|||
++SvIOK_on|||
++SvIOKp|||
++SvIOK|||
++SvIVX|||
++SvIV_nomg|5.009001||p
++SvIV_set|||
++SvIVx|||
++SvIV|||
++SvIsCOW_shared_hash||5.008003|
++SvIsCOW||5.008003|
++SvLEN_set|||
++SvLEN|||
++SvLOCK||5.007003|
++SvMAGIC_set|5.009003||p
++SvNIOK_off|||
++SvNIOKp|||
++SvNIOK|||
++SvNOK_off|||
++SvNOK_only|||
++SvNOK_on|||
++SvNOKp|||
++SvNOK|||
++SvNVX|||
++SvNV_nomg||5.013002|
++SvNV_set|||
++SvNVx|||
++SvNV|||
++SvOK|||
++SvOOK_offset||5.011000|
++SvOOK|||
++SvPOK_off|||
++SvPOK_only_UTF8||5.006000|
++SvPOK_only|||
++SvPOK_on|||
++SvPOKp|||
++SvPOK|||
++SvPVX_const|5.009003||p
++SvPVX_mutable|5.009003||p
++SvPVX|||
++SvPV_const|5.009003||p
++SvPV_flags_const_nolen|5.009003||p
++SvPV_flags_const|5.009003||p
++SvPV_flags_mutable|5.009003||p
++SvPV_flags|5.007002||p
++SvPV_force_flags_mutable|5.009003||p
++SvPV_force_flags_nolen|5.009003||p
++SvPV_force_flags|5.007002||p
++SvPV_force_mutable|5.009003||p
++SvPV_force_nolen|5.009003||p
++SvPV_force_nomg_nolen|5.009003||p
++SvPV_force_nomg|5.007002||p
++SvPV_force|||p
++SvPV_mutable|5.009003||p
++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||p
++SvPV_nomg|5.007002||p
++SvPV_renew|5.009003||p
++SvPV_set|||
++SvPVbyte_force||5.009002|
++SvPVbyte_nolen||5.006000|
++SvPVbytex_force||5.006000|
++SvPVbytex||5.006000|
++SvPVbyte|5.006000||p
++SvPVutf8_force||5.006000|
++SvPVutf8_nolen||5.006000|
++SvPVutf8x_force||5.006000|
++SvPVutf8x||5.006000|
++SvPVutf8||5.006000|
++SvPVx|||
++SvPV|||
++SvREFCNT_dec_NN||5.017007|
++SvREFCNT_dec|||
++SvREFCNT_inc_NN|5.009004||p
++SvREFCNT_inc_simple_NN|5.009004||p
++SvREFCNT_inc_simple_void_NN|5.009004||p
++SvREFCNT_inc_simple_void|5.009004||p
++SvREFCNT_inc_simple|5.009004||p
++SvREFCNT_inc_void_NN|5.009004||p
++SvREFCNT_inc_void|5.009004||p
++SvREFCNT_inc|||p
++SvREFCNT|||
++SvROK_off|||
++SvROK_on|||
++SvROK|||
++SvRV_set|5.009003||p
++SvRV|||
++SvRXOK||5.009005|
++SvRX||5.009005|
++SvSETMAGIC|||
++SvSHARED_HASH|5.009003||p
++SvSHARE||5.007003|
++SvSTASH_set|5.009003||p
++SvSTASH|||
++SvSetMagicSV_nosteal||5.004000|
++SvSetMagicSV||5.004000|
++SvSetSV_nosteal||5.004000|
++SvSetSV|||
++SvTAINTED_off||5.004000|
++SvTAINTED_on||5.004000|
++SvTAINTED||5.004000|
++SvTAINT|||
++SvTHINKFIRST|||
++SvTRUE_nomg||5.013006|
++SvTRUE|||
++SvTYPE|||
++SvUNLOCK||5.007003|
++SvUOK|5.007001|5.006000|p
++SvUPGRADE|||
++SvUTF8_off||5.006000|
++SvUTF8_on||5.006000|
++SvUTF8||5.006000|
++SvUVXx|5.004000||p
++SvUVX|5.004000||p
++SvUV_nomg|5.009001||p
++SvUV_set|5.009003||p
++SvUVx|5.004000||p
++SvUV|5.004000||p
++SvVOK||5.008001|
++SvVSTRING_mg|5.009004||p
++THIS|||n
++UNDERBAR|5.009002||p
++UTF8_MAXBYTES|5.009002||p
++UVSIZE|5.006000||p
++UVTYPE|5.006000||p
++UVXf|5.007001||p
++UVof|5.006000||p
++UVuf|5.006000||p
++UVxf|5.006000||p
++WARN_ALL|5.006000||p
++WARN_AMBIGUOUS|5.006000||p
++WARN_ASSERTIONS|5.019002||p
++WARN_BAREWORD|5.006000||p
++WARN_CLOSED|5.006000||p
++WARN_CLOSURE|5.006000||p
++WARN_DEBUGGING|5.006000||p
++WARN_DEPRECATED|5.006000||p
++WARN_DIGIT|5.006000||p
++WARN_EXEC|5.006000||p
++WARN_EXITING|5.006000||p
++WARN_GLOB|5.006000||p
++WARN_INPLACE|5.006000||p
++WARN_INTERNAL|5.006000||p
++WARN_IO|5.006000||p
++WARN_LAYER|5.008000||p
++WARN_MALLOC|5.006000||p
++WARN_MISC|5.006000||p
++WARN_NEWLINE|5.006000||p
++WARN_NUMERIC|5.006000||p
++WARN_ONCE|5.006000||p
++WARN_OVERFLOW|5.006000||p
++WARN_PACK|5.006000||p
++WARN_PARENTHESIS|5.006000||p
++WARN_PIPE|5.006000||p
++WARN_PORTABLE|5.006000||p
++WARN_PRECEDENCE|5.006000||p
++WARN_PRINTF|5.006000||p
++WARN_PROTOTYPE|5.006000||p
++WARN_QW|5.006000||p
++WARN_RECURSION|5.006000||p
++WARN_REDEFINE|5.006000||p
++WARN_REGEXP|5.006000||p
++WARN_RESERVED|5.006000||p
++WARN_SEMICOLON|5.006000||p
++WARN_SEVERE|5.006000||p
++WARN_SIGNAL|5.006000||p
++WARN_SUBSTR|5.006000||p
++WARN_SYNTAX|5.006000||p
++WARN_TAINT|5.006000||p
++WARN_THREADS|5.008000||p
++WARN_UNINITIALIZED|5.006000||p
++WARN_UNOPENED|5.006000||p
++WARN_UNPACK|5.006000||p
++WARN_UNTIE|5.006000||p
++WARN_UTF8|5.006000||p
++WARN_VOID|5.006000||p
++WIDEST_UTYPE|5.015004||p
++XCPT_CATCH|5.009002||p
++XCPT_RETHROW|5.009002|5.007001|p
++XCPT_TRY_END|5.009002|5.004000|p
++XCPT_TRY_START|5.009002|5.004000|p
++XPUSHi|||
++XPUSHmortal|5.009002||p
++XPUSHn|||
++XPUSHp|||
++XPUSHs|||
++XPUSHu|5.004000||p
++XSPROTO|5.010000||p
++XSRETURN_EMPTY|||
++XSRETURN_IV|||
++XSRETURN_NO|||
++XSRETURN_NV|||
++XSRETURN_PV|||
++XSRETURN_UNDEF|||
++XSRETURN_UV|5.008001||p
++XSRETURN_YES|||
++XSRETURN|||p
++XST_mIV|||
++XST_mNO|||
++XST_mNV|||
++XST_mPV|||
++XST_mUNDEF|||
++XST_mUV|5.008001||p
++XST_mYES|||
++XS_APIVERSION_BOOTCHECK||5.013004|
++XS_EXTERNAL||5.019003|
++XS_INTERNAL||5.019003|
++XS_VERSION_BOOTCHECK|||
++XS_VERSION|||
++XSprePUSH|5.006000||p
++XS|||
++XopDISABLE||5.019003|
++XopENABLE||5.019003|
++XopENTRY_set||5.019003|
++XopENTRY||5.019003|
++XopFLAGS||5.013007|
++ZeroD|5.009002||p
++Zero|||
++_aMY_CXT|5.007003||p
++_add_range_to_invlist|||
++_append_range_to_invlist|||
++_core_swash_init|||
++_get_swash_invlist|||
++_invlist_array_init|||
++_invlist_contains_cp|||
++_invlist_contents|||
++_invlist_dump|||
++_invlist_intersection_maybe_complement_2nd|||
++_invlist_intersection|||
++_invlist_invert_prop|||
++_invlist_invert|||
++_invlist_len|||
++_invlist_populate_swatch|||
++_invlist_search|||
++_invlist_subtract|||
++_invlist_union_maybe_complement_2nd|||
++_invlist_union|||
++_is_uni_FOO||5.017008|
++_is_uni_perl_idcont||5.017008|
++_is_uni_perl_idstart||5.017007|
++_is_utf8_FOO||5.017008|
++_is_utf8_mark||5.017008|
++_is_utf8_perl_idcont||5.017008|
++_is_utf8_perl_idstart||5.017007|
++_new_invlist_C_array|||
++_new_invlist|||
++_pMY_CXT|5.007003||p
++_swash_inversion_hash|||
++_swash_to_invlist|||
++_to_fold_latin1|||
++_to_uni_fold_flags||5.013011|
++_to_upper_title_latin1|||
++_to_utf8_fold_flags||5.015006|
++_to_utf8_lower_flags||5.015006|
++_to_utf8_title_flags||5.015006|
++_to_utf8_upper_flags||5.015006|
++aMY_CXT_|5.007003||p
++aMY_CXT|5.007003||p
++aTHXR_|5.019002||p
++aTHXR|5.019002||p
++aTHX_|5.006000||p
++aTHX|5.006000||p
++aassign_common_vars|||
++add_cp_to_invlist|||
++add_data|||n
++add_utf16_textfilter|||
++addmad|||
++adjust_size_and_find_bucket|||n
++adjust_stack_on_leave|||
++alloc_maybe_populate_EXACT|||
++alloccopstash|||
++allocmy|||
++amagic_call|||
++amagic_cmp_locale|||
++amagic_cmp|||
++amagic_deref_call||5.013007|
++amagic_i_ncmp|||
++amagic_is_enabled|||
++amagic_ncmp|||
++anonymise_cv_maybe|||
++any_dup|||
++ao|||
++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|
++av_clear|||
++av_create_and_push||5.009005|
++av_create_and_unshift_one||5.009005|
++av_delete||5.006000|
++av_exists||5.006000|
++av_extend_guts|||
++av_extend|||
++av_fetch|||
++av_fill|||
++av_iter_p||5.011000|
++av_len|||
++av_make|||
++av_pop|||
++av_push|||
++av_reify|||
++av_shift|||
++av_store|||
++av_tindex||5.017009|
++av_top_index||5.017009|
++av_undef|||
++av_unshift|||
++ax|||n
++bad_type_gv|||
++bad_type_pv|||
++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|
++call_argv|5.006000||p
++call_atexit||5.006000|
++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|
++cast_iv||5.006000|
++cast_ulong||5.006000|
++cast_uv||5.006000|
++check_locale_boundary_crossing|||
++check_type_and_open|||
++check_uni|||
++check_utf8_print|||
++checkcomma|||
++ckWARN|5.006000||p
++ck_entersub_args_core|||
++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|||n
++cl_is_anything|||n
++cl_or|||n
++clear_placeholders|||
++clone_params_del|||n
++clone_params_new|||n
++closest_cop|||
++compute_EXACTish|||
++convert|||
++cop_fetch_label||5.015001|
++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|
++cop_store_label||5.015001|
++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.019003|
++cophh_store_pvn||5.013007|
++cophh_store_pvs||5.013007|
++cophh_store_pv||5.013007|
++cophh_store_sv||5.013007|
++core_prototype|||
++core_regclass_swash|||
++coresub_op|||
++could_it_be_a_POSIX_class|||
++cr_textfilter|||
++create_eval_scope|||
++croak_memory_wrap||5.019003|n
++croak_no_mem|||n
++croak_no_modify||5.013003|n
++croak_nocontext|||vn
++croak_popstack|||n
++croak_sv||5.013001|
++croak_xs_usage||5.010001|n
++croak|||v
++csighandler||5.009003|n
++curmad|||
++current_re_engine|||
++curse|||
++custom_op_desc||5.007003|
++custom_op_name||5.007003|
++custom_op_register||5.013007|
++custom_op_xop||5.013007|
++cv_ckproto_len_flags|||
++cv_clone_into|||
++cv_clone|||
++cv_const_sv_or_av|||
++cv_const_sv||5.004000|
++cv_dump|||
++cv_forget_slab|||
++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|||
++dAXMARK|5.009003||p
++dAX|5.007002||p
++dITEMS|5.007002||p
++dMARK|||
++dMULTICALL||5.009003|
++dMY_CXT_SV|5.007003||p
++dMY_CXT|5.007003||p
++dNOOP|5.006000||p
++dORIGMARK|||
++dSP|||
++dTHR|5.004050||p
++dTHXR|5.019002||p
++dTHXa|5.006000||p
++dTHXoa|5.006000||p
++dTHX|5.006000||p
++dUNDERBAR|5.009002||p
++dVAR|5.009003||p
++dXCPT|5.009002||p
++dXSARGS|||
++dXSI32|||
++dXSTARG|5.006000||p
++deb_curcv|||
++deb_nocontext|||vn
++deb_stack_all|||
++deb_stack_n|||
++debop||5.005000|
++debprofdump||5.005000|
++debprof|||
++debstackptrs||5.007003|
++debstack||5.007003|
++debug_start_match|||
++deb||5.007003|v
++defelem_target|||
++del_sv|||
++delete_eval_scope|||
++delimcpy||5.004000|n
++deprecate_commaless_var_list|||
++despatch_signals||5.007001|
++destroy_matcher|||
++die_nocontext|||vn
++die_sv||5.013001|
++die_unwind|||
++die|||v
++dirp_dup|||
++div128|||
++djSP|||
++do_aexec5|||
++do_aexec|||
++do_aspawn|||
++do_binmode||5.004050|
++do_chomp|||
++do_close|||
++do_delete_local|||
++do_dump_pad|||
++do_eof|||
++do_exec3|||
++do_execfree|||
++do_exec|||
++do_gv_dump||5.006000|
++do_gvgv_dump||5.006000|
++do_hv_dump||5.006000|
++do_ipcctl|||
++do_ipcget|||
++do_join|||
++do_magic_dump||5.006000|
++do_msgrcv|||
++do_msgsnd|||
++do_ncmp|||
++do_oddball|||
++do_op_dump||5.006000|
++do_op_xmldump|||
++do_open9||5.006000|
++do_openn||5.007001|
++do_open||5.004000|
++do_pmop_dump||5.006000|
++do_pmop_xmldump|||
++do_print|||
++do_readline|||
++do_seek|||
++do_semop|||
++do_shmio|||
++do_smartmatch|||
++do_spawn_nowait|||
++do_spawn|||
++do_sprintf|||
++do_sv_dump||5.006000|
++do_sysseek|||
++do_tell|||
++do_trans_complex_utf8|||
++do_trans_complex|||
++do_trans_count_utf8|||
++do_trans_count|||
++do_trans_simple_utf8|||
++do_trans_simple|||
++do_trans|||
++do_vecget|||
++do_vecset|||
++do_vop|||
++docatch|||
++doeval|||
++dofile|||
++dofindlabel|||
++doform|||
++doing_taint||5.008001|n
++dooneliner|||
++doopen_pm|||
++doparseform|||
++dopoptoeval|||
++dopoptogiven|||
++dopoptolabel|||
++dopoptoloop|||
++dopoptosub_at|||
++dopoptowhen|||
++doref||5.009003|
++dounwind|||
++dowantarray|||
++dump_all_perl|||
++dump_all||5.006000|
++dump_eval||5.006000|
++dump_exec_pos|||
++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|||
++dump_trie_interim_table|||
++dump_trie|||
++dump_vindent||5.006000|
++dumpuntil|||
++dup_attrlist|||
++emulate_cop_io|||
++eval_pv|5.006000||p
++eval_sv|5.006000||p
++exec_failed|||
++expect_number|||
++fbm_compile||5.005000|
++fbm_instr||5.005000|
++feature_is_enabled|||
++filter_add|||
++filter_del|||
++filter_gets|||
++filter_read|||
++finalize_optree|||
++finalize_op|||
++find_and_forget_pmops|||
++find_array_subscript|||
++find_beginning|||
++find_byclass|||
++find_hash_subscript|||
++find_in_my_stash|||
++find_lexical_cv|||
++find_runcv_where|||
++find_runcv||5.008001|
++find_rundefsv2|||
++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_maybe_lex|||
++force_ident|||
++force_list|||
++force_next|||
++force_strict_version|||
++force_version|||
++force_word|||
++forget_pmop|||
++form_nocontext|||vn
++form_short_octal_warning|||
++form||5.004000|v
++fp_dup|||
++fprintf_nocontext|||vn
++free_global_struct|||
++free_tied_hv_pool|||
++free_tmps|||
++gen_constant_list|||
++get_and_check_backslash_N_name|||
++get_aux_mg|||
++get_av|5.006000||p
++get_context||5.006000|n
++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_invlist_iter_addr|||
++get_invlist_offset_addr|||
++get_invlist_previous_index_addr|||
++get_mstats|||
++get_no_modify|||
++get_num|||
++get_op_descs||5.005000|
++get_op_names||5.005000|
++get_opargs|||
++get_ppaddr||5.006000|
++get_re_arg|||
++get_sv|5.006000||p
++get_vtbl||5.005030|
++getcwd_sv||5.007002|
++getenv_len|||
++glob_2number|||
++glob_assign_glob|||
++glob_assign_ref|||
++gp_dup|||
++gp_free|||
++gp_ref|||
++grok_bin|5.007003||p
++grok_bslash_N|||
++grok_bslash_c|||
++grok_bslash_o|||
++grok_bslash_x|||
++grok_hex|5.007003||p
++grok_number|5.007002||p
++grok_numeric_radix|5.007002||p
++grok_oct|5.007003||p
++group_end|||
++gv_AVadd|||
++gv_HVadd|||
++gv_IOadd|||
++gv_SVadd|||
++gv_add_by_type||5.011000|
++gv_autoload4||5.004000|
++gv_autoload_pvn||5.015004|
++gv_autoload_pv||5.015004|
++gv_autoload_sv||5.015004|
++gv_check|||
++gv_const_sv||5.009003|
++gv_dump||5.006000|
++gv_efullname3||5.004000|
++gv_efullname4||5.006001|
++gv_efullname|||
++gv_ename|||
++gv_fetchfile_flags||5.009005|
++gv_fetchfile|||
++gv_fetchmeth_autoload||5.007003|
++gv_fetchmeth_pv_autoload||5.015004|
++gv_fetchmeth_pvn_autoload||5.015004|
++gv_fetchmeth_pvn||5.015004|
++gv_fetchmeth_pv||5.015004|
++gv_fetchmeth_sv_autoload||5.015004|
++gv_fetchmeth_sv||5.015004|
++gv_fetchmethod_autoload||5.004000|
++gv_fetchmethod_pv_flags||5.015004|
++gv_fetchmethod_pvn_flags||5.015004|
++gv_fetchmethod_sv_flags||5.015004|
++gv_fetchmethod|||
++gv_fetchmeth|||
++gv_fetchpvn_flags|5.009002||p
++gv_fetchpvs|5.009004||p
++gv_fetchpv|||
++gv_fetchsv|5.009002||p
++gv_fullname3||5.004000|
++gv_fullname4||5.006001|
++gv_fullname|||
++gv_handler||5.007001|
++gv_init_pvn||5.015004|
++gv_init_pv||5.015004|
++gv_init_svtype|||
++gv_init_sv||5.015004|
++gv_init|||
++gv_magicalize_isa|||
++gv_name_set||5.009004|
++gv_stashpvn|5.004000||p
++gv_stashpvs|5.009003||p
++gv_stashpv|||
++gv_stashsv|||
++gv_try_downgrade|||
++handle_regex_sets|||
++he_dup|||
++hek_dup|||
++hfree_next_entry|||
++hfreeentries|||
++hsplit|||
++hv_assert|||
++hv_auxinit|||
++hv_backreferences_p|||
++hv_clear_placeholders||5.009001|
++hv_clear|||
++hv_common_key_len||5.010000|
++hv_common||5.010000|
++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_ret|||
++hv_free_ent||5.004000|
++hv_iterinit|||
++hv_iterkeysv||5.004000|
++hv_iterkey|||
++hv_iternext_flags||5.008000|
++hv_iternextsv|||
++hv_iternext|||
++hv_iterval|||
++hv_kill_backrefs|||
++hv_ksplit||5.004000|
++hv_magic_check|||n
++hv_magic|||
++hv_name_set||5.009003|
++hv_notallowed|||
++hv_placeholders_get||5.009003|
++hv_placeholders_p|||
++hv_placeholders_set||5.009003|
++hv_rand_set||5.017011|
++hv_riter_p||5.009003|
++hv_riter_set||5.009003|
++hv_scalar||5.009001|
++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|
++ibcmp|||
++incline|||
++incpush_if_exists|||
++incpush_use_sep|||
++incpush|||
++ingroup|||
++init_argv_symbols|||
++init_constants|||
++init_dbargs|||
++init_debugger|||
++init_global_struct|||
++init_i18nl10n||5.006000|
++init_i18nl14n||5.006000|
++init_ids|||
++init_interp|||
++init_main_stash|||
++init_perllib|||
++init_postdump_symbols|||
++init_predump_symbols|||
++init_stacks||5.005000|
++init_tm||5.007002|
++inplace_aassign|||
++instr|||n
++intro_my|||
++intuit_method|||
++intuit_more|||
++invert|||
++invlist_array|||
++invlist_clone|||
++invlist_extend|||
++invlist_highest|||
++invlist_is_iterating|||
++invlist_iterfinish|||
++invlist_iterinit|||
++invlist_iternext|||
++invlist_max|||
++invlist_previous_index|||
++invlist_set_len|||
++invlist_set_previous_index|||
++invlist_trim|||
++invoke_exception_hook|||
++io_close|||
++isALNUMC|5.006000||p
++isALNUM_lazy|||
++isALPHANUMERIC||5.017008|
++isALPHA|||
++isASCII|5.006000|5.006000|p
++isBLANK|5.006001||p
++isCNTRL|5.006000|5.006000|p
++isDIGIT|||
++isFOO_lc|||
++isFOO_utf8_lc|||
++isGRAPH|5.006000||p
++isGV_with_GP|5.009004||p
++isIDCONT||5.017008|
++isIDFIRST_lazy|||
++isIDFIRST|||
++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_cur_LC_category_utf8|||
++is_handle_constructor|||n
++is_list_assignment|||
++is_lvalue_sub||5.007001|
++is_uni_alnum_lc||5.006000|
++is_uni_alnumc_lc||5.017007|
++is_uni_alnumc||5.017007|
++is_uni_alnum||5.006000|
++is_uni_alpha_lc||5.006000|
++is_uni_alpha||5.006000|
++is_uni_ascii_lc||5.006000|
++is_uni_ascii||5.006000|
++is_uni_blank_lc||5.017002|
++is_uni_blank||5.017002|
++is_uni_cntrl_lc||5.006000|
++is_uni_cntrl||5.006000|
++is_uni_digit_lc||5.006000|
++is_uni_digit||5.006000|
++is_uni_graph_lc||5.006000|
++is_uni_graph||5.006000|
++is_uni_idfirst_lc||5.006000|
++is_uni_idfirst||5.006000|
++is_uni_lower_lc||5.006000|
++is_uni_lower||5.006000|
++is_uni_print_lc||5.006000|
++is_uni_print||5.006000|
++is_uni_punct_lc||5.006000|
++is_uni_punct||5.006000|
++is_uni_space_lc||5.006000|
++is_uni_space||5.006000|
++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.017007|
++is_utf8_alnum||5.006000|
++is_utf8_alpha||5.006000|
++is_utf8_ascii||5.006000|
++is_utf8_blank||5.017002|
++is_utf8_char_buf||5.015008|n
++is_utf8_char_slow|||n
++is_utf8_char||5.006000|n
++is_utf8_cntrl||5.006000|
++is_utf8_common|||
++is_utf8_digit||5.006000|
++is_utf8_graph||5.006000|
++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|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_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
++load_module|5.006000||pv
++localize|||
++looks_like_bool|||
++looks_like_number|||
++lop|||
++mPUSHi|5.009002||p
++mPUSHn|5.009002||p
++mPUSHp|5.009002||p
++mPUSHs|5.010001||p
++mPUSHu|5.009002||p
++mXPUSHi|5.009002||p
++mXPUSHn|5.009002||p
++mXPUSHp|5.009002||p
++mXPUSHs|5.010001||p
++mXPUSHu|5.009002||p
++mad_free|||
++madlex|||
++madparse|||
++magic_clear_all_env|||
++magic_cleararylen_p|||
++magic_clearenv|||
++magic_clearhints|||
++magic_clearhint|||
++magic_clearisa|||
++magic_clearpack|||
++magic_clearsig|||
++magic_copycallchecker|||
++magic_dump||5.006000|
++magic_existspack|||
++magic_freearylen_p|||
++magic_freeovrld|||
++magic_getarylen|||
++magic_getdefelem|||
++magic_getnkeys|||
++magic_getpack|||
++magic_getpos|||
++magic_getsig|||
++magic_getsubstr|||
++magic_gettaint|||
++magic_getuvar|||
++magic_getvec|||
++magic_get|||
++magic_killbackrefs|||
++magic_methcall1|||
++magic_methcall|||v
++magic_methpack|||
++magic_nextpack|||
++magic_regdata_cnt|||
++magic_regdatum_get|||
++magic_regdatum_set|||
++magic_scalarpack|||
++magic_set_all_env|||
++magic_setarylen|||
++magic_setcollxfrm|||
++magic_setdbline|||
++magic_setdefelem|||
++magic_setenv|||
++magic_sethint|||
++magic_setisa|||
++magic_setmglob|||
++magic_setnkeys|||
++magic_setpack|||
++magic_setpos|||
++magic_setregexp|||
++magic_setsig|||
++magic_setsubstr|||
++magic_settaint|||
++magic_setutf8|||
++magic_setuvar|||
++magic_setvec|||
++magic_set|||
++magic_sizepack|||
++magic_wipepack|||
++make_matcher|||
++make_trie_failtable|||
++make_trie|||
++malloc_good_size|||n
++malloced_size|||n
++malloc||5.007002|n
++markstack_grow|||
++matcher_matches_sv|||
++mayberelocate|||
++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_find_mglob|||
++mg_findext||5.013008|
++mg_find|||
++mg_free_type||5.013006|
++mg_free|||
++mg_get|||
++mg_length||5.005000|
++mg_localize|||
++mg_magical|||
++mg_set|||
++mg_size||5.005000|
++mini_mktime||5.007002|
++minus_v|||
++missingterm|||
++mode_from_discipline|||
++modkids|||
++more_bodies|||
++more_sv|||
++moreswitches|||
++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.010001|
++mro_isa_changed_in|||
++mro_meta_dup|||
++mro_meta_init|||
++mro_method_changed_in||5.009005|
++mro_package_moved|||
++mro_register||5.010001|
++mro_set_mro||5.010001|
++mro_set_private_data||5.010001|
++mul128|||
++mulexp10|||n
++my_atof2||5.007002|
++my_atof||5.006000|
++my_attrs|||
++my_bcopy|||n
++my_bzero|||n
++my_chsize|||
++my_clearenv|||
++my_cxt_index|||
++my_cxt_init|||
++my_dirfd||5.009005|
++my_exit_jump|||
++my_exit|||
++my_failure_exit||5.004000|
++my_fflush_all||5.006000|
++my_fork||5.007003|n
++my_kid|||
++my_lstat_flags|||
++my_lstat||5.019003|
++my_memcmp|||n
++my_memset||5.004000|n
++my_pclose||5.004000|
++my_popen_list||5.007001|
++my_popen||5.004000|
++my_setenv|||
++my_snprintf|5.009004||pvn
++my_socketpair||5.007003|n
++my_sprintf|5.009003||pvn
++my_stat_flags|||
++my_stat||5.019003|
++my_strftime||5.007002|
++my_strlcat|5.009004||pn
++my_strlcpy|5.009004||pn
++my_unexec|||
++my_vsnprintf||5.009004|n
++need_utf8|||n
++newANONATTRSUB||5.006000|
++newANONHASH|||
++newANONLIST|||
++newANONSUB|||
++newASSIGNOP|||
++newATTRSUB_flags|||
++newATTRSUB||5.006000|
++newAVREF|||
++newAV|||
++newBINOP|||
++newCONDOP|||
++newCONSTSUB_flags||5.015006|
++newCONSTSUB|5.004050||p
++newCVREF|||
++newDEFSVOP|||
++newFORM|||
++newFOROP||5.013007|
++newGIVENOP||5.009003|
++newGIVWHENOP|||
++newGP|||
++newGVOP|||
++newGVREF|||
++newGVgen_flags||5.015004|
++newGVgen|||
++newHVREF|||
++newHVhv||5.005000|
++newHV|||
++newIO|||
++newLISTOP|||
++newLOGOP|||
++newLOOPEX|||
++newLOOPOP|||
++newMADPROP|||
++newMADsv|||
++newMYSUB||5.017004|
++newNULLLIST|||
++newOP|||
++newPADOP|||
++newPMOP|||
++newPROG|||
++newPVOP|||
++newRANGE|||
++newRV_inc|5.004000||p
++newRV_noinc|5.004000||p
++newRV|||
++newSLICEOP|||
++newSTATEOP|||
++newSTUB|||
++newSUB|||
++newSVOP|||
++newSVREF|||
++newSV_type|5.009005||p
++newSVhek||5.009003|
++newSViv|||
++newSVnv|||
++newSVpadname||5.017004|
++newSVpv_share||5.013006|
++newSVpvf_nocontext|||vn
++newSVpvf||5.004000|v
++newSVpvn_flags|5.010001||p
++newSVpvn_share|5.007001||p
++newSVpvn_utf8|5.010001||p
++newSVpvn|5.004050||p
++newSVpvs_flags|5.010001||p
++newSVpvs_share|5.009003||p
++newSVpvs|5.009003||p
++newSVpv|||
++newSVrv|||
++newSVsv|||
++newSVuv|5.006000||p
++newSV|||
++newTOKEN|||
++newUNOP|||
++newWHENOP||5.009003|
++newWHILEOP||5.013007|
++newXS_flags||5.009004|
++newXS_len_flags|||
++newXSproto||5.006000|
++newXS||5.006000|
++new_collate||5.006000|
++new_constant|||
++new_ctype||5.006000|
++new_he|||
++new_logop|||
++new_numeric||5.006000|
++new_stackinfo||5.005000|
++new_version||5.009000|
++new_warnings_bitfield|||
++next_symbol|||
++nextargv|||
++nextchar|||
++ninstr|||n
++no_bareword_allowed|||
++no_fh_allowed|||
++no_op|||
++not_a_number|||
++not_incrementable|||
++nothreadhook||5.008000|
++nuke_stacks|||
++num_overflow|||n
++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_integerize|||
++op_linklist||5.013006|
++op_lvalue_flags|||
++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_std_init|||
++op_unscope|||
++op_xmldump|||
++open_script|||
++opslab_force_free|||
++opslab_free_nopad|||
++opslab_free|||
++pMY_CXT_|5.007003||p
++pMY_CXT|5.007003||p
++pTHX_|5.006000||p
++pTHX|5.006000||p
++packWARN|5.007003||p
++pack_cat||5.007003|
++pack_rec|||
++package_version|||
++package|||
++packlist||5.008001|
++pad_add_anon||5.008001|
++pad_add_name_pvn||5.015001|
++pad_add_name_pvs||5.015001|
++pad_add_name_pv||5.015001|
++pad_add_name_sv||5.015001|
++pad_alloc_name|||
++pad_alloc|||
++pad_block_start|||
++pad_check_dup|||
++pad_compname_type||5.009003|
++pad_findlex|||
++pad_findmy_pvn||5.015001|
++pad_findmy_pvs||5.015001|
++pad_findmy_pv||5.015001|
++pad_findmy_sv||5.015001|
++pad_fixup_inner_anons|||
++pad_free|||
++pad_leavemy|||
++pad_new||5.008001|
++pad_peg|||n
++pad_push|||
++pad_reset|||
++pad_setsv|||
++pad_sv|||
++pad_swipe|||
++pad_tidy||5.008001|
++padlist_dup|||
++padlist_store|||
++parse_arithexpr||5.013008|
++parse_barestmt||5.013007|
++parse_block||5.013007|
++parse_body|||
++parse_fullexpr||5.013008|
++parse_fullstmt||5.013005|
++parse_ident|||
++parse_label||5.013007|
++parse_listexpr||5.013008|
++parse_lparen_question_flags|||
++parse_stmtseq||5.013006|
++parse_termexpr||5.013008|
++parse_unicode_opts|||
++parser_dup|||
++parser_free_nexttoke_ops|||
++parser_free|||
++path_is_searchable|||n
++peep|||
++pending_ident|||
++perl_alloc_using|||n
++perl_alloc|||n
++perl_clone_using|||n
++perl_clone|||n
++perl_construct|||n
++perl_destruct||5.007003|n
++perl_free|||n
++perl_parse||5.006000|n
++perl_run|||n
++pidgone|||
++pm_description|||
++pmop_dump||5.006000|
++pmop_xmldump|||
++pmruntime|||
++pmtrans|||
++pop_scope|||
++populate_isa|||v
++pregcomp||5.009005|
++pregexec|||
++pregfree2||5.011000|
++pregfree|||
++prepend_madprops|||
++prescan_version||5.011004|
++printbuf|||
++printf_nocontext|||vn
++process_special_blocks|||
++ptr_hash|||n
++ptr_table_clear||5.009005|
++ptr_table_fetch||5.009005|
++ptr_table_find|||n
++ptr_table_free||5.009005|
++ptr_table_new||5.009005|
++ptr_table_split||5.009005|
++ptr_table_store||5.009005|
++push_scope|||
++put_byte|||
++put_latin1_charclass_innards|||
++pv_display|5.006000||p
++pv_escape|5.009004||p
++pv_pretty|5.009004||p
++pv_uni_display||5.007003|
++qerror|||
++qsortsvu|||
++re_compile||5.009005|
++re_croak2|||
++re_dup_guts|||
++re_intuit_start||5.019001|
++re_intuit_string||5.006000|
++re_op_compile|||
++readpipe_override|||
++realloc||5.007002|n
++reentrant_free||5.019003|
++reentrant_init||5.019003|
++reentrant_retry||5.019003|vn
++reentrant_size||5.019003|
++ref_array_or_hash|||
++refcounted_he_chain_2hv|||
++refcounted_he_fetch_pvn|||
++refcounted_he_fetch_pvs|||
++refcounted_he_fetch_pv|||
++refcounted_he_fetch_sv|||
++refcounted_he_free|||
++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.019003|
++reg_check_named_buff_matched|||
++reg_named_buff_all||5.009005|
++reg_named_buff_exists||5.009005|
++reg_named_buff_fetch||5.009005|
++reg_named_buff_firstkey||5.009005|
++reg_named_buff_iter|||
++reg_named_buff_nextkey||5.009005|
++reg_named_buff_scalar||5.009005|
++reg_named_buff|||
++reg_node|||
++reg_numbered_buff_fetch|||
++reg_numbered_buff_length|||
++reg_numbered_buff_store|||
++reg_qr_package|||
++reg_recode|||
++reg_scan_name|||
++reg_skipcomment|||
++reg_temp_copy|||
++reganode|||
++regatom|||
++regbranch|||
++regclass_swash||5.009004|
++regclass|||
++regcppop|||
++regcppush|||
++regcurly|||
++regdump_extflags|||
++regdump_intflags|||
++regdump||5.005000|
++regdupe_internal|||
++regexec_flags||5.005000|
++regfree_internal||5.009005|
++reghop3|||n
++reghop4|||n
++reghopmaybe3|||n
++reginclass|||
++reginitcolors||5.006000|
++reginsert|||
++regmatch|||
++regnext||5.005000|
++regpatws|||n
++regpiece|||
++regpposixcc|||
++regprop|||
++regrepeat|||
++regtail_study|||
++regtail|||
++regtry|||
++reguni|||
++regwhite|||n
++reg|||
++repeatcpy|||n
++report_evil_fh|||
++report_redefined_cv|||
++report_uninit|||
++report_wrongway_fh|||
++require_pv||5.006000|
++require_tie_mod|||
++restore_magic|||
++rninstr|||n
++rpeep|||
++rsignal_restore|||
++rsignal_save|||
++rsignal_state||5.004000|
++rsignal||5.004000|
++run_body|||
++run_user_filter|||
++runops_debug||5.005000|
++runops_standard||5.005000|
++rv2cv_op_cv||5.013006|
++rvpv_dup|||
++rxres_free|||
++rxres_restore|||
++rxres_save|||
++safesyscalloc||5.006000|n
++safesysfree||5.006000|n
++safesysmalloc||5.006000|n
++safesysrealloc||5.006000|n
++same_dirent|||
++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|||
++save_ary|||
++save_bool||5.008001|
++save_clearsv|||
++save_delete|||
++save_destructor_x||5.006000|
++save_destructor||5.006000|
++save_freeop|||
++save_freepv|||
++save_freesv|||
++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||5.010001|
++save_hptr|||
++save_int|||
++save_item|||
++save_iv||5.005000|
++save_lines|||
++save_list|||
++save_long|||
++save_magic_flags|||
++save_mortalizesv||5.007001|
++save_nogv|||
++save_op||5.005000|
++save_padsv_and_mortalize||5.010001|
++save_pptr|||
++save_pushi32ptr||5.010001|
++save_pushptri32ptr|||
++save_pushptrptr||5.010001|
++save_pushptr||5.010001|
++save_re_context||5.006000|
++save_scalar_at|||
++save_scalar|||
++save_set_svflags||5.009000|
++save_shared_pvref||5.007003|
++save_sptr|||
++save_svref|||
++save_vptr||5.006000|
++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|
++sawparens|||
++scalar_mod_type|||n
++scalarboolean|||
++scalarkids|||
++scalarseq|||
++scalarvoid|||
++scalar|||
++scan_bin||5.006000|
++scan_commit|||
++scan_const|||
++scan_formline|||
++scan_heredoc|||
++scan_hex|||
++scan_ident|||
++scan_inputsymbol|||
++scan_num||5.007001|
++scan_oct|||
++scan_pat|||
++scan_str|||
++scan_subst|||
++scan_trans|||
++scan_version||5.009001|
++scan_vstring||5.009005|
++scan_word|||
++screaminstr||5.005000|
++search_const|||
++seed||5.008001|
++sequence_num|||
++set_context||5.006000|n
++set_numeric_local||5.006000|
++set_numeric_radix||5.006000|
++set_numeric_standard||5.006000|
++setdefout|||
++share_hek_flags|||
++share_hek||5.004000|
++si_dup|||
++sighandler|||n
++simplify_sort|||
++skipspace0|||
++skipspace1|||
++skipspace2|||
++skipspace_flags|||
++softref2xv|||
++sortcv_stacked|||
++sortcv_xsub|||
++sortcv|||
++sortsv_flags||5.009003|
++sortsv||5.007003|
++space_join_names_mortal|||
++ss_dup|||
++stack_grow|||
++start_force|||
++start_glob|||
++start_subparse||5.004000|
++stdize_locale|||
++strEQ|||
++strGE|||
++strGT|||
++strLE|||
++strLT|||
++strNE|||
++str_to_version||5.006000|
++strip_return|||
++strnEQ|||
++strnNE|||
++study_chunk|||
++sub_crush_depth|||
++sublex_done|||
++sublex_push|||
++sublex_start|||
++sv_2bool_flags||5.013006|
++sv_2bool|||
++sv_2cv|||
++sv_2io|||
++sv_2iuv_common|||
++sv_2iuv_non_preserve|||
++sv_2iv_flags||5.009001|
++sv_2iv|||
++sv_2mortal|||
++sv_2num|||
++sv_2nv_flags||5.013001|
++sv_2pv_flags|5.007002||p
++sv_2pv_nolen|5.006000||p
++sv_2pvbyte_nolen|5.006000||p
++sv_2pvbyte|5.006000||p
++sv_2pvutf8_nolen||5.006000|
++sv_2pvutf8||5.006000|
++sv_2pv|||
++sv_2uv_flags||5.009001|
++sv_2uv|5.004000||p
++sv_add_arena|||
++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
++sv_catpvf||5.004000|v
++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|
++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_copypv_flags||5.017002|
++sv_copypv_nomg||5.017002|
++sv_copypv|||
++sv_dec_nomg||5.013002|
++sv_dec|||
++sv_del_backref|||
++sv_derived_from_pvn||5.015004|
++sv_derived_from_pv||5.015004|
++sv_derived_from_sv||5.015004|
++sv_derived_from||5.004000|
++sv_destroyable||5.010000|
++sv_display|||
++sv_does_pvn||5.015004|
++sv_does_pv||5.015004|
++sv_does_sv||5.015004|
++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|
++sv_force_normal||5.006000|
++sv_free2|||
++sv_free_arenas|||
++sv_free|||
++sv_gets||5.004000|
++sv_grow|||
++sv_i_ncmp|||
++sv_inc_nomg||5.013002|
++sv_inc|||
++sv_insert_flags||5.010001|
++sv_insert|||
++sv_isa|||
++sv_isobject|||
++sv_iv||5.005000|
++sv_kill_backrefs|||
++sv_len_utf8_nomg|||
++sv_len_utf8||5.006000|
++sv_len|||
++sv_magic_portable|5.019003|5.004000|p
++sv_magicext_mglob|||
++sv_magicext||5.007003|
++sv_magic|||
++sv_mortalcopy_flags|||
++sv_mortalcopy|||
++sv_ncmp|||
++sv_newmortal|||
++sv_newref|||
++sv_nolocking||5.007003|
++sv_nosharing||5.007003|
++sv_nounlocking|||
++sv_nv||5.005000|
++sv_peek||5.005000|
++sv_pos_b2u_flags||5.019003|
++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|
++sv_pvbyten_force||5.006000|
++sv_pvbyten||5.006000|
++sv_pvbyte||5.006000|
++sv_pvn_force_flags|5.007002||p
++sv_pvn_force|||
++sv_pvn_nomg|5.007003|5.005000|p
++sv_pvn||5.005000|
++sv_pvutf8n_force||5.006000|
++sv_pvutf8n||5.006000|
++sv_pvutf8||5.006000|
++sv_pv||5.006000|
++sv_recode_to_utf8||5.007003|
++sv_reftype|||
++sv_ref|||
++sv_release_COW|||
++sv_replace|||
++sv_report_used|||
++sv_resetpvn|||
++sv_reset|||
++sv_rvweaken||5.006000|
++sv_sethek|||
++sv_setiv_mg|5.004050||p
++sv_setiv|||
++sv_setnv_mg|5.006000||p
++sv_setnv|||
++sv_setpv_mg|5.004050||p
++sv_setpvf_mg_nocontext|||pvn
++sv_setpvf_mg|5.006000|5.004000|pv
++sv_setpvf_nocontext|||vn
++sv_setpvf||5.004000|v
++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.019003|
++sv_setref_pv|||
++sv_setref_uv||5.007001|
++sv_setsv_cow|||
++sv_setsv_flags||5.007002|
++sv_setsv_mg|5.004050||p
++sv_setsv_nomg|5.007002||p
++sv_setsv|||
++sv_setuv_mg|5.004050||p
++sv_setuv|5.004000||p
++sv_tainted||5.004000|
++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|||
++sv_untaint||5.004000|
++sv_upgrade|||
++sv_usepvn_flags||5.009004|
++sv_usepvn_mg|5.004050||p
++sv_usepvn|||
++sv_utf8_decode||5.006000|
++sv_utf8_downgrade||5.006000|
++sv_utf8_encode||5.006000|
++sv_utf8_upgrade_flags_grow||5.011000|
++sv_utf8_upgrade_flags||5.007002|
++sv_utf8_upgrade_nomg||5.007002|
++sv_utf8_upgrade||5.007001|
++sv_uv|5.005000||p
++sv_vcatpvf_mg|5.006000|5.004000|p
++sv_vcatpvfn_flags||5.017002|
++sv_vcatpvfn||5.004000|
++sv_vcatpvf|5.006000|5.004000|p
++sv_vsetpvf_mg|5.006000|5.004000|p
++sv_vsetpvfn||5.004000|
++sv_vsetpvf|5.006000|5.004000|p
++sv_xmlpeek|||
++svtype|||
++swallow_bom|||
++swash_fetch||5.007002|
++swash_init||5.006000|
++swatch_get|||
++sys_init3||5.010000|n
++sys_init||5.010000|n
++sys_intern_clear|||
++sys_intern_dup|||
++sys_intern_init|||
++sys_term||5.010000|n
++taint_env|||
++taint_proper|||
++tied_method|||v
++tmps_grow||5.006000|
++toFOLD_uni||5.007003|
++toFOLD_utf8||5.019001|
++toFOLD||5.019001|
++toLOWER_L1||5.019001|
++toLOWER_LC||5.004000|
++toLOWER_uni||5.007003|
++toLOWER_utf8||5.015007|
++toLOWER|||
++toTITLE_uni||5.007003|
++toTITLE_utf8||5.015007|
++toTITLE||5.019001|
++toUPPER_uni||5.007003|
++toUPPER_utf8||5.015007|
++toUPPER||5.004000|
++to_byte_substr|||
++to_lower_latin1|||
++to_uni_fold||5.007003|
++to_uni_lower_lc||5.006000|
++to_uni_lower||5.007003|
++to_uni_title_lc||5.006000|
++to_uni_title||5.007003|
++to_uni_upper_lc||5.006000|
++to_uni_upper||5.007003|
++to_utf8_case||5.007003|
++to_utf8_fold||5.015007|
++to_utf8_lower||5.015007|
++to_utf8_substr|||
++to_utf8_title||5.015007|
++to_utf8_upper||5.015007|
++token_free|||
++token_getmad|||
++tokenize_use|||
++tokeq|||
++tokereport|||
++too_few_arguments_pv|||
++too_few_arguments_sv|||
++too_many_arguments_pv|||
++too_many_arguments_sv|||
++translate_substr_offsets|||
++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|
++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_buf||5.015009|
++utf8_to_uvchr||5.007001|
++utf8_to_uvuni_buf||5.015009|
++utf8_to_uvuni||5.007001|
++utf8n_to_uvchr|||
++utf8n_to_uvuni||5.007001|
++utilize|||
++uvchr_to_utf8_flags||5.007003|
++uvchr_to_utf8|||
++uvuni_to_utf8_flags||5.007003|
++uvuni_to_utf8||5.007001|
++valid_utf8_to_uvchr|||
++valid_utf8_to_uvuni||5.015009|
++validate_proto|||
++validate_suid|||
++varname|||
++vcmp||5.009000|
++vcroak||5.006000|
++vdeb||5.007003|
++vform||5.006000|
++visit|||
++vivify_defelem|||
++vivify_ref|||
++vload_module|5.006000||p
++vmess||5.006000|
++vnewSVpvf|5.006000|5.004000|p
++vnormal||5.009002|
++vnumify||5.009000|
++vstringify||5.009000|
++vverify||5.009003|
++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
++was_lvalue_sub|||
++watch|||
++whichsig_pvn||5.015004|
++whichsig_pv||5.015004|
++whichsig_sv||5.015004|
++whichsig|||
++win32_croak_not_implemented|||n
++with_queued_errors|||
++wrap_op_checker||5.015008|
++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_pvn|||
++yyerror_pv|||
++yyerror|||
++yylex|||
++yyparse|||
++yyunlex|||
++yywarn|||
++);
++
++if (exists $opt{'list-unsupported'}) {
++  my $f;
++  for $f (sort { lc $a cmp lc $b } keys %API) {
++    next unless $API{$f}{todo};
++    print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
++  }
++  exit 0;
++}
++
++# Scan for possible replacement candidates
++
++my(%replace, %need, %hints, %warnings, %depends);
++my $replace = 0;
++my($hint, $define, $function);
++
++sub find_api
++{
++  my $code = shift;
++  $code =~ s{
++    / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
++  | "[^"\\]*(?:\\.[^"\\]*)*"
++  | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
++  grep { exists $API{$_} } $code =~ /(\w+)/mg;
++}
++
++while (<DATA>) {
++  if ($hint) {
++    my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
++    if (m{^\s*\*\s(.*?)\s*$}) {
++      for (@{$hint->[1]}) {
++        $h->{$_} ||= '';  # suppress warning with older perls
++        $h->{$_} .= "$1\n";
++      }
++    }
++    else { undef $hint }
++  }
++
++  $hint = [$1, [split /,?\s+/, $2]]
++      if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
++
++  if ($define) {
++    if ($define->[1] =~ /\\$/) {
++      $define->[1] .= $_;
++    }
++    else {
++      if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
++        my @n = find_api($define->[1]);
++        push @{$depends{$define->[0]}}, @n if @n
++      }
++      undef $define;
++    }
++  }
++
++  $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
++
++  if ($function) {
++    if (/^}/) {
++      if (exists $API{$function->[0]}) {
++        my @n = find_api($function->[1]);
++        push @{$depends{$function->[0]}}, @n if @n
++      }
++      undef $function;
++    }
++    else {
++      $function->[1] .= $_;
++    }
++  }
++
++  $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
++
++  $replace     = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
++  $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
++  $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
++  $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
++
++  if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
++    my @deps = map { s/\s+//g; $_ } split /,/, $3;
++    my $d;
++    for $d (map { s/\s+//g; $_ } split /,/, $1) {
++      push @{$depends{$d}}, @deps;
++    }
++  }
++
++  $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
++}
++
++for (values %depends) {
++  my %s;
++  $_ = [sort grep !$s{$_}++, @$_];
++}
++
++if (exists $opt{'api-info'}) {
++  my $f;
++  my $count = 0;
++  my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
++  for $f (sort { lc $a cmp lc $b } keys %API) {
++    next unless $f =~ /$match/;
++    print "\n=== $f ===\n\n";
++    my $info = 0;
++    if ($API{$f}{base} || $API{$f}{todo}) {
++      my $base = format_version($API{$f}{base} || $API{$f}{todo});
++      print "Supported at least starting from perl-$base.\n";
++      $info++;
++    }
++    if ($API{$f}{provided}) {
++      my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
++      print "Support by $ppport provided back to perl-$todo.\n";
++      print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
++      print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
++      print "\n$hints{$f}" if exists $hints{$f};
++      print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
++      $info++;
++    }
++    print "No portability information available.\n" unless $info;
++    $count++;
++  }
++  $count or print "Found no API matching '$opt{'api-info'}'.";
++  print "\n";
++  exit 0;
++}
++
++if (exists $opt{'list-provided'}) {
++  my $f;
++  for $f (sort { lc $a cmp lc $b } keys %API) {
++    next unless $API{$f}{provided};
++    my @flags;
++    push @flags, 'explicit' if exists $need{$f};
++    push @flags, 'depend'   if exists $depends{$f};
++    push @flags, 'hint'     if exists $hints{$f};
++    push @flags, 'warning'  if exists $warnings{$f};
++    my $flags = @flags ? '  ['.join(', ', @flags).']' : '';
++    print "$f$flags\n";
++  }
++  exit 0;
++}
++
++my @files;
++my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
++my $srcext = join '|', map { quotemeta $_ } @srcext;
++
++if (@ARGV) {
++  my %seen;
++  for (@ARGV) {
++    if (-e) {
++      if (-f) {
++        push @files, $_ unless $seen{$_}++;
++      }
++      else { warn "'$_' is not a file.\n" }
++    }
++    else {
++      my @new = grep { -f } glob $_
++          or warn "'$_' does not exist.\n";
++      push @files, grep { !$seen{$_}++ } @new;
++    }
++  }
++}
++else {
++  eval {
++    require File::Find;
++    File::Find::find(sub {
++      $File::Find::name =~ /($srcext)$/i
++          and push @files, $File::Find::name;
++    }, '.');
++  };
++  if ($@) {
++    @files = map { glob "*$_" } @srcext;
++  }
++}
++
++if (!@ARGV || $opt{filter}) {
++  my(@in, @out);
++  my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files;
++  for (@files) {
++    my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
++    push @{ $out ? \@out : \@in }, $_;
++  }
++  if (@ARGV && @out) {
++    warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
++  }
++  @files = @in;
++}
++
++die "No input files given!\n" unless @files;
++
++my(%files, %global, %revreplace);
++%revreplace = reverse %replace;
++my $filename;
++my $patch_opened = 0;
++
++for $filename (@files) {
++  unless (open IN, "<$filename") {
++    warn "Unable to read from $filename: $!\n";
++    next;
++  }
++
++  info("Scanning $filename ...");
++
++  my $c = do { local $/; <IN> };
++  close IN;
++
++  my %file = (orig => $c, changes => 0);
++
++  # Temporarily remove C/XS comments and strings from the code
++  my @ccom;
++
++  $c =~ s{
++    ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
++    | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
++  | ( ^$HS*\#[^\r\n]*
++    | "[^"\\]*(?:\\.[^"\\]*)*"
++    | '[^'\\]*(?:\\.[^'\\]*)*'
++    | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
++  }{ defined $2 and push @ccom, $2;
++     defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
++
++  $file{ccom} = \@ccom;
++  $file{code} = $c;
++  $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
++
++  my $func;
++
++  for $func (keys %API) {
++    my $match = $func;
++    $match .= "|$revreplace{$func}" if exists $revreplace{$func};
++    if ($c =~ /\b(?:Perl_)?($match)\b/) {
++      $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
++      $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
++      if (exists $API{$func}{provided}) {
++        $file{uses_provided}{$func}++;
++        if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
++          $file{uses}{$func}++;
++          my @deps = rec_depend($func);
++          if (@deps) {
++            $file{uses_deps}{$func} = \@deps;
++            for (@deps) {
++              $file{uses}{$_} = 0 unless exists $file{uses}{$_};
++            }
++          }
++          for ($func, @deps) {
++            $file{needs}{$_} = 'static' if exists $need{$_};
++          }
++        }
++      }
++      if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
++        if ($c =~ /\b$func\b/) {
++          $file{uses_todo}{$func}++;
++        }
++      }
++    }
++  }
++
++  while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
++    if (exists $need{$2}) {
++      $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
++    }
++    else { warning("Possibly wrong #define $1 in $filename") }
++  }
++
++  for (qw(uses needs uses_todo needed_global needed_static)) {
++    for $func (keys %{$file{$_}}) {
++      push @{$global{$_}{$func}}, $filename;
++    }
++  }
++
++  $files{$filename} = \%file;
++}
++
++# Globally resolve NEED_'s
++my $need;
++for $need (keys %{$global{needs}}) {
++  if (@{$global{needs}{$need}} > 1) {
++    my @targets = @{$global{needs}{$need}};
++    my @t = grep $files{$_}{needed_global}{$need}, @targets;
++    @targets = @t if @t;
++    @t = grep /\.xs$/i, @targets;
++    @targets = @t if @t;
++    my $target = shift @targets;
++    $files{$target}{needs}{$need} = 'global';
++    for (@{$global{needs}{$need}}) {
++      $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
++    }
++  }
++}
++
++for $filename (@files) {
++  exists $files{$filename} or next;
++
++  info("=== Analyzing $filename ===");
++
++  my %file = %{$files{$filename}};
++  my $func;
++  my $c = $file{code};
++  my $warnings = 0;
++
++  for $func (sort keys %{$file{uses_Perl}}) {
++    if ($API{$func}{varargs}) {
++      unless ($API{$func}{nothxarg}) {
++        my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
++                              { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
++        if ($changes) {
++          warning("Doesn't pass interpreter argument aTHX to Perl_$func");
++          $file{changes} += $changes;
++        }
++      }
++    }
++    else {
++      warning("Uses Perl_$func instead of $func");
++      $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
++                                {$func$1(}g);
++    }
++  }
++
++  for $func (sort keys %{$file{uses_replace}}) {
++    warning("Uses $func instead of $replace{$func}");
++    $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
++  }
++
++  for $func (sort keys %{$file{uses_provided}}) {
++    if ($file{uses}{$func}) {
++      if (exists $file{uses_deps}{$func}) {
++        diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
++      }
++      else {
++        diag("Uses $func");
++      }
++    }
++    $warnings += hint($func);
++  }
++
++  unless ($opt{quiet}) {
++    for $func (sort keys %{$file{uses_todo}}) {
++      print "*** WARNING: Uses $func, which may not be portable below perl ",
++            format_version($API{$func}{todo}), ", even with '$ppport'\n";
++      $warnings++;
++    }
++  }
++
++  for $func (sort keys %{$file{needed_static}}) {
++    my $message = '';
++    if (not exists $file{uses}{$func}) {
++      $message = "No need to define NEED_$func if $func is never used";
++    }
++    elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
++      $message = "No need to define NEED_$func when already needed globally";
++    }
++    if ($message) {
++      diag($message);
++      $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
++    }
++  }
++
++  for $func (sort keys %{$file{needed_global}}) {
++    my $message = '';
++    if (not exists $global{uses}{$func}) {
++      $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
++    }
++    elsif (exists $file{needs}{$func}) {
++      if ($file{needs}{$func} eq 'extern') {
++        $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
++      }
++      elsif ($file{needs}{$func} eq 'static') {
++        $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
++      }
++    }
++    if ($message) {
++      diag($message);
++      $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
++    }
++  }
++
++  $file{needs_inc_ppport} = keys %{$file{uses}};
++
++  if ($file{needs_inc_ppport}) {
++    my $pp = '';
++
++    for $func (sort keys %{$file{needs}}) {
++      my $type = $file{needs}{$func};
++      next if $type eq 'extern';
++      my $suffix = $type eq 'global' ? '_GLOBAL' : '';
++      unless (exists $file{"needed_$type"}{$func}) {
++        if ($type eq 'global') {
++          diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
++        }
++        else {
++          diag("File needs $func, adding static request");
++        }
++        $pp .= "#define NEED_$func$suffix\n";
++      }
++    }
++
++    if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
++      $pp = '';
++      $file{changes}++;
++    }
++
++    unless ($file{has_inc_ppport}) {
++      diag("Needs to include '$ppport'");
++      $pp .= qq(#include "$ppport"\n)
++    }
++
++    if ($pp) {
++      $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
++                     || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
++                     || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
++                     || ($c =~ s/^/$pp/);
++    }
++  }
++  else {
++    if ($file{has_inc_ppport}) {
++      diag("No need to include '$ppport'");
++      $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
++    }
++  }
++
++  # put back in our C comments
++  my $ix;
++  my $cppc = 0;
++  my @ccom = @{$file{ccom}};
++  for $ix (0 .. $#ccom) {
++    if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
++      $cppc++;
++      $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
++    }
++    else {
++      $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
++    }
++  }
++
++  if ($cppc) {
++    my $s = $cppc != 1 ? 's' : '';
++    warning("Uses $cppc C++ style comment$s, which is not portable");
++  }
++
++  my $s = $warnings != 1 ? 's' : '';
++  my $warn = $warnings ? " ($warnings warning$s)" : '';
++  info("Analysis completed$warn");
++
++  if ($file{changes}) {
++    if (exists $opt{copy}) {
++      my $newfile = "$filename$opt{copy}";
++      if (-e $newfile) {
++        error("'$newfile' already exists, refusing to write copy of '$filename'");
++      }
++      else {
++        local *F;
++        if (open F, ">$newfile") {
++          info("Writing copy of '$filename' with changes to '$newfile'");
++          print F $c;
++          close F;
++        }
++        else {
++          error("Cannot open '$newfile' for writing: $!");
++        }
++      }
++    }
++    elsif (exists $opt{patch} || $opt{changes}) {
++      if (exists $opt{patch}) {
++        unless ($patch_opened) {
++          if (open PATCH, ">$opt{patch}") {
++            $patch_opened = 1;
++          }
++          else {
++            error("Cannot open '$opt{patch}' for writing: $!");
++            delete $opt{patch};
++            $opt{changes} = 1;
++            goto fallback;
++          }
++        }
++        mydiff(\*PATCH, $filename, $c);
++      }
++      else {
++fallback:
++        info("Suggested changes:");
++        mydiff(\*STDOUT, $filename, $c);
++      }
++    }
++    else {
++      my $s = $file{changes} == 1 ? '' : 's';
++      info("$file{changes} potentially required change$s detected");
++    }
++  }
++  else {
++    info("Looks good");
++  }
++}
++
++close PATCH if $patch_opened;
++
++exit 0;
++
++
++sub try_use { eval "use @_;"; return $@ eq '' }
++
++sub mydiff
++{
++  local *F = shift;
++  my($file, $str) = @_;
++  my $diff;
++
++  if (exists $opt{diff}) {
++    $diff = run_diff($opt{diff}, $file, $str);
++  }
++
++  if (!defined $diff and try_use('Text::Diff')) {
++    $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
++    $diff = <<HEADER . $diff;
++--- $file
+++++ $file.patched
++HEADER
++  }
++
++  if (!defined $diff) {
++    $diff = run_diff('diff -u', $file, $str);
++  }
++
++  if (!defined $diff) {
++    $diff = run_diff('diff', $file, $str);
++  }
++
++  if (!defined $diff) {
++    error("Cannot generate a diff. Please install Text::Diff or use --copy.");
++    return;
++  }
++
++  print F $diff;
++}
++
++sub run_diff
++{
++  my($prog, $file, $str) = @_;
++  my $tmp = 'dppptemp';
++  my $suf = 'aaa';
++  my $diff = '';
++  local *F;
++
++  while (-e "$tmp.$suf") { $suf++ }
++  $tmp = "$tmp.$suf";
++
++  if (open F, ">$tmp") {
++    print F $str;
++    close F;
++
++    if (open F, "$prog $file $tmp |") {
++      while (<F>) {
++        s/\Q$tmp\E/$file.patched/;
++        $diff .= $_;
++      }
++      close F;
++      unlink $tmp;
++      return $diff;
++    }
++
++    unlink $tmp;
++  }
++  else {
++    error("Cannot open '$tmp' for writing: $!");
++  }
++
++  return undef;
++}
++
++sub rec_depend
++{
++  my($func, $seen) = @_;
++  return () unless exists $depends{$func};
++  $seen = {%{$seen||{}}};
++  return () if $seen->{$func}++;
++  my %s;
++  grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
++}
++
++sub parse_version
++{
++  my $ver = shift;
++
++  if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
++    return ($1, $2, $3);
++  }
++  elsif ($ver !~ /^\d+\.[\d_]+$/) {
++    die "cannot parse version '$ver'\n";
++  }
++
++  $ver =~ s/_//g;
++  $ver =~ s/$/000000/;
++
++  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
++
++  $v = int $v;
++  $s = int $s;
++
++  if ($r < 5 || ($r == 5 && $v < 6)) {
++    if ($s % 10) {
++      die "cannot parse version '$ver'\n";
++    }
++  }
++
++  return ($r, $v, $s);
++}
++
++sub format_version
++{
++  my $ver = shift;
++
++  $ver =~ s/$/000000/;
++  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
++
++  $v = int $v;
++  $s = int $s;
++
++  if ($r < 5 || ($r == 5 && $v < 6)) {
++    if ($s % 10) {
++      die "invalid version '$ver'\n";
++    }
++    $s /= 10;
++
++    $ver = sprintf "%d.%03d", $r, $v;
++    $s > 0 and $ver .= sprintf "_%02d", $s;
++
++    return $ver;
++  }
++
++  return sprintf "%d.%d.%d", $r, $v, $s;
++}
++
++sub info
++{
++  $opt{quiet} and return;
++  print @_, "\n";
++}
++
++sub diag
++{
++  $opt{quiet} and return;
++  $opt{diag} and print @_, "\n";
++}
++
++sub warning
++{
++  $opt{quiet} and return;
++  print "*** ", @_, "\n";
++}
++
++sub error
++{
++  print "*** ERROR: ", @_, "\n";
++}
++
++my %given_hints;
++my %given_warnings;
++sub hint
++{
++  $opt{quiet} and return;
++  my $func = shift;
++  my $rv = 0;
++  if (exists $warnings{$func} && !$given_warnings{$func}++) {
++    my $warn = $warnings{$func};
++    $warn =~ s!^!*** !mg;
++    print "*** WARNING: $func\n", $warn;
++    $rv++;
++  }
++  if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
++    my $hint = $hints{$func};
++    $hint =~ s/^/   /mg;
++    print "   --- hint for $func ---\n", $hint;
++  }
++  $rv;
++}
++
++sub usage
++{
++  my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
++  my %M = ( 'I' => '*' );
++  $usage =~ s/^\s*perl\s+\S+/$^X $0/;
++  $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
++
++  print <<ENDUSAGE;
++
++Usage: $usage
++
++See perldoc $0 for details.
++
++ENDUSAGE
++
++  exit 2;
++}
++
++sub strip
++{
++  my $self = do { local(@ARGV,$/)=($0); <> };
++  my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
++  $copy =~ s/^(?=\S+)/    /gms;
++  $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
++  $self =~ s/^SKIP.*(?=^__DATA__)/SKIP
++if (\@ARGV && \$ARGV[0] eq '--unstrip') {
++  eval { require Devel::PPPort };
++  \$@ and die "Cannot require Devel::PPPort, please install.\\n";
++  if (eval \$Devel::PPPort::VERSION < $VERSION) {
++    die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
++      . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
++      . "Please install a newer version, or --unstrip will not work.\\n";
++  }
++  Devel::PPPort::WriteFile(\$0);
++  exit 0;
++}
++print <<END;
++
++Sorry, but this is a stripped version of \$0.
++
++To be able to use its original script and doc functionality,
++please try to regenerate this file using:
++
++  \$^X \$0 --unstrip
++
++END
++/ms;
++  my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
++  $c =~ s{
++    / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
++  | ( "[^"\\]*(?:\\.[^"\\]*)*"
++    | '[^'\\]*(?:\\.[^'\\]*)*' )
++  | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
++  $c =~ s!\s+$!!mg;
++  $c =~ s!^$LF!!mg;
++  $c =~ s!^\s*#\s*!#!mg;
++  $c =~ s!^\s+!!mg;
++
++  open OUT, ">$0" or die "cannot strip $0: $!\n";
++  print OUT "$pl$c\n";
++
++  exit 0;
++}
++
++__DATA__
++*/
++
++#ifndef _P_P_PORTABILITY_H_
++#define _P_P_PORTABILITY_H_
++
++#ifndef DPPP_NAMESPACE
++#  define DPPP_NAMESPACE DPPP_
++#endif
++
++#define DPPP_CAT2(x,y) CAT2(x,y)
++#define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
++
++#ifndef PERL_REVISION
++#  if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
++#    define PERL_PATCHLEVEL_H_IMPLICIT
++#    include <patchlevel.h>
++#  endif
++#  if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
++#    include <could_not_find_Perl_patchlevel.h>
++#  endif
++#  ifndef PERL_REVISION
++#    define PERL_REVISION       (5)
++     /* Replace: 1 */
++#    define PERL_VERSION        PATCHLEVEL
++#    define PERL_SUBVERSION     SUBVERSION
++     /* Replace PERL_PATCHLEVEL with PERL_VERSION */
++     /* Replace: 0 */
++#  endif
++#endif
++
++#define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
++#define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION))
++
++/* It is very unlikely that anyone will try to use this with Perl 6
++   (or greater), but who knows.
++ */
++#if PERL_REVISION != 5
++#  error ppport.h only works with Perl version 5
++#endif /* PERL_REVISION != 5 */
++#ifndef dTHR
++#  define dTHR                           dNOOP
++#endif
++#ifndef dTHX
++#  define dTHX                           dNOOP
++#endif
++
++#ifndef dTHXa
++#  define dTHXa(x)                       dNOOP
++#endif
++#ifndef pTHX
++#  define pTHX                           void
++#endif
++
++#ifndef pTHX_
++#  define pTHX_
++#endif
++
++#ifndef aTHX
++#  define aTHX
++#endif
++
++#ifndef aTHX_
++#  define aTHX_
++#endif
++
++#if (PERL_BCDVERSION < 0x5006000)
++#  ifdef USE_THREADS
++#    define aTHXR  thr
++#    define aTHXR_ thr,
++#  else
++#    define aTHXR
++#    define aTHXR_
++#  endif
++#  define dTHXR  dTHR
++#else
++#  define aTHXR  aTHX
++#  define aTHXR_ aTHX_
++#  define dTHXR  dTHX
++#endif
++#ifndef dTHXoa
++#  define dTHXoa(x)                      dTHXa(x)
++#endif
++
++#ifdef I_LIMITS
++#  include <limits.h>
++#endif
++
++#ifndef PERL_UCHAR_MIN
++#  define PERL_UCHAR_MIN ((unsigned char)0)
++#endif
++
++#ifndef PERL_UCHAR_MAX
++#  ifdef UCHAR_MAX
++#    define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
++#  else
++#    ifdef MAXUCHAR
++#      define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
++#    else
++#      define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
++#    endif
++#  endif
++#endif
++
++#ifndef PERL_USHORT_MIN
++#  define PERL_USHORT_MIN ((unsigned short)0)
++#endif
++
++#ifndef PERL_USHORT_MAX
++#  ifdef USHORT_MAX
++#    define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
++#  else
++#    ifdef MAXUSHORT
++#      define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
++#    else
++#      ifdef USHRT_MAX
++#        define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
++#      else
++#        define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
++#      endif
++#    endif
++#  endif
++#endif
++
++#ifndef PERL_SHORT_MAX
++#  ifdef SHORT_MAX
++#    define PERL_SHORT_MAX ((short)SHORT_MAX)
++#  else
++#    ifdef MAXSHORT    /* Often used in <values.h> */
++#      define PERL_SHORT_MAX ((short)MAXSHORT)
++#    else
++#      ifdef SHRT_MAX
++#        define PERL_SHORT_MAX ((short)SHRT_MAX)
++#      else
++#        define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
++#      endif
++#    endif
++#  endif
++#endif
++
++#ifndef PERL_SHORT_MIN
++#  ifdef SHORT_MIN
++#    define PERL_SHORT_MIN ((short)SHORT_MIN)
++#  else
++#    ifdef MINSHORT
++#      define PERL_SHORT_MIN ((short)MINSHORT)
++#    else
++#      ifdef SHRT_MIN
++#        define PERL_SHORT_MIN ((short)SHRT_MIN)
++#      else
++#        define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
++#      endif
++#    endif
++#  endif
++#endif
++
++#ifndef PERL_UINT_MAX
++#  ifdef UINT_MAX
++#    define PERL_UINT_MAX ((unsigned int)UINT_MAX)
++#  else
++#    ifdef MAXUINT
++#      define PERL_UINT_MAX ((unsigned int)MAXUINT)
++#    else
++#      define PERL_UINT_MAX (~(unsigned int)0)
++#    endif
++#  endif
++#endif
++
++#ifndef PERL_UINT_MIN
++#  define PERL_UINT_MIN ((unsigned int)0)
++#endif
++
++#ifndef PERL_INT_MAX
++#  ifdef INT_MAX
++#    define PERL_INT_MAX ((int)INT_MAX)
++#  else
++#    ifdef MAXINT    /* Often used in <values.h> */
++#      define PERL_INT_MAX ((int)MAXINT)
++#    else
++#      define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
++#    endif
++#  endif
++#endif
++
++#ifndef PERL_INT_MIN
++#  ifdef INT_MIN
++#    define PERL_INT_MIN ((int)INT_MIN)
++#  else
++#    ifdef MININT
++#      define PERL_INT_MIN ((int)MININT)
++#    else
++#      define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
++#    endif
++#  endif
++#endif
++
++#ifndef PERL_ULONG_MAX
++#  ifdef ULONG_MAX
++#    define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
++#  else
++#    ifdef MAXULONG
++#      define PERL_ULONG_MAX ((unsigned long)MAXULONG)
++#    else
++#      define PERL_ULONG_MAX (~(unsigned long)0)
++#    endif
++#  endif
++#endif
++
++#ifndef PERL_ULONG_MIN
++#  define PERL_ULONG_MIN ((unsigned long)0L)
++#endif
++
++#ifndef PERL_LONG_MAX
++#  ifdef LONG_MAX
++#    define PERL_LONG_MAX ((long)LONG_MAX)
++#  else
++#    ifdef MAXLONG
++#      define PERL_LONG_MAX ((long)MAXLONG)
++#    else
++#      define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
++#    endif
++#  endif
++#endif
++
++#ifndef PERL_LONG_MIN
++#  ifdef LONG_MIN
++#    define PERL_LONG_MIN ((long)LONG_MIN)
++#  else
++#    ifdef MINLONG
++#      define PERL_LONG_MIN ((long)MINLONG)
++#    else
++#      define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
++#    endif
++#  endif
++#endif
++
++#if defined(HAS_QUAD) && (defined(convex) || defined(uts))
++#  ifndef PERL_UQUAD_MAX
++#    ifdef ULONGLONG_MAX
++#      define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX)
++#    else
++#      ifdef MAXULONGLONG
++#        define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG)
++#      else
++#        define PERL_UQUAD_MAX (~(unsigned long long)0)
++#      endif
++#    endif
++#  endif
++
++#  ifndef PERL_UQUAD_MIN
++#    define PERL_UQUAD_MIN ((unsigned long long)0L)
++#  endif
++
++#  ifndef PERL_QUAD_MAX
++#    ifdef LONGLONG_MAX
++#      define PERL_QUAD_MAX ((long long)LONGLONG_MAX)
++#    else
++#      ifdef MAXLONGLONG
++#        define PERL_QUAD_MAX ((long long)MAXLONGLONG)
++#      else
++#        define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1))
++#      endif
++#    endif
++#  endif
++
++#  ifndef PERL_QUAD_MIN
++#    ifdef LONGLONG_MIN
++#      define PERL_QUAD_MIN ((long long)LONGLONG_MIN)
++#    else
++#      ifdef MINLONGLONG
++#        define PERL_QUAD_MIN ((long long)MINLONGLONG)
++#      else
++#        define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
++#      endif
++#    endif
++#  endif
++#endif
++
++/* This is based on code from 5.003 perl.h */
++#ifdef HAS_QUAD
++#  ifdef cray
++#ifndef IVTYPE
++#  define IVTYPE                         int
++#endif
++
++#ifndef IV_MIN
++#  define IV_MIN                         PERL_INT_MIN
++#endif
++
++#ifndef IV_MAX
++#  define IV_MAX                         PERL_INT_MAX
++#endif
++
++#ifndef UV_MIN
++#  define UV_MIN                         PERL_UINT_MIN
++#endif
++
++#ifndef UV_MAX
++#  define UV_MAX                         PERL_UINT_MAX
++#endif
++
++#    ifdef INTSIZE
++#ifndef IVSIZE
++#  define IVSIZE                         INTSIZE
++#endif
++
++#    endif
++#  else
++#    if defined(convex) || defined(uts)
++#ifndef IVTYPE
++#  define IVTYPE                         long long
++#endif
++
++#ifndef IV_MIN
++#  define IV_MIN                         PERL_QUAD_MIN
++#endif
++
++#ifndef IV_MAX
++#  define IV_MAX                         PERL_QUAD_MAX
++#endif
++
++#ifndef UV_MIN
++#  define UV_MIN                         PERL_UQUAD_MIN
++#endif
++
++#ifndef UV_MAX
++#  define UV_MAX                         PERL_UQUAD_MAX
++#endif
++
++#      ifdef LONGLONGSIZE
++#ifndef IVSIZE
++#  define IVSIZE                         LONGLONGSIZE
++#endif
++
++#      endif
++#    else
++#ifndef IVTYPE
++#  define IVTYPE                         long
++#endif
++
++#ifndef IV_MIN
++#  define IV_MIN                         PERL_LONG_MIN
++#endif
++
++#ifndef IV_MAX
++#  define IV_MAX                         PERL_LONG_MAX
++#endif
++
++#ifndef UV_MIN
++#  define UV_MIN                         PERL_ULONG_MIN
++#endif
++
++#ifndef UV_MAX
++#  define UV_MAX                         PERL_ULONG_MAX
++#endif
++
++#      ifdef LONGSIZE
++#ifndef IVSIZE
++#  define IVSIZE                         LONGSIZE
++#endif
++
++#      endif
++#    endif
++#  endif
++#ifndef IVSIZE
++#  define IVSIZE                         8
++#endif
++
++#ifndef LONGSIZE
++#  define LONGSIZE                       8
++#endif
++
++#ifndef PERL_QUAD_MIN
++#  define PERL_QUAD_MIN                  IV_MIN
++#endif
++
++#ifndef PERL_QUAD_MAX
++#  define PERL_QUAD_MAX                  IV_MAX
++#endif
++
++#ifndef PERL_UQUAD_MIN
++#  define PERL_UQUAD_MIN                 UV_MIN
++#endif
++
++#ifndef PERL_UQUAD_MAX
++#  define PERL_UQUAD_MAX                 UV_MAX
++#endif
++
++#else
++#ifndef IVTYPE
++#  define IVTYPE                         long
++#endif
++
++#ifndef LONGSIZE
++#  define LONGSIZE                       4
++#endif
++
++#ifndef IV_MIN
++#  define IV_MIN                         PERL_LONG_MIN
++#endif
++
++#ifndef IV_MAX
++#  define IV_MAX                         PERL_LONG_MAX
++#endif
++
++#ifndef UV_MIN
++#  define UV_MIN                         PERL_ULONG_MIN
++#endif
++
++#ifndef UV_MAX
++#  define UV_MAX                         PERL_ULONG_MAX
++#endif
++
++#endif
++
++#ifndef IVSIZE
++#  ifdef LONGSIZE
++#    define IVSIZE LONGSIZE
++#  else
++#    define IVSIZE 4 /* A bold guess, but the best we can make. */
++#  endif
++#endif
++#ifndef UVTYPE
++#  define UVTYPE                         unsigned IVTYPE
++#endif
++
++#ifndef UVSIZE
++#  define UVSIZE                         IVSIZE
++#endif
++#ifndef sv_setuv
++#  define sv_setuv(sv, uv)               \
++               STMT_START {                         \
++                 UV TeMpUv = uv;                    \
++                 if (TeMpUv <= IV_MAX)              \
++                   sv_setiv(sv, TeMpUv);            \
++                 else                               \
++                   sv_setnv(sv, (double)TeMpUv);    \
++               } STMT_END
++#endif
++#ifndef newSVuv
++#  define newSVuv(uv)                    ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
++#endif
++#ifndef sv_2uv
++#  define sv_2uv(sv)                     ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
++#endif
++
++#ifndef SvUVX
++#  define SvUVX(sv)                      ((UV)SvIVX(sv))
++#endif
++
++#ifndef SvUVXx
++#  define SvUVXx(sv)                     SvUVX(sv)
++#endif
++
++#ifndef SvUV
++#  define SvUV(sv)                       (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
++#endif
++
++#ifndef SvUVx
++#  define SvUVx(sv)                      ((PL_Sv = (sv)), SvUV(PL_Sv))
++#endif
++
++/* Hint: sv_uv
++ * Always use the SvUVx() macro instead of sv_uv().
++ */
++#ifndef sv_uv
++#  define sv_uv(sv)                      SvUVx(sv)
++#endif
++
++#if !defined(SvUOK) && defined(SvIOK_UV)
++#  define SvUOK(sv) SvIOK_UV(sv)
++#endif
++#ifndef XST_mUV
++#  define XST_mUV(i,v)                   (ST(i) = sv_2mortal(newSVuv(v))  )
++#endif
++
++#ifndef XSRETURN_UV
++#  define XSRETURN_UV(v)                 STMT_START { XST_mUV(0,v);  XSRETURN(1); } STMT_END
++#endif
++#ifndef PUSHu
++#  define PUSHu(u)                       STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG;  } STMT_END
++#endif
++
++#ifndef XPUSHu
++#  define XPUSHu(u)                      STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
++#endif
++
++#ifdef HAS_MEMCMP
++#ifndef memNE
++#  define memNE(s1,s2,l)                 (memcmp(s1,s2,l))
++#endif
++
++#ifndef memEQ
++#  define memEQ(s1,s2,l)                 (!memcmp(s1,s2,l))
++#endif
++
++#else
++#ifndef memNE
++#  define memNE(s1,s2,l)                 (bcmp(s1,s2,l))
++#endif
++
++#ifndef memEQ
++#  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))
++#endif
++
++#ifndef CopyD
++#  define CopyD(s,d,n,t)                 memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
++#endif
++
++#ifdef HAS_MEMSET
++#ifndef ZeroD
++#  define ZeroD(d,n,t)                   memzero((char*)(d), (n) * sizeof(t))
++#endif
++
++#else
++#ifndef ZeroD
++#  define ZeroD(d,n,t)                   ((void)memzero((char*)(d), (n) * sizeof(t)), d)
++#endif
++
++#endif
++#ifndef PoisonWith
++#  define PoisonWith(d,n,t,b)            (void)memset((char*)(d), (U8)(b), (n) * sizeof(t))
++#endif
++
++#ifndef PoisonNew
++#  define PoisonNew(d,n,t)               PoisonWith(d,n,t,0xAB)
++#endif
++
++#ifndef PoisonFree
++#  define PoisonFree(d,n,t)              PoisonWith(d,n,t,0xEF)
++#endif
++
++#ifndef Poison
++#  define Poison(d,n,t)                  PoisonFree(d,n,t)
++#endif
++#ifndef Newx
++#  define Newx(v,n,t)                    New(0,v,n,t)
++#endif
++
++#ifndef Newxc
++#  define Newxc(v,n,t,c)                 Newc(0,v,n,t,c)
++#endif
++
++#ifndef Newxz
++#  define Newxz(v,n,t)                   Newz(0,v,n,t)
++#endif
++
++#ifndef PERL_UNUSED_DECL
++#  ifdef HASATTRIBUTE
++#    if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER)
++#      define PERL_UNUSED_DECL
++#    else
++#      define PERL_UNUSED_DECL __attribute__((unused))
++#    endif
++#  else
++#    define PERL_UNUSED_DECL
++#  endif
++#endif
++
++#ifndef PERL_UNUSED_ARG
++#  if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
++#    include <note.h>
++#    define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
++#  else
++#    define PERL_UNUSED_ARG(x) ((void)x)
++#  endif
++#endif
++
++#ifndef PERL_UNUSED_VAR
++#  define PERL_UNUSED_VAR(x) ((void)x)
++#endif
++
++#ifndef PERL_UNUSED_CONTEXT
++#  ifdef USE_ITHREADS
++#    define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
++#  else
++#    define PERL_UNUSED_CONTEXT
++#  endif
++#endif
++#ifndef NOOP
++#  define NOOP                           /*EMPTY*/(void)0
++#endif
++
++#ifndef dNOOP
++#  define dNOOP                          extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL
++#endif
++
++#ifndef NVTYPE
++#  if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
++#    define NVTYPE long double
++#  else
++#    define NVTYPE double
++#  endif
++typedef NVTYPE NV;
++#endif
++
++#ifndef INT2PTR
++#  if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
++#    define PTRV                  UV
++#    define INT2PTR(any,d)        (any)(d)
++#  else
++#    if PTRSIZE == LONGSIZE
++#      define PTRV                unsigned long
++#    else
++#      define PTRV                unsigned
++#    endif
++#    define INT2PTR(any,d)        (any)(PTRV)(d)
++#  endif
++#endif
++
++#ifndef PTR2ul
++#  if PTRSIZE == LONGSIZE
++#    define PTR2ul(p)     (unsigned long)(p)
++#  else
++#    define PTR2ul(p)     INT2PTR(unsigned long,p)
++#  endif
++#endif
++#ifndef PTR2nat
++#  define PTR2nat(p)                     (PTRV)(p)
++#endif
++
++#ifndef NUM2PTR
++#  define NUM2PTR(any,d)                 (any)PTR2nat(d)
++#endif
++
++#ifndef PTR2IV
++#  define PTR2IV(p)                      INT2PTR(IV,p)
++#endif
++
++#ifndef PTR2UV
++#  define PTR2UV(p)                      INT2PTR(UV,p)
++#endif
++
++#ifndef PTR2NV
++#  define PTR2NV(p)                      NUM2PTR(NV,p)
++#endif
++
++#undef START_EXTERN_C
++#undef END_EXTERN_C
++#undef EXTERN_C
++#ifdef __cplusplus
++#  define START_EXTERN_C extern "C" {
++#  define END_EXTERN_C }
++#  define EXTERN_C extern "C"
++#else
++#  define START_EXTERN_C
++#  define END_EXTERN_C
++#  define EXTERN_C extern
++#endif
++
++#if defined(PERL_GCC_PEDANTIC)
++#  ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
++#    define PERL_GCC_BRACE_GROUPS_FORBIDDEN
++#  endif
++#endif
++
++#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
++#  ifndef PERL_USE_GCC_BRACE_GROUPS
++#    define PERL_USE_GCC_BRACE_GROUPS
++#  endif
++#endif
++
++#undef STMT_START
++#undef STMT_END
++#ifdef PERL_USE_GCC_BRACE_GROUPS
++#  define STMT_START    (void)( /* gcc supports ``({ STATEMENTS; })'' */
++#  define STMT_END      )
++#else
++#  if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
++#    define STMT_START  if (1)
++#    define STMT_END    else (void)0
++#  else
++#    define STMT_START  do
++#    define STMT_END    while (0)
++#  endif
++#endif
++#ifndef boolSV
++#  define boolSV(b)                      ((b) ? &PL_sv_yes : &PL_sv_no)
++#endif
++
++/* DEFSV appears first in 5.004_56 */
++#ifndef DEFSV
++#  define DEFSV                          GvSV(PL_defgv)
++#endif
++
++#ifndef SAVE_DEFSV
++#  define SAVE_DEFSV                     SAVESPTR(GvSV(PL_defgv))
++#endif
++
++#ifndef DEFSV_set
++#  define DEFSV_set(sv)                  (DEFSV = (sv))
++#endif
++
++/* Older perls (<=5.003) lack AvFILLp */
++#ifndef AvFILLp
++#  define AvFILLp                        AvFILL
++#endif
++#ifndef ERRSV
++#  define ERRSV                          get_sv("@",FALSE)
++#endif
++
++/* Hint: gv_stashpvn
++ * This function's backport doesn't support the length parameter, but
++ * rather ignores it. Portability can only be ensured if the length
++ * parameter is used for speed reasons, but the length can always be
++ * correctly computed from the string argument.
++ */
++#ifndef gv_stashpvn
++#  define gv_stashpvn(str,len,create)    gv_stashpv(str,create)
++#endif
++
++/* Replace: 1 */
++#ifndef get_cv
++#  define get_cv                         perl_get_cv
++#endif
++
++#ifndef get_sv
++#  define get_sv                         perl_get_sv
++#endif
++
++#ifndef get_av
++#  define get_av                         perl_get_av
++#endif
++
++#ifndef get_hv
++#  define get_hv                         perl_get_hv
++#endif
++
++/* Replace: 0 */
++#ifndef dUNDERBAR
++#  define dUNDERBAR                      dNOOP
++#endif
++
++#ifndef UNDERBAR
++#  define UNDERBAR                       DEFSV
++#endif
++#ifndef dAX
++#  define dAX                            I32 ax = MARK - PL_stack_base + 1
++#endif
++
++#ifndef dITEMS
++#  define dITEMS                         I32 items = SP - MARK
++#endif
++#ifndef dXSTARG
++#  define dXSTARG                        SV * targ = sv_newmortal()
++#endif
++#ifndef dAXMARK
++#  define dAXMARK                        I32 ax = POPMARK; \
++                               register SV ** const mark = PL_stack_base + ax++
++#endif
++#ifndef XSprePUSH
++#  define XSprePUSH                      (sp = PL_stack_base + ax - 1)
++#endif
++
++#if (PERL_BCDVERSION < 0x5005000)
++#  undef XSRETURN
++#  define XSRETURN(off)                                   \
++      STMT_START {                                        \
++          PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
++          return;                                         \
++      } STMT_END
++#endif
++#ifndef XSPROTO
++#  define XSPROTO(name)                  void name(pTHX_ CV* cv)
++#endif
++
++#ifndef SVfARG
++#  define SVfARG(p)                      ((void*)(p))
++#endif
++#ifndef PERL_ABS
++#  define PERL_ABS(x)                    ((x) < 0 ? -(x) : (x))
++#endif
++#ifndef dVAR
++#  define dVAR                           dNOOP
++#endif
++#ifndef SVf
++#  define SVf                            "_"
++#endif
++#ifndef UTF8_MAXBYTES
++#  define UTF8_MAXBYTES                  UTF8_MAXLEN
++#endif
++#ifndef CPERLscope
++#  define CPERLscope(x)                  x
++#endif
++#ifndef PERL_HASH
++#  define PERL_HASH(hash,str,len)        \
++     STMT_START { \
++        const char *s_PeRlHaSh = str; \
++        I32 i_PeRlHaSh = len; \
++        U32 hash_PeRlHaSh = 0; \
++        while (i_PeRlHaSh--) \
++            hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \
++        (hash) = hash_PeRlHaSh; \
++    } STMT_END
++#endif
++
++#ifndef PERLIO_FUNCS_DECL
++# ifdef PERLIO_FUNCS_CONST
++#  define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
++#  define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
++# else
++#  define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
++#  define PERLIO_FUNCS_CAST(funcs) (funcs)
++# endif
++#endif
++
++/* provide these typedefs for older perls */
++#if (PERL_BCDVERSION < 0x5009003)
++
++# ifdef ARGSproto
++typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto);
++# else
++typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX);
++# endif
++
++typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
++
++#endif
++#ifndef isPSXSPC
++#  define isPSXSPC(c)                    (isSPACE(c) || (c) == '\v')
++#endif
++
++#ifndef isBLANK
++#  define isBLANK(c)                     ((c) == ' ' || (c) == '\t')
++#endif
++
++#ifdef EBCDIC
++#ifndef isALNUMC
++#  define isALNUMC(c)                    isalnum(c)
++#endif
++
++#ifndef isASCII
++#  define isASCII(c)                     isascii(c)
++#endif
++
++#ifndef isCNTRL
++#  define isCNTRL(c)                     iscntrl(c)
++#endif
++
++#ifndef isGRAPH
++#  define isGRAPH(c)                     isgraph(c)
++#endif
++
++#ifndef isPRINT
++#  define isPRINT(c)                     isprint(c)
++#endif
++
++#ifndef isPUNCT
++#  define isPUNCT(c)                     ispunct(c)
++#endif
++
++#ifndef isXDIGIT
++#  define isXDIGIT(c)                    isxdigit(c)
++#endif
++
++#else
++# if (PERL_BCDVERSION < 0x5010000)
++/* Hint: isPRINT
++ * The implementation in older perl versions includes all of the
++ * isSPACE() characters, which is wrong. The version provided by
++ * Devel::PPPort always overrides a present buggy version.
++ */
++#  undef isPRINT
++# endif
++
++#ifdef HAS_QUAD
++# define WIDEST_UTYPE U64TYPE
++#else
++# define WIDEST_UTYPE U32
++#endif
++#ifndef isALNUMC
++#  define isALNUMC(c)                    (isALPHA(c) || isDIGIT(c))
++#endif
++
++#ifndef isASCII
++#  define isASCII(c)                     ((WIDEST_UTYPE) (c) <= 127)
++#endif
++
++#ifndef isCNTRL
++#  define isCNTRL(c)                     ((WIDEST_UTYPE) (c) < ' ' || (c) == 127)
++#endif
++
++#ifndef isGRAPH
++#  define isGRAPH(c)                     (isALNUM(c) || isPUNCT(c))
++#endif
++
++#ifndef isPRINT
++#  define isPRINT(c)                     (((c) >= 32 && (c) < 127))
++#endif
++
++#ifndef isPUNCT
++#  define isPUNCT(c)                     (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64)  || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126))
++#endif
++
++#ifndef isXDIGIT
++#  define isXDIGIT(c)                    (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
++#endif
++
++#endif
++
++#ifndef PERL_SIGNALS_UNSAFE_FLAG
++
++#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
++
++#if (PERL_BCDVERSION < 0x5008000)
++#  define D_PPP_PERL_SIGNALS_INIT   PERL_SIGNALS_UNSAFE_FLAG
++#else
++#  define D_PPP_PERL_SIGNALS_INIT   0
++#endif
++
++#if defined(NEED_PL_signals)
++static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
++#elif defined(NEED_PL_signals_GLOBAL)
++U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
++#else
++extern U32 DPPP_(my_PL_signals);
++#endif
++#define PL_signals DPPP_(my_PL_signals)
++
++#endif
++
++/* Hint: PL_ppaddr
++ * Calling an op via PL_ppaddr requires passing a context argument
++ * for threaded builds. Since the context argument is different for
++ * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will
++ * automatically be defined as the correct argument.
++ */
++
++#if (PERL_BCDVERSION <= 0x5005005)
++/* Replace: 1 */
++#  define PL_ppaddr                 ppaddr
++#  define PL_no_modify              no_modify
++/* Replace: 0 */
++#endif
++
++#if (PERL_BCDVERSION <= 0x5004005)
++/* Replace: 1 */
++#  define PL_DBsignal               DBsignal
++#  define PL_DBsingle               DBsingle
++#  define PL_DBsub                  DBsub
++#  define PL_DBtrace                DBtrace
++#  define PL_Sv                     Sv
++#  define PL_bufend                 bufend
++#  define PL_bufptr                 bufptr
++#  define PL_compiling              compiling
++#  define PL_copline                copline
++#  define PL_curcop                 curcop
++#  define PL_curstash               curstash
++#  define PL_debstash               debstash
++#  define PL_defgv                  defgv
++#  define PL_diehook                diehook
++#  define PL_dirty                  dirty
++#  define PL_dowarn                 dowarn
++#  define PL_errgv                  errgv
++#  define PL_error_count            error_count
++#  define PL_expect                 expect
++#  define PL_hexdigit               hexdigit
++#  define PL_hints                  hints
++#  define PL_in_my                  in_my
++#  define PL_laststatval            laststatval
++#  define PL_lex_state              lex_state
++#  define PL_lex_stuff              lex_stuff
++#  define PL_linestr                linestr
++#  define PL_na                     na
++#  define PL_perl_destruct_level    perl_destruct_level
++#  define PL_perldb                 perldb
++#  define PL_rsfp_filters           rsfp_filters
++#  define PL_rsfp                   rsfp
++#  define PL_stack_base             stack_base
++#  define PL_stack_sp               stack_sp
++#  define PL_statcache              statcache
++#  define PL_stdingv                stdingv
++#  define PL_sv_arenaroot           sv_arenaroot
++#  define PL_sv_no                  sv_no
++#  define PL_sv_undef               sv_undef
++#  define PL_sv_yes                 sv_yes
++#  define PL_tainted                tainted
++#  define PL_tainting               tainting
++#  define PL_tokenbuf               tokenbuf
++/* Replace: 0 */
++#endif
++
++/* Warning: PL_parser
++ * For perl versions earlier than 5.9.5, this is an always
++ * non-NULL dummy. Also, it cannot be dereferenced. Don't
++ * use it if you can avoid is and unless you absolutely know
++ * what you're doing.
++ * If you always check that PL_parser is non-NULL, you can
++ * define DPPP_PL_parser_NO_DUMMY to avoid the creation of
++ * a dummy parser structure.
++ */
++
++#if (PERL_BCDVERSION >= 0x5009005)
++# ifdef DPPP_PL_parser_NO_DUMMY
++#  define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
++                (croak("panic: PL_parser == NULL in %s:%d", \
++                       __FILE__, __LINE__), (yy_parser *) NULL))->var)
++# else
++#  ifdef DPPP_PL_parser_NO_DUMMY_WARNING
++#   define D_PPP_parser_dummy_warning(var)
++#  else
++#   define D_PPP_parser_dummy_warning(var) \
++             warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__),
++#  endif
++#  define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
++                (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var)
++#if defined(NEED_PL_parser)
++static yy_parser DPPP_(dummy_PL_parser);
++#elif defined(NEED_PL_parser_GLOBAL)
++yy_parser DPPP_(dummy_PL_parser);
++#else
++extern yy_parser DPPP_(dummy_PL_parser);
++#endif
++
++# endif
++
++/* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */
++/* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf
++ * Do not use this variable unless you know exactly what you're
++ * doint. It is internal to the perl parser and may change or even
++ * be removed in the future. As of perl 5.9.5, you have to check
++ * for (PL_parser != NULL) for this variable to have any effect.
++ * An always non-NULL PL_parser dummy is provided for earlier
++ * perl versions.
++ * If PL_parser is NULL when you try to access this variable, a
++ * dummy is being accessed instead and a warning is issued unless
++ * you define DPPP_PL_parser_NO_DUMMY_WARNING.
++ * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access
++ * this variable will croak with a panic message.
++ */
++
++# define PL_expect         D_PPP_my_PL_parser_var(expect)
++# define PL_copline        D_PPP_my_PL_parser_var(copline)
++# define PL_rsfp           D_PPP_my_PL_parser_var(rsfp)
++# define PL_rsfp_filters   D_PPP_my_PL_parser_var(rsfp_filters)
++# define PL_linestr        D_PPP_my_PL_parser_var(linestr)
++# define PL_bufptr         D_PPP_my_PL_parser_var(bufptr)
++# define PL_bufend         D_PPP_my_PL_parser_var(bufend)
++# define PL_lex_state      D_PPP_my_PL_parser_var(lex_state)
++# define PL_lex_stuff      D_PPP_my_PL_parser_var(lex_stuff)
++# define PL_tokenbuf       D_PPP_my_PL_parser_var(tokenbuf)
++# define PL_in_my          D_PPP_my_PL_parser_var(in_my)
++# define PL_in_my_stash    D_PPP_my_PL_parser_var(in_my_stash)
++# define PL_error_count    D_PPP_my_PL_parser_var(error_count)
++
++
++#else
++
++/* ensure that PL_parser != NULL and cannot be dereferenced */
++# define PL_parser         ((void *) 1)
++
++#endif
++#ifndef mPUSHs
++#  define mPUSHs(s)                      PUSHs(sv_2mortal(s))
++#endif
++
++#ifndef PUSHmortal
++#  define PUSHmortal                     PUSHs(sv_newmortal())
++#endif
++
++#ifndef mPUSHp
++#  define mPUSHp(p,l)                    sv_setpvn(PUSHmortal, (p), (l))
++#endif
++
++#ifndef mPUSHn
++#  define mPUSHn(n)                      sv_setnv(PUSHmortal, (NV)(n))
++#endif
++
++#ifndef mPUSHi
++#  define mPUSHi(i)                      sv_setiv(PUSHmortal, (IV)(i))
++#endif
++
++#ifndef mPUSHu
++#  define mPUSHu(u)                      sv_setuv(PUSHmortal, (UV)(u))
++#endif
++#ifndef mXPUSHs
++#  define mXPUSHs(s)                     XPUSHs(sv_2mortal(s))
++#endif
++
++#ifndef XPUSHmortal
++#  define XPUSHmortal                    XPUSHs(sv_newmortal())
++#endif
++
++#ifndef mXPUSHp
++#  define mXPUSHp(p,l)                   STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END
++#endif
++
++#ifndef mXPUSHn
++#  define mXPUSHn(n)                     STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END
++#endif
++
++#ifndef mXPUSHi
++#  define mXPUSHi(i)                     STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END
++#endif
++
++#ifndef mXPUSHu
++#  define mXPUSHu(u)                     STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END
++#endif
++
++/* Replace: 1 */
++#ifndef call_sv
++#  define call_sv                        perl_call_sv
++#endif
++
++#ifndef call_pv
++#  define call_pv                        perl_call_pv
++#endif
++
++#ifndef call_argv
++#  define call_argv                      perl_call_argv
++#endif
++
++#ifndef call_method
++#  define call_method                    perl_call_method
++#endif
++#ifndef eval_sv
++#  define eval_sv                        perl_eval_sv
++#endif
++
++/* Replace: 0 */
++#ifndef PERL_LOADMOD_DENY
++#  define PERL_LOADMOD_DENY              0x1
++#endif
++
++#ifndef PERL_LOADMOD_NOIMPORT
++#  define PERL_LOADMOD_NOIMPORT          0x2
++#endif
++
++#ifndef PERL_LOADMOD_IMPORT_OPS
++#  define PERL_LOADMOD_IMPORT_OPS        0x4
++#endif
++
++#ifndef G_METHOD
++# define G_METHOD               64
++# ifdef call_sv
++#  undef call_sv
++# endif
++# if (PERL_BCDVERSION < 0x5006000)
++#  define call_sv(sv, flags)  ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \
++                                (flags) & ~G_METHOD) : perl_call_sv(sv, flags))
++# else
++#  define call_sv(sv, flags)  ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \
++                                (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags))
++# endif
++#endif
++
++/* Replace perl_eval_pv with eval_pv */
++
++#ifndef eval_pv
++#if defined(NEED_eval_pv)
++static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
++static
++#else
++extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
++#endif
++
++#ifdef eval_pv
++#  undef eval_pv
++#endif
++#define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b)
++#define Perl_eval_pv DPPP_(my_eval_pv)
++
++#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL)
++
++SV*
++DPPP_(my_eval_pv)(char *p, I32 croak_on_error)
++{
++    dSP;
++    SV* sv = newSVpv(p, 0);
++
++    PUSHMARK(sp);
++    eval_sv(sv, G_SCALAR);
++    SvREFCNT_dec(sv);
++
++    SPAGAIN;
++    sv = POPs;
++    PUTBACK;
++
++    if (croak_on_error && SvTRUE(GvSV(errgv)))
++        croak(SvPVx(GvSV(errgv), na));
++
++    return sv;
++}
++
++#endif
++#endif
++
++#ifndef vload_module
++#if defined(NEED_vload_module)
++static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
++static
++#else
++extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
++#endif
++
++#ifdef vload_module
++#  undef vload_module
++#endif
++#define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d)
++#define Perl_vload_module DPPP_(my_vload_module)
++
++#if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL)
++
++void
++DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args)
++{
++    dTHR;
++    dVAR;
++    OP *veop, *imop;
++
++    OP * const modname = newSVOP(OP_CONST, 0, name);
++    /* 5.005 has a somewhat hacky force_normal that doesn't croak on
++       SvREADONLY() if PL_compling is true. Current perls take care in
++       ck_require() to correctly turn off SvREADONLY before calling
++       force_normal_flags(). This seems a better fix than fudging PL_compling
++     */
++    SvREADONLY_off(((SVOP*)modname)->op_sv);
++    modname->op_private |= OPpCONST_BARE;
++    if (ver) {
++        veop = newSVOP(OP_CONST, 0, ver);
++    }
++    else
++        veop = NULL;
++    if (flags & PERL_LOADMOD_NOIMPORT) {
++        imop = sawparens(newNULLLIST());
++    }
++    else if (flags & PERL_LOADMOD_IMPORT_OPS) {
++        imop = va_arg(*args, OP*);
++    }
++    else {
++        SV *sv;
++        imop = NULL;
++        sv = va_arg(*args, SV*);
++        while (sv) {
++            imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
++            sv = va_arg(*args, SV*);
++        }
++    }
++    {
++        const line_t ocopline = PL_copline;
++        COP * const ocurcop = PL_curcop;
++        const int oexpect = PL_expect;
++
++#if (PERL_BCDVERSION >= 0x5004000)
++        utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
++                veop, modname, imop);
++#else
++        utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(),
++                modname, imop);
++#endif
++        PL_expect = oexpect;
++        PL_copline = ocopline;
++        PL_curcop = ocurcop;
++    }
++}
++
++#endif
++#endif
++
++#ifndef load_module
++#if defined(NEED_load_module)
++static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
++static
++#else
++extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
++#endif
++
++#ifdef load_module
++#  undef load_module
++#endif
++#define load_module DPPP_(my_load_module)
++#define Perl_load_module DPPP_(my_load_module)
++
++#if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL)
++
++void
++DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...)
++{
++    va_list args;
++    va_start(args, ver);
++    vload_module(flags, name, ver, &args);
++    va_end(args);
++}
++
++#endif
++#endif
++#ifndef newRV_inc
++#  define newRV_inc(sv)                  newRV(sv)   /* Replace */
++#endif
++
++#ifndef newRV_noinc
++#if defined(NEED_newRV_noinc)
++static SV * DPPP_(my_newRV_noinc)(SV *sv);
++static
++#else
++extern SV * DPPP_(my_newRV_noinc)(SV *sv);
++#endif
++
++#ifdef newRV_noinc
++#  undef newRV_noinc
++#endif
++#define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a)
++#define Perl_newRV_noinc DPPP_(my_newRV_noinc)
++
++#if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL)
++SV *
++DPPP_(my_newRV_noinc)(SV *sv)
++{
++  SV *rv = (SV *)newRV(sv);
++  SvREFCNT_dec(sv);
++  return rv;
++}
++#endif
++#endif
++
++/* Hint: newCONSTSUB
++ * Returns a CV* as of perl-5.7.1. This return value is not supported
++ * by Devel::PPPort.
++ */
++
++/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
++#if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005)
++#if defined(NEED_newCONSTSUB)
++static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
++static
++#else
++extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
++#endif
++
++#ifdef newCONSTSUB
++#  undef newCONSTSUB
++#endif
++#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c)
++#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB)
++
++#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
++
++/* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */
++/* (There's no PL_parser in perl < 5.005, so this is completely safe)     */
++#define D_PPP_PL_copline PL_copline
++
++void
++DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv)
++{
++        U32 oldhints = PL_hints;
++        HV *old_cop_stash = PL_curcop->cop_stash;
++        HV *old_curstash = PL_curstash;
++        line_t oldline = PL_curcop->cop_line;
++        PL_curcop->cop_line = D_PPP_PL_copline;
++
++        PL_hints &= ~HINT_BLOCK_SCOPE;
++        if (stash)
++                PL_curstash = PL_curcop->cop_stash = stash;
++
++        newSUB(
++
++#if   (PERL_BCDVERSION < 0x5003022)
++                start_subparse(),
++#elif (PERL_BCDVERSION == 0x5003022)
++                start_subparse(0),
++#else  /* 5.003_23  onwards */
++                start_subparse(FALSE, 0),
++#endif
++
++                newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)),
++                newSVOP(OP_CONST, 0, &PL_sv_no),   /* SvPV(&PL_sv_no) == "" -- GMB */
++                newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
++        );
++
++        PL_hints = oldhints;
++        PL_curcop->cop_stash = old_cop_stash;
++        PL_curstash = old_curstash;
++        PL_curcop->cop_line = oldline;
++}
++#endif
++#endif
++
++/*
++ * Boilerplate macros for initializing and accessing interpreter-local
++ * data from C.  All statics in extensions should be reworked to use
++ * this, if you want to make the extension thread-safe.  See ext/re/re.xs
++ * for an example of the use of these macros.
++ *
++ * Code that uses these macros is responsible for the following:
++ * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
++ * 2. Declare a typedef named my_cxt_t that is a structure that contains
++ *    all the data that needs to be interpreter-local.
++ * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
++ * 4. Use the MY_CXT_INIT macro such that it is called exactly once
++ *    (typically put in the BOOT: section).
++ * 5. Use the members of the my_cxt_t structure everywhere as
++ *    MY_CXT.member.
++ * 6. Use the dMY_CXT macro (a declaration) in all the functions that
++ *    access MY_CXT.
++ */
++
++#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \
++    defined(PERL_CAPI)    || defined(PERL_IMPLICIT_CONTEXT)
++
++#ifndef START_MY_CXT
++
++/* This must appear in all extensions that define a my_cxt_t structure,
++ * right after the definition (i.e. at file scope).  The non-threads
++ * case below uses it to declare the data as static. */
++#define START_MY_CXT
++
++#if (PERL_BCDVERSION < 0x5004068)
++/* Fetches the SV that keeps the per-interpreter data. */
++#define dMY_CXT_SV \
++        SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
++#else /* >= perl5.004_68 */
++#define dMY_CXT_SV \
++        SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY,             \
++                                  sizeof(MY_CXT_KEY)-1, TRUE)
++#endif /* < perl5.004_68 */
++
++/* This declaration should be used within all functions that use the
++ * interpreter-local data. */
++#define dMY_CXT \
++        dMY_CXT_SV;                                                     \
++        my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
++
++/* Creates and zeroes the per-interpreter data.
++ * (We allocate my_cxtp in a Perl SV so that it will be released when
++ * the interpreter goes away.) */
++#define MY_CXT_INIT \
++        dMY_CXT_SV;                                                     \
++        /* newSV() allocates one more than needed */                    \
++        my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
++        Zero(my_cxtp, 1, my_cxt_t);                                     \
++        sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
++
++/* This macro must be used to access members of the my_cxt_t structure.
++ * e.g. MYCXT.some_data */
++#define MY_CXT          (*my_cxtp)
++
++/* Judicious use of these macros can reduce the number of times dMY_CXT
++ * is used.  Use is similar to pTHX, aTHX etc. */
++#define pMY_CXT         my_cxt_t *my_cxtp
++#define pMY_CXT_        pMY_CXT,
++#define _pMY_CXT        ,pMY_CXT
++#define aMY_CXT         my_cxtp
++#define aMY_CXT_        aMY_CXT,
++#define _aMY_CXT        ,aMY_CXT
++
++#endif /* START_MY_CXT */
++
++#ifndef MY_CXT_CLONE
++/* Clones the per-interpreter data. */
++#define MY_CXT_CLONE \
++        dMY_CXT_SV;                                                     \
++        my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
++        Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
++        sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
++#endif
++
++#else /* single interpreter */
++
++#ifndef START_MY_CXT
++
++#define START_MY_CXT    static my_cxt_t my_cxt;
++#define dMY_CXT_SV      dNOOP
++#define dMY_CXT         dNOOP
++#define MY_CXT_INIT     NOOP
++#define MY_CXT          my_cxt
++
++#define pMY_CXT         void
++#define pMY_CXT_
++#define _pMY_CXT
++#define aMY_CXT
++#define aMY_CXT_
++#define _aMY_CXT
++
++#endif /* START_MY_CXT */
++
++#ifndef MY_CXT_CLONE
++#define MY_CXT_CLONE    NOOP
++#endif
++
++#endif
++
++#ifndef IVdf
++#  if IVSIZE == LONGSIZE
++#    define     IVdf      "ld"
++#    define     UVuf      "lu"
++#    define     UVof      "lo"
++#    define     UVxf      "lx"
++#    define     UVXf      "lX"
++#  elif IVSIZE == INTSIZE
++#    define   IVdf      "d"
++#    define   UVuf      "u"
++#    define   UVof      "o"
++#    define   UVxf      "x"
++#    define   UVXf      "X"
++#  else
++#    error "cannot define IV/UV formats"
++#  endif
++#endif
++
++#ifndef NVef
++#  if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
++      defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000)
++            /* Not very likely, but let's try anyway. */
++#    define NVef          PERL_PRIeldbl
++#    define NVff          PERL_PRIfldbl
++#    define NVgf          PERL_PRIgldbl
++#  else
++#    define NVef          "e"
++#    define NVff          "f"
++#    define NVgf          "g"
++#  endif
++#endif
++
++#ifndef SvREFCNT_inc
++#  ifdef PERL_USE_GCC_BRACE_GROUPS
++#    define SvREFCNT_inc(sv)            \
++      ({                                \
++          SV * const _sv = (SV*)(sv);   \
++          if (_sv)                      \
++               (SvREFCNT(_sv))++;       \
++          _sv;                          \
++      })
++#  else
++#    define SvREFCNT_inc(sv)    \
++          ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
++#  endif
++#endif
++
++#ifndef SvREFCNT_inc_simple
++#  ifdef PERL_USE_GCC_BRACE_GROUPS
++#    define SvREFCNT_inc_simple(sv)     \
++      ({                                        \
++          if (sv)                               \
++               (SvREFCNT(sv))++;                \
++          (SV *)(sv);                           \
++      })
++#  else
++#    define SvREFCNT_inc_simple(sv) \
++          ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
++#  endif
++#endif
++
++#ifndef SvREFCNT_inc_NN
++#  ifdef PERL_USE_GCC_BRACE_GROUPS
++#    define SvREFCNT_inc_NN(sv)         \
++      ({                                        \
++          SV * const _sv = (SV*)(sv);   \
++          SvREFCNT(_sv)++;              \
++          _sv;                          \
++      })
++#  else
++#    define SvREFCNT_inc_NN(sv) \
++          (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
++#  endif
++#endif
++
++#ifndef SvREFCNT_inc_void
++#  ifdef PERL_USE_GCC_BRACE_GROUPS
++#    define SvREFCNT_inc_void(sv)               \
++      ({                                        \
++          SV * const _sv = (SV*)(sv);   \
++          if (_sv)                      \
++              (void)(SvREFCNT(_sv)++);  \
++      })
++#  else
++#    define SvREFCNT_inc_void(sv) \
++          (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
++#  endif
++#endif
++#ifndef SvREFCNT_inc_simple_void
++#  define SvREFCNT_inc_simple_void(sv)   STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
++#endif
++
++#ifndef SvREFCNT_inc_simple_NN
++#  define SvREFCNT_inc_simple_NN(sv)     (++SvREFCNT(sv), (SV*)(sv))
++#endif
++
++#ifndef SvREFCNT_inc_void_NN
++#  define SvREFCNT_inc_void_NN(sv)       (void)(++SvREFCNT((SV*)(sv)))
++#endif
++
++#ifndef SvREFCNT_inc_simple_void_NN
++#  define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
++#endif
++
++#ifndef newSV_type
++
++#if defined(NEED_newSV_type)
++static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
++static
++#else
++extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
++#endif
++
++#ifdef newSV_type
++#  undef newSV_type
++#endif
++#define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a)
++#define Perl_newSV_type DPPP_(my_newSV_type)
++
++#if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL)
++
++SV*
++DPPP_(my_newSV_type)(pTHX_ svtype const t)
++{
++  SV* const sv = newSV(0);
++  sv_upgrade(sv, t);
++  return sv;
++}
++
++#endif
++
++#endif
++
++#if (PERL_BCDVERSION < 0x5006000)
++# define D_PPP_CONSTPV_ARG(x)  ((char *) (x))
++#else
++# define D_PPP_CONSTPV_ARG(x)  (x)
++#endif
++#ifndef newSVpvn
++#  define newSVpvn(data,len)             ((data)                                              \
++                                    ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
++                                    : newSV(0))
++#endif
++#ifndef newSVpvn_utf8
++#  define newSVpvn_utf8(s, len, u)       newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
++#endif
++#ifndef SVf_UTF8
++#  define SVf_UTF8                       0
++#endif
++
++#ifndef newSVpvn_flags
++
++#if defined(NEED_newSVpvn_flags)
++static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
++static
++#else
++extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
++#endif
++
++#ifdef newSVpvn_flags
++#  undef newSVpvn_flags
++#endif
++#define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c)
++#define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags)
++
++#if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL)
++
++SV *
++DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags)
++{
++  SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len);
++  SvFLAGS(sv) |= (flags & SVf_UTF8);
++  return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
++}
++
++#endif
++
++#endif
++
++/* Backwards compatibility stuff... :-( */
++#if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen)
++#  define NEED_sv_2pv_flags
++#endif
++#if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL)
++#  define NEED_sv_2pv_flags_GLOBAL
++#endif
++
++/* Hint: sv_2pv_nolen
++ * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen().
++ */
++#ifndef sv_2pv_nolen
++#  define sv_2pv_nolen(sv)               SvPV_nolen(sv)
++#endif
++
++#ifdef SvPVbyte
++
++/* Hint: SvPVbyte
++ * Does not work in perl-5.6.1, ppport.h implements a version
++ * borrowed from perl-5.7.3.
++ */
++
++#if (PERL_BCDVERSION < 0x5007000)
++
++#if defined(NEED_sv_2pvbyte)
++static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
++static
++#else
++extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
++#endif
++
++#ifdef sv_2pvbyte
++#  undef sv_2pvbyte
++#endif
++#define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b)
++#define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte)
++
++#if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL)
++
++char *
++DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp)
++{
++  sv_utf8_downgrade(sv,0);
++  return SvPV(sv,*lp);
++}
++
++#endif
++
++/* Hint: sv_2pvbyte
++ * Use the SvPVbyte() macro instead of sv_2pvbyte().
++ */
++
++#undef SvPVbyte
++
++#define SvPVbyte(sv, lp)                                                \
++        ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK)                \
++         ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
++
++#endif
++
++#else
++
++#  define SvPVbyte          SvPV
++#  define sv_2pvbyte        sv_2pv
++
++#endif
++#ifndef sv_2pvbyte_nolen
++#  define sv_2pvbyte_nolen(sv)           sv_2pv_nolen(sv)
++#endif
++
++/* Hint: sv_pvn
++ * Always use the SvPV() macro instead of sv_pvn().
++ */
++
++/* Hint: sv_pvn_force
++ * Always use the SvPV_force() macro instead of sv_pvn_force().
++ */
++
++/* If these are undefined, they're not handled by the core anyway */
++#ifndef SV_IMMEDIATE_UNREF
++#  define SV_IMMEDIATE_UNREF             0
++#endif
++
++#ifndef SV_GMAGIC
++#  define SV_GMAGIC                      0
++#endif
++
++#ifndef SV_COW_DROP_PV
++#  define SV_COW_DROP_PV                 0
++#endif
++
++#ifndef SV_UTF8_NO_ENCODING
++#  define SV_UTF8_NO_ENCODING            0
++#endif
++
++#ifndef SV_NOSTEAL
++#  define SV_NOSTEAL                     0
++#endif
++
++#ifndef SV_CONST_RETURN
++#  define SV_CONST_RETURN                0
++#endif
++
++#ifndef SV_MUTABLE_RETURN
++#  define SV_MUTABLE_RETURN              0
++#endif
++
++#ifndef SV_SMAGIC
++#  define SV_SMAGIC                      0
++#endif
++
++#ifndef SV_HAS_TRAILING_NUL
++#  define SV_HAS_TRAILING_NUL            0
++#endif
++
++#ifndef SV_COW_SHARED_HASH_KEYS
++#  define SV_COW_SHARED_HASH_KEYS        0
++#endif
++
++#if (PERL_BCDVERSION < 0x5007002)
++
++#if defined(NEED_sv_2pv_flags)
++static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
++static
++#else
++extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
++#endif
++
++#ifdef sv_2pv_flags
++#  undef sv_2pv_flags
++#endif
++#define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c)
++#define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags)
++
++#if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL)
++
++char *
++DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
++{
++  STRLEN n_a = (STRLEN) flags;
++  return sv_2pv(sv, lp ? lp : &n_a);
++}
++
++#endif
++
++#if defined(NEED_sv_pvn_force_flags)
++static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
++static
++#else
++extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
++#endif
++
++#ifdef sv_pvn_force_flags
++#  undef sv_pvn_force_flags
++#endif
++#define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c)
++#define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags)
++
++#if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL)
++
++char *
++DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
++{
++  STRLEN n_a = (STRLEN) flags;
++  return sv_pvn_force(sv, lp ? lp : &n_a);
++}
++
++#endif
++
++#endif
++
++#if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) )
++# define DPPP_SVPV_NOLEN_LP_ARG &PL_na
++#else
++# define DPPP_SVPV_NOLEN_LP_ARG 0
++#endif
++#ifndef SvPV_const
++#  define SvPV_const(sv, lp)             SvPV_flags_const(sv, lp, SV_GMAGIC)
++#endif
++
++#ifndef SvPV_mutable
++#  define SvPV_mutable(sv, lp)           SvPV_flags_mutable(sv, lp, SV_GMAGIC)
++#endif
++#ifndef SvPV_flags
++#  define SvPV_flags(sv, lp, flags)      \
++                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
++                  ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
++#endif
++#ifndef SvPV_flags_const
++#  define SvPV_flags_const(sv, lp, flags) \
++                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
++                  ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
++                  (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN))
++#endif
++#ifndef SvPV_flags_const_nolen
++#  define SvPV_flags_const_nolen(sv, flags) \
++                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
++                  ? SvPVX_const(sv) : \
++                  (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN))
++#endif
++#ifndef SvPV_flags_mutable
++#  define SvPV_flags_mutable(sv, lp, flags) \
++                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
++                  ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
++                  sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
++#endif
++#ifndef SvPV_force
++#  define SvPV_force(sv, lp)             SvPV_force_flags(sv, lp, SV_GMAGIC)
++#endif
++
++#ifndef SvPV_force_nolen
++#  define SvPV_force_nolen(sv)           SvPV_force_flags_nolen(sv, SV_GMAGIC)
++#endif
++
++#ifndef SvPV_force_mutable
++#  define SvPV_force_mutable(sv, lp)     SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
++#endif
++
++#ifndef SvPV_force_nomg
++#  define SvPV_force_nomg(sv, lp)        SvPV_force_flags(sv, lp, 0)
++#endif
++
++#ifndef SvPV_force_nomg_nolen
++#  define SvPV_force_nomg_nolen(sv)      SvPV_force_flags_nolen(sv, 0)
++#endif
++#ifndef SvPV_force_flags
++#  define SvPV_force_flags(sv, lp, flags) \
++                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
++                 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
++#endif
++#ifndef SvPV_force_flags_nolen
++#  define SvPV_force_flags_nolen(sv, flags) \
++                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
++                 ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags))
++#endif
++#ifndef SvPV_force_flags_mutable
++#  define SvPV_force_flags_mutable(sv, lp, flags) \
++                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
++                 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
++                  : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
++#endif
++#ifndef SvPV_nolen
++#  define SvPV_nolen(sv)                 \
++                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
++                  ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC))
++#endif
++#ifndef SvPV_nolen_const
++#  define SvPV_nolen_const(sv)           \
++                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
++                  ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN))
++#endif
++#ifndef SvPV_nomg
++#  define SvPV_nomg(sv, lp)              SvPV_flags(sv, lp, 0)
++#endif
++
++#ifndef SvPV_nomg_const
++#  define SvPV_nomg_const(sv, lp)        SvPV_flags_const(sv, lp, 0)
++#endif
++
++#ifndef SvPV_nomg_const_nolen
++#  define SvPV_nomg_const_nolen(sv)      SvPV_flags_const_nolen(sv, 0)
++#endif
++
++#ifndef SvPV_nomg_nolen
++#  define SvPV_nomg_nolen(sv)            ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
++                                    ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, 0))
++#endif
++#ifndef SvPV_renew
++#  define SvPV_renew(sv,n)               STMT_START { SvLEN_set(sv, n); \
++                 SvPV_set((sv), (char *) saferealloc(          \
++                       (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \
++               } STMT_END
++#endif
++#ifndef SvMAGIC_set
++#  define SvMAGIC_set(sv, val)           \
++                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
++                (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
++#endif
++
++#if (PERL_BCDVERSION < 0x5009003)
++#ifndef SvPVX_const
++#  define SvPVX_const(sv)                ((const char*) (0 + SvPVX(sv)))
++#endif
++
++#ifndef SvPVX_mutable
++#  define SvPVX_mutable(sv)              (0 + SvPVX(sv))
++#endif
++#ifndef SvRV_set
++#  define SvRV_set(sv, val)              \
++                STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
++                (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END
++#endif
++
++#else
++#ifndef SvPVX_const
++#  define SvPVX_const(sv)                ((const char*)((sv)->sv_u.svu_pv))
++#endif
++
++#ifndef SvPVX_mutable
++#  define SvPVX_mutable(sv)              ((sv)->sv_u.svu_pv)
++#endif
++#ifndef SvRV_set
++#  define SvRV_set(sv, val)              \
++                STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
++                ((sv)->sv_u.svu_rv = (val)); } STMT_END
++#endif
++
++#endif
++#ifndef SvSTASH_set
++#  define SvSTASH_set(sv, val)           \
++                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
++                (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
++#endif
++
++#if (PERL_BCDVERSION < 0x5004000)
++#ifndef SvUV_set
++#  define SvUV_set(sv, val)              \
++                STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
++                (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END
++#endif
++
++#else
++#ifndef SvUV_set
++#  define SvUV_set(sv, val)              \
++                STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
++                (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END
++#endif
++
++#endif
++
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf)
++#if defined(NEED_vnewSVpvf)
++static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
++static
++#else
++extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
++#endif
++
++#ifdef vnewSVpvf
++#  undef vnewSVpvf
++#endif
++#define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b)
++#define Perl_vnewSVpvf DPPP_(my_vnewSVpvf)
++
++#if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL)
++
++SV *
++DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args)
++{
++  register SV *sv = newSV(0);
++  sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
++  return sv;
++}
++
++#endif
++#endif
++
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf)
++#  define sv_vcatpvf(sv, pat, args)  sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
++#endif
++
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf)
++#  define sv_vsetpvf(sv, pat, args)  sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
++#endif
++
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg)
++#if defined(NEED_sv_catpvf_mg)
++static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
++static
++#else
++extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
++#endif
++
++#define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg)
++
++#if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL)
++
++void
++DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
++{
++  va_list args;
++  va_start(args, pat);
++  sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
++  SvSETMAGIC(sv);
++  va_end(args);
++}
++
++#endif
++#endif
++
++#ifdef PERL_IMPLICIT_CONTEXT
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext)
++#if defined(NEED_sv_catpvf_mg_nocontext)
++static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
++static
++#else
++extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
++#endif
++
++#define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
++#define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
++
++#if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL)
++
++void
++DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
++{
++  dTHX;
++  va_list args;
++  va_start(args, pat);
++  sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
++  SvSETMAGIC(sv);
++  va_end(args);
++}
++
++#endif
++#endif
++#endif
++
++/* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */
++#ifndef sv_catpvf_mg
++#  ifdef PERL_IMPLICIT_CONTEXT
++#    define sv_catpvf_mg   Perl_sv_catpvf_mg_nocontext
++#  else
++#    define sv_catpvf_mg   Perl_sv_catpvf_mg
++#  endif
++#endif
++
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg)
++#  define sv_vcatpvf_mg(sv, pat, args)                                     \
++   STMT_START {                                                            \
++     sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));  \
++     SvSETMAGIC(sv);                                                       \
++   } STMT_END
++#endif
++
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg)
++#if defined(NEED_sv_setpvf_mg)
++static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
++static
++#else
++extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
++#endif
++
++#define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg)
++
++#if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL)
++
++void
++DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
++{
++  va_list args;
++  va_start(args, pat);
++  sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
++  SvSETMAGIC(sv);
++  va_end(args);
++}
++
++#endif
++#endif
++
++#ifdef PERL_IMPLICIT_CONTEXT
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext)
++#if defined(NEED_sv_setpvf_mg_nocontext)
++static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
++static
++#else
++extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
++#endif
++
++#define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
++#define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
++
++#if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL)
++
++void
++DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
++{
++  dTHX;
++  va_list args;
++  va_start(args, pat);
++  sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
++  SvSETMAGIC(sv);
++  va_end(args);
++}
++
++#endif
++#endif
++#endif
++
++/* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */
++#ifndef sv_setpvf_mg
++#  ifdef PERL_IMPLICIT_CONTEXT
++#    define sv_setpvf_mg   Perl_sv_setpvf_mg_nocontext
++#  else
++#    define sv_setpvf_mg   Perl_sv_setpvf_mg
++#  endif
++#endif
++
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg)
++#  define sv_vsetpvf_mg(sv, pat, args)                                     \
++   STMT_START {                                                            \
++     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));  \
++     SvSETMAGIC(sv);                                                       \
++   } 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)
++static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
++static
++#else
++extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
++#endif
++
++#ifdef newSVpvn_share
++#  undef newSVpvn_share
++#endif
++#define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c)
++#define Perl_newSVpvn_share DPPP_(my_newSVpvn_share)
++
++#if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL)
++
++SV *
++DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash)
++{
++  SV *sv;
++  if (len < 0)
++    len = -len;
++  if (!hash)
++    PERL_HASH(hash, (char*) src, len);
++  sv = newSVpvn((char *) src, len);
++  sv_upgrade(sv, SVt_PVIV);
++  SvIVX(sv) = hash;
++  SvREADONLY_on(sv);
++  SvPOK_on(sv);
++  return sv;
++}
++
++#endif
++
++#endif
++#ifndef SvSHARED_HASH
++#  define SvSHARED_HASH(sv)              (0 + SvUVX(sv))
++#endif
++#ifndef HvNAME_get
++#  define HvNAME_get(hv)                 HvNAME(hv)
++#endif
++#ifndef HvNAMELEN_get
++#  define HvNAMELEN_get(hv)              (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0)
++#endif
++#ifndef GvSVn
++#  define GvSVn(gv)                      GvSV(gv)
++#endif
++
++#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
++
++#ifndef WARN_CLOSURE
++#  define WARN_CLOSURE                   1
++#endif
++
++#ifndef WARN_DEPRECATED
++#  define WARN_DEPRECATED                2
++#endif
++
++#ifndef WARN_EXITING
++#  define WARN_EXITING                   3
++#endif
++
++#ifndef WARN_GLOB
++#  define WARN_GLOB                      4
++#endif
++
++#ifndef WARN_IO
++#  define WARN_IO                        5
++#endif
++
++#ifndef WARN_CLOSED
++#  define WARN_CLOSED                    6
++#endif
++
++#ifndef WARN_EXEC
++#  define WARN_EXEC                      7
++#endif
++
++#ifndef WARN_LAYER
++#  define WARN_LAYER                     8
++#endif
++
++#ifndef WARN_NEWLINE
++#  define WARN_NEWLINE                   9
++#endif
++
++#ifndef WARN_PIPE
++#  define WARN_PIPE                      10
++#endif
++
++#ifndef WARN_UNOPENED
++#  define WARN_UNOPENED                  11
++#endif
++
++#ifndef WARN_MISC
++#  define WARN_MISC                      12
++#endif
++
++#ifndef WARN_NUMERIC
++#  define WARN_NUMERIC                   13
++#endif
++
++#ifndef WARN_ONCE
++#  define WARN_ONCE                      14
++#endif
++
++#ifndef WARN_OVERFLOW
++#  define WARN_OVERFLOW                  15
++#endif
++
++#ifndef WARN_PACK
++#  define WARN_PACK                      16
++#endif
++
++#ifndef WARN_PORTABLE
++#  define WARN_PORTABLE                  17
++#endif
++
++#ifndef WARN_RECURSION
++#  define WARN_RECURSION                 18
++#endif
++
++#ifndef WARN_REDEFINE
++#  define WARN_REDEFINE                  19
++#endif
++
++#ifndef WARN_REGEXP
++#  define WARN_REGEXP                    20
++#endif
++
++#ifndef WARN_SEVERE
++#  define WARN_SEVERE                    21
++#endif
++
++#ifndef WARN_DEBUGGING
++#  define WARN_DEBUGGING                 22
++#endif
++
++#ifndef WARN_INPLACE
++#  define WARN_INPLACE                   23
++#endif
++
++#ifndef WARN_INTERNAL
++#  define WARN_INTERNAL                  24
++#endif
++
++#ifndef WARN_MALLOC
++#  define WARN_MALLOC                    25
++#endif
++
++#ifndef WARN_SIGNAL
++#  define WARN_SIGNAL                    26
++#endif
++
++#ifndef WARN_SUBSTR
++#  define WARN_SUBSTR                    27
++#endif
++
++#ifndef WARN_SYNTAX
++#  define WARN_SYNTAX                    28
++#endif
++
++#ifndef WARN_AMBIGUOUS
++#  define WARN_AMBIGUOUS                 29
++#endif
++
++#ifndef WARN_BAREWORD
++#  define WARN_BAREWORD                  30
++#endif
++
++#ifndef WARN_DIGIT
++#  define WARN_DIGIT                     31
++#endif
++
++#ifndef WARN_PARENTHESIS
++#  define WARN_PARENTHESIS               32
++#endif
++
++#ifndef WARN_PRECEDENCE
++#  define WARN_PRECEDENCE                33
++#endif
++
++#ifndef WARN_PRINTF
++#  define WARN_PRINTF                    34
++#endif
++
++#ifndef WARN_PROTOTYPE
++#  define WARN_PROTOTYPE                 35
++#endif
++
++#ifndef WARN_QW
++#  define WARN_QW                        36
++#endif
++
++#ifndef WARN_RESERVED
++#  define WARN_RESERVED                  37
++#endif
++
++#ifndef WARN_SEMICOLON
++#  define WARN_SEMICOLON                 38
++#endif
++
++#ifndef WARN_TAINT
++#  define WARN_TAINT                     39
++#endif
++
++#ifndef WARN_THREADS
++#  define WARN_THREADS                   40
++#endif
++
++#ifndef WARN_UNINITIALIZED
++#  define WARN_UNINITIALIZED             41
++#endif
++
++#ifndef WARN_UNPACK
++#  define WARN_UNPACK                    42
++#endif
++
++#ifndef WARN_UNTIE
++#  define WARN_UNTIE                     43
++#endif
++
++#ifndef WARN_UTF8
++#  define WARN_UTF8                      44
++#endif
++
++#ifndef WARN_VOID
++#  define WARN_VOID                      45
++#endif
++
++#ifndef WARN_ASSERTIONS
++#  define WARN_ASSERTIONS                46
++#endif
++#ifndef packWARN
++#  define packWARN(a)                    (a)
++#endif
++
++#ifndef ckWARN
++#  ifdef G_WARN_ON
++#    define  ckWARN(a)                  (PL_dowarn & G_WARN_ON)
++#  else
++#    define  ckWARN(a)                  PL_dowarn
++#  endif
++#endif
++
++#if (PERL_BCDVERSION >= 0x5004000) && !defined(warner)
++#if defined(NEED_warner)
++static void DPPP_(my_warner)(U32 err, const char *pat, ...);
++static
++#else
++extern void DPPP_(my_warner)(U32 err, const char *pat, ...);
++#endif
++
++#define Perl_warner DPPP_(my_warner)
++
++#if defined(NEED_warner) || defined(NEED_warner_GLOBAL)
++
++void
++DPPP_(my_warner)(U32 err, const char *pat, ...)
++{
++  SV *sv;
++  va_list args;
++
++  PERL_UNUSED_ARG(err);
++
++  va_start(args, pat);
++  sv = vnewSVpvf(pat, &args);
++  va_end(args);
++  sv_2mortal(sv);
++  warn("%s", SvPV_nolen(sv));
++}
++
++#define warner  Perl_warner
++
++#define Perl_warner_nocontext  Perl_warner
++
++#endif
++#endif
++
++/* concatenating with "" ensures that only literal strings are accepted as argument
++ * note that STR_WITH_LEN() can't be used as argument to macros or functions that
++ * under some configurations might be macros
++ */
++#ifndef STR_WITH_LEN
++#  define STR_WITH_LEN(s)                (s ""), (sizeof(s)-1)
++#endif
++#ifndef newSVpvs
++#  define newSVpvs(str)                  newSVpvn(str "", sizeof(str) - 1)
++#endif
++
++#ifndef newSVpvs_flags
++#  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
++
++#ifndef sv_setpvs
++#  define sv_setpvs(sv, str)             sv_setpvn(sv, str "", sizeof(str) - 1)
++#endif
++
++#ifndef hv_fetchs
++#  define hv_fetchs(hv, key, lval)       hv_fetch(hv, key "", sizeof(key) - 1, lval)
++#endif
++
++#ifndef hv_stores
++#  define hv_stores(hv, key, val)        hv_store(hv, key "", sizeof(key) - 1, val, 0)
++#endif
++#ifndef gv_fetchpvs
++#  define gv_fetchpvs(name, flags, svt)  gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt)
++#endif
++
++#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
++#ifndef PERL_MAGIC_sv
++#  define PERL_MAGIC_sv                  '\0'
++#endif
++
++#ifndef PERL_MAGIC_overload
++#  define PERL_MAGIC_overload            'A'
++#endif
++
++#ifndef PERL_MAGIC_overload_elem
++#  define PERL_MAGIC_overload_elem       'a'
++#endif
++
++#ifndef PERL_MAGIC_overload_table
++#  define PERL_MAGIC_overload_table      'c'
++#endif
++
++#ifndef PERL_MAGIC_bm
++#  define PERL_MAGIC_bm                  'B'
++#endif
++
++#ifndef PERL_MAGIC_regdata
++#  define PERL_MAGIC_regdata             'D'
++#endif
++
++#ifndef PERL_MAGIC_regdatum
++#  define PERL_MAGIC_regdatum            'd'
++#endif
++
++#ifndef PERL_MAGIC_env
++#  define PERL_MAGIC_env                 'E'
++#endif
++
++#ifndef PERL_MAGIC_envelem
++#  define PERL_MAGIC_envelem             'e'
++#endif
++
++#ifndef PERL_MAGIC_fm
++#  define PERL_MAGIC_fm                  'f'
++#endif
++
++#ifndef PERL_MAGIC_regex_global
++#  define PERL_MAGIC_regex_global        'g'
++#endif
++
++#ifndef PERL_MAGIC_isa
++#  define PERL_MAGIC_isa                 'I'
++#endif
++
++#ifndef PERL_MAGIC_isaelem
++#  define PERL_MAGIC_isaelem             'i'
++#endif
++
++#ifndef PERL_MAGIC_nkeys
++#  define PERL_MAGIC_nkeys               'k'
++#endif
++
++#ifndef PERL_MAGIC_dbfile
++#  define PERL_MAGIC_dbfile              'L'
++#endif
++
++#ifndef PERL_MAGIC_dbline
++#  define PERL_MAGIC_dbline              'l'
++#endif
++
++#ifndef PERL_MAGIC_mutex
++#  define PERL_MAGIC_mutex               'm'
++#endif
++
++#ifndef PERL_MAGIC_shared
++#  define PERL_MAGIC_shared              'N'
++#endif
++
++#ifndef PERL_MAGIC_shared_scalar
++#  define PERL_MAGIC_shared_scalar       'n'
++#endif
++
++#ifndef PERL_MAGIC_collxfrm
++#  define PERL_MAGIC_collxfrm            'o'
++#endif
++
++#ifndef PERL_MAGIC_tied
++#  define PERL_MAGIC_tied                'P'
++#endif
++
++#ifndef PERL_MAGIC_tiedelem
++#  define PERL_MAGIC_tiedelem            'p'
++#endif
++
++#ifndef PERL_MAGIC_tiedscalar
++#  define PERL_MAGIC_tiedscalar          'q'
++#endif
++
++#ifndef PERL_MAGIC_qr
++#  define PERL_MAGIC_qr                  'r'
++#endif
++
++#ifndef PERL_MAGIC_sig
++#  define PERL_MAGIC_sig                 'S'
++#endif
++
++#ifndef PERL_MAGIC_sigelem
++#  define PERL_MAGIC_sigelem             's'
++#endif
++
++#ifndef PERL_MAGIC_taint
++#  define PERL_MAGIC_taint               't'
++#endif
++
++#ifndef PERL_MAGIC_uvar
++#  define PERL_MAGIC_uvar                'U'
++#endif
++
++#ifndef PERL_MAGIC_uvar_elem
++#  define PERL_MAGIC_uvar_elem           'u'
++#endif
++
++#ifndef PERL_MAGIC_vstring
++#  define PERL_MAGIC_vstring             'V'
++#endif
++
++#ifndef PERL_MAGIC_vec
++#  define PERL_MAGIC_vec                 'v'
++#endif
++
++#ifndef PERL_MAGIC_utf8
++#  define PERL_MAGIC_utf8                'w'
++#endif
++
++#ifndef PERL_MAGIC_substr
++#  define PERL_MAGIC_substr              'x'
++#endif
++
++#ifndef PERL_MAGIC_defelem
++#  define PERL_MAGIC_defelem             'y'
++#endif
++
++#ifndef PERL_MAGIC_glob
++#  define PERL_MAGIC_glob                '*'
++#endif
++
++#ifndef PERL_MAGIC_arylen
++#  define PERL_MAGIC_arylen              '#'
++#endif
++
++#ifndef PERL_MAGIC_pos
++#  define PERL_MAGIC_pos                 '.'
++#endif
++
++#ifndef PERL_MAGIC_backref
++#  define PERL_MAGIC_backref             '<'
++#endif
++
++#ifndef PERL_MAGIC_ext
++#  define PERL_MAGIC_ext                 '~'
++#endif
++
++/* That's the best we can do... */
++#ifndef sv_catpvn_nomg
++#  define sv_catpvn_nomg                 sv_catpvn
++#endif
++
++#ifndef sv_catsv_nomg
++#  define sv_catsv_nomg                  sv_catsv
++#endif
++
++#ifndef sv_setsv_nomg
++#  define sv_setsv_nomg                  sv_setsv
++#endif
++
++#ifndef sv_pvn_nomg
++#  define sv_pvn_nomg                    sv_pvn
++#endif
++
++#ifndef SvIV_nomg
++#  define SvIV_nomg                      SvIV
++#endif
++
++#ifndef SvUV_nomg
++#  define SvUV_nomg                      SvUV
++#endif
++
++#ifndef sv_catpv_mg
++#  define sv_catpv_mg(sv, ptr)          \
++   STMT_START {                         \
++     SV *TeMpSv = sv;                   \
++     sv_catpv(TeMpSv,ptr);              \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++
++#ifndef sv_catpvn_mg
++#  define sv_catpvn_mg(sv, ptr, len)    \
++   STMT_START {                         \
++     SV *TeMpSv = sv;                   \
++     sv_catpvn(TeMpSv,ptr,len);         \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++
++#ifndef sv_catsv_mg
++#  define sv_catsv_mg(dsv, ssv)         \
++   STMT_START {                         \
++     SV *TeMpSv = dsv;                  \
++     sv_catsv(TeMpSv,ssv);              \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++
++#ifndef sv_setiv_mg
++#  define sv_setiv_mg(sv, i)            \
++   STMT_START {                         \
++     SV *TeMpSv = sv;                   \
++     sv_setiv(TeMpSv,i);                \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++
++#ifndef sv_setnv_mg
++#  define sv_setnv_mg(sv, num)          \
++   STMT_START {                         \
++     SV *TeMpSv = sv;                   \
++     sv_setnv(TeMpSv,num);              \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++
++#ifndef sv_setpv_mg
++#  define sv_setpv_mg(sv, ptr)          \
++   STMT_START {                         \
++     SV *TeMpSv = sv;                   \
++     sv_setpv(TeMpSv,ptr);              \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++
++#ifndef sv_setpvn_mg
++#  define sv_setpvn_mg(sv, ptr, len)    \
++   STMT_START {                         \
++     SV *TeMpSv = sv;                   \
++     sv_setpvn(TeMpSv,ptr,len);         \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++
++#ifndef sv_setsv_mg
++#  define sv_setsv_mg(dsv, ssv)         \
++   STMT_START {                         \
++     SV *TeMpSv = dsv;                  \
++     sv_setsv(TeMpSv,ssv);              \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++
++#ifndef sv_setuv_mg
++#  define sv_setuv_mg(sv, i)            \
++   STMT_START {                         \
++     SV *TeMpSv = sv;                   \
++     sv_setuv(TeMpSv,i);                \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++
++#ifndef sv_usepvn_mg
++#  define sv_usepvn_mg(sv, ptr, len)    \
++   STMT_START {                         \
++     SV *TeMpSv = sv;                   \
++     sv_usepvn(TeMpSv,ptr,len);         \
++     SvSETMAGIC(TeMpSv);                \
++   } STMT_END
++#endif
++#ifndef SvVSTRING_mg
++#  define SvVSTRING_mg(sv)               (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL)
++#endif
++
++/* Hint: sv_magic_portable
++ * This is a compatibility function that is only available with
++ * Devel::PPPort. It is NOT in the perl core.
++ * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when
++ * it is being passed a name pointer with namlen == 0. In that
++ * case, perl 5.8.0 and later store the pointer, not a copy of it.
++ * The compatibility can be provided back to perl 5.004. With
++ * earlier versions, the code will not compile.
++ */
++
++#if (PERL_BCDVERSION < 0x5004000)
++
++  /* code that uses sv_magic_portable will not compile */
++
++#elif (PERL_BCDVERSION < 0x5008000)
++
++#  define sv_magic_portable(sv, obj, how, name, namlen)     \
++   STMT_START {                                             \
++     SV *SvMp_sv = (sv);                                    \
++     char *SvMp_name = (char *) (name);                     \
++     I32 SvMp_namlen = (namlen);                            \
++     if (SvMp_name && SvMp_namlen == 0)                     \
++     {                                                      \
++       MAGIC *mg;                                           \
++       sv_magic(SvMp_sv, obj, how, 0, 0);                   \
++       mg = SvMAGIC(SvMp_sv);                               \
++       mg->mg_len = -42; /* XXX: this is the tricky part */ \
++       mg->mg_ptr = SvMp_name;                              \
++     }                                                      \
++     else                                                   \
++     {                                                      \
++       sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \
++     }                                                      \
++   } STMT_END
++
++#else
++
++#  define sv_magic_portable(a, b, c, d, e)  sv_magic(a, b, c, d, e)
++
++#endif
++
++#ifdef USE_ITHREADS
++#ifndef CopFILE
++#  define CopFILE(c)                     ((c)->cop_file)
++#endif
++
++#ifndef CopFILEGV
++#  define CopFILEGV(c)                   (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv)
++#endif
++
++#ifndef CopFILE_set
++#  define CopFILE_set(c,pv)              ((c)->cop_file = savepv(pv))
++#endif
++
++#ifndef CopFILESV
++#  define CopFILESV(c)                   (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv)
++#endif
++
++#ifndef CopFILEAV
++#  define CopFILEAV(c)                   (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav)
++#endif
++
++#ifndef CopSTASHPV
++#  define CopSTASHPV(c)                  ((c)->cop_stashpv)
++#endif
++
++#ifndef CopSTASHPV_set
++#  define CopSTASHPV_set(c,pv)           ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch))
++#endif
++
++#ifndef CopSTASH
++#  define CopSTASH(c)                    (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv)
++#endif
++
++#ifndef CopSTASH_set
++#  define CopSTASH_set(c,hv)             CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch)
++#endif
++
++#ifndef CopSTASH_eq
++#  define CopSTASH_eq(c,hv)              ((hv) && (CopSTASHPV(c) == HvNAME(hv) \
++                                        || (CopSTASHPV(c) && HvNAME(hv) \
++                                        && strEQ(CopSTASHPV(c), HvNAME(hv)))))
++#endif
++
++#else
++#ifndef CopFILEGV
++#  define CopFILEGV(c)                   ((c)->cop_filegv)
++#endif
++
++#ifndef CopFILEGV_set
++#  define CopFILEGV_set(c,gv)            ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
++#endif
++
++#ifndef CopFILE_set
++#  define CopFILE_set(c,pv)              CopFILEGV_set((c), gv_fetchfile(pv))
++#endif
++
++#ifndef CopFILESV
++#  define CopFILESV(c)                   (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv)
++#endif
++
++#ifndef CopFILEAV
++#  define CopFILEAV(c)                   (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav)
++#endif
++
++#ifndef CopFILE
++#  define CopFILE(c)                     (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch)
++#endif
++
++#ifndef CopSTASH
++#  define CopSTASH(c)                    ((c)->cop_stash)
++#endif
++
++#ifndef CopSTASH_set
++#  define CopSTASH_set(c,hv)             ((c)->cop_stash = (hv))
++#endif
++
++#ifndef CopSTASHPV
++#  define CopSTASHPV(c)                  (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch)
++#endif
++
++#ifndef CopSTASHPV_set
++#  define CopSTASHPV_set(c,pv)           CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
++#endif
++
++#ifndef CopSTASH_eq
++#  define CopSTASH_eq(c,hv)              (CopSTASH(c) == (hv))
++#endif
++
++#endif /* USE_ITHREADS */
++#ifndef IN_PERL_COMPILETIME
++#  define IN_PERL_COMPILETIME            (PL_curcop == &PL_compiling)
++#endif
++
++#ifndef IN_LOCALE_RUNTIME
++#  define IN_LOCALE_RUNTIME              (PL_curcop->op_private & HINT_LOCALE)
++#endif
++
++#ifndef IN_LOCALE_COMPILETIME
++#  define IN_LOCALE_COMPILETIME          (PL_hints & HINT_LOCALE)
++#endif
++
++#ifndef IN_LOCALE
++#  define IN_LOCALE                      (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
++#endif
++#ifndef IS_NUMBER_IN_UV
++#  define IS_NUMBER_IN_UV                0x01
++#endif
++
++#ifndef IS_NUMBER_GREATER_THAN_UV_MAX
++#  define IS_NUMBER_GREATER_THAN_UV_MAX  0x02
++#endif
++
++#ifndef IS_NUMBER_NOT_INT
++#  define IS_NUMBER_NOT_INT              0x04
++#endif
++
++#ifndef IS_NUMBER_NEG
++#  define IS_NUMBER_NEG                  0x08
++#endif
++
++#ifndef IS_NUMBER_INFINITY
++#  define IS_NUMBER_INFINITY             0x10
++#endif
++
++#ifndef IS_NUMBER_NAN
++#  define IS_NUMBER_NAN                  0x20
++#endif
++#ifndef GROK_NUMERIC_RADIX
++#  define GROK_NUMERIC_RADIX(sp, send)   grok_numeric_radix(sp, send)
++#endif
++#ifndef PERL_SCAN_GREATER_THAN_UV_MAX
++#  define PERL_SCAN_GREATER_THAN_UV_MAX  0x02
++#endif
++
++#ifndef PERL_SCAN_SILENT_ILLDIGIT
++#  define PERL_SCAN_SILENT_ILLDIGIT      0x04
++#endif
++
++#ifndef PERL_SCAN_ALLOW_UNDERSCORES
++#  define PERL_SCAN_ALLOW_UNDERSCORES    0x01
++#endif
++
++#ifndef PERL_SCAN_DISALLOW_PREFIX
++#  define PERL_SCAN_DISALLOW_PREFIX      0x02
++#endif
++
++#ifndef grok_numeric_radix
++#if defined(NEED_grok_numeric_radix)
++static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
++static
++#else
++extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
++#endif
++
++#ifdef grok_numeric_radix
++#  undef grok_numeric_radix
++#endif
++#define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b)
++#define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix)
++
++#if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL)
++bool
++DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
++{
++#ifdef USE_LOCALE_NUMERIC
++#ifdef PL_numeric_radix_sv
++    if (PL_numeric_radix_sv && IN_LOCALE) {
++        STRLEN len;
++        char* radix = SvPV(PL_numeric_radix_sv, len);
++        if (*sp + len <= send && memEQ(*sp, radix, len)) {
++            *sp += len;
++            return TRUE;
++        }
++    }
++#else
++    /* older perls don't have PL_numeric_radix_sv so the radix
++     * must manually be requested from locale.h
++     */
++#include <locale.h>
++    dTHR;  /* needed for older threaded perls */
++    struct lconv *lc = localeconv();
++    char *radix = lc->decimal_point;
++    if (radix && IN_LOCALE) {
++        STRLEN len = strlen(radix);
++        if (*sp + len <= send && memEQ(*sp, radix, len)) {
++            *sp += len;
++            return TRUE;
++        }
++    }
++#endif
++#endif /* USE_LOCALE_NUMERIC */
++    /* always try "." if numeric radix didn't match because
++     * we may have data from different locales mixed */
++    if (*sp < send && **sp == '.') {
++        ++*sp;
++        return TRUE;
++    }
++    return FALSE;
++}
++#endif
++#endif
++
++#ifndef grok_number
++#if defined(NEED_grok_number)
++static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
++static
++#else
++extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
++#endif
++
++#ifdef grok_number
++#  undef grok_number
++#endif
++#define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c)
++#define Perl_grok_number DPPP_(my_grok_number)
++
++#if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL)
++int
++DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
++{
++  const char *s = pv;
++  const char *send = pv + len;
++  const UV max_div_10 = UV_MAX / 10;
++  const char max_mod_10 = UV_MAX % 10;
++  int numtype = 0;
++  int sawinf = 0;
++  int sawnan = 0;
++
++  while (s < send && isSPACE(*s))
++    s++;
++  if (s == send) {
++    return 0;
++  } else if (*s == '-') {
++    s++;
++    numtype = IS_NUMBER_NEG;
++  }
++  else if (*s == '+')
++  s++;
++
++  if (s == send)
++    return 0;
++
++  /* next must be digit or the radix separator or beginning of infinity */
++  if (isDIGIT(*s)) {
++    /* UVs are at least 32 bits, so the first 9 decimal digits cannot
++       overflow.  */
++    UV value = *s - '0';
++    /* This construction seems to be more optimiser friendly.
++       (without it gcc does the isDIGIT test and the *s - '0' separately)
++       With it gcc on arm is managing 6 instructions (6 cycles) per digit.
++       In theory the optimiser could deduce how far to unroll the loop
++       before checking for overflow.  */
++    if (++s < send) {
++      int digit = *s - '0';
++      if (digit >= 0 && digit <= 9) {
++        value = value * 10 + digit;
++        if (++s < send) {
++          digit = *s - '0';
++          if (digit >= 0 && digit <= 9) {
++            value = value * 10 + digit;
++            if (++s < send) {
++              digit = *s - '0';
++              if (digit >= 0 && digit <= 9) {
++                value = value * 10 + digit;
++                if (++s < send) {
++                  digit = *s - '0';
++                  if (digit >= 0 && digit <= 9) {
++                    value = value * 10 + digit;
++                    if (++s < send) {
++                      digit = *s - '0';
++                      if (digit >= 0 && digit <= 9) {
++                        value = value * 10 + digit;
++                        if (++s < send) {
++                          digit = *s - '0';
++                          if (digit >= 0 && digit <= 9) {
++                            value = value * 10 + digit;
++                            if (++s < send) {
++                              digit = *s - '0';
++                              if (digit >= 0 && digit <= 9) {
++                                value = value * 10 + digit;
++                                if (++s < send) {
++                                  digit = *s - '0';
++                                  if (digit >= 0 && digit <= 9) {
++                                    value = value * 10 + digit;
++                                    if (++s < send) {
++                                      /* Now got 9 digits, so need to check
++                                         each time for overflow.  */
++                                      digit = *s - '0';
++                                      while (digit >= 0 && digit <= 9
++                                             && (value < max_div_10
++                                                 || (value == max_div_10
++                                                     && digit <= max_mod_10))) {
++                                        value = value * 10 + digit;
++                                        if (++s < send)
++                                          digit = *s - '0';
++                                        else
++                                          break;
++                                      }
++                                      if (digit >= 0 && digit <= 9
++                                          && (s < send)) {
++                                        /* value overflowed.
++                                           skip the remaining digits, don't
++                                           worry about setting *valuep.  */
++                                        do {
++                                          s++;
++                                        } while (s < send && isDIGIT(*s));
++                                        numtype |=
++                                          IS_NUMBER_GREATER_THAN_UV_MAX;
++                                        goto skip_value;
++                                      }
++                                    }
++                                  }
++                                }
++                              }
++                            }
++                          }
++                        }
++                      }
++                    }
++                  }
++                }
++              }
++            }
++          }
++        }
++      }
++    }
++    numtype |= IS_NUMBER_IN_UV;
++    if (valuep)
++      *valuep = value;
++
++  skip_value:
++    if (GROK_NUMERIC_RADIX(&s, send)) {
++      numtype |= IS_NUMBER_NOT_INT;
++      while (s < send && isDIGIT(*s))  /* optional digits after the radix */
++        s++;
++    }
++  }
++  else if (GROK_NUMERIC_RADIX(&s, send)) {
++    numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */
++    /* no digits before the radix means we need digits after it */
++    if (s < send && isDIGIT(*s)) {
++      do {
++        s++;
++      } while (s < send && isDIGIT(*s));
++      if (valuep) {
++        /* integer approximation is valid - it's 0.  */
++        *valuep = 0;
++      }
++    }
++    else
++      return 0;
++  } else if (*s == 'I' || *s == 'i') {
++    s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
++    s++; if (s == send || (*s != 'F' && *s != 'f')) return 0;
++    s++; if (s < send && (*s == 'I' || *s == 'i')) {
++      s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
++      s++; if (s == send || (*s != 'I' && *s != 'i')) return 0;
++      s++; if (s == send || (*s != 'T' && *s != 't')) return 0;
++      s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0;
++      s++;
++    }
++    sawinf = 1;
++  } else if (*s == 'N' || *s == 'n') {
++    /* XXX TODO: There are signaling NaNs and quiet NaNs. */
++    s++; if (s == send || (*s != 'A' && *s != 'a')) return 0;
++    s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
++    s++;
++    sawnan = 1;
++  } else
++    return 0;
++
++  if (sawinf) {
++    numtype &= IS_NUMBER_NEG; /* Keep track of sign  */
++    numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
++  } else if (sawnan) {
++    numtype &= IS_NUMBER_NEG; /* Keep track of sign  */
++    numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;
++  } else if (s < send) {
++    /* we can have an optional exponent part */
++    if (*s == 'e' || *s == 'E') {
++      /* The only flag we keep is sign.  Blow away any "it's UV"  */
++      numtype &= IS_NUMBER_NEG;
++      numtype |= IS_NUMBER_NOT_INT;
++      s++;
++      if (s < send && (*s == '-' || *s == '+'))
++        s++;
++      if (s < send && isDIGIT(*s)) {
++        do {
++          s++;
++        } while (s < send && isDIGIT(*s));
++      }
++      else
++      return 0;
++    }
++  }
++  while (s < send && isSPACE(*s))
++    s++;
++  if (s >= send)
++    return numtype;
++  if (len == 10 && memEQ(pv, "0 but true", 10)) {
++    if (valuep)
++      *valuep = 0;
++    return IS_NUMBER_IN_UV;
++  }
++  return 0;
++}
++#endif
++#endif
++
++/*
++ * The grok_* routines have been modified to use warn() instead of
++ * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit,
++ * which is why the stack variable has been renamed to 'xdigit'.
++ */
++
++#ifndef grok_bin
++#if defined(NEED_grok_bin)
++static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
++static
++#else
++extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
++#endif
++
++#ifdef grok_bin
++#  undef grok_bin
++#endif
++#define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d)
++#define Perl_grok_bin DPPP_(my_grok_bin)
++
++#if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL)
++UV
++DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
++{
++    const char *s = start;
++    STRLEN len = *len_p;
++    UV value = 0;
++    NV value_nv = 0;
++
++    const UV max_div_2 = UV_MAX / 2;
++    bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
++    bool overflowed = FALSE;
++
++    if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
++        /* strip off leading b or 0b.
++           for compatibility silently suffer "b" and "0b" as valid binary
++           numbers. */
++        if (len >= 1) {
++            if (s[0] == 'b') {
++                s++;
++                len--;
++            }
++            else if (len >= 2 && s[0] == '0' && s[1] == 'b') {
++                s+=2;
++                len-=2;
++            }
++        }
++    }
++
++    for (; len-- && *s; s++) {
++        char bit = *s;
++        if (bit == '0' || bit == '1') {
++            /* Write it in this wonky order with a goto to attempt to get the
++               compiler to make the common case integer-only loop pretty tight.
++               With gcc seems to be much straighter code than old scan_bin.  */
++          redo:
++            if (!overflowed) {
++                if (value <= max_div_2) {
++                    value = (value << 1) | (bit - '0');
++                    continue;
++                }
++                /* Bah. We're just overflowed.  */
++                warn("Integer overflow in binary number");
++                overflowed = TRUE;
++                value_nv = (NV) value;
++            }
++            value_nv *= 2.0;
++            /* If an NV has not enough bits in its mantissa to
++             * represent a UV this summing of small low-order numbers
++             * is a waste of time (because the NV cannot preserve
++             * the low-order bits anyway): we could just remember when
++             * did we overflow and in the end just multiply value_nv by the
++             * right amount. */
++            value_nv += (NV)(bit - '0');
++            continue;
++        }
++        if (bit == '_' && len && allow_underscores && (bit = s[1])
++            && (bit == '0' || bit == '1'))
++            {
++                --len;
++                ++s;
++                goto redo;
++            }
++        if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
++            warn("Illegal binary digit '%c' ignored", *s);
++        break;
++    }
++
++    if (   ( overflowed && value_nv > 4294967295.0)
++#if UVSIZE > 4
++        || (!overflowed && value > 0xffffffff  )
++#endif
++        ) {
++        warn("Binary number > 0b11111111111111111111111111111111 non-portable");
++    }
++    *len_p = s - start;
++    if (!overflowed) {
++        *flags = 0;
++        return value;
++    }
++    *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
++    if (result)
++        *result = value_nv;
++    return UV_MAX;
++}
++#endif
++#endif
++
++#ifndef grok_hex
++#if defined(NEED_grok_hex)
++static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
++static
++#else
++extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
++#endif
++
++#ifdef grok_hex
++#  undef grok_hex
++#endif
++#define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d)
++#define Perl_grok_hex DPPP_(my_grok_hex)
++
++#if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL)
++UV
++DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
++{
++    const char *s = start;
++    STRLEN len = *len_p;
++    UV value = 0;
++    NV value_nv = 0;
++
++    const UV max_div_16 = UV_MAX / 16;
++    bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
++    bool overflowed = FALSE;
++    const char *xdigit;
++
++    if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
++        /* strip off leading x or 0x.
++           for compatibility silently suffer "x" and "0x" as valid hex numbers.
++        */
++        if (len >= 1) {
++            if (s[0] == 'x') {
++                s++;
++                len--;
++            }
++            else if (len >= 2 && s[0] == '0' && s[1] == 'x') {
++                s+=2;
++                len-=2;
++            }
++        }
++    }
++
++    for (; len-- && *s; s++) {
++        xdigit = strchr((char *) PL_hexdigit, *s);
++        if (xdigit) {
++            /* Write it in this wonky order with a goto to attempt to get the
++               compiler to make the common case integer-only loop pretty tight.
++               With gcc seems to be much straighter code than old scan_hex.  */
++          redo:
++            if (!overflowed) {
++                if (value <= max_div_16) {
++                    value = (value << 4) | ((xdigit - PL_hexdigit) & 15);
++                    continue;
++                }
++                warn("Integer overflow in hexadecimal number");
++                overflowed = TRUE;
++                value_nv = (NV) value;
++            }
++            value_nv *= 16.0;
++            /* If an NV has not enough bits in its mantissa to
++             * represent a UV this summing of small low-order numbers
++             * is a waste of time (because the NV cannot preserve
++             * the low-order bits anyway): we could just remember when
++             * did we overflow and in the end just multiply value_nv by the
++             * right amount of 16-tuples. */
++            value_nv += (NV)((xdigit - PL_hexdigit) & 15);
++            continue;
++        }
++        if (*s == '_' && len && allow_underscores && s[1]
++                && (xdigit = strchr((char *) PL_hexdigit, s[1])))
++            {
++                --len;
++                ++s;
++                goto redo;
++            }
++        if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
++            warn("Illegal hexadecimal digit '%c' ignored", *s);
++        break;
++    }
++
++    if (   ( overflowed && value_nv > 4294967295.0)
++#if UVSIZE > 4
++        || (!overflowed && value > 0xffffffff  )
++#endif
++        ) {
++        warn("Hexadecimal number > 0xffffffff non-portable");
++    }
++    *len_p = s - start;
++    if (!overflowed) {
++        *flags = 0;
++        return value;
++    }
++    *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
++    if (result)
++        *result = value_nv;
++    return UV_MAX;
++}
++#endif
++#endif
++
++#ifndef grok_oct
++#if defined(NEED_grok_oct)
++static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
++static
++#else
++extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
++#endif
++
++#ifdef grok_oct
++#  undef grok_oct
++#endif
++#define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d)
++#define Perl_grok_oct DPPP_(my_grok_oct)
++
++#if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL)
++UV
++DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
++{
++    const char *s = start;
++    STRLEN len = *len_p;
++    UV value = 0;
++    NV value_nv = 0;
++
++    const UV max_div_8 = UV_MAX / 8;
++    bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
++    bool overflowed = FALSE;
++
++    for (; len-- && *s; s++) {
++         /* gcc 2.95 optimiser not smart enough to figure that this subtraction
++            out front allows slicker code.  */
++        int digit = *s - '0';
++        if (digit >= 0 && digit <= 7) {
++            /* Write it in this wonky order with a goto to attempt to get the
++               compiler to make the common case integer-only loop pretty tight.
++            */
++          redo:
++            if (!overflowed) {
++                if (value <= max_div_8) {
++                    value = (value << 3) | digit;
++                    continue;
++                }
++                /* Bah. We're just overflowed.  */
++                warn("Integer overflow in octal number");
++                overflowed = TRUE;
++                value_nv = (NV) value;
++            }
++            value_nv *= 8.0;
++            /* If an NV has not enough bits in its mantissa to
++             * represent a UV this summing of small low-order numbers
++             * is a waste of time (because the NV cannot preserve
++             * the low-order bits anyway): we could just remember when
++             * did we overflow and in the end just multiply value_nv by the
++             * right amount of 8-tuples. */
++            value_nv += (NV)digit;
++            continue;
++        }
++        if (digit == ('_' - '0') && len && allow_underscores
++            && (digit = s[1] - '0') && (digit >= 0 && digit <= 7))
++            {
++                --len;
++                ++s;
++                goto redo;
++            }
++        /* Allow \octal to work the DWIM way (that is, stop scanning
++         * as soon as non-octal characters are seen, complain only iff
++         * someone seems to want to use the digits eight and nine). */
++        if (digit == 8 || digit == 9) {
++            if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
++                warn("Illegal octal digit '%c' ignored", *s);
++        }
++        break;
++    }
++
++    if (   ( overflowed && value_nv > 4294967295.0)
++#if UVSIZE > 4
++        || (!overflowed && value > 0xffffffff  )
++#endif
++        ) {
++        warn("Octal number > 037777777777 non-portable");
++    }
++    *len_p = s - start;
++    if (!overflowed) {
++        *flags = 0;
++        return value;
++    }
++    *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
++    if (result)
++        *result = value_nv;
++    return UV_MAX;
++}
++#endif
++#endif
++
++#if !defined(my_snprintf)
++#if defined(NEED_my_snprintf)
++static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
++static
++#else
++extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
++#endif
++
++#define my_snprintf DPPP_(my_my_snprintf)
++#define Perl_my_snprintf DPPP_(my_my_snprintf)
++
++#if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL)
++
++int
++DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...)
++{
++    dTHX;
++    int retval;
++    va_list ap;
++    va_start(ap, format);
++#ifdef HAS_VSNPRINTF
++    retval = vsnprintf(buffer, len, format, ap);
++#else
++    retval = vsprintf(buffer, format, ap);
++#endif
++    va_end(ap);
++    if (retval < 0 || (len > 0 && (Size_t)retval >= len))
++        Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
++    return retval;
++}
++
++#endif
++#endif
++
++#if !defined(my_sprintf)
++#if defined(NEED_my_sprintf)
++static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
++static
++#else
++extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
++#endif
++
++#define my_sprintf DPPP_(my_my_sprintf)
++#define Perl_my_sprintf DPPP_(my_my_sprintf)
++
++#if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL)
++
++int
++DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...)
++{
++    va_list args;
++    va_start(args, pat);
++    vsprintf(buffer, pat, args);
++    va_end(args);
++    return strlen(buffer);
++}
++
++#endif
++#endif
++
++#ifdef NO_XSLOCKS
++#  ifdef dJMPENV
++#    define dXCPT             dJMPENV; int rEtV = 0
++#    define XCPT_TRY_START    JMPENV_PUSH(rEtV); if (rEtV == 0)
++#    define XCPT_TRY_END      JMPENV_POP;
++#    define XCPT_CATCH        if (rEtV != 0)
++#    define XCPT_RETHROW      JMPENV_JUMP(rEtV)
++#  else
++#    define dXCPT             Sigjmp_buf oldTOP; int rEtV = 0
++#    define XCPT_TRY_START    Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
++#    define XCPT_TRY_END      Copy(oldTOP, top_env, 1, Sigjmp_buf);
++#    define XCPT_CATCH        if (rEtV != 0)
++#    define XCPT_RETHROW      Siglongjmp(top_env, rEtV)
++#  endif
++#endif
++
++#if !defined(my_strlcat)
++#if defined(NEED_my_strlcat)
++static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
++static
++#else
++extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
++#endif
++
++#define my_strlcat DPPP_(my_my_strlcat)
++#define Perl_my_strlcat DPPP_(my_my_strlcat)
++
++#if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL)
++
++Size_t
++DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size)
++{
++    Size_t used, length, copy;
++
++    used = strlen(dst);
++    length = strlen(src);
++    if (size > 0 && used < size - 1) {
++        copy = (length >= size - used) ? size - used - 1 : length;
++        memcpy(dst + used, src, copy);
++        dst[used + copy] = '\0';
++    }
++    return used + length;
++}
++#endif
++#endif
++
++#if !defined(my_strlcpy)
++#if defined(NEED_my_strlcpy)
++static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
++static
++#else
++extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
++#endif
++
++#define my_strlcpy DPPP_(my_my_strlcpy)
++#define Perl_my_strlcpy DPPP_(my_my_strlcpy)
++
++#if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL)
++
++Size_t
++DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size)
++{
++    Size_t length, copy;
++
++    length = strlen(src);
++    if (size > 0) {
++        copy = (length >= size) ? size - 1 : length;
++        memcpy(dst, src, copy);
++        dst[copy] = '\0';
++    }
++    return length;
++}
++
++#endif
++#endif
++#ifndef PERL_PV_ESCAPE_QUOTE
++#  define PERL_PV_ESCAPE_QUOTE           0x0001
++#endif
++
++#ifndef PERL_PV_PRETTY_QUOTE
++#  define PERL_PV_PRETTY_QUOTE           PERL_PV_ESCAPE_QUOTE
++#endif
++
++#ifndef PERL_PV_PRETTY_ELLIPSES
++#  define PERL_PV_PRETTY_ELLIPSES        0x0002
++#endif
++
++#ifndef PERL_PV_PRETTY_LTGT
++#  define PERL_PV_PRETTY_LTGT            0x0004
++#endif
++
++#ifndef PERL_PV_ESCAPE_FIRSTCHAR
++#  define PERL_PV_ESCAPE_FIRSTCHAR       0x0008
++#endif
++
++#ifndef PERL_PV_ESCAPE_UNI
++#  define PERL_PV_ESCAPE_UNI             0x0100
++#endif
++
++#ifndef PERL_PV_ESCAPE_UNI_DETECT
++#  define PERL_PV_ESCAPE_UNI_DETECT      0x0200
++#endif
++
++#ifndef PERL_PV_ESCAPE_ALL
++#  define PERL_PV_ESCAPE_ALL             0x1000
++#endif
++
++#ifndef PERL_PV_ESCAPE_NOBACKSLASH
++#  define PERL_PV_ESCAPE_NOBACKSLASH     0x2000
++#endif
++
++#ifndef PERL_PV_ESCAPE_NOCLEAR
++#  define PERL_PV_ESCAPE_NOCLEAR         0x4000
++#endif
++
++#ifndef PERL_PV_ESCAPE_RE
++#  define PERL_PV_ESCAPE_RE              0x8000
++#endif
++
++#ifndef PERL_PV_PRETTY_NOCLEAR
++#  define PERL_PV_PRETTY_NOCLEAR         PERL_PV_ESCAPE_NOCLEAR
++#endif
++#ifndef PERL_PV_PRETTY_DUMP
++#  define PERL_PV_PRETTY_DUMP            PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE
++#endif
++
++#ifndef PERL_PV_PRETTY_REGPROP
++#  define PERL_PV_PRETTY_REGPROP         PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE
++#endif
++
++/* Hint: pv_escape
++ * Note that unicode functionality is only backported to
++ * those perl versions that support it. For older perl
++ * versions, the implementation will fall back to bytes.
++ */
++
++#ifndef pv_escape
++#if defined(NEED_pv_escape)
++static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags);
++static
++#else
++extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags);
++#endif
++
++#ifdef pv_escape
++#  undef pv_escape
++#endif
++#define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f)
++#define Perl_pv_escape DPPP_(my_pv_escape)
++
++#if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL)
++
++char *
++DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str,
++  const STRLEN count, const STRLEN max,
++  STRLEN * const escaped, const U32 flags)
++{
++    const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\';
++    const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc;
++    char octbuf[32] = "%123456789ABCDF";
++    STRLEN wrote = 0;
++    STRLEN chsize = 0;
++    STRLEN readsize = 1;
++#if defined(is_utf8_string) && defined(utf8_to_uvchr)
++    bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0;
++#endif
++    const char *pv  = str;
++    const char * const end = pv + count;
++    octbuf[0] = esc;
++
++    if (!(flags & PERL_PV_ESCAPE_NOCLEAR))
++        sv_setpvs(dsv, "");
++
++#if defined(is_utf8_string) && defined(utf8_to_uvchr)
++    if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count))
++        isuni = 1;
++#endif
++
++    for (; pv < end && (!max || wrote < max) ; pv += readsize) {
++        const UV u =
++#if defined(is_utf8_string) && defined(utf8_to_uvchr)
++                     isuni ? utf8_to_uvchr((U8*)pv, &readsize) :
++#endif
++                             (U8)*pv;
++        const U8 c = (U8)u & 0xFF;
++
++        if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) {
++            if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
++                chsize = my_snprintf(octbuf, sizeof octbuf,
++                                      "%"UVxf, u);
++            else
++                chsize = my_snprintf(octbuf, sizeof octbuf,
++                                      "%cx{%"UVxf"}", esc, u);
++        } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) {
++            chsize = 1;
++        } else {
++            if (c == dq || c == esc || !isPRINT(c)) {
++                chsize = 2;
++                switch (c) {
++                case '\\' : /* fallthrough */
++                case '%'  : if (c == esc)
++                                octbuf[1] = esc;
++                            else
++                                chsize = 1;
++                            break;
++                case '\v' : octbuf[1] = 'v'; break;
++                case '\t' : octbuf[1] = 't'; break;
++                case '\r' : octbuf[1] = 'r'; break;
++                case '\n' : octbuf[1] = 'n'; break;
++                case '\f' : octbuf[1] = 'f'; break;
++                case '"'  : if (dq == '"')
++                                octbuf[1] = '"';
++                            else
++                                chsize = 1;
++                            break;
++                default:    chsize = my_snprintf(octbuf, sizeof octbuf,
++                                pv < end && isDIGIT((U8)*(pv+readsize))
++                                ? "%c%03o" : "%c%o", esc, c);
++                }
++            } else {
++                chsize = 1;
++            }
++        }
++        if (max && wrote + chsize > max) {
++            break;
++        } else if (chsize > 1) {
++            sv_catpvn(dsv, octbuf, chsize);
++            wrote += chsize;
++        } else {
++            char tmp[2];
++            my_snprintf(tmp, sizeof tmp, "%c", c);
++            sv_catpvn(dsv, tmp, 1);
++            wrote++;
++        }
++        if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
++            break;
++    }
++    if (escaped != NULL)
++        *escaped= pv - str;
++    return SvPVX(dsv);
++}
++
++#endif
++#endif
++
++#ifndef pv_pretty
++#if defined(NEED_pv_pretty)
++static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags);
++static
++#else
++extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags);
++#endif
++
++#ifdef pv_pretty
++#  undef pv_pretty
++#endif
++#define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g)
++#define Perl_pv_pretty DPPP_(my_pv_pretty)
++
++#if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL)
++
++char *
++DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count,
++  const STRLEN max, char const * const start_color, char const * const end_color,
++  const U32 flags)
++{
++    const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%';
++    STRLEN escaped;
++
++    if (!(flags & PERL_PV_PRETTY_NOCLEAR))
++        sv_setpvs(dsv, "");
++
++    if (dq == '"')
++        sv_catpvs(dsv, "\"");
++    else if (flags & PERL_PV_PRETTY_LTGT)
++        sv_catpvs(dsv, "<");
++
++    if (start_color != NULL)
++        sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color));
++
++    pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR);
++
++    if (end_color != NULL)
++        sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color));
++
++    if (dq == '"')
++        sv_catpvs(dsv, "\"");
++    else if (flags & PERL_PV_PRETTY_LTGT)
++        sv_catpvs(dsv, ">");
++
++    if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count)
++        sv_catpvs(dsv, "...");
++
++    return SvPVX(dsv);
++}
++
++#endif
++#endif
++
++#ifndef pv_display
++#if defined(NEED_pv_display)
++static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
++static
++#else
++extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
++#endif
++
++#ifdef pv_display
++#  undef pv_display
++#endif
++#define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e)
++#define Perl_pv_display DPPP_(my_pv_display)
++
++#if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL)
++
++char *
++DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
++{
++    pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP);
++    if (len > cur && pv[cur] == '\0')
++        sv_catpvs(dsv, "\\0");
++    return SvPVX(dsv);
++}
++
++#endif
++#endif
++
++#endif /* _P_P_PORTABILITY_H_ */
++
++/* End of File ppport.h */
diff --git a/lang/perl/perl-xml-parser/patches/020-xml-parser-expat-lib-inc-path-anchor.patch b/lang/perl/perl-xml-parser/patches/020-xml-parser-expat-lib-inc-path-anchor.patch
new file mode 100644 (file)
index 0000000..4e17daa
--- /dev/null
@@ -0,0 +1,12 @@
+--- a/Expat/Makefile.PL
++++ b/Expat/Makefile.PL
+@@ -2,6 +2,9 @@ use ExtUtils::MakeMaker;
+ use Config;
+ use English;
++$expat_libpath = '%%EXPAT_LIBPATH%%';
++$expat_incpath = '%%EXPAT_INCPATH%%';
++
+ my $libs = "-lexpat";
+ my @extras = ();
diff --git a/lang/perl/perl-xml-parser/patches/030-expat.patch b/lang/perl/perl-xml-parser/patches/030-expat.patch
new file mode 100644 (file)
index 0000000..12a7fb8
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -65,7 +65,7 @@ Expat_Not_Installed;
+     # exiting before Makefile generation silences CPANTesters reports
+     # when expat is not available.
+-    exit 0;
++#    exit 0;
+ }
+ if ( not $expat_libpath and $] >= 5.006001 and $^O ne 'MSWin32' ) {
diff --git a/lang/perl/perl-xs-parse-keyword/Makefile b/lang/perl/perl-xs-parse-keyword/Makefile
new file mode 100644 (file)
index 0000000..94b2d03
--- /dev/null
@@ -0,0 +1,53 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-xs-parse-keyword
+PKG_VERSION:=0.48
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=XS-Parse-Keyword
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=857a070ba465ab5b89d4d8d36d92358edd66e5e7b4a91584611d85125ac9a9c7
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-xs-parse-keyword
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=XS functions to assist in parsing keyword syntax
+  URL:=https://metacpan.org/pod/XS::Parse::Keyword
+  DEPENDS:=perl +perlbase-essential +perlbase-xsloader
+endef
+
+define Package/perl-xs-parse-keyword/description
+  This module provides some XS functions to assist in writing syntax
+  modules that provide new Perl-visible syntax, primarily for authors
+  of keyword plugins using the PL_keyword_plugin hook mechanism.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-xs-parse-keyword/install
+       $(call perlmod/Install,$(1),XS auto/XS)
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/share/perl/include
+       $(CP) $(PKG_BUILD_DIR)/share-infix/include/XSParseInfix.h $(1)/usr/share/perl/include/
+       $(CP) $(PKG_BUILD_DIR)/share-keyword/include/XSParseKeyword.h $(1)/usr/share/perl/include/
+endef
+
+$(eval $(call BuildPackage,perl-xs-parse-keyword))
diff --git a/lang/perl/perl-xs-parse-keyword/src/Makefile.PL b/lang/perl/perl-xs-parse-keyword/src/Makefile.PL
new file mode 100644 (file)
index 0000000..89a1350
--- /dev/null
@@ -0,0 +1,29 @@
+require 5.014;
+use ExtUtils::MakeMaker;
+if ( ! -e "Keyword.xs" ) {
+  die $! unless open SRC, "<lib/XS/Parse/Keyword.xs";
+  my $xs = join "", <SRC>;
+  close SRC;
+  die $! unless open DST, ">Keyword.xs";
+  print DST $xs;
+  close DST;
+}
+WriteMakefile
+(
+  'NAME' => 'XS::Parse::Keyword',
+  'VERSION_FROM' => 'lib/XS/Parse/Keyword.pm',
+  'PREREQ_PM' => {
+                   'ExtUtils::CBuilder' => 0,
+                   'ExtUtils::ParseXS' => '3.16',
+                   'File::ShareDir' => '1.00'
+                 },
+  'INSTALLDIRS' => 'site',
+  'EXE_FILES' => [],
+  'PL_FILES' => {},
+  'INC' => '-I. -I./hax -I./src -Ishare-infix/include -Ishare-keyword/include',
+  'C' => ["Keyword.c", glob('src/*.c')],
+  'OBJECT' =>'$(O_FILES)',
+  'DEFINE' =>'-o $@',
+)
+;
+
diff --git a/lang/perl/perl-xs-parse-sublike/Makefile b/lang/perl/perl-xs-parse-sublike/Makefile
new file mode 100644 (file)
index 0000000..c474414
--- /dev/null
@@ -0,0 +1,52 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=perl-xs-parse-sublike
+PKG_VERSION:=0.37
+PKG_RELEASE:=1
+
+PKG_SOURCE_NAME:=XS-Parse-Sublike
+PKG_SOURCE_URL:=https://cpan.metacpan.org/authors/id/P/PE/PEVANS
+PKG_SOURCE:=$(PKG_SOURCE_NAME)-$(PKG_VERSION).tar.gz
+PKG_HASH:=736528c888ea7b6a6191011e5d5a7824ec38a5620507de6ef45e4bc6e1cf0da9
+PKG_BUILD_DIR:=$(BUILD_DIR)/perl/$(PKG_SOURCE_NAME)-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Jens Wagner <[email protected]>
+PKG_LICENSE:=GPL-1.0-or-later Artistic-1.0-Perl
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include ../perlmod.mk
+
+define Package/perl-xs-parse-sublike
+  SUBMENU:=Perl
+  SECTION:=lang
+  CATEGORY:=Languages
+  TITLE:=XS functions to assist in parsing sub-like syntax
+  URL:=https://metacpan.org/pod/XS::Parse::Sublike
+  DEPENDS:=perl +perlbase-essential +perlbase-xsloader
+endef
+
+define Package/perl-xs-parse-sublike/description
+  This module provides some XS functions to assist in writing parsers for
+  sub-like syntax, primarily for authors of keyword plugins using the
+  PL_keyword_plugin hook mechanism.
+endef
+
+define Build/Configure
+       $(call perlmod/Configure,,)
+endef
+
+define Build/Compile
+       $(call perlmod/Compile,,)
+endef
+
+define Package/perl-xs-parse-sublike/install
+       $(call perlmod/Install,$(1),Sublike XS auto/XS)
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/share/perl/include
+       $(CP) $(PKG_BUILD_DIR)/share/include/XSParseSublike.h $(1)/usr/share/perl/include/
+endef
+
+$(eval $(call BuildPackage,perl-xs-parse-sublike))
diff --git a/lang/perl/perl-xs-parse-sublike/src/Makefile.PL b/lang/perl/perl-xs-parse-sublike/src/Makefile.PL
new file mode 100644 (file)
index 0000000..ee2d1c0
--- /dev/null
@@ -0,0 +1,28 @@
+require 5.016;
+use ExtUtils::MakeMaker;
+if ( ! -e "Sublike.xs" ) {
+  die $! unless open SRC, "<lib/XS/Parse/Sublike.xs";
+  my $xs = join "", <SRC>;
+  close SRC;
+  die $! unless open DST, ">Sublike.xs";
+  print DST $xs;
+  close DST;
+}
+WriteMakefile
+(
+  'NAME' => 'XS::Parse::Sublike',
+  'VERSION_FROM' => 'lib/XS/Parse/Sublike.pm',
+  'PREREQ_PM' => {
+                   'ExtUtils::CBuilder' => 0,
+                   'File::ShareDir' => '1.00'
+                 },
+  'INSTALLDIRS' => 'site',
+  'EXE_FILES' => [],
+  'PL_FILES' => {},
+  'INC' => '-I. -Ishare/include -Iinclude -Ihax',
+  'C' => ["Sublike.c", glob('src/*.c')],
+  'OBJECT' =>'$(O_FILES)',
+  'DEFINE' =>'-o $@',
+)
+;
+