1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
Description: The Debian way of handling ParserDetails.ini
Use update-perl-sax-parsers(8) instead.
.
* SAX.pm: the meat of the modifications
+ add XML::SAX->save_parsers_debian(), used by update-perl-sax-parsers
+ disable XML::SAX->save_parsers() with a helpful error message for
users trying to install SAX parsers manually from CPAN
* Makefile.PL: Don't try to modify ParserDetails.ini when building the package
* t/01known.t, t/99cleanup.t: Skip tests related to XML::SAX->save_parsers()
Author: Originally by Ardo van Rangelrooij <ardo@debian.org>
Author: Cleanups and quilt conversion by Niko Tyni <ntyni@iki.fi>
Author: Ansgar Burchardt <ansgar@43-1.org> (XML::SAX::Debian)
--- a/t/01known.t
+++ b/t/01known.t
@@ -1,6 +1,9 @@
-use Test;
+use Test::More;
BEGIN { plan tests => 3 }
+SKIP: {
+skip 'Tests skipped due to Debian modifications', 3;
use XML::SAX;
ok(XML::SAX->save_parsers);
ok(XML::SAX->load_parsers);
ok(@{XML::SAX->parsers}, 0);
+}
--- a/t/99cleanup.t
+++ b/t/99cleanup.t
@@ -1,7 +1,7 @@
use Test;
BEGIN { plan tests => 1 }
use File::Spec;
-ok(unlink(
+skip('Test skipped due to Debian modifications', unlink(
File::Spec->catdir(qw(blib lib XML SAX ParserDetails.ini))),
1,
'delete ParserDetails.ini'
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -17,6 +17,10 @@
package MY;
my $script = shift->SUPER::install(@_);
+ print STDERR "Debian build: won't modify ParserDetails.ini when installing.\n";
+ print STDERR " (use update-perl-sax-parsers(8) instead.)\n";
+ return $script;
+
# Only modify existing ParserDetails.ini if user agrees
my $write_ini_ok = 0;
--- a/lib/XML/SAX.pm
+++ b/lib/XML/SAX.pm
@@ -179,6 +179,15 @@
sub save_parsers {
my $class = shift;
+ ### DEBIAN MODIFICATION
+ print "\n";
+ print "Please use 'update-perl-sax-parsers(8) to register this parser.'\n";
+ print "See /usr/share/doc/libxml-sax-perl/README.Debian.gz for more info.\n";
+ print "\n";
+
+ return $class; # rest of the function is disabled on Debian.
+ ### END DEBIAN MODIFICATION
+
# get directory from wherever XML::SAX is installed
my $dir = $INC{'XML/SAX.pm'};
$dir = dirname($dir);
@@ -212,6 +221,10 @@
warn(@_) unless $ENV{HARNESS_ACTIVE};
}
+sub _is_vendor_supplied {
+ 1;
+}
+
1;
__END__
--- /dev/null
+++ b/lib/XML/SAX/Debian.pm
@@ -0,0 +1,47 @@
+package XML::SAX::Debian;
+
+use strict;
+use warnings;
+
+use base "XML::SAX";
+
+use File::Spec ();
+
+sub save_parsers_debian {
+ my $class = shift;
+ my ($parser_module,$directory, $priority) = @_;
+
+ # add parser
+ {
+ # We do not want load_parsers to complain.
+ local $ENV{HARNESS_ACTIVE} = 1;
+ $class->load_parsers("/nonexistent");
+ }
+ $class->add_parser($parser_module);
+
+ # get parser's ParserDetails file
+ my $file = $parser_module;
+ $file = "${priority}-$file" if $priority != 0;
+ $file = File::Spec->catfile($directory, $file);
+ chmod 0644, $file;
+ unlink($file);
+
+ open(my $fh, ">$file") ||
+ die "Cannot write to $file: $!";
+
+ foreach my $p (@{ $class->parsers }) {
+ print $fh "[$p->{Name}]\n";
+ foreach my $key (keys %{$p->{Features}}) {
+ print $fh "$key = $p->{Features}{$key}\n";
+ }
+ print $fh "\n";
+ }
+
+ print $fh "\n";
+
+ close $fh;
+
+ return $class;
+}
+
+1;
|