summaryrefslogtreecommitdiff
path: root/NetWare/config_h.PL
diff options
context:
space:
mode:
Diffstat (limited to 'NetWare/config_h.PL')
-rw-r--r--NetWare/config_h.PL120
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;
+}