blob: 0a3b4113d5f6abc7df1d4b1b67420655727dcc2c (
plain)
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
|
#!/usr/bin/perl -w
use strict;
# Script to hack around xsl:import paths; ideally, the system catalogs are used.
# Let every OS define its own manipulations.
# Uses the Perl $^O values to identify the current OS.
#
# Define filter_$^O to do substitutions, will be called for every line of
# every .xsl file.
sub filter_freebsd
{
s{"http://docbook.sourceforge.net/release/xsl/current/}
{"/usr/local/share/xsl/docbook/};
s{"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"}
{"/usr/local/share/xml/docbook/4.2/docbookx.dtd"};
}
sub filter_linux
{
# SUSE 10 with extra pkgs
-d "/usr/share/xml/docbook/stylesheet/nwalsh/1.71.1/" &&
s{"http://docbook.sourceforge.net/release/xsl/current/}
{"/usr/share/xml/docbook/stylesheet/nwalsh/1.71.1/};
# Ubuntu/Debian with standard docbook-xsl pkgs
-d "/usr/share/xml/docbook/stylesheet/docbook-xsl/" &&
s{"http://docbook.sourceforge.net/release/xsl/current/}
{"/usr/share/xml/docbook/stylesheet/docbook-xsl/};
s{"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"}
{"/usr/share/xml/docbook/schema/dtd/4.2/docbookx.dtd"};
}
sub filter_darwin
{
# NB - this uses the Mac Ports installations
s{"http://docbook.sourceforge.net/release/xsl/current/}
{"/opt/local/share/xsl/docbook-xsl/};
s{"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"}
{"/opt/local/share/xml/docbook/4.2/docbookx.dtd"};
}
# Define OS filters above.
my $os_filter;
$os_filter = $main::{"filter_$^O"} if exists $main::{"filter_$^O"};
unless (defined $os_filter)
{
print "No changes defined for your OS ($^O).\n";
exit 0;
}
for my $fn (<*.xsl>, <*.xml>)
{
my $orig = "$fn.orig";
rename($fn, $orig) or die "Failed to rename($fn, $orig): $!\n";
# Most portable is two-argument form, and none of our filenames are
# untrusted or contain whitespace.
open(OLD, "< $orig") or die "Failed to read-open($orig): $!\n";
open(NEW, "> $fn") or die "Failed to write-open($fn): $!\n";
while (<OLD>)
{
$os_filter->();
print NEW $_ or die "Write to \"$fn\" failed: $!\n";
}
close(NEW) or die "Failed to close($fn) after writing: $!\n";
close(OLD);
}
|