Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-XML-Parser for openSUSE:Factory
checked in at 2024-01-05 21:39:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-XML-Parser (Old)
and /work/SRC/openSUSE:Factory/.perl-XML-Parser.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-XML-Parser"
Fri Jan 5 21:39:39 2024 rev:35 rq:1136806 version:2.470.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-XML-Parser/perl-XML-Parser.changes
2019-10-10 11:47:39.876241774 +0200
+++
/work/SRC/openSUSE:Factory/.perl-XML-Parser.new.28375/perl-XML-Parser.changes
2024-01-05 21:39:41.342496752 +0100
@@ -1,0 +2,16 @@
+Fri Dec 29 03:10:09 UTC 2023 - Tina Müller <[email protected]>
+
+- updated to 2.47
+ see /usr/share/doc/packages/perl-XML-Parser/Changes
+
+ 2.47 2023-12-28 (by Todd Rinaldo)
+ - #84 use $fh instead of $foo
+ - #85 Fix typo in documentation
+ - #89 Devel::CheckLib to from 0.99 -> 1.14
+ - Devel::CheckLibn 1.16
+ - #91 POD fix for verbatim text
+ - #97 Add a LICENSE file
+ - #94 Don't ship Expat/Makefile
+ - Various github workflow improvements. Windows is still not working.
+
+-------------------------------------------------------------------
Old:
----
XML-Parser-2.46.tar.gz
New:
----
XML-Parser-2.47.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-XML-Parser.spec ++++++
--- /var/tmp/diff_new_pack.97eY9E/_old 2024-01-05 21:39:42.138525891 +0100
+++ /var/tmp/diff_new_pack.97eY9E/_new 2024-01-05 21:39:42.138525891 +0100
@@ -1,7 +1,7 @@
#
# spec file for package perl-XML-Parser
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,22 +16,23 @@
#
+%define cpan_name XML-Parser
Name: perl-XML-Parser
-Version: 2.46
+Version: 2.470.0
Release: 0
-%define cpan_name XML-Parser
-Summary: Perl module for parsing XML documents
+%define cpan_version 2.47
License: Artistic-1.0 OR GPL-1.0-or-later
-Group: Development/Libraries/Perl
-Url: https://metacpan.org/release/%{cpan_name}
-Source0:
https://cpan.metacpan.org/authors/id/T/TO/TODDR/%{cpan_name}-%{version}.tar.gz
+Summary: Perl module for parsing XML documents
+URL: https://metacpan.org/release/%{cpan_name}
+Source0:
https://cpan.metacpan.org/authors/id/T/TO/TODDR/%{cpan_name}-%{cpan_version}.tar.gz
Source1: cpanspec.yml
Patch0: XML-Parser-2.40.diff
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
BuildRequires: perl-macros
BuildRequires: perl(LWP::UserAgent)
Requires: perl(LWP::UserAgent)
+Provides: perl(XML::Parser) = %{version}
+%define __perllib_provides /bin/true
%{perl_requires}
# MANUAL BEGIN
BuildRequires: libexpat-devel
@@ -57,16 +58,16 @@
the _Expat_ object, not the Parser object.
%prep
-%setup -q -n %{cpan_name}-%{version}
-find . -type f ! -name \*.pl -print0 | xargs -0 chmod 644
-%patch0
+%autosetup -n %{cpan_name}-%{cpan_version} -p0
+
+find . -type f ! -path "*/t/*" ! -name "*.pl" ! -path "*/bin/*" ! -path
"*/script/*" ! -path "*/scripts/*" ! -name "configure" -print0 | xargs -0 chmod
644
# MANUAL BEGIN
chmod 644 samples/{canonical,xml*}
# MANUAL END
%build
perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"
-make %{?_smp_mflags}
+%make_build
%check
make test
@@ -77,6 +78,6 @@
%perl_gen_filelist
%files -f %{name}.files
-%defattr(-,root,root,755)
-%doc Changes README samples
+%doc Changes README README.md samples
+%license LICENSE
++++++ XML-Parser-2.46.tar.gz -> XML-Parser-2.47.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/Changes new/XML-Parser-2.47/Changes
--- old/XML-Parser-2.46/Changes 2019-09-24 07:26:55.000000000 +0200
+++ new/XML-Parser-2.47/Changes 2023-12-29 01:26:59.000000000 +0100
@@ -1,5 +1,15 @@
Revision history for Perl extension XML::Parser.
+2.47 2023-12-28 (by Todd Rinaldo)
+ - #84 use $fh instead of $foo
+ - #85 Fix typo in documentation
+ - #89 Devel::CheckLib to from 0.99 -> 1.14
+ - Devel::CheckLibn 1.16
+ - #91 POD fix for verbatim text
+ - #97 Add a LICENSE file
+ - #94 Don't ship Expat/Makefile
+ - Various github workflow improvements. Windows is still not working.
+
2.46 2019-09-24 (by Todd Rinaldo)
- use foreach not for for loops
- produce README.md so travis will show up on github
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/Expat/Expat.pm
new/XML-Parser-2.47/Expat/Expat.pm
--- old/XML-Parser-2.46/Expat/Expat.pm 2019-09-24 07:21:32.000000000 +0200
+++ new/XML-Parser-2.47/Expat/Expat.pm 2023-12-29 01:27:50.000000000 +0100
@@ -7,7 +7,7 @@
use XSLoader;
use Carp;
-our $VERSION = '2.46';
+our $VERSION = '2.47';
our ( %Encoding_Table, @Encoding_Path, $have_File_Spec );
@@ -1147,7 +1147,7 @@
content model of the element declaration. They also represent content
particles, components of a content model.
-When referred to as a string, these objects are automagicly converted to a
+When referred to as a string, these objects are automagically converted to a
string representation of the model (or content particle).
=over 4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/LICENSE new/XML-Parser-2.47/LICENSE
--- old/XML-Parser-2.46/LICENSE 1970-01-01 01:00:00.000000000 +0100
+++ new/XML-Parser-2.47/LICENSE 2023-12-28 20:52:31.000000000 +0100
@@ -0,0 +1,202 @@
+ The Artistic License 2.0
+
+ Copyright (c) 1998-2000 Larry Wall and Clark Cooper
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+Preamble
+
+This license establishes the terms under which a given free software
+Package may be copied, modified, distributed, and/or redistributed.
+The intent is that the Copyright Holder maintains some artistic
+control over the development of that Package while still keeping the
+Package available as open source and free software.
+
+You are always permitted to make arrangements wholly outside of this
+license directly with the Copyright Holder of a given Package. If the
+terms of this license do not permit the full use that you propose to
+make of the Package, you should contact the Copyright Holder and seek
+a different licensing arrangement.
+
+Definitions
+
+ "Copyright Holder" means the individual(s) or organization(s)
+ named in the copyright notice for the entire Package.
+
+ "Contributor" means any party that has contributed code or other
+ material to the Package, in accordance with the Copyright Holder's
+ procedures.
+
+ "You" and "your" means any person who would like to copy,
+ distribute, or modify the Package.
+
+ "Package" means the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection and/or of
+ those files. A given Package may consist of either the Standard
+ Version, or a Modified Version.
+
+ "Distribute" means providing a copy of the Package or making it
+ accessible to anyone else, or in the case of a company or
+ organization, to others outside of your company or organization.
+
+ "Distributor Fee" means any fee that you charge for Distributing
+ this Package or providing support for this Package to another
+ party. It does not mean licensing fees.
+
+ "Standard Version" refers to the Package if it has not been
+ modified, or has been modified only in ways explicitly requested
+ by the Copyright Holder.
+
+ "Modified Version" means the Package, if it has been changed, and
+ such changes were not explicitly requested by the Copyright
+ Holder.
+
+ "Original License" means this Artistic License as Distributed with
+ the Standard Version of the Package, in its current version or as
+ it may be modified by The Perl Foundation in the future.
+
+ "Source" form means the source code, documentation source, and
+ configuration files for the Package.
+
+ "Compiled" form means the compiled bytecode, object code, binary,
+ or any other form resulting from mechanical transformation or
+ translation of the Source form.
+
+
+Permission for Use and Modification Without Distribution
+
+(1) You are permitted to use the Standard Version and create and use
+Modified Versions for any purpose without restriction, provided that
+you do not Distribute the Modified Version.
+
+
+Permissions for Redistribution of the Standard Version
+
+(2) You may Distribute verbatim copies of the Source form of the
+Standard Version of this Package in any medium without restriction,
+either gratis or for a Distributor Fee, provided that you duplicate
+all of the original copyright notices and associated disclaimers. At
+your discretion, such verbatim copies may or may not include a
+Compiled form of the Package.
+
+(3) You may apply any bug fixes, portability changes, and other
+modifications made available from the Copyright Holder. The resulting
+Package will still be considered the Standard Version, and as such
+will be subject to the Original License.
+
+
+Distribution of Modified Versions of the Package as Source
+
+(4) You may Distribute your Modified Version as Source (either gratis
+or for a Distributor Fee, and with or without a Compiled form of the
+Modified Version) provided that you clearly document how it differs
+from the Standard Version, including, but not limited to, documenting
+any non-standard features, executables, or modules, and provided that
+you do at least ONE of the following:
+
+ (a) make the Modified Version available to the Copyright Holder
+ of the Standard Version, under the Original License, so that the
+ Copyright Holder may include your modifications in the Standard
+ Version.
+
+ (b) ensure that installation of your Modified Version does not
+ prevent the user installing or running the Standard Version. In
+ addition, the Modified Version must bear a name that is different
+ from the name of the Standard Version.
+
+ (c) allow anyone who receives a copy of the Modified Version to
+ make the Source form of the Modified Version available to others
+ under
+
+ (i) the Original License or
+
+ (ii) a license that permits the licensee to freely copy,
+ modify and redistribute the Modified Version using the same
+ licensing terms that apply to the copy that the licensee
+ received, and requires that the Source form of the Modified
+ Version, and of any works derived from it, be made freely
+ available in that license fees are prohibited but Distributor
+ Fees are allowed.
+
+
+Distribution of Compiled Forms of the Standard Version
+or Modified Versions without the Source
+
+(5) You may Distribute Compiled forms of the Standard Version without
+the Source, provided that you include complete instructions on how to
+get the Source of the Standard Version. Such instructions must be
+valid at the time of your distribution. If these instructions, at any
+time while you are carrying out such distribution, become invalid, you
+must provide new instructions on demand or cease further distribution.
+If you provide valid instructions or cease distribution within thirty
+days after you become aware that the instructions are invalid, then
+you do not forfeit any of your rights under this license.
+
+(6) You may Distribute a Modified Version in Compiled form without
+the Source, provided that you comply with Section 4 with respect to
+the Source of the Modified Version.
+
+
+Aggregating or Linking the Package
+
+(7) You may aggregate the Package (either the Standard Version or
+Modified Version) with other packages and Distribute the resulting
+aggregation provided that you do not charge a licensing fee for the
+Package. Distributor Fees are permitted, and licensing fees for other
+components in the aggregation are permitted. The terms of this license
+apply to the use and Distribution of the Standard or Modified Versions
+as included in the aggregation.
+
+(8) You are permitted to link Modified and Standard Versions with
+other works, to embed the Package in a larger work of your own, or to
+build stand-alone binary or bytecode versions of applications that
+include the Package, and Distribute the result without restriction,
+provided the result does not expose a direct interface to the Package.
+
+
+Items That are Not Considered Part of a Modified Version
+
+(9) Works (including, but not limited to, modules and scripts) that
+merely extend or make use of the Package, do not, by themselves, cause
+the Package to be a Modified Version. In addition, such works are not
+considered parts of the Package itself, and are not subject to the
+terms of this license.
+
+
+General Provisions
+
+(10) Any use, modification, and distribution of the Standard or
+Modified Versions is governed by this Artistic License. By using,
+modifying or distributing the Package, you accept this license. Do not
+use, modify, or distribute the Package, if you do not accept this
+license.
+
+(11) If your Modified Version has been derived from a Modified
+Version made by someone other than you, you are nevertheless required
+to ensure that your Modified Version complies with the requirements of
+this license.
+
+(12) This license does not grant you the right to use any trademark,
+service mark, tradename, or logo of the Copyright Holder.
+
+(13) This license includes the non-exclusive, worldwide,
+free-of-charge patent license to make, have made, use, offer to sell,
+sell, import and otherwise transfer the Package with respect to any
+patent claims licensable by the Copyright Holder that are necessarily
+infringed by the Package. If you institute patent litigation
+(including a cross-claim or counterclaim) against any party alleging
+that the Package constitutes direct or contributory patent
+infringement, then this Artistic License to you shall terminate on the
+date that such litigation is filed.
+
+(14) Disclaimer of Warranty:
+THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
+IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL
+LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/MANIFEST new/XML-Parser-2.47/MANIFEST
--- old/XML-Parser-2.46/MANIFEST 2019-09-24 07:27:54.000000000 +0200
+++ new/XML-Parser-2.47/MANIFEST 2023-12-29 01:29:22.000000000 +0100
@@ -1,68 +1,71 @@
+Changes Change log
+Expat/encoding.h Header file; describes *.enc structure
+Expat/Expat.pm XML::Parser::Expat module
+Expat/Expat.xs Extension library
+Expat/Makefile.PL perl MakeMaker script for XML::Parser::Expat
+Expat/typemap XS typemap
inc/Devel/CheckLib.pm
-Changes Change log
-Expat/Expat.pm XML::Parser::Expat module
-Expat/Expat.xs Extension library
-Expat/Makefile.PL perl MakeMaker script for XML::Parser::Expat
-Expat/encoding.h Header file; describes *.enc structure
-Expat/typemap XS typemap
-MANIFEST This file
-Makefile.PL perl MakeMaker script for XML::Parser
-Parser.pm XML::Parser module
-Parser/LWPExternEnt.pl LWP based external entity handler
-Parser/Encodings/Japanese_Encodings.msg Message about Japanese
encodings.
-Parser/Encodings/README Info about encoding maps
-Parser/Encodings/big5.enc Big5 binary encoding map
-Parser/Encodings/euc-kr.enc EUC-KR binary encoding map
-Parser/Encodings/iso-8859-2.enc ISO-8859-2 binary encoding map
-Parser/Encodings/iso-8859-3.enc ISO-8859-3 binary encoding map
-Parser/Encodings/iso-8859-4.enc ISO-8859-4 binary encoding map
-Parser/Encodings/iso-8859-5.enc ISO-8859-5 binary encoding map
-Parser/Encodings/iso-8859-7.enc ISO-8859-7 binary encoding map
-Parser/Encodings/iso-8859-8.enc ISO-8859-8 binary encoding map
-Parser/Encodings/iso-8859-9.enc ISO-8859-9 binary encoding map
-Parser/Encodings/iso-8859-15.enc ISO-8859-15 binary encoding map
-Parser/Encodings/windows-1250.enc cp1250-WinLatin2 binary encoding map
-Parser/Encodings/windows-1251.enc cp1251-Russian binary encoding map
-Parser/Encodings/windows-1252.enc cp1252-WinLatin1 binary encoding map
-Parser/Encodings/windows-1255.enc hebrew
-Parser/Encodings/x-euc-jp-jisx0221.enc X-euc-jp-jisx0221 encoding map
-Parser/Encodings/x-euc-jp-unicode.enc X-euc-jp-unicde encoding map
-Parser/Encodings/x-sjis-cp932.enc x-sjis-cp932 encoding map
-Parser/Encodings/x-sjis-jdk117.enc x-sjis-jdk117 encoding map
-Parser/Encodings/x-sjis-jisx0221.enc x-sjis-jisx0221 encoding map
-Parser/Encodings/x-sjis-unicode.enc x-sjis-unicode encoding map
+LICENSE
+Makefile.PL perl MakeMaker script for XML::Parser
+MANIFEST This file
+MANIFEST.SKIP
+Parser.pm XML::Parser module
+Parser/Encodings/big5.enc Big5 binary encoding map
+Parser/Encodings/euc-kr.enc EUC-KR binary encoding map
Parser/Encodings/ibm866.enc
+Parser/Encodings/iso-8859-15.enc ISO-8859-15 binary encoding map
+Parser/Encodings/iso-8859-2.enc ISO-8859-2 binary encoding map
+Parser/Encodings/iso-8859-3.enc ISO-8859-3 binary encoding map
+Parser/Encodings/iso-8859-4.enc ISO-8859-4 binary encoding map
+Parser/Encodings/iso-8859-5.enc ISO-8859-5 binary encoding map
+Parser/Encodings/iso-8859-7.enc ISO-8859-7 binary encoding map
+Parser/Encodings/iso-8859-8.enc ISO-8859-8 binary encoding map
+Parser/Encodings/iso-8859-9.enc ISO-8859-9 binary encoding map
+Parser/Encodings/Japanese_Encodings.msg Message about Japanese
encodings.
Parser/Encodings/koi8-r.enc
-Parser/Style/Debug.pm Debug style parser
-Parser/Style/Objects.pm Objects style parser
-Parser/Style/Stream.pm Stream style parser
-Parser/Style/Subs.pm Subs style parser
-Parser/Style/Tree.pm Tree style parser
-README Short explanation
-samples/canonical A utility to generate canonical XML
-samples/canontst.xml An xml document to demonstrate canonical
-samples/ctest.dtd An external DTD used by canontst.xml
-samples/REC-xml-19980210.xml The XML spec in xml form
-samples/xmlcomments A utility to extract comments
-samples/xmlfilter A utility to filter elements
-samples/xmlstats A utility to report on element statistics
-t/astress.t Test script
-t/cdata.t Test script
-t/decl.t Test script
-t/defaulted.t Test script
-t/encoding.t Test script
-t/external_ent.t Test script
-t/file.t Test script
-t/file_open_scalar.t Test script
-t/finish.t Test script
-t/ext.ent External entity for parament.t test
-t/ext2.ent External entity for parament.t test
-t/foo.dtd External DTD for parament.t test
-t/namespaces.t Test script
-t/parament.t Test script
-t/partial.t Test script
-t/skip.t Test script
-t/stream.t Test script
-t/styles.t Test script
+Parser/Encodings/README Info about encoding maps
+Parser/Encodings/windows-1250.enc cp1250-WinLatin2 binary encoding map
+Parser/Encodings/windows-1251.enc cp1251-Russian binary encoding map
+Parser/Encodings/windows-1252.enc cp1252-WinLatin1 binary encoding map
+Parser/Encodings/windows-1255.enc hebrew
+Parser/Encodings/x-euc-jp-jisx0221.enc X-euc-jp-jisx0221 encoding map
+Parser/Encodings/x-euc-jp-unicode.enc X-euc-jp-unicde encoding map
+Parser/Encodings/x-sjis-cp932.enc x-sjis-cp932 encoding map
+Parser/Encodings/x-sjis-jdk117.enc x-sjis-jdk117 encoding map
+Parser/Encodings/x-sjis-jisx0221.enc x-sjis-jisx0221 encoding map
+Parser/Encodings/x-sjis-unicode.enc x-sjis-unicode encoding map
+Parser/LWPExternEnt.pl LWP based external entity handler
+Parser/Style/Debug.pm Debug style parser
+Parser/Style/Objects.pm Objects style parser
+Parser/Style/Stream.pm Stream style parser
+Parser/Style/Subs.pm Subs style parser
+Parser/Style/Tree.pm Tree style parser
+README Short explanation
+README.md
+samples/canonical A utility to generate canonical XML
+samples/canontst.xml An xml document to demonstrate canonical
+samples/ctest.dtd An external DTD used by canontst.xml
+samples/REC-xml-19980210.xml The XML spec in xml form
+samples/xmlcomments A utility to extract comments
+samples/xmlfilter A utility to filter elements
+samples/xmlstats A utility to report on element statistics
+t/astress.t Test script
+t/cdata.t Test script
+t/decl.t Test script
+t/defaulted.t Test script
+t/encoding.t Test script
+t/ext.ent External entity for parament.t test
+t/ext2.ent External entity for parament.t test
+t/external_ent.t Test script
+t/file.t Test script
+t/file_open_scalar.t Test script
+t/finish.t Test script
+t/foo.dtd External DTD for parament.t test
+t/namespaces.t Test script
+t/parament.t Test script
+t/partial.t Test script
+t/skip.t Test script
+t/stream.t Test script
+t/styles.t Test script
META.yml Module YAML meta-data (added by
MakeMaker)
META.json Module JSON meta-data (added by
MakeMaker)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/MANIFEST.SKIP
new/XML-Parser-2.47/MANIFEST.SKIP
--- old/XML-Parser-2.46/MANIFEST.SKIP 1970-01-01 01:00:00.000000000 +0100
+++ new/XML-Parser-2.47/MANIFEST.SKIP 2023-12-28 21:26:09.000000000 +0100
@@ -0,0 +1,11 @@
+\.gitignore
+\.perltidyrc
+\.travis.yml
+cpanfile
+\.git/
+^MANIFEST.bak
+^MYMETA
+/MYMETA
+^Makefile$
+\.github/
+^Expat/Makefile$
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/META.json
new/XML-Parser-2.47/META.json
--- old/XML-Parser-2.46/META.json 2019-09-24 07:27:53.000000000 +0200
+++ new/XML-Parser-2.47/META.json 2023-12-29 01:29:22.000000000 +0100
@@ -4,7 +4,7 @@
"Clark Cooper ([email protected])"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter
version 2.150010",
+ "generated_by" : "ExtUtils::MakeMaker version 7.64, CPAN::Meta::Converter
version 2.150010",
"license" : [
"perl_5"
],
@@ -33,7 +33,7 @@
"runtime" : {
"requires" : {
"LWP::UserAgent" : "0",
- "perl" : "5.00405"
+ "perl" : "5.004050"
}
},
"test" : {
@@ -52,6 +52,6 @@
"url" : "http://github.com/toddr/XML-Parser"
}
},
- "version" : "2.46",
- "x_serialization_backend" : "JSON::PP version 2.97001"
+ "version" : "2.47",
+ "x_serialization_backend" : "JSON::PP version 4.07"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/META.yml new/XML-Parser-2.47/META.yml
--- old/XML-Parser-2.46/META.yml 2019-09-24 07:27:53.000000000 +0200
+++ new/XML-Parser-2.47/META.yml 2023-12-29 01:29:22.000000000 +0100
@@ -9,7 +9,7 @@
configure_requires:
ExtUtils::MakeMaker: '0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version
2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.64, CPAN::Meta::Converter version
2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -21,9 +21,9 @@
- inc
requires:
LWP::UserAgent: '0'
- perl: '5.00405'
+ perl: '5.004050'
resources:
bugtracker: https://github.com/toddr/XML-Parser/issues
repository: http://github.com/toddr/XML-Parser
-version: '2.46'
+version: '2.47'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/Parser/Style/Tree.pm
new/XML-Parser-2.47/Parser/Style/Tree.pm
--- old/XML-Parser-2.46/Parser/Style/Tree.pm 2019-09-24 05:18:53.000000000
+0200
+++ new/XML-Parser-2.47/Parser/Style/Tree.pm 2023-12-28 20:45:57.000000000
+0100
@@ -76,6 +76,7 @@
<foo><head id="a">Hello <em>there</em></head><bar>Howdy<ref/></bar>do</foo>
would be:
+
Tag Content
==================================================================
[foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/Parser.pm
new/XML-Parser-2.47/Parser.pm
--- old/XML-Parser-2.46/Parser.pm 2019-09-24 07:21:32.000000000 +0200
+++ new/XML-Parser-2.47/Parser.pm 2023-12-29 01:27:50.000000000 +0100
@@ -16,7 +16,7 @@
BEGIN {
require XML::Parser::Expat;
- $VERSION = '2.46';
+ $VERSION = '2.47';
die "Parser.pm and Expat.pm versions don't match"
unless $VERSION eq $XML::Parser::Expat::VERSION;
}
@@ -346,8 +346,8 @@
Default => \&other);
open(my $fh, 'xmlgenerator |');
- $p3->parse($foo, ProtocolEncoding => 'ISO-8859-1');
- close($foo);
+ $p3->parse($fh, ProtocolEncoding => 'ISO-8859-1');
+ close($fh);
$p3->parsefile('junk.xml', ErrorContext => 3);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/README new/XML-Parser-2.47/README
--- old/XML-Parser-2.46/README 2019-09-24 07:09:00.000000000 +0200
+++ new/XML-Parser-2.47/README 2023-12-28 20:45:57.000000000 +0100
@@ -21,8 +21,8 @@
Default => \&other);
open(my $fh, 'xmlgenerator |');
- $p3->parse($foo, ProtocolEncoding => 'ISO-8859-1');
- close($foo);
+ $p3->parse($fh, ProtocolEncoding => 'ISO-8859-1');
+ close($fh);
$p3->parsefile('junk.xml', ErrorContext => 3);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/README.md
new/XML-Parser-2.47/README.md
--- old/XML-Parser-2.46/README.md 1970-01-01 01:00:00.000000000 +0100
+++ new/XML-Parser-2.47/README.md 2023-12-28 20:45:57.000000000 +0100
@@ -0,0 +1,491 @@
+[](https://travis-ci.org/toddr/XML-Parser)
+# NAME
+
+XML::Parser - A perl module for parsing XML documents
+
+# SYNOPSIS
+
+ use XML::Parser;
+
+ $p1 = XML::Parser->new(Style => 'Debug');
+ $p1->parsefile('REC-xml-19980210.xml');
+ $p1->parse('<foo id="me">Hello World</foo>');
+
+ # Alternative
+ $p2 = XML::Parser->new(Handlers => {Start => \&handle_start,
+ End => \&handle_end,
+ Char => \&handle_char});
+ $p2->parse($socket);
+
+ # Another alternative
+ $p3 = XML::Parser->new(ErrorContext => 2);
+
+ $p3->setHandlers(Char => \&text,
+ Default => \&other);
+
+ open(my $fh, 'xmlgenerator |');
+ $p3->parse($fh, ProtocolEncoding => 'ISO-8859-1');
+ close($fh);
+
+ $p3->parsefile('junk.xml', ErrorContext => 3);
+
+# DESCRIPTION
+
+This module provides ways to parse XML documents. It is built on top of
+[XML::Parser::Expat](https://metacpan.org/pod/XML::Parser::Expat), which is a
lower level interface to James Clark's
+expat library. Each call to one of the parsing methods creates a new
+instance of XML::Parser::Expat which is then used to parse the document.
+Expat options may be provided when the XML::Parser object is created.
+These options are then passed on to the Expat object on each parse call.
+They can also be given as extra arguments to the parse methods, in which
+case they override options given at XML::Parser creation time.
+
+The behavior of the parser is controlled either by `["STYLES"](#styles)` and/or
+`["HANDLERS"](#handlers)` options, or by ["setHandlers"](#sethandlers) method.
These all provide
+mechanisms for XML::Parser to set the handlers needed by XML::Parser::Expat.
+If neither `Style` nor `Handlers` are specified, then parsing just
+checks the document for being well-formed.
+
+When underlying handlers get called, they receive as their first parameter
+the _Expat_ object, not the Parser object.
+
+# METHODS
+
+- new
+
+ This is a class method, the constructor for XML::Parser. Options are passed
+ as keyword value pairs. Recognized options are:
+
+ - Style
+
+ This option provides an easy way to create a given style of parser. The
+ built in styles are: ["Debug"](#debug), ["Subs"](#subs),
["Tree"](#tree), ["Objects"](#objects),
+ and ["Stream"](#stream). These are all defined in separate packages
under
+ `XML::Parser::Style::*`, and you can find further documentation for
+ each style both below, and in those packages.
+
+ Custom styles can be provided by giving a full package name containing
+ at least one '::'. This package should then have subs defined for each
+ handler it wishes to have installed. See ["STYLES"](#styles) below
+ for a discussion of each built in style.
+
+ - Handlers
+
+ When provided, this option should be an anonymous hash containing as
+ keys the type of handler and as values a sub reference to handle that
+ type of event. All the handlers get passed as their 1st parameter the
+ instance of expat that is parsing the document. Further details on
+ handlers can be found in ["HANDLERS"](#handlers). Any handler set here
+ overrides the corresponding handler set with the Style option.
+
+ - Pkg
+
+ Some styles will refer to subs defined in this package. If not
provided,
+ it defaults to the package which called the constructor.
+
+ - ErrorContext
+
+ This is an Expat option. When this option is defined, errors are
reported
+ in context. The value should be the number of lines to show on either
side
+ of the line in which the error occurred.
+
+ - ProtocolEncoding
+
+ This is an Expat option. This sets the protocol encoding name. It
defaults
+ to none. The built-in encodings are: `UTF-8`, `ISO-8859-1`, `UTF-16`,
and
+ `US-ASCII`. Other encodings may be used if they have encoding maps in
one
+ of the directories in the @Encoding\_Path list. Check
["ENCODINGS"](#encodings) for
+ more information on encoding maps. Setting the protocol encoding
overrides
+ any encoding in the XML declaration.
+
+ - Namespaces
+
+ This is an Expat option. If this is set to a true value, then namespace
+ processing is done during the parse. See ["Namespaces" in
XML::Parser::Expat](https://metacpan.org/pod/XML::Parser::Expat#Namespaces)
+ for further discussion of namespace processing.
+
+ - NoExpand
+
+ This is an Expat option. Normally, the parser will try to expand
references
+ to entities defined in the internal subset. If this option is set to a
true
+ value, and a default handler is also set, then the default handler
will be
+ called when an entity reference is seen in text. This has no effect if
a
+ default handler has not been registered, and it has no effect on the
expansion
+ of entity references inside attribute values.
+
+ - Stream\_Delimiter
+
+ This is an Expat option. It takes a string value. When this string is
found
+ alone on a line while parsing from a stream, then the parse is ended
as if it
+ saw an end of file. The intended use is with a stream of xml documents
in a
+ MIME multipart format. The string should not contain a trailing
newline.
+
+ - ParseParamEnt
+
+ This is an Expat option. Unless standalone is set to "yes" in the XML
+ declaration, setting this to a true value allows the external DTD to
be read,
+ and parameter entities to be parsed and expanded.
+
+ - NoLWP
+
+ This option has no effect if the ExternEnt or ExternEntFin handlers are
+ directly set. Otherwise, if true, it forces the use of a file based
external
+ entity handler.
+
+ - Non\_Expat\_Options
+
+ If provided, this should be an anonymous hash whose keys are options
that
+ shouldn't be passed to Expat. This should only be of concern to those
+ subclassing XML::Parser.
+
+- setHandlers(TYPE, HANDLER \[, TYPE, HANDLER \[...\]\])
+
+ This method registers handlers for various parser events. It overrides any
+ previous handlers registered through the Style or Handler options or
through
+ earlier calls to setHandlers. By providing a false or undefined value as
+ the handler, the existing handler can be unset.
+
+ This method returns a list of type, handler pairs corresponding to the
+ input. The handlers returned are the ones that were in effect prior to
+ the call.
+
+ See a description of the handler types in ["HANDLERS"](#handlers).
+
+- parse(SOURCE \[, OPT => OPT\_VALUE \[...\]\])
+
+ The SOURCE parameter should either be a string containing the whole XML
+ document, or it should be an open IO::Handle. Constructor options to
+ XML::Parser::Expat given as keyword-value pairs may follow the SOURCE
+ parameter. These override, for this call, any options or attributes passed
+ through from the XML::Parser instance.
+
+ A die call is thrown if a parse error occurs. Otherwise it will return 1
+ or whatever is returned from the **Final** handler, if one is installed.
+ In other words, what parse may return depends on the style.
+
+- parsestring
+
+ This is just an alias for parse for backwards compatibility.
+
+- parsefile(FILE \[, OPT => OPT\_VALUE \[...\]\])
+
+ Open FILE for reading, then call parse with the open handle. The file
+ is closed no matter how parse returns. Returns what parse returns.
+
+- parse\_start(\[ OPT => OPT\_VALUE \[...\]\])
+
+ Create and return a new instance of XML::Parser::ExpatNB. Constructor
+ options may be provided. If an init handler has been provided, it is
+ called before returning the ExpatNB object. Documents are parsed by
+ making incremental calls to the parse\_more method of this object, which
+ takes a string. A single call to the parse\_done method of this object,
+ which takes no arguments, indicates that the document is finished.
+
+ If there is a final handler installed, it is executed by the parse\_done
+ method before returning and the parse\_done method returns whatever is
+ returned by the final handler.
+
+# HANDLERS
+
+Expat is an event based parser. As the parser recognizes parts of the
+document (say the start or end tag for an XML element), then any handlers
+registered for that type of an event are called with suitable parameters.
+All handlers receive an instance of XML::Parser::Expat as their first
+argument. See ["METHODS" in
XML::Parser::Expat](https://metacpan.org/pod/XML::Parser::Expat#METHODS) for a
discussion of the
+methods that can be called on this object.
+
+## Init (Expat)
+
+This is called just before the parsing of the document starts.
+
+## Final (Expat)
+
+This is called just after parsing has finished, but only if no errors
+occurred during the parse. Parse returns what this returns.
+
+## Start (Expat, Element \[, Attr, Val \[,...\]\])
+
+This event is generated when an XML start tag is recognized. Element is the
+name of the XML element type that is opened with the start tag. The Attr &
+Val pairs are generated for each attribute in the start tag.
+
+## End (Expat, Element)
+
+This event is generated when an XML end tag is recognized. Note that
+an XML empty tag (<foo/>) generates both a start and an end event.
+
+## Char (Expat, String)
+
+This event is generated when non-markup is recognized. The non-markup
+sequence of characters is in String. A single non-markup sequence of
+characters may generate multiple calls to this handler. Whatever the
+encoding of the string in the original document, this is given to the
+handler in UTF-8.
+
+## Proc (Expat, Target, Data)
+
+This event is generated when a processing instruction is recognized.
+
+## Comment (Expat, Data)
+
+This event is generated when a comment is recognized.
+
+## CdataStart (Expat)
+
+This is called at the start of a CDATA section.
+
+## CdataEnd (Expat)
+
+This is called at the end of a CDATA section.
+
+## Default (Expat, String)
+
+This is called for any characters that don't have a registered handler.
+This includes both characters that are part of markup for which no
+events are generated (markup declarations) and characters that
+could generate events, but for which no handler has been registered.
+
+Whatever the encoding in the original document, the string is returned to
+the handler in UTF-8.
+
+## Unparsed (Expat, Entity, Base, Sysid, Pubid, Notation)
+
+This is called for a declaration of an unparsed entity. Entity is the name
+of the entity. Base is the base to be used for resolving a relative URI.
+Sysid is the system id. Pubid is the public id. Notation is the notation
+name. Base and Pubid may be undefined.
+
+## Notation (Expat, Notation, Base, Sysid, Pubid)
+
+This is called for a declaration of notation. Notation is the notation name.
+Base is the base to be used for resolving a relative URI. Sysid is the system
+id. Pubid is the public id. Base, Sysid, and Pubid may all be undefined.
+
+## ExternEnt (Expat, Base, Sysid, Pubid)
+
+This is called when an external entity is referenced. Base is the base to be
+used for resolving a relative URI. Sysid is the system id. Pubid is the public
+id. Base, and Pubid may be undefined.
+
+This handler should either return a string, which represents the contents of
+the external entity, or return an open filehandle that can be read to obtain
+the contents of the external entity, or return undef, which indicates the
+external entity couldn't be found and will generate a parse error.
+
+If an open filehandle is returned, it must be returned as either a glob
+(\*FOO) or as a reference to a glob (e.g. an instance of IO::Handle).
+
+A default handler is installed for this event. The default handler is
+XML::Parser::lwp\_ext\_ent\_handler unless the NoLWP option was provided with
+a true value, otherwise XML::Parser::file\_ext\_ent\_handler is the default
+handler for external entities. Even without the NoLWP option, if the
+URI or LWP modules are missing, the file based handler ends up being used
+after giving a warning on the first external entity reference.
+
+The LWP external entity handler will use proxies defined in the environment
+(http\_proxy, ftp\_proxy, etc.).
+
+Please note that the LWP external entity handler reads the entire
+entity into a string and returns it, where as the file handler opens a
+filehandle.
+
+Also note that the file external entity handler will likely choke on
+absolute URIs or file names that don't fit the conventions of the local
+operating system.
+
+The expat base method can be used to set a basename for
+relative pathnames. If no basename is given, or if the basename is itself
+a relative name, then it is relative to the current working directory.
+
+## ExternEntFin (Expat)
+
+This is called after parsing an external entity. It's not called unless
+an ExternEnt handler is also set. There is a default handler installed
+that pairs with the default ExternEnt handler.
+
+If you're going to install your own ExternEnt handler, then you should
+set (or unset) this handler too.
+
+## Entity (Expat, Name, Val, Sysid, Pubid, Ndata, IsParam)
+
+This is called when an entity is declared. For internal entities, the Val
+parameter will contain the value and the remaining three parameters will be
+undefined. For external entities, the Val parameter will be undefined, the
+Sysid parameter will have the system id, the Pubid parameter will have the
+public id if it was provided (it will be undefined otherwise), the Ndata
+parameter will contain the notation for unparsed entities. If this is a
+parameter entity declaration, then the IsParam parameter is true.
+
+Note that this handler and the Unparsed handler above overlap. If both are
+set, then this handler will not be called for unparsed entities.
+
+## Element (Expat, Name, Model)
+
+The element handler is called when an element declaration is found. Name
+is the element name, and Model is the content model as an XML::Parser::Content
+object. See ["XML::Parser::ContentModel Methods" in
XML::Parser::Expat](https://metacpan.org/pod/XML::Parser::Expat#XML::Parser::ContentModel-Methods)
+for methods available for this class.
+
+## Attlist (Expat, Elname, Attname, Type, Default, Fixed)
+
+This handler is called for each attribute in an ATTLIST declaration.
+So an ATTLIST declaration that has multiple attributes will generate multiple
+calls to this handler. The Elname parameter is the name of the element with
+which the attribute is being associated. The Attname parameter is the name
+of the attribute. Type is the attribute type, given as a string. Default is
+the default value, which will either be "#REQUIRED", "#IMPLIED" or a quoted
+string (i.e. the returned string will begin and end with a quote character).
+If Fixed is true, then this is a fixed attribute.
+
+## Doctype (Expat, Name, Sysid, Pubid, Internal)
+
+This handler is called for DOCTYPE declarations. Name is the document type
+name. Sysid is the system id of the document type, if it was provided,
+otherwise it's undefined. Pubid is the public id of the document type,
+which will be undefined if no public id was given. Internal is the internal
+subset, given as a string. If there was no internal subset, it will be
+undefined. Internal will contain all whitespace, comments, processing
+instructions, and declarations seen in the internal subset. The declarations
+will be there whether or not they have been processed by another handler
+(except for unparsed entities processed by the Unparsed handler). However,
+comments and processing instructions will not appear if they've been processed
+by their respective handlers.
+
+## \* DoctypeFin (Parser)
+
+This handler is called after parsing of the DOCTYPE declaration has finished,
+including any internal or external DTD declarations.
+
+## XMLDecl (Expat, Version, Encoding, Standalone)
+
+This handler is called for xml declarations. Version is a string containing
+the version. Encoding is either undefined or contains an encoding string.
+Standalone will be either true, false, or undefined if the standalone attribute
+is yes, no, or not made respectively.
+
+# STYLES
+
+## Debug
+
+This just prints out the document in outline form. Nothing special is
+returned by parse.
+
+## Subs
+
+Each time an element starts, a sub by that name in the package specified
+by the Pkg option is called with the same parameters that the Start
+handler gets called with.
+
+Each time an element ends, a sub with that name appended with an underscore
+("\_"), is called with the same parameters that the End handler gets called
+with.
+
+Nothing special is returned by parse.
+
+## Tree
+
+Parse will return a parse tree for the document. Each node in the tree
+takes the form of a tag, content pair. Text nodes are represented with
+a pseudo-tag of "0" and the string that is their content. For elements,
+the content is an array reference. The first item in the array is a
+(possibly empty) hash reference containing attributes. The remainder of
+the array is a sequence of tag-content pairs representing the content
+of the element.
+
+So for example the result of parsing:
+
+ <foo><head id="a">Hello <em>there</em></head><bar>Howdy<ref/></bar>do</foo>
+
+would be:
+
+ Tag Content
+ ==================================================================
+ [foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]],
+ bar, [ {}, 0, "Howdy", ref, [{}]],
+ 0, "do"
+ ]
+ ]
+
+The root document "foo", has 3 children: a "head" element, a "bar"
+element and the text "do". After the empty attribute hash, these are
+represented in it's contents by 3 tag-content pairs.
+
+## Objects
+
+This is similar to the Tree style, except that a hash object is created for
+each element. The corresponding object will be in the class whose name
+is created by appending "::" and the element name to the package set with
+the Pkg option. Non-markup text will be in the ::Characters class. The
+contents of the corresponding object will be in an anonymous array that
+is the value of the Kids property for that object.
+
+## Stream
+
+This style also uses the Pkg package. If none of the subs that this
+style looks for is there, then the effect of parsing with this style is
+to print a canonical copy of the document without comments or declarations.
+All the subs receive as their 1st parameter the Expat instance for the
+document they're parsing.
+
+It looks for the following routines:
+
+- StartDocument
+
+ Called at the start of the parse .
+
+- StartTag
+
+ Called for every start tag with a second parameter of the element type.
The $\_
+ variable will contain a copy of the tag and the %\_ variable will contain
+ attribute values supplied for that element.
+
+- EndTag
+
+ Called for every end tag with a second parameter of the element type. The
$\_
+ variable will contain a copy of the end tag.
+
+- Text
+
+ Called just before start or end tags with accumulated non-markup text in
+ the $\_ variable.
+
+- PI
+
+ Called for processing instructions. The $\_ variable will contain a copy of
+ the PI and the target and data are sent as 2nd and 3rd parameters
+ respectively.
+
+- EndDocument
+
+ Called at conclusion of the parse.
+
+# ENCODINGS
+
+XML documents may be encoded in character sets other than Unicode as
+long as they may be mapped into the Unicode character set. Expat has
+further restrictions on encodings. Read the xmlparse.h header file in
+the expat distribution to see details on these restrictions.
+
+Expat has built-in encodings for: `UTF-8`, `ISO-8859-1`, `UTF-16`, and
+`US-ASCII`. Encodings are set either through the XML declaration
+encoding attribute or through the ProtocolEncoding option to XML::Parser
+or XML::Parser::Expat.
+
+For encodings other than the built-ins, expat calls the function
+load\_encoding in the Expat package with the encoding name. This function
+looks for a file in the path list @XML::Parser::Expat::Encoding\_Path, that
+matches the lower-cased name with a '.enc' extension. The first one it
+finds, it loads.
+
+If you wish to build your own encoding maps, check out the XML::Encoding
+module from CPAN.
+
+# AUTHORS
+
+Larry Wall <`[email protected]`> wrote version 1.0.
+
+Clark Cooper <`[email protected]`> picked up support, changed the API
+for this version (2.x), provided documentation,
+and added some standard package features.
+
+Matt Sergeant <`[email protected]`> is now maintaining XML::Parser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/XML-Parser-2.46/inc/Devel/CheckLib.pm
new/XML-Parser-2.47/inc/Devel/CheckLib.pm
--- old/XML-Parser-2.46/inc/Devel/CheckLib.pm 2016-04-13 06:38:16.000000000
+0200
+++ new/XML-Parser-2.47/inc/Devel/CheckLib.pm 2023-12-28 20:47:02.000000000
+0100
@@ -2,24 +2,24 @@
package Devel::CheckLib;
-use 5.00405; #postfix foreach
+use 5.00405; #postfix foreach
use strict;
use vars qw($VERSION @ISA @EXPORT);
-$VERSION = '0.99';
+$VERSION = '1.16';
use Config qw(%Config);
-use Text::ParseWords 'quotewords';
+use Text::ParseWords qw(quotewords shellwords);
use File::Spec;
use File::Temp;
require Exporter;
-@ISA = qw(Exporter);
+@ISA = qw(Exporter);
@EXPORT = qw(assert_lib check_lib_or_exit check_lib);
# localising prevents the warningness leaking out of this module
local $^W = 1; # use warnings is a 5.6-ism
-_findcc(); # bomb out early if there's no compiler
+_findcc(); # bomb out early if there's no compiler
=head1 NAME
@@ -54,7 +54,7 @@
It works by trying to compile some code - which defaults to this:
- int main(void) { return 0; }
+ int main(int argc, char *argv[]) { return 0; }
and linking it to the specified libraries. If something pops out the end
which looks executable, it gets executed, and if main() returns 0 we know
@@ -109,7 +109,7 @@
=item LIBS
-a C<ExtUtils::MakeMaker>-style space-seperated list of
+a C<ExtUtils::MakeMaker>-style space-separated list of
libraries (each preceded by '-l') and directories (preceded by '-L').
This can also be supplied on the command-line.
@@ -137,11 +137,32 @@
=item INC
-a C<ExtUtils::MakeMaker>-style space-seperated list of
+a C<ExtUtils::MakeMaker>-style space-separated list of
incpaths, each preceded by '-I'.
This can also be supplied on the command-line.
+=item ccflags
+
+Extra flags to pass to the compiler.
+
+=item ldflags
+
+Extra flags to pass to the linker.
+
+=item analyze_binary
+
+a callback function that will be invoked in order to perform custom
+analysis of the generated binary. The callback arguments are the
+library name and the path to the binary just compiled.
+
+It is possible to use this callback, for instance, to inspect the
+binary for further dependencies.
+
+=item not_execute
+
+Do not try to execute generated binary. Only check that compilation has not
failed.
+
=back
=head2 check_lib_or_exit
@@ -166,7 +187,7 @@
sub check_lib_or_exit {
eval 'assert_lib(@_)';
- if ($@) {
+ if($@) {
warn $@;
exit;
}
@@ -177,215 +198,301 @@
return $@ ? 0 : 1;
}
+# borrowed from Text::ParseWords
+sub _parse_line {
+ my($delimiter, $keep, $line) = @_;
+ my($word, @pieces);
+
+ no warnings 'uninitialized'; # we will be testing undef strings
+
+ while (length($line)) {
+ # This pattern is optimised to be stack conservative on older perls.
+ # Do not refactor without being careful and testing it on very long
strings.
+ # See Perl bug #42980 for an example of a stack busting input.
+ $line =~ s/^
+ (?:
+ # double quoted string
+ (") # $quote
+ ((?>[^\\"]*(?:\\.[^\\"]*)*))" # $quoted
+ | # --OR--
+ # singe quoted string
+ (') # $quote
+ ((?>[^\\']*(?:\\.[^\\']*)*))' # $quoted
+ | # --OR--
+ # unquoted string
+ ( # $unquoted
+ (?:\\.|[^\\"'])*?
+ )
+ # followed by
+ ( # $delim
+ \Z(?!\n) # EOL
+ | # --OR--
+ (?-x:$delimiter) # delimiter
+ | # --OR--
+ (?!^)(?=["']) # a quote
+ )
+ )//xs or return; # extended layout
+ my ($quote, $quoted, $unquoted, $delim) = (($1 ? ($1,$2) : ($3,$4)),
$5, $6);
+
+ return() unless( defined($quote) || length($unquoted) ||
length($delim));
+
+ if ($keep) {
+ $quoted = "$quote$quoted$quote";
+ }
+ else {
+ $unquoted =~ s/\\(.)/$1/sg;
+ if (defined $quote) {
+ $quoted =~ s/\\(.)/$1/sg if ($quote eq '"');
+ }
+ }
+ $word .= substr($line, 0, 0); # leave results tainted
+ $word .= defined $quote ? $quoted : $unquoted;
+
+ if (length($delim)) {
+ push(@pieces, $word);
+ push(@pieces, $delim) if ($keep eq 'delimiters');
+ undef $word;
+ }
+ if (!length($line)) {
+ push(@pieces, $word);
+ }
+ }
+ return(@pieces);
+}
+
+sub _parsewords {
+ return shellwords @_ if $^O ne 'MSWin32';
+ # for Win32, take off "" but leave \
+ map { my $s=$_; $s =~ s/^"(.*)"$/$1/; $s } grep defined && length,
quotewords '\s+', 1, @_;
+}
+
+sub _compile_cmd {
+ my ($Config_cc, $cc, $cfile, $exefile, $incpaths, $ld, $Config_libs, $lib,
$libpaths) = @_;
+ my @sys_cmd = @$cc;
+ if ( $Config_cc eq 'cl' ) { # Microsoft compiler
+ # this is horribly sensitive to the order of arguments
+ push @sys_cmd,
+ $cfile,
+ (defined $lib ? "${lib}.lib" : ()),
+ "/Fe$exefile",
+ (map '/I'.$_, @$incpaths),
+ "/link",
+ @$ld,
+ _parsewords($Config_libs),
+ (defined $lib ? map '/libpath:'.$_, @$libpaths : ()),
+ ;
+ } elsif($Config_cc =~ /bcc32(\.exe)?/) { # Borland
+ push @sys_cmd,
+ @$ld,
+ (map "-I$_", @$incpaths),
+ "-o$exefile",
+ (defined $lib ? ((map "-L$_", @$libpaths), "-l$lib") : ()),
+ $cfile,
+ ;
+ } else { # Unix-ish: gcc, Sun, AIX (gcc, cc), ...
+ push @sys_cmd,
+ (map "-I$_", @$incpaths),
+ $cfile,
+ (!defined $lib ? () : (
+ (map "-L$_", @$libpaths),
+ ($^O eq 'darwin' ? (map { "-Wl,-rpath,$_" } @$libpaths) : ()),
+ "-l$lib",
+ )),
+ @$ld,
+ "-o", $exefile,
+ ;
+ }
+ @sys_cmd;
+}
+
+sub _make_cfile {
+ my ($use_headers, $function, $debug) = @_;
+ my $code = '';
+ $code .= qq{#include <$_>\n} for @$use_headers;
+ $code .= "int main(int argc, char *argv[]) { ".($function || 'return
0;')." }\n";
+ if ($debug) {
+ (my $c = $code) =~ s:^:# :gm;
+ warn "# Code:\n$c\n";
+ }
+ my ($ch, $cfile) = File::Temp::tempfile(
+ 'assertlibXXXXXXXX', SUFFIX => '.c'
+ );
+ print $ch $code;
+ close $ch;
+ (my $ofile = $cfile) =~ s/\.c$/$Config{_o}/;
+ ($cfile, $ofile);
+}
+
sub assert_lib {
my %args = @_;
- my ( @libs, @libpaths, @headers, @incpaths );
+ $args{$_} = [$args{$_}]
+ for grep $args{$_} && !ref($args{$_}), qw(lib libpath header incpath);
+ my @libs = @{$args{lib} || []};
+ my @libpaths = @{$args{libpath} || []};
+ my @headers = @{$args{header} || []};
+ my @incpaths = @{$args{incpath} || []};
+ my $analyze_binary = $args{analyze_binary};
+ my $execute = !$args{not_execute};
- # FIXME: these four just SCREAM "refactor" at me
- @libs = ( ref( $args{lib} ) ? @{ $args{lib} } : $args{lib} )
- if $args{lib};
- @libpaths = ( ref( $args{libpath} ) ? @{ $args{libpath} } : $args{libpath}
)
- if $args{libpath};
- @headers = ( ref( $args{header} ) ? @{ $args{header} } : $args{header} )
- if $args{header};
- @incpaths = ( ref( $args{incpath} ) ? @{ $args{incpath} } : $args{incpath}
)
- if $args{incpath};
+ my @argv = @ARGV;
+ push @argv, _parse_line('\s+', 0, $ENV{PERL_MM_OPT}||'');
# work-a-like for Makefile.PL's LIBS and INC arguments
# if given as command-line argument, append to %args
- for my $arg (@ARGV) {
+ for my $arg (@argv) {
for my $mm_attr_key (qw(LIBS INC)) {
- if ( my ($mm_attr_value) = $arg =~ /\A $mm_attr_key = (.*)/x ) {
-
- # it is tempting to put some \s* into the expression, but the
- # MM command-line parser only accepts LIBS etc. followed by =,
- # so we should not be any more lenient with whitespace than
that
+ if (my ($mm_attr_value) = $arg =~ /\A $mm_attr_key = (.*)/x) {
+ # it is tempting to put some \s* into the expression, but the
+ # MM command-line parser only accepts LIBS etc. followed by =,
+ # so we should not be any more lenient with whitespace than that
$args{$mm_attr_key} .= " $mm_attr_value";
}
}
}
- # using special form of split to trim whitespace
- if ( defined( $args{LIBS} ) ) {
- foreach my $arg ( split( ' ', $args{LIBS} ) ) {
- die("LIBS argument badly-formed: $arg\n") unless ( $arg =~
/^-[lLR]/ );
- push @{ $arg =~ /^-l/ ? \@libs : \@libpaths }, substr( $arg, 2 );
+ if(defined($args{LIBS})) {
+ foreach my $arg (_parsewords($args{LIBS})) {
+ die("LIBS argument badly-formed: $arg\n") unless($arg =~
/^-[lLR]/);
+ push @{$arg =~ /^-l/ ? \@libs : \@libpaths}, substr($arg, 2);
}
}
- if ( defined( $args{INC} ) ) {
- foreach my $arg ( split( ' ', $args{INC} ) ) {
- die("INC argument badly-formed: $arg\n") unless ( $arg =~ /^-I/ );
- push @incpaths, substr( $arg, 2 );
+ if(defined($args{INC})) {
+ foreach my $arg (_parsewords($args{INC})) {
+ die("INC argument badly-formed: $arg\n") unless($arg =~ /^-I/);
+ push @incpaths, substr($arg, 2);
}
}
- my ( $cc, $ld ) = _findcc();
+ my ($cc, $ld) = _findcc($args{debug}, $args{ccflags}, $args{ldflags});
my @missing;
my @wrongresult;
+ my @wronganalysis;
my @use_headers;
# first figure out which headers we can't find ...
for my $header (@headers) {
push @use_headers, $header;
- my ( $ch, $cfile ) = File::Temp::tempfile( 'assertlibXXXXXXXX', SUFFIX
=> '.c' );
- my $ofile = $cfile;
- $ofile =~ s/\.c$/$Config{_o}/;
- print $ch qq{#include <$_>\n} for @use_headers;
- print $ch qq{int main(void) { return 0; }\n};
- close($ch);
- my $exefile = File::Temp::mktemp('assertlibXXXXXXXX') . $Config{_exe};
- my @sys_cmd;
-
- # FIXME: re-factor - almost identical code later when linking
- if ( $Config{cc} eq 'cl' ) { # Microsoft compiler
- require Win32;
- @sys_cmd = (
- @$cc,
- $cfile,
- "/Fe$exefile",
- ( map { '/I' . Win32::GetShortPathName($_) } @incpaths ),
- "/link",
- @$ld
- );
- }
- elsif ( $Config{cc} =~ /bcc32(\.exe)?/ ) { # Borland
- @sys_cmd = (
- @$cc,
- @$ld,
- ( map { "-I$_" } @incpaths ),
- "-o$exefile",
- $cfile
- );
- }
- else { # Unix-ish: gcc, Sun,
AIX (gcc, cc), ...
- @sys_cmd = (
- @$cc,
- @$ld,
- $cfile,
- ( map { "-I$_" } @incpaths ),
- "-o", "$exefile"
- );
- }
+ my ($cfile, $ofile) = _make_cfile(\@use_headers, '', $args{debug});
+ my $exefile = File::Temp::mktemp( 'assertlibXXXXXXXX' ) .
$Config{_exe};
+ my @sys_cmd = _compile_cmd($Config{cc}, $cc, $cfile, $exefile,
\@incpaths, $ld, $Config{libs});
warn "# @sys_cmd\n" if $args{debug};
my $rv = $args{debug} ? system(@sys_cmd) : _quiet_system(@sys_cmd);
- push @missing, $header if $rv != 0 || !-x $exefile;
+ push @missing, $header if $rv != 0 || ! -f $exefile;
_cleanup_exe($exefile);
- unlink $ofile if -e $ofile;
unlink $cfile;
}
# now do each library in turn with headers
- my ( $ch, $cfile ) = File::Temp::tempfile( 'assertlibXXXXXXXX', SUFFIX =>
'.c' );
- my $ofile = $cfile;
- $ofile =~ s/\.c$/$Config{_o}/;
- print $ch qq{#include <$_>\n} foreach (@headers);
- print $ch "int main(void) { " . ( $args{function} || 'return 0;' ) . "
}\n";
- close($ch);
- for my $lib (@libs) {
- my $exefile = File::Temp::mktemp('assertlibXXXXXXXX') . $Config{_exe};
- my @sys_cmd;
- if ( $Config{cc} eq 'cl' ) { # Microsoft compiler
- require Win32;
- my @libpath = map { q{/libpath:} . Win32::GetShortPathName($_) }
@libpaths;
-
- # this is horribly sensitive to the order of arguments
- @sys_cmd = (
- @$cc,
- $cfile,
- "${lib}.lib",
- "/Fe$exefile",
- ( map { '/I' . Win32::GetShortPathName($_) } @incpaths ),
- "/link",
- @$ld,
- ( map { '/libpath:' . Win32::GetShortPathName($_) } @libpaths
),
- );
- }
- elsif ( $Config{cc} eq 'CC/DECC' ) { # VMS
- }
- elsif ( $Config{cc} =~ /bcc32(\.exe)?/ ) { # Borland
- @sys_cmd = (
- @$cc,
- @$ld,
- "-o$exefile",
- ( map { "-I$_" } @incpaths ),
- ( map { "-L$_" } @libpaths ),
- "-l$lib",
- $cfile
- );
- }
- else { # Unix-ish
- # gcc, Sun, AIX (gcc, cc)
- @sys_cmd = (
- @$cc,
- @$ld,
- $cfile,
- "-o", "$exefile",
- ( map { "-I$_" } @incpaths ),
- ( map { "-L$_" } @libpaths ),
- "-l$lib",
- );
- }
+ my ($cfile, $ofile) = _make_cfile(\@use_headers, @args{qw(function
debug)});
+ for my $lib ( @libs ) {
+ last if $Config{cc} eq 'CC/DECC'; # VMS
+ my $exefile = File::Temp::mktemp( 'assertlibXXXXXXXX' ) .
$Config{_exe};
+ my @sys_cmd = _compile_cmd($Config{cc}, $cc, $cfile, $exefile,
\@incpaths, $ld, $Config{libs}, $lib, \@libpaths);
warn "# @sys_cmd\n" if $args{debug};
+ local $ENV{LD_RUN_PATH} = join(":", grep $_, @libpaths,
$ENV{LD_RUN_PATH}) unless $^O eq 'MSWin32' or $^O eq 'darwin';
+ local $ENV{PATH} = join(";", @libpaths).";".$ENV{PATH} if $^O eq
'MSWin32';
my $rv = $args{debug} ? system(@sys_cmd) : _quiet_system(@sys_cmd);
- push @missing, $lib if $rv != 0 || !-x $exefile;
- my $absexefile = File::Spec->rel2abs($exefile);
- $absexefile = '"' . $absexefile . '"' if $absexefile =~ m/\s/;
- push @wrongresult, $lib if $rv == 0 && -x $exefile &&
system($absexefile) != 0;
- unlink $ofile if -e $ofile;
+ if ($rv != 0 || ! -f $exefile) {
+ push @missing, $lib;
+ }
+ else {
+ chmod 0755, $exefile;
+ my $absexefile = File::Spec->rel2abs($exefile);
+ $absexefile = '"'.$absexefile.'"' if $absexefile =~ m/\s/;
+ warn "# Execute($execute): $absexefile\n" if $args{debug};
+ if ($execute) {
+ my $retval = system($absexefile);
+ warn "# return value: $retval\n" if $args{debug};
+ push @wrongresult, $lib if $retval != 0;
+ }
+ push @wronganalysis, $lib
+ if $analyze_binary and !$analyze_binary->($lib, $exefile);
+ }
_cleanup_exe($exefile);
}
unlink $cfile;
- my $miss_string = join( q{, }, map { qq{'$_'} } @missing );
+ my $miss_string = join( q{, }, map qq{'$_'}, @missing );
die("Can't link/include C library $miss_string, aborting.\n") if @missing;
- my $wrong_string = join( q{, }, map { qq{'$_'} } @wrongresult );
+ my $wrong_string = join( q{, }, map qq{'$_'}, @wrongresult);
die("wrong result: $wrong_string\n") if @wrongresult;
+ my $analysis_string = join(q{, }, map qq{'$_'}, @wronganalysis );
+ die("wrong analysis: $analysis_string") if @wronganalysis;
}
sub _cleanup_exe {
my ($exefile) = @_;
my $ofile = $exefile;
$ofile =~ s/$Config{_exe}$/$Config{_o}/;
- unlink $exefile if -f $exefile;
- unlink $ofile if -f $ofile;
- unlink "$exefile\.manifest" if -f "$exefile\.manifest";
+ # List of files to remove
+ my @rmfiles;
+ push @rmfiles, $exefile, $ofile, "$exefile\.manifest";
if ( $Config{cc} eq 'cl' ) {
-
# MSVC also creates foo.ilk and foo.pdb
my $ilkfile = $exefile;
$ilkfile =~ s/$Config{_exe}$/.ilk/;
my $pdbfile = $exefile;
$pdbfile =~ s/$Config{_exe}$/.pdb/;
- unlink $ilkfile if -f $ilkfile;
- unlink $pdbfile if -f $pdbfile;
+ push @rmfiles, $ilkfile, $pdbfile;
}
- return;
+ foreach (grep -f, @rmfiles) {
+ unlink $_ or warn "Could not remove $_: $!";
+ }
+ return
}
# return ($cc, $ld)
# where $cc is an array ref of compiler name, compiler flags
# where $ld is an array ref of linker flags
sub _findcc {
-
+ my ($debug, $user_ccflags, $user_ldflags) = @_;
# Need to use $keep=1 to work with MSWin32 backslashes and quotes
- my $Config_ccflags = $Config{ccflags}; # use copy so ASPerl will compile
+ my $Config_ccflags = $Config{ccflags}; # use copy so ASPerl will compile
+ $Config_ccflags =~ s:-O\S*::; # stop GCC optimising away test code
my @Config_ldflags = ();
- for my $config_val ( @Config{qw(ldflags perllibs)} ) {
+ for my $config_val ( @Config{qw(ldflags)} ){
push @Config_ldflags, $config_val if ( $config_val =~ /\S/ );
}
- my @ccflags = grep { length } quotewords( '\s+', 1, $Config_ccflags || ''
);
- my @ldflags = grep { length } quotewords( '\s+', 1, @Config_ldflags );
- my @paths = split( /$Config{path_sep}/, $ENV{PATH} );
- my @cc = split( /\s+/, $Config{cc} );
- return ( [ @cc, @ccflags ], \@ldflags ) if -x $cc[0];
+ my @ccflags = grep { length } _parsewords($Config_ccflags||'',
$user_ccflags||'');
+ my @ldflags = grep { length && $_ !~ m/^-Wl/ }
_parsewords(@Config_ldflags, $user_ldflags||'');
+ my @paths = split(/$Config{path_sep}/, $ENV{PATH});
+ my @cc = _parsewords($Config{cc});
+ if (check_compiler ($cc[0], $debug)) {
+ return ( [ @cc, @ccflags ], \@ldflags );
+ }
+ # Find the extension for executables.
+ my $exe = $Config{_exe};
+ if ($^O eq 'cygwin') {
+ $exe = '';
+ }
foreach my $path (@paths) {
- my $compiler = File::Spec->catfile( $path, $cc[0] ) . $Config{_exe};
- return ( [ $compiler, @cc[ 1 .. $#cc ], @ccflags ], \@ldflags )
- if -x $compiler;
+ # Look for "$path/$cc[0].exe"
+ my $compiler = File::Spec->catfile($path, $cc[0]) . $exe;
+ if (check_compiler ($compiler, $debug)) {
+ return ([ $compiler, @cc[1 .. $#cc], @ccflags ], \@ldflags)
+ }
+ next if ! $exe;
+ # Look for "$path/$cc[0]" without the .exe, if necessary.
+ $compiler = File::Spec->catfile($path, $cc[0]);
+ if (check_compiler ($compiler, $debug)) {
+ return ([ $compiler, @cc[1 .. $#cc], @ccflags ], \@ldflags)
+ }
+ }
+ die("Couldn't find your C compiler.\n");
+}
+
+sub check_compiler
+{
+ my ($compiler, $debug) = @_;
+ if (-f $compiler && -x $compiler) {
+ warn "# Compiler seems to be $compiler\n" if $debug;
+ return 1;
}
- die("Couldn't find your C compiler\n");
+ warn "# Compiler was not $compiler\n" if $debug;
+ return '';
}
+
# code substantially borrowed from IPC::Run3
sub _quiet_system {
my (@cmd) = @_;
@@ -395,24 +502,24 @@
local *STDERR_SAVE;
open STDOUT_SAVE, ">&STDOUT" or die "CheckLib: $! saving STDOUT";
open STDERR_SAVE, ">&STDERR" or die "CheckLib: $! saving STDERR";
-
+
# redirect to nowhere
local *DEV_NULL;
- open DEV_NULL, ">" . File::Spec->devnull
- or die "CheckLib: $! opening handle to null device";
+ open DEV_NULL, ">" . File::Spec->devnull
+ or die "CheckLib: $! opening handle to null device";
open STDOUT, ">&" . fileno DEV_NULL
- or die "CheckLib: $! redirecting STDOUT to null handle";
+ or die "CheckLib: $! redirecting STDOUT to null handle";
open STDERR, ">&" . fileno DEV_NULL
- or die "CheckLib: $! redirecting STDERR to null handle";
+ or die "CheckLib: $! redirecting STDERR to null handle";
# run system command
my $rv = system(@cmd);
# restore handles
open STDOUT, ">&" . fileno STDOUT_SAVE
- or die "CheckLib: $! restoring STDOUT handle";
+ or die "CheckLib: $! restoring STDOUT handle";
open STDERR, ">&" . fileno STDERR_SAVE
- or die "CheckLib: $! restoring STDERR handle";
+ or die "CheckLib: $! restoring STDERR handle";
return $rv;
}
@@ -422,7 +529,7 @@
You must have a C compiler installed. We check for C<$Config{cc}>,
both literally as it is in Config.pm and also in the $PATH.
-It has been tested with varying degrees on rigourousness on:
+It has been tested with varying degrees of rigorousness on:
=over
++++++ cpanspec.yml ++++++
--- /var/tmp/diff_new_pack.97eY9E/_old 2024-01-05 21:39:42.242529698 +0100
+++ /var/tmp/diff_new_pack.97eY9E/_new 2024-01-05 21:39:42.242529698 +0100
@@ -8,7 +8,7 @@
# - source1
# - source2
patches:
- XML-Parser-2.40.diff:
+ XML-Parser-2.40.diff: -p0
# foo.patch: -p1
# bar.patch:
preamble: |-