File: parserdetails-debian

package info (click to toggle)
libxml-sax-perl 1.02%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 600 kB
  • sloc: perl: 2,374; xml: 121; sh: 79; makefile: 2
file content (129 lines) | stat: -rw-r--r-- 3,427 bytes parent folder | download
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;