6
6
use FindBin qw( $Bin ) ;
7
7
8
8
use File::Path qw( mkpath ) ;
9
- use File::Slurp qw( edit_file read_file ) ;
10
- use File::Which qw( which ) ;
11
9
12
10
sub main {
13
11
my $target = shift || " $Bin /.." ;
14
12
15
13
my @translators = qw ( lowdown pandoc ) ;
16
14
my $translator ;
17
15
foreach my $p (@translators ) {
18
- if ( defined which ($p ) ) {
16
+ if ( _which ($p ) ) {
19
17
$translator = $p ;
20
18
last ;
21
19
}
@@ -32,6 +30,14 @@ sub main {
32
30
_make_man( $translator , $target , ' mmdblookup' , 1 );
33
31
}
34
32
33
+ sub _which {
34
+ my $program = shift ;
35
+ for my $path ( split /:/, $ENV {PATH } ) {
36
+ return 1 if -x " $path /$program " ;
37
+ }
38
+ return 0;
39
+ }
40
+
35
41
sub _make_man {
36
42
my $translator = shift ;
37
43
my $target = shift ;
@@ -53,7 +59,7 @@ sub _make_man {
53
59
' -M' , " section:$section " ,
54
60
$input ,
55
61
' -o' , $output ,
56
- ) == 0 or die " Failed to run pandoc: $! " ;
62
+ ) == 0 or die " Failed to run pandoc: $? " ;
57
63
_pandoc_postprocess($output );
58
64
}
59
65
elsif ( $translator eq ' lowdown' ) {
@@ -66,14 +72,21 @@ sub _make_man {
66
72
' -M' , " section:$section " ,
67
73
$input ,
68
74
' -o' , $output ,
69
- ) == 0 or die " Failed to run lowdown: $! " ;
75
+ ) == 0 or die " Failed to run lowdown: $? " ;
70
76
}
71
77
}
72
78
73
79
sub _make_lib_man_links {
74
80
my $target = shift ;
75
81
76
- my $header = read_file(" $Bin /../include/maxminddb.h" );
82
+ open my $header_fh , ' <' , " $Bin /../include/maxminddb.h"
83
+ or die " Failed to open header file: $! " ;
84
+ my $header = do { local $/ ; <$header_fh > };
85
+
86
+ die " Error reading file header file: $! " unless defined $header ;
87
+
88
+ close $header_fh or die " Failed to close header file: $! " ;
89
+
77
90
for my $proto ( $header =~ / ^ *extern.+?(MMDB_\w +)\( /gsm ) {
78
91
open my $fh , ' >' , " $target /man/man3/$proto .3"
79
92
or die " Failed to open file: $! " ;
@@ -88,13 +101,20 @@ sub _make_lib_man_links {
88
101
sub _pandoc_postprocess {
89
102
my $file = shift ;
90
103
91
- edit_file(
92
- sub {
93
- s / ^\. IP\n\. nf/ .IP "" 4\n .nf/ gm ;
94
- s / (Automatically generated by Pandoc)(.+)$/ $1 / m ;
95
- },
96
- $file ,
97
- );
104
+ open my $fh , ' <' , $file or die " Failed to open man file for reading: $! " ;
105
+ my @lines = <$fh >;
106
+ die " Error when reading man page: $! " if $! ;
107
+
108
+ close $fh or die " Failed to close file: $! " ;
109
+
110
+ for my $line (@lines ) {
111
+ $line =~ s / ^\. IP\n\. nf/ .IP "" 4\n .nf/ gm ;
112
+ $line =~ s / (Automatically generated by Pandoc)(.+)$/ $1 / m ;
113
+ }
114
+
115
+ open $fh , ' >' , $file or die " Failed to open file for writing: $! " ;
116
+ print $fh @lines or die " Failed to write to file: $! " ;
117
+ close $fh or die " Failed to close file: $! " ;
98
118
}
99
119
100
120
main(shift );
0 commit comments