ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/JSOC/customizemake.pl
Revision: 1.6
Committed: Thu Mar 11 04:03:50 2010 UTC (13 years, 6 months ago) by arta
Content type: text/plain
Branch: MAIN
CVS Tags: NetDRMS_Ver_2-4, NetDRMS_Ver_2-5, Ver_5-12, Ver_5-11, Ver_5-10, NetDRMS_Ver_2-2, NetDRMS_Ver_2-3, Ver_5-7, NetDRMS_Ver_2-1, Ver_5-9, Ver_5-8
Changes since 1.5: +1 -1 lines
Log Message:
Fix typo

File Contents

# User Rev Content
1 arta 1.1 #!/usr/bin/perl -w
2    
3 arta 1.4 # In config.local, __DEFS__ section must precede __MAKE__ section
4    
5 arta 1.1 use constant kSTATUSOK => 0;
6     use constant kSTATUSCONF => 1;
7    
8     use constant kUNKSECTION => 0;
9     use constant kDEFSSECTION => 1;
10     use constant kMAKESECTION => 2;
11    
12     use constant kCUSTMK => "custom.mk";
13 arta 1.4 use constant kPROJTGTS => "projtgts.mk";
14     use constant kPROJRULES => "projRules.mk";
15 arta 1.1
16     my($line);
17     my($section);
18     my($status);
19     my($tmp);
20 arta 1.4 my($tmpa);
21     my($tmpb);
22     my($locopen);
23     my($beginning);
24     my($locdir);
25 arta 1.1 my($varname);
26     my($mach);
27     my($varvalu);
28 arta 1.5 my($projdir);
29 arta 1.1 my(%platmaps) = ();
30     my(%machmaps) = ();
31    
32     $status = kSTATUSOK;
33     $section = kUNKSECTION;
34 arta 1.4 $tmp = $ARGV[0];
35     $locdir = $ARGV[1];
36     $tmpa = kPROJTGTS;
37     $tmpb = kPROJRULES;
38    
39 arta 1.1 if (open(CONFLOC, "<$tmp"))
40     {
41     $tmp = kCUSTMK;
42 arta 1.4 if (!open(CUSTMK, ">>$locdir/$tmp"))
43 arta 1.1 {
44     print STDERR "Can't open file '$tmp' for writing.\n"
45     }
46     else
47     {
48 arta 1.4 $locopen = 0;
49     $beginning = 1;
50    
51 arta 1.1 while (defined($line = <CONFLOC>))
52     {
53     chomp($line);
54    
55     if ($line =~ /^\#/ || $line =~ /^\s*$/)
56     {
57     next;
58     }
59    
60     if ($line =~ /__DEFS__/)
61     {
62     $section = kDEFSSECTION;
63     next;
64     }
65     elsif ($line =~ /__MAKE__/)
66     {
67     $section = kMAKESECTION;
68     next;
69     }
70    
71     if ($section == kDEFSSECTION)
72     {
73     # Do nothing - customizedefs.pl handles this section
74     }
75     elsif ($section == kMAKESECTION)
76     {
77 arta 1.4 if (!$locopen)
78     {
79     if (!open(PROJTGTS, ">$locdir/$tmpa") || !open(PROJRULES, ">$locdir/$tmpb"))
80     {
81     print STDERR "Can't open file '$tmpa' or '$tmpb' for writing.\n"
82     }
83    
84     $locopen = 1;
85     }
86    
87 arta 1.1 $mach = "";
88    
89 arta 1.5 if ($line =~ /\s*PROJDIR\s+(\S+)/i)
90     {
91     $varvalu = $1;
92    
93     # Create the entries for the projtgts.mk file
94     if ($beginning)
95     {
96 arta 1.6 print PROJTGTS "proj2:\n";
97 arta 1.5 $beginning = 0;
98     }
99    
100     print PROJTGTS "\t+@[ -d \$(PROJOBJDIR)/$varvalu ] || mkdir -p \$(PROJOBJDIR)/$varvalu\n";
101    
102     # Don't duplicate immediate subdirectories of proj
103     if ($varvalu =~ /^(\S+)\// || $varvalu =~ /^(\S+)/)
104     {
105     $projdir = $1;
106     }
107     else
108     {
109     print STDERR "Invalid PROJDIR entry '$varvalu'.\n"
110     }
111    
112     if (defined($projdir) && !defined($projmap{$projdir}))
113     {
114     print PROJRULES "dir := \$(d)/$projdir\n";
115     print PROJRULES "-include \$(SRCDIR)/\$(dir)/Rules.mk\n";
116     $projmap{$projdir} = 1;
117     }
118     }
119     elsif ($line =~ /\s*(\S+)\s+(\S+)/)
120 arta 1.1 {
121     $varname = $1;
122     $varvalu = $2;
123    
124     if ($varname =~ /(\S+):(\S+)/)
125     {
126     $varname = $1;
127     $mach = $2;
128     }
129    
130     if (length($mach) == 0)
131     {
132     print CUSTMK "$varname = $varvalu\n";
133     }
134     }
135     elsif ($line =~ /\s*(\S+)\s*/)
136     {
137     $varname = $1;
138    
139     if ($varname =~ /(\S+):(\S+)/)
140     {
141     $varname = $1;
142     $mach = $2;
143     }
144    
145     if (length($mach) == 0)
146     {
147     print CUSTMK "$varname = \n";
148     }
149     }
150     else
151     {
152     print STDERR "Invalid line '$line' in configuration file.\n";
153     $status = kSTATUSCONF;
154     last;
155     }
156    
157     # deal with mach-specific
158     if (length($mach) > 0)
159     {
160     if (SupportedPlat($mach))
161     {
162     $platmaps{$mach}{$varname} = $varvalu;
163     }
164     else
165     {
166     $machmaps{$mach}{$varname} = $varvalu;
167     }
168     }
169     }
170     else
171     {
172     print STDERR "Invalid configuration file format.\n";
173     $status = kSTATUSCONF;
174     }
175     }
176    
177 arta 1.4 close(PROJTGTS);
178     close(PROJRULES);
179    
180 arta 1.1 # Write out machine-specific key-value pairs
181     my(%map);
182    
183     foreach $mach (keys(%platmaps))
184     {
185     %map = %{$platmaps{$mach}};
186    
187     # There are two special machine 'types' - X86_64 and IA32; they refer to
188     # the two supported linux-CPU types, linux_x86_64 and linux_ia32 as
189     # identified by $JSOC_MACHINE
190     if ($mach =~ /x86_64/i)
191     {
192 arta 1.2 print CUSTMK 'ifeq ($(JSOC_MACHINE), linux_x86_64)' . "\n";
193 arta 1.1 }
194     elsif ($mach =~ /ia32/i)
195     {
196 arta 1.2 print CUSTMK 'ifeq ($(JSOC_MACHINE), linux_ia32)' . "\n";
197 arta 1.1 }
198 arta 1.3 elsif ($mach =~ /ia64/i)
199     {
200     print CUSTMK 'ifeq ($(JSOC_MACHINE), linux_ia64)' . "\n";
201     }
202 arta 1.1
203     foreach $varname (keys(%map))
204     {
205     $varvalu = $map{$varname};
206     print CUSTMK "$varname = $varvalu\n";
207     }
208    
209     print CUSTMK "endif\n";
210     }
211    
212     foreach $mach (keys(%machmaps))
213     {
214     %map = %{$machmaps{$mach}};
215    
216     # The MACH make variable is passed in as part of the make command-line:
217     # make MACH='N02'
218     # This will override the supported platform types.
219     print CUSTMK "ifeq (\$(MACH), $mach)\n";
220    
221     foreach $varname (keys(%map))
222     {
223     $varvalu = $map{$varname};
224     print CUSTMK "$varname = $varvalu\n";
225     }
226    
227     print CUSTMK "endif\n";
228     }
229    
230    
231     close(CUSTMK);
232     }
233    
234     close(CONFLOC);
235     }
236    
237     exit($status);
238    
239     sub SupportedPlat
240     {
241     my($plat) = $_[0];
242    
243 arta 1.3 if ($plat =~ /^x86_64$/i || $plat =~ /^ia32$/i || $plat =~ /^ia64$/i)
244 arta 1.1 {
245     return 1;
246     }
247     else
248     {
249     return 0;
250     }
251     }