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

# Content
1 #____________________________________________________________________
2 # File: Architecture.pm
3 #____________________________________________________________________
4 #
5 # Author: Shaun Ashby <Shaun.Ashby@cern.ch>
6 # Update: 2003-10-23 17:20:41+0200
7 # Revision: $Id: Architecture.pm,v 1.6.8.1 2008/02/15 14:58:05 muzaffar Exp $
8 #
9 # Copyright: 2003 (C) Shaun Ashby
10 #
11 #--------------------------------------------------------------------
12 package Utilities::Architecture;
13
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 require 5.004;
41 use Exporter;
42
43 @ISA=qw(Exporter);
44 @EXPORT_OK=qw( );
45
46 =item C<new()>
47
48 Constructor for Architecture objects.
49
50 =cut
51
52 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 =item C<arch()>
75
76 Method to set or return the architecture name.
77
78 =cut
79
80 sub arch()
81 {
82 my $self=shift;
83
84 @_ ? $self->{arch} = shift
85 : $self->{arch};
86 }
87
88 =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 sub system_arch_stem()
98 {
99 my $self=shift;
100
101 @_ ? $self->{archstem} = shift
102 : $self->{archstem};
103 }
104
105 =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 sub _initarch()
115 {
116 my $self=shift;
117 $self->parse_architecture_map();
118 return $self;
119 }
120
121 =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 sub parse_architecture_map()
128 {
129 my $self=shift;
130 my $matches={};
131
132 require SCRAM::SCRAM_SITE;
133 my $architectures = &SCRAM::SCRAM_SITE::read_architecture_map();
134
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 # Store the match. We take the first match then return:
144 $self->arch($archstring);
145 # 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 return;
158 }
159 else
160 {
161 next;
162 }
163 }
164 }
165
166 1;
167
168 __END__
169
170 =back
171
172 =head1 AUTHOR/MAINTAINER
173
174 Shaun Ashby
175
176 =cut