diff options
Diffstat (limited to 'win32/config_h.PL')
-rw-r--r-- | win32/config_h.PL | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/win32/config_h.PL b/win32/config_h.PL new file mode 100644 index 0000000000..d266f6557f --- /dev/null +++ b/win32/config_h.PL @@ -0,0 +1,89 @@ +# +use Config; +use File::Compare qw(compare); +use File::Copy qw(copy); +my $name = $0; +$name =~ s#^(.*)\.PL$#../$1.SH#; +open(SH,"<$name") || die "Cannot open $name:$!"; +while (<SH>) + { + last if /^sed/; + } +($term,$file,$pat) = /^sed\s+<<(\S+)\s+>(\S+)\s+(.*)$/; + +my $str = "sub munge\n{\n"; + +while ($pat =~ s/-e\s+'([^']*)'\s*//) + { + my $e = $1; + $e =~ s/\\([\(\)])/$1/g; + $e =~ s/\\(\d)/\$$1/g; + $str .= "$e;\n"; + } +$str .= "}\n"; + +eval $str; + +die "$str:$@" if $@; + +open(H,">$file.new") || die "Cannot open $file.new:$!"; +while (<SH>) + { + last if /^$term$/o; + s/\$([\w_]+)/Config($1)/eg; + s/`([^\`]*)`/BackTick($1)/eg; + munge(); + s/\\\$/\$/g; + s#/[ *\*]*\*/#/**/#; + if (/#define\s+ARCHLIBEXP/) + { + } + print H; + } +print H "#include <win32.h> +#define ARCHLIBEXP (win32PerlLibPath()) +#define DEBUGGING +"; +close(H); +close(SH); + + +chmod(0666,"../lib/CORE/config.h"); +copy("$file.new","../lib/CORE/config.h") || die "Cannot copy:$!"; +chmod(0444,"../lib/CORE/config.h"); + +if (compare("$file.new",$file)) + { + warn "$file has changed\n"; + chmod(0666,$file); + unlink($file); + rename("$file.new",$file); + chmod(0444,$file); + exit(1); + } + +sub Config +{ + my $var = shift; + my $val = $Config{$var}; + $val = 'undef' unless defined $val; + $val =~ s/\\/\\\\/g; + return $val; +} + +sub BackTick +{ + my $cmd = shift; + if ($cmd =~ /^echo\s+(.*?)\s*\|\s+sed\s+'(.*)'\s*$/) + { + local ($data,$pat) = ($1,$2); + $data =~ s/\s+/ /g; + eval "\$data =~ $pat"; + return $data; + } + else + { + die "Cannot handle \`$cmd\`"; + } + return $cmd; +} |