getservby*() calls fail on Windows NT
[p5sagit/p5-mst-13.2.git] / win32 / config_h.PL
CommitLineData
137443ea 1#
2use Config;
3use File::Compare qw(compare);
4use File::Copy qw(copy);
5my $name = $0;
6$name =~ s#^(.*)\.PL$#../$1.SH#;
7open(SH,"<$name") || die "Cannot open $name:$!";
8while (<SH>)
9 {
10 last if /^sed/;
11 }
12($term,$file,$pat) = /^sed\s+<<(\S+)\s+>(\S+)\s+(.*)$/;
13
14my $str = "sub munge\n{\n";
15
16while ($pat =~ s/-e\s+'([^']*)'\s*//)
17 {
18 my $e = $1;
19 $e =~ s/\\([\(\)])/$1/g;
20 $e =~ s/\\(\d)/\$$1/g;
21 $str .= "$e;\n";
22 }
23$str .= "}\n";
24
25eval $str;
26
27die "$str:$@" if $@;
28
29open(H,">$file.new") || die "Cannot open $file.new:$!";
30while (<SH>)
31 {
32 last if /^$term$/o;
33 s/\$([\w_]+)/Config($1)/eg;
34 s/`([^\`]*)`/BackTick($1)/eg;
35 munge();
36 s/\\\$/\$/g;
37 s#/[ *\*]*\*/#/**/#;
c90c0ff4 38 if (/^\s*#define\s+ARCHLIB_EXP/)
137443ea 39 {
c90c0ff4 40 $_ = "#define ARCHLIB_EXP (win32PerlLibPath())\t/**/\n";
137443ea 41 }
42 print H;
43 }
44print H "#include <win32.h>
c90c0ff4 45#ifndef DEBUGGING
137443ea 46#define DEBUGGING
c90c0ff4 47#endif
137443ea 48";
49close(H);
50close(SH);
51
52
53chmod(0666,"../lib/CORE/config.h");
54copy("$file.new","../lib/CORE/config.h") || die "Cannot copy:$!";
55chmod(0444,"../lib/CORE/config.h");
56
57if (compare("$file.new",$file))
58 {
59 warn "$file has changed\n";
60 chmod(0666,$file);
61 unlink($file);
62 rename("$file.new",$file);
63 chmod(0444,$file);
64 exit(1);
65 }
66
67sub Config
68{
69 my $var = shift;
70 my $val = $Config{$var};
71 $val = 'undef' unless defined $val;
72 $val =~ s/\\/\\\\/g;
73 return $val;
74}
75
76sub BackTick
77{
78 my $cmd = shift;
79 if ($cmd =~ /^echo\s+(.*?)\s*\|\s+sed\s+'(.*)'\s*$/)
80 {
81 local ($data,$pat) = ($1,$2);
82 $data =~ s/\s+/ /g;
83 eval "\$data =~ $pat";
84 return $data;
85 }
86 else
87 {
88 die "Cannot handle \`$cmd\`";
89 }
90 return $cmd;
91}