diff options
Diffstat (limited to 'NetWare/config_h.PL')
-rw-r--r-- | NetWare/config_h.PL | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/NetWare/config_h.PL b/NetWare/config_h.PL new file mode 100644 index 0000000000..a7e5a0940c --- /dev/null +++ b/NetWare/config_h.PL @@ -0,0 +1,120 @@ +# +use Config; +use File::Compare qw(compare); +use File::Copy qw(copy); +my $OBJ = 1 if $Config{'ccflags'} =~ /PERL_OBJECT/i; +my $name = $0; +$name =~ s#^(.*)\.PL$#../$1.SH#; +my %opt; +while (@ARGV && $ARGV[0] =~ /^([\w_]+)=(.*)$/) + { + $opt{$1}=$2; + shift(@ARGV); + } + + $opt{CONFIG_H} ||= 'config.h'; + +my $patchlevel = $opt{INST_VER}; +$patchlevel =~ s|^[\\/]||; +$patchlevel =~ s|~VERSION~|$Config{version}|g; +$patchlevel ||= $Config{version}; +$patchlevel = qq["$patchlevel"]; + +open(SH,"<$name") || die "Cannot open $name:$!"; +while (<SH>) + { + last if /^sed/; + } +($term,$file,$pat) = /^sed\s+<<(\S+)\s+>(\S+)\s+(.*)$/; +$file =~ s/^\$(\w+)$/$opt{$1}/g; + +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:$!"; +binmode H; # no CRs (which cause a spurious rebuild) +while (<SH>) + { + last if /^$term$/o; + s/\$([\w_]+)/Config($1)/eg; + s/`([^\`]*)`/BackTick($1)/eg; + munge(); + s/\\\$/\$/g; + s#/[ *\*]*\*/#/**/#; + if (/^\s*#define\s+(SITELIB|VENDORLIB)_EXP/) + { + $_ = "#define ". $1 . "_EXP (nw_get_". lc($1) . "($patchlevel))\t/**/\n"; + } + # Added for NetWare and removed PRIVLIB from the above, the same thing might have + # to be done for other as well + elsif (/^\s*#define\s+(PRIVLIB)_EXP/) + { + $_ = "#define ". $1 . "_EXP (fnNwGetEnvironmentStr(\"PRIVLIB\", PRIVLIB))\t/**/\n"; + } + # incpush() handles archlibs, so disable them + elsif (/^\s*#define\s+(ARCHLIB|SITEARCH|VENDORARCH)_EXP/) + { + $_ = "/*#define ". $1 . "_EXP \"\"\t/**/\n"; + } + print H; + } +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 (!$OBJ && compare("$file.new",$file)) + { + warn "$file has changed\n"; + chmod(0666,$file); + unlink($file); + rename("$file.new",$file); + #chmod(0444,$file); + exit(1); + } +else + { + unlink ("$file.new"); + exit(0); + } + +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; +} |