ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/Utilities/Architecture.pm
Revision: 1.6.8.2
Committed: Tue Feb 19 15:06:52 2008 UTC (17 years, 2 months ago) by muzaffar
Content type: text/plain
Branch: forBinLess_SCRAM
CVS Tags: V2_2_2, V2_2_2_pre4, V2_2_2_pre3, V2_2_2_pre2, V2_2_2_pre1, V2_2_2-pre1, V2_2_1, forV2_2_1, V2_2_0, sm100112, V2_1_4, V2_1_3, V2_1_2, V2_1_1, V2_1_0, V2_0_6, V2_0_5, V2_0_4, V2_0_4_relcand2, V2_0_4_relcand1, V2_0_3, V2_0_3_relcand3, V2_0_3_relcand2, V2_0_3_relcand1, V2_0_2, V2_0_2_relcand1, V2_0_1, V1_2_1b, V1_2_1a, V2_0_1_relcand4, V2_0_1_relcand3, V2_0_1_relcand2, V2_0_1_relcand1, V2_0_0_relcand4, V1_2_3, V2_0_0, V1_2_2, V1_2_2_relcand2, V1_2_2_relcand1, V2_0_0_relcand3, V2_0_0_relcand2, V2_0_0_relcand1, V1_2_1, V1_2_0, V1_2_0-cand11, V1_2_0-cand10, V1_2_0-cand9, V1_2_0-cand8, V1_2_0-cand7, V1_2_0-cand6, V1_2_0-cand5, V1_2_0-cand4
Branch point for: SCRAM_V2_0
Changes since 1.6.8.1: +2 -2 lines
Log Message:
fully qualified packages names

File Contents

# User Rev Content
1 sashby 1.2 #____________________________________________________________________
2     # File: Architecture.pm
3     #____________________________________________________________________
4     #
5     # Author: Shaun Ashby <Shaun.Ashby@cern.ch>
6     # Update: 2003-10-23 17:20:41+0200
7 muzaffar 1.6.8.2 # Revision: $Id: Architecture.pm,v 1.6.8.1 2008/02/15 14:58:05 muzaffar Exp $
8 williamc 1.1 #
9 sashby 1.2 # Copyright: 2003 (C) Shaun Ashby
10 williamc 1.1 #
11 sashby 1.2 #--------------------------------------------------------------------
12 muzaffar 1.6.8.2 package Utilities::Architecture;
13 sashby 1.4
14     =head1 NAME
15    
16     Architecture - Utilities to determine the architecture name.
17    
18     =head1 SYNOPSIS
19    
20     if (! defined $self->{SCRAM_ARCH})
21     {
22     my $arch = Architecture->new();
23     $self->architecture($a->arch());
24     $self->system_architecture($a->system_arch_stem());
25     $ENV{SCRAM_ARCH} = $self->architecture();
26     }
27    
28     =head1 DESCRIPTION
29    
30     A mechanism to extract the current system architecture. The full arch
31     and system (short) arch strings can be returned in the application using
32     the methods in this package.
33    
34     =head1 METHODS
35    
36     =over
37    
38     =cut
39    
40 sashby 1.2 require 5.004;
41     use Exporter;
42    
43     @ISA=qw(Exporter);
44     @EXPORT_OK=qw( );
45 williamc 1.1
46 sashby 1.4 =item C<new()>
47    
48     Constructor for Architecture objects.
49    
50     =cut
51    
52 sashby 1.2 sub new()
53     {
54     ###############################################################
55     # new() #
56     ###############################################################
57     # modified : Thu Oct 23 17:21:05 2003 / SFA #
58     # params : #
59     # : #
60     # function : #
61     # : #
62     ###############################################################
63     my $proto=shift;
64     my $class=ref($proto) || $proto;
65     my $self={};
66    
67     bless $self,$class;
68    
69     $self->_initarch();
70    
71     return $self;
72     }
73    
74 sashby 1.4 =item C<arch()>
75    
76     Method to set or return the architecture name.
77    
78     =cut
79    
80 sashby 1.2 sub arch()
81     {
82     my $self=shift;
83    
84     @_ ? $self->{arch} = shift
85     : $self->{arch};
86     }
87    
88 sashby 1.4 =item C<system_arch_stem()>
89    
90     Method to set or return the system architecture name stem. The
91     architecture stem is the full architecture without any compiler dependence.
92     For example, the architecture B<slc3_ia32_gcc323> has a system architecture
93     name stem of B<slc3_ia32>.
94    
95     =cut
96    
97 sashby 1.3 sub system_arch_stem()
98     {
99     my $self=shift;
100    
101     @_ ? $self->{archstem} = shift
102     : $self->{archstem};
103     }
104    
105 sashby 1.4 =item C<_initarch()>
106    
107     A subroutine to determine the architecture. This
108     is done by parsing the architecture map contained as
109     data inside B<SCRAM_SITE.pm> and looking for an appropriate
110     match for our platform.
111    
112     =cut
113    
114 sashby 1.2 sub _initarch()
115     {
116     my $self=shift;
117     $self->parse_architecture_map();
118     return $self;
119     }
120    
121 sashby 1.4 =item C<parse_architecture_map()>
122    
123     Read the architecture map file defined in the site package B<SCRAM_SITE.pm>.
124    
125     =cut
126    
127 sashby 1.2 sub parse_architecture_map()
128     {
129     my $self=shift;
130     my $matches={};
131    
132 muzaffar 1.6.8.1 require SCRAM::SCRAM_SITE;
133     my $architectures = &SCRAM::SCRAM_SITE::read_architecture_map();
134 sashby 1.2
135     while (my ($archstring,$archtest) = each %{$architectures})
136     {
137     my $rval = eval join(" ",@$archtest);
138    
139     if ($rval)
140     {
141     # Store the matched string:
142     $matches->{$archstring}=1;
143 sashby 1.6 # Store the match. We take the first match then return:
144 sashby 1.2 $self->arch($archstring);
145 sashby 1.3 # Also take the arch stem from the arch string. E.g. for a string
146     # "slc3_ia32_xxx", keep the "slc3_ia32" part:
147     if (my ($sysname,$cpuarch) = ($archstring =~ /(.*?)\_(.*?)\_.*?$/))
148     {
149     my $stem = $sysname."_".$cpuarch;
150     $self->system_arch_stem($stem);
151     }
152     else
153     {
154     # Just set the stem to be the same as the main arch string:
155     $self->system_arch_stem($archstring);
156     }
157 sashby 1.6 return;
158 sashby 1.2 }
159     else
160     {
161     next;
162     }
163     }
164     }
165 williamc 1.1
166 sashby 1.2 1;
167 sashby 1.4
168     __END__
169    
170     =back
171    
172     =head1 AUTHOR/MAINTAINER
173    
174 sashby 1.5 Shaun Ashby
175 sashby 1.4
176     =cut