summaryrefslogtreecommitdiff
path: root/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm')
-rw-r--r--storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm94
1 files changed, 94 insertions, 0 deletions
diff --git a/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm
new file mode 100644
index 00000000000..d79e72f2bb3
--- /dev/null
+++ b/storage/ndb/tools/old_dirs/ndbnet/lib/NDB/Net/Env.pm
@@ -0,0 +1,94 @@
+package NDB::Net::Env;
+
+use strict;
+use File::Spec;
+use Carp;
+
+require NDB::Net::Base;
+
+use vars qw(@ISA);
+@ISA = qw(NDB::Net::Base);
+
+# environment variables
+#
+# NDB_TOP source dir or installation dir
+# NDB_BASE base dir not tied to any release or database
+# NDB_NETCFG ndbnet config file, default $NDB_BASE/etc/ndbnet.xml
+#
+# ndbnet explicitly unsets NDB_TOP and NDB_HOME because they are
+# specific to each database or database node
+
+# constructors
+
+my $log;
+
+sub initmodule {
+ $log = NDB::Util::Log->instance;
+}
+
+NDB::Net::Env->attributes(
+ base => sub { /^\S+$/ },
+ netcfg => sub { /^\S+$/ },
+ hostname => sub { /^\S+$/ },
+);
+
+my $instance;
+
+sub desc {
+ my $netenv = shift;
+ return "net environment";;
+}
+
+sub instance {
+ my $class = shift;
+ @_ % 2 == 0 or confess 0+@_;
+ my(%attr) = @_;
+ if ($instance) {
+ return $instance;
+ }
+ for my $var (qw(NDB_TOP NDB_HOME)) {
+ my $top = delete $ENV{$var};
+ if (defined($top)) {
+ if ($^O ne 'MSWin32') {
+ $ENV{PATH} =~ s!(^|:)$top/bin($|:)!$1$2!g;
+ $ENV{LD_LIBRARY_PATH} =~ s!(^|:)$top/lib($|:)!$1$2!g;
+ $ENV{PERL5LIB} =~ s!(^|:)$top/lib/perl5($|:)!$1$2!g;
+ }
+ }
+ }
+ my $netenv = $class->SUPER::new(%attr);
+ for my $base ($attr{base}, $ENV{NDB_BASE}) {
+ if (defined($base)) {
+ $netenv->setbase($base)
+ or $log->push, return undef;
+ }
+ }
+ for my $netcfg ($attr{netcfg}, $ENV{NDB_NETCFG}) {
+ if (defined($netcfg)) {
+ $netenv->setnetcfg($netcfg)
+ or $log->push, return undef;
+ }
+ }
+ if ($netenv->hasbase && ! $netenv->hasnetcfg) {
+ $netenv->setnetcfg(File::Spec->catfile($netenv->getbase, "etc", "ndbnet.xml"))
+ or $log->push, return undef;
+ }
+ my $uname;
+ if ($^O ne 'MSWin32') {
+ chomp($uname = `uname -n`);
+ } else {
+ chomp($uname = `hostname`);
+ }
+ my($hostname) = gethostbyname($uname);
+ if (! defined($hostname)) {
+ $uname =~ s!\..*$!!;
+ ($hostname) = gethostbyname($uname);
+ }
+ $netenv->sethostname($hostname)
+ or $log->push, return undef;
+ $instance = $netenv;
+ return $instance;
+}
+
+1;
+# vim:set sw=4: