package Util::HEAdas; ############################################################################## # # DESCRIPTION: This sub-class adds HEAdas environment initialization # # HISTORY # HISTORY: $Log: HEAdas.pm,v $ # HISTORY: Revision 1.5 2014/02/27 05:52:58 apsop # HISTORY: Fixed the regex that gets $VERSION from $INSTALL_DIR. # HISTORY: # HISTORY: Revision 1.4 2012/04/26 08:06:22 apsop # HISTORY: Set environment variable LHEA_DATA. (In sdc's com8.5 since March 21, 2011.) # HISTORY: # HISTORY: Revision 1.3 2007/01/31 16:04:08 apsop # HISTORY: Update to version being used by swift. Merge in intializations previous done by ftools. Override variables unitentionally picked up from the starting environment. # HISTORY: # HISTORY: Revision 1.2 2006/08/01 20:35:34 apsop # HISTORY: Add in CVS history indicator. # HISTORY: # HISTORY: 1.0 -> 1.1 2001-03-05 # HISTORY: Modified the way the PATH and LD_LIBRARY_PATH environment variables # HISTORY: are set to make the more robust. # HISTORY: # HISTORY: 1.1 -> 2.0 2002-04-18 # HISTORY: Made this a subclass of ParfileTool to better handle FTOOLS # HISTORY: and HEAdas, not to mention PseudoFtools. # HISTORY: # HISTORY: 2.0 -> 2.1 2004-02-11 # HISTORY: The environment method now returns a reference to a hash # HISTORY: # HISTORY: 2.1 -> 2.2 2004-03-09 # HISTORY: Moved HEADASNOQUERY environment variable to ParfileTool.pm # # VERSION: $Revision: 1.5 $ # ############################################################################## use Util::ParfileTool; @ISA=("Util::ParfileTool"); use strict; use Util::Ftool; use Util::Xanadu; my $INSTALL_DIR; my @BINS=(); my @LIBS=(); my $SYSPFILES; my %ENVIRONMENT=(); my %SCRIPT_ENVIRONMENT=(); my $VERSION; ######################################################################### # ######################################################################### sub new { my $self=shift; my $tool=shift; $self->SUPER::new($tool,$SYSPFILES, \@BINS, \@LIBS); } # end of constructor ###################### # ACCESSORS: ###################### ######################################################################## # Returns a hash of environment variables which must # be set before running this tool ######################################################################## sub environment { my $self=shift; if ($self->{IS_SCRIPT} ) { return {%{$self->SUPER::environment()}, %ENVIRONMENT, %SCRIPT_ENVIRONMENT}; } else { return {%{$self->SUPER::environment()}, %ENVIRONMENT}; } } # end of environment method #################################################################### # This method does all the initialization for this class, given # the name of the machine-specific instalation directory. # Note this method must be called after the corresponding method is called # for the Ftools. #################################################################### sub install_dir { my $self=shift; if(@_) { $INSTALL_DIR=shift; ##################################################### # set the executable directories and # the parfile directory ##################################################### @BINS=("$INSTALL_DIR/bin"); @LIBS=("$INSTALL_DIR/lib"); $SYSPFILES = "$INSTALL_DIR/syspfiles"; ########################################## # Parse the version name # # The new regex "m|/(hea[^/]*)/[^/]*/?\s*$|i" matches: /, followed # by "hea" to the next / (returning this part), followed by /, then # any amount of non-/, an optional /, optional whitespace, then # end-of-string, case-insensitively. It should match the # next-to-last part of the $HEADAS env var. It does assume that # this part begins with "hea". ########################################## ($VERSION) = $INSTALL_DIR =~ m|/(hea[^/]*)/[^/]*/?\s*$|i; # (This original regex fails because it matches /, followed by # alphanums (NOT including - or .), then a period, returning there # to the next /. So it could parse eg., "/headas.2.3/", but not # "/heasoft-6.10/" or even "/headas16/".) ## ($VERSION) = $INSTALL_DIR =~ m|/\w*\.([^/]*)/|; ##################################################### # Set the environment variables ##################################################### $ENVIRONMENT{HEADAS}=$INSTALL_DIR; $ENVIRONMENT{LHEA_DATA}=$INSTALL_DIR.'/refdata'; ## $ENVIRONMENT{HEADASOUTPUT}="stdout"; ## $ENVIRONMENT{HEADASERROR }="stderr"; $ENVIRONMENT{HEADASPROMPT}="/dev/null"; $ENVIRONMENT{LHEAPERL}=$^X; # <- perl version running this script ##################################################### # special stuff for scripts ##################################################### my $ftools = Util::Ftool->install_dir; $SCRIPT_ENVIRONMENT{HOME} = '.'; # my $envPERLLIB = $ENV{PERLLIB} || ''; # $SCRIPT_ENVIRONMENT{PERLLIB} = "$INSTALL_DIR/lib/perl:$envPERLLIB"; $SCRIPT_ENVIRONMENT{PERLLIB} = "$INSTALL_DIR/lib/perl"; $SCRIPT_ENVIRONMENT{PERL5LIB} = "$INSTALL_DIR/lib/perl"; # $envPERLLIB = $ENV{PERL5LIB} || ''; # $SCRIPT_ENVIRONMENT{PERL5LIB} = "$INSTALL_DIR/lib/perl:$envPERLLIB"; $SCRIPT_ENVIRONMENT{PATH} = join(":", @BINS, "$ftools/bin", $ENV{PATH}); # ack # push(@LIBS, "$ftools/lib"); # $SCRIPT_ENVIRONMENT{PFILES} = ".;$SYSPFILES:$ftools/syspfiles"; # need Xanadu setup too my $xanadu = Util::Xanadu->new('ximage'); my $xanenv = $xanadu->environment; my @keys = keys(%$xanenv); @SCRIPT_ENVIRONMENT{@keys} = @{$xanenv}{@keys}; push(@LIBS, $xanadu->libs); } return $INSTALL_DIR; } ############################################################## # returns the version of the package being used. # Note this version name is derived by parsing the name # of the instalation directory. ############################################################ sub version { my $self=shift; return $VERSION; } #################################################### # assemble the error message. # Override the generic message to specify "FTOOL" #################################################### sub error_message { my $self=shift; my $message="Error from HEAdas Task $self->{COMMAND} - ". "exit status $self->{STATUS}"; return $message; } sub DESTROY { my $self = shift; # check for an overridden destructor... $self->SUPER::DESTROY if $self->can("SUPER::DESTROY"); } 1;