0
|
1 |
#
|
|
2 |
# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
3 |
# All rights reserved.
|
|
4 |
# This component and the accompanying materials are made available
|
|
5 |
# under the terms of "Eclipse Public License v1.0"
|
|
6 |
# which accompanies this distribution, and is available
|
|
7 |
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
|
8 |
#
|
|
9 |
# Initial Contributors:
|
|
10 |
# Nokia Corporation - initial contribution.
|
|
11 |
#
|
|
12 |
# Contributors:
|
|
13 |
#
|
|
14 |
# Description:
|
|
15 |
#
|
|
16 |
|
|
17 |
package ifsheets;
|
|
18 |
############################################
|
|
19 |
# 13.6.2005:
|
|
20 |
# - Added support for the Removed column in the black list.
|
|
21 |
# - Added support for "For Adaptation" And "Extended SDK" columns
|
|
22 |
# in the readInfo*2 functions (just to read the data into the hash).
|
|
23 |
# - currently there is NO support to get extended SDK /for adaptation API lists
|
|
24 |
# based on some release.
|
|
25 |
############################################
|
|
26 |
|
|
27 |
|
|
28 |
##########################################
|
|
29 |
# Libraries used
|
|
30 |
##########################################
|
|
31 |
use strict;
|
|
32 |
use Win32::OLE qw(in with);
|
|
33 |
use Win32::OLE::Const 'Microsoft Excel';
|
|
34 |
use Exporter (); # Needed to make constants available to caller.
|
|
35 |
use excel_support; # opening/closing workbook, etc.. functions.
|
|
36 |
|
|
37 |
##########################################
|
|
38 |
# Defining all the "global" variables, that we are using.
|
|
39 |
##########################################
|
|
40 |
use vars qw(
|
|
41 |
@ISA
|
|
42 |
@EXPORT
|
|
43 |
);
|
|
44 |
|
|
45 |
@ISA = qw(Exporter); # Inherit from Exporter module (import method needed).
|
|
46 |
|
|
47 |
# Define all the functions defined by this module
|
|
48 |
use subs qw(
|
|
49 |
isSupported
|
|
50 |
addToHash
|
|
51 |
isRowWanted
|
|
52 |
setRowValue
|
|
53 |
getError
|
|
54 |
checkRel
|
|
55 |
checkApiRelRoadMap
|
|
56 |
checkFileRelRoadMap
|
|
57 |
readInfo
|
|
58 |
checkConflicts
|
|
59 |
readInfo2
|
|
60 |
readCRepInfo2
|
|
61 |
readBlackList
|
|
62 |
);
|
|
63 |
|
|
64 |
##########################################
|
|
65 |
# Define the exports from this module that can be used
|
|
66 |
# Outside
|
|
67 |
##########################################
|
|
68 |
@EXPORT = qw(
|
|
69 |
&getExcelApp
|
|
70 |
&quitExcelApp
|
|
71 |
&isSupported
|
|
72 |
&openWorkbook
|
|
73 |
&getWorkSheet
|
|
74 |
&readInfo
|
|
75 |
&checkConflicts
|
|
76 |
&readInfo2
|
|
77 |
&readCRepInfo2
|
|
78 |
&readBlackList
|
|
79 |
);
|
|
80 |
|
|
81 |
|
|
82 |
##########################################
|
|
83 |
# Global variables inside this module (constants
|
|
84 |
##########################################
|
|
85 |
# For 2.0 template version there are 32 columns
|
|
86 |
my $globalMaxColCount = 32;
|
|
87 |
|
|
88 |
# How many empty lines we are allowed to encounter before we
|
|
89 |
# stop handling specific sheet.
|
|
90 |
my $globalMaxEmptyRowCount = 10;
|
|
91 |
|
|
92 |
my $currFileName = "";
|
|
93 |
|
|
94 |
##########################################
|
|
95 |
# Error constants
|
|
96 |
##########################################
|
|
97 |
my $TEMPLATE_SYNTAX_ERROR = 0;
|
|
98 |
my $API_DESC_MISSING_ERROR = 10;
|
|
99 |
my $API_REL_MISSING_ERROR = 11;
|
|
100 |
my $API_REL_SYNTAX_ERROR = 12;
|
|
101 |
my $API_REL_LOGICAL_ERROR = 13;
|
|
102 |
my $API_HEADERS_IN_ROW_ERROR = 14;
|
|
103 |
my $API_ADAPTATION_ERROR = 15;
|
|
104 |
my $DLL_SYNTAX_ERROR = 20;
|
|
105 |
my $LIB_SYNTAX_ERROR = 30;
|
|
106 |
my $FILE_MORE_THAN_ONE_FILE_ERROR = 40;
|
|
107 |
my $FILE_COLUMN_SYNTAX_ERROR = 41;
|
|
108 |
my $FILE_REL_SYNTAX_ERROR = 42;
|
|
109 |
my $FILE_REL_LOGICAL_ERROR = 43;
|
|
110 |
|
|
111 |
|
|
112 |
|
|
113 |
###########################################################################
|
|
114 |
# Functions checks if the template version is supported or not.
|
|
115 |
#
|
|
116 |
# We only support template version 1.5,1.5.1 and 1.6
|
|
117 |
# From 1.5 onwards the template version is located in the "Instructions"-sheet
|
|
118 |
#
|
|
119 |
# Params: refToWorkbook,refToTemplateVersion
|
|
120 |
#
|
|
121 |
# Return: 0 not supported
|
|
122 |
# 1 is supported
|
|
123 |
#
|
|
124 |
# Also the found template version is stored to the refToTemplateVersion
|
|
125 |
###########################################################################
|
|
126 |
sub isSupported
|
|
127 |
{
|
|
128 |
my $refToWb = shift;
|
|
129 |
my $refToTemplateVersion = shift;
|
|
130 |
|
|
131 |
# Get the instructions sheet, since it contains the template version.
|
|
132 |
my $refToWorksheet = getWorkSheet $refToWb,"Instructions";
|
|
133 |
|
|
134 |
# The instructions sheet => then try the main page. In 1.8 the instructions
|
|
135 |
# page was removed.
|
|
136 |
if(! defined($refToWorksheet))
|
|
137 |
{
|
|
138 |
$refToWorksheet = getWorkSheet $refToWb,"Main";
|
|
139 |
}
|
|
140 |
|
|
141 |
# No main or instructions sheet => not supported.
|
|
142 |
if(! defined($refToWorksheet))
|
|
143 |
{
|
|
144 |
return 0;
|
|
145 |
}
|
|
146 |
|
|
147 |
# the template version in in cell C2. (both tabs the place is same)
|
|
148 |
my $templVersion = $$refToWorksheet->Cells( 2, 3 )->{ 'Value' };
|
|
149 |
|
|
150 |
if(defined($refToTemplateVersion))
|
|
151 |
{
|
|
152 |
$$refToTemplateVersion = $templVersion;
|
|
153 |
}
|
|
154 |
|
|
155 |
# Support version 1.5 and 1.5.1
|
|
156 |
if( defined($templVersion) && $templVersion =~ /^\s*1\.5(\.1)*$/)
|
|
157 |
{
|
|
158 |
return 1;
|
|
159 |
}
|
|
160 |
# Support version 1.6
|
|
161 |
if( defined($templVersion) && $templVersion =~ /^\s*1\.6$/)
|
|
162 |
{
|
|
163 |
return 1;
|
|
164 |
}
|
|
165 |
# Support version 1.7 and 1.7.*
|
|
166 |
if( defined($templVersion) && $templVersion =~ /^\s*1\.7(\.[0-9]+)*$/)
|
|
167 |
{
|
|
168 |
return 1;
|
|
169 |
}
|
|
170 |
# Support version 1.8 and 1.8.*
|
|
171 |
if( defined($templVersion) && $templVersion =~ /^\s*1\.8(\.[0-9]+)*$/)
|
|
172 |
{
|
|
173 |
return 1;
|
|
174 |
}
|
|
175 |
# Support version 1.9 and 1.9.*
|
|
176 |
if( defined($templVersion) && $templVersion =~ /^\s*1\.9(\.[0-9]+)*$/)
|
|
177 |
{
|
|
178 |
return 1;
|
|
179 |
}
|
|
180 |
# Support version 2.0 and 2.0.*
|
|
181 |
if( defined($templVersion) && $templVersion =~ /^\s*2\.0(\.[0-9]+)*$/)
|
|
182 |
{
|
|
183 |
return 1;
|
|
184 |
}
|
|
185 |
|
|
186 |
return 0;
|
|
187 |
}
|
|
188 |
|
|
189 |
###########################################################################
|
|
190 |
# Function defines what is the next api ordinal to be used in the
|
|
191 |
# hash return by readInfo2 and readCRepInfo2 methods.
|
|
192 |
# there.
|
|
193 |
#
|
|
194 |
# Params: refToHash
|
|
195 |
#
|
|
196 |
# Return: next ordinal
|
|
197 |
##########################################################################
|
|
198 |
sub sortNumerically
|
|
199 |
{
|
|
200 |
$a <=> $b;
|
|
201 |
}
|
|
202 |
sub getNextOrdinal
|
|
203 |
{
|
|
204 |
my $refToHash = shift;
|
|
205 |
|
|
206 |
|
|
207 |
my @ordinalsInOrder = sort sortNumerically ( keys(%$refToHash));
|
|
208 |
my $highestValue = pop @ordinalsInOrder;
|
|
209 |
$highestValue++;
|
|
210 |
|
|
211 |
return $highestValue;
|
|
212 |
}
|
|
213 |
|
|
214 |
###########################################################################
|
|
215 |
# Function adds the information in the str into the has, if the information is not
|
|
216 |
# there.
|
|
217 |
# It also separates command separated items before adding them
|
|
218 |
#
|
|
219 |
# Params: refToHash, text added.
|
|
220 |
#
|
|
221 |
# Return: -
|
|
222 |
###########################################################################
|
|
223 |
sub addToHash
|
|
224 |
{
|
|
225 |
my $refToHash = shift;
|
|
226 |
my $str = shift;
|
|
227 |
|
|
228 |
# No need to do anything, if there is nothing to do.
|
|
229 |
if(! defined($str) || $str =~ /^\s*$/)
|
|
230 |
{
|
|
231 |
return;
|
|
232 |
}
|
|
233 |
|
|
234 |
# The items can be separated by "," and there could be additional
|
|
235 |
# space before of after the separator.
|
|
236 |
my @items = split /\s*[,\n ]+\s*/,$str;
|
|
237 |
|
|
238 |
my $item;
|
|
239 |
|
|
240 |
# Add each item to the hash. This is only done, if the item does not
|
|
241 |
# exist there before.
|
|
242 |
foreach $item (@items)
|
|
243 |
{
|
|
244 |
# all spaces and newlines taken away before addition
|
|
245 |
$item =~ s/\s*//g;
|
|
246 |
chomp($item);
|
|
247 |
|
|
248 |
|
|
249 |
# Add if not added earlier (avoiding duplicate entries)
|
|
250 |
if( !defined( $$refToHash{$item}) && $item !~ /^\s*N\/A\s*$/i && $item !~ /^\s*\-\s*$/)
|
|
251 |
{
|
|
252 |
# It does not matter what is the value, since we are only interested in the
|
|
253 |
# key.
|
|
254 |
$$refToHash{$item} = 1;
|
|
255 |
}
|
|
256 |
}
|
|
257 |
}
|
|
258 |
###########################################################################
|
|
259 |
# Function expects to find the fromStr and obsoletedStr in format "Sx0 <rel>, Sx0 <rel>", where x is 6 0r 9.
|
|
260 |
# It tries to determinate, if the range matches to the given release for the given platform
|
|
261 |
# Possible combinations "", "S60 <rel>","S90 <rel>","S60 <rel>, S90 <Rel>"
|
|
262 |
#
|
|
263 |
# Params: plat, rel, isAPIrow,fromStr, obsoletedStr
|
|
264 |
#
|
|
265 |
# Return:
|
|
266 |
# 1 is part of wanted platform
|
|
267 |
# 2 has been removed in this/prev releases
|
|
268 |
# 3 is coming in future releases
|
|
269 |
# 4 no release for the API in given str
|
|
270 |
# Note: 0 is used outside of this function.
|
|
271 |
###########################################################################
|
|
272 |
sub isRowWanted
|
|
273 |
{
|
|
274 |
my $plat = shift;
|
|
275 |
my $rel = shift;
|
|
276 |
my $isApiRow = shift;
|
|
277 |
my $fromStr = shift;
|
|
278 |
my $obsoletedStr = shift;
|
|
279 |
|
|
280 |
#######################################################
|
|
281 |
# First check the obsoleted field. If that matches, it really does not matter
|
|
282 |
# what is the from string.
|
|
283 |
#######################################################
|
|
284 |
if(defined($obsoletedStr) && $obsoletedStr =~ /$plat/i)
|
|
285 |
{
|
|
286 |
# the value was defined and contains the platform wanted.
|
|
287 |
# Now extract the release for the wanted platform.
|
|
288 |
if($obsoletedStr =~ /$plat\s+([0-9.]+)/i)
|
|
289 |
{
|
|
290 |
my $obsoletedRelInSheet = $1;
|
|
291 |
|
|
292 |
# check, if the line has been obsoleted, if yes then return false.
|
|
293 |
if($rel >= $obsoletedRelInSheet)
|
|
294 |
{
|
|
295 |
return 2;
|
|
296 |
}
|
|
297 |
}
|
|
298 |
}
|
|
299 |
|
|
300 |
#######################################################
|
|
301 |
# If the row was not obsoleted, then check the from-value.
|
|
302 |
#######################################################
|
|
303 |
|
|
304 |
# If there is no value in the field the item is handled differently depending
|
|
305 |
# if the row is API row or header row.
|
|
306 |
if( ! defined($fromStr) || $fromStr =~ /^\s*$/ || $fromStr !~ /$plat/i)
|
|
307 |
{
|
|
308 |
return 4;
|
|
309 |
}
|
|
310 |
|
|
311 |
# The platform was specified in the field. Now find out the number
|
|
312 |
if($fromStr =~ /$plat\s+([0-9.]+)/i)
|
|
313 |
{
|
|
314 |
my $platRelInSheet = $1;
|
|
315 |
if( $rel >= $platRelInSheet)
|
|
316 |
{
|
|
317 |
# belongs to the release
|
|
318 |
return 1;
|
|
319 |
}
|
|
320 |
else
|
|
321 |
{
|
|
322 |
# does not belong to the release
|
|
323 |
return 3;
|
|
324 |
}
|
|
325 |
}
|
|
326 |
|
|
327 |
# We should only come here, if the information was somehow wrongly specified.
|
|
328 |
# (for instance numbers in the release was not a number, but something else)
|
|
329 |
return 4;
|
|
330 |
}
|
|
331 |
|
|
332 |
|
|
333 |
###########################################################################
|
|
334 |
# function sets the given rel value, if the value was defined
|
|
335 |
#
|
|
336 |
# Params: referenceToVariable, value
|
|
337 |
#
|
|
338 |
###########################################################################
|
|
339 |
sub setRelValue
|
|
340 |
{
|
|
341 |
my $refToVar = shift;
|
|
342 |
my $value = shift;
|
|
343 |
|
|
344 |
if(defined($value) && $value !~ /^\s*$/)
|
|
345 |
{
|
|
346 |
$$refToVar = $value;
|
|
347 |
}
|
|
348 |
}
|
|
349 |
|
|
350 |
###########################################################################
|
|
351 |
# Function generates an error item
|
|
352 |
#
|
|
353 |
# Params: errNbr, ... <other information>
|
|
354 |
#
|
|
355 |
# Return: reference to an error item list
|
|
356 |
###########################################################################
|
|
357 |
sub getError
|
|
358 |
{
|
|
359 |
my $errNbr = shift;
|
|
360 |
my $refToDetailsList = \@_;
|
|
361 |
|
|
362 |
my @errItem;
|
|
363 |
push(@errItem,$errNbr);
|
|
364 |
push(@errItem,$currFileName);
|
|
365 |
push(@errItem,@$refToDetailsList);
|
|
366 |
|
|
367 |
return \@errItem;
|
|
368 |
}
|
|
369 |
|
|
370 |
|
|
371 |
###########################################################################
|
|
372 |
# Checks the syntax of the given release field
|
|
373 |
#
|
|
374 |
# Params: checked rel value
|
|
375 |
#
|
|
376 |
# Return: 0 OK
|
|
377 |
# >0 NOK
|
|
378 |
###########################################################################
|
|
379 |
sub checkRel
|
|
380 |
{
|
|
381 |
my $checkedRel = shift;
|
|
382 |
|
|
383 |
# No value defined => return OK
|
|
384 |
if($checkedRel == -1)
|
|
385 |
{
|
|
386 |
return 0;
|
|
387 |
}
|
|
388 |
|
|
389 |
# Only S60 or S90 release specified
|
|
390 |
if($checkedRel =~ /^\s*S[69]0 [0-9]+\.[0-9]+\s*$/i)
|
|
391 |
{
|
|
392 |
return 0;
|
|
393 |
}
|
|
394 |
# Both S60 or S90 release specified
|
|
395 |
if($checkedRel =~ /^\s*S[69]0 [0-9]+\.[0-9]+\s*\,\s*S[69]0 [0-9]+\.[0-9]+\s*$/i)
|
|
396 |
{
|
|
397 |
return 0;
|
|
398 |
}
|
|
399 |
|
|
400 |
# Otherwise error
|
|
401 |
return 1;
|
|
402 |
}
|
|
403 |
|
|
404 |
|
|
405 |
###########################################################################
|
|
406 |
# Function checks that the information in the files for given release are OK.
|
|
407 |
#
|
|
408 |
# Params: refToErrList, checkedPlatform, apiName, sdkRel,oemRel,internalRel,privateRel
|
|
409 |
#
|
|
410 |
# Return: 0 no errors found
|
|
411 |
# > 0 amount of errors found
|
|
412 |
###########################################################################
|
|
413 |
sub checkApiRelRoadMap
|
|
414 |
{
|
|
415 |
my $refToErrorList = shift;
|
|
416 |
my $checkedPlatform = shift;
|
|
417 |
my $apiName = shift;
|
|
418 |
my $apiSdkRel = shift;
|
|
419 |
my $apiOemRel = shift;
|
|
420 |
my $apiInternalRel = shift;
|
|
421 |
my $apiPrivateRel = shift;
|
|
422 |
my $apiDeprecatedRel = shift;
|
|
423 |
my $apiObsoletedRel = shift;
|
|
424 |
|
|
425 |
my $sdk = -1;
|
|
426 |
my $oem = -1;
|
|
427 |
my $int = -1;
|
|
428 |
my $priv = -1;
|
|
429 |
my $dep = -1;
|
|
430 |
my $obs = -1;
|
|
431 |
|
|
432 |
my $errorsBeforeCheck = scalar(@$refToErrorList);
|
|
433 |
|
|
434 |
if($apiSdkRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
435 |
{
|
|
436 |
$sdk = $1;
|
|
437 |
}
|
|
438 |
if($apiOemRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
439 |
{
|
|
440 |
$oem = $1;
|
|
441 |
}
|
|
442 |
if($apiInternalRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
443 |
{
|
|
444 |
$int = $1;
|
|
445 |
}
|
|
446 |
if($apiPrivateRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
447 |
{
|
|
448 |
$priv = $1;
|
|
449 |
}
|
|
450 |
if($apiDeprecatedRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
451 |
{
|
|
452 |
$dep = $1;
|
|
453 |
}
|
|
454 |
if($apiObsoletedRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
455 |
{
|
|
456 |
$obs = $1;
|
|
457 |
}
|
|
458 |
|
|
459 |
if($sdk != -1)
|
|
460 |
{
|
|
461 |
if($sdk < $oem || $sdk < $int || $sdk < $priv)
|
|
462 |
{
|
|
463 |
push(@$refToErrorList,getError($API_REL_LOGICAL_ERROR,
|
|
464 |
$apiName, "SDK release"));
|
|
465 |
}
|
|
466 |
}
|
|
467 |
if($oem != -1)
|
|
468 |
{
|
|
469 |
if($oem < $int || $oem < $priv)
|
|
470 |
{
|
|
471 |
push(@$refToErrorList,getError($API_REL_LOGICAL_ERROR,
|
|
472 |
$apiName, "Oem release"));
|
|
473 |
}
|
|
474 |
}
|
|
475 |
if($int != -1)
|
|
476 |
{
|
|
477 |
if($int < $priv)
|
|
478 |
{
|
|
479 |
push(@$refToErrorList,getError($API_REL_LOGICAL_ERROR,
|
|
480 |
$apiName, "Internal release"));
|
|
481 |
}
|
|
482 |
}
|
|
483 |
|
|
484 |
if($dep != -1)
|
|
485 |
{
|
|
486 |
if($dep < $sdk || $dep < $oem || $dep < $int || $dep < $priv)
|
|
487 |
{
|
|
488 |
push(@$refToErrorList,getError($API_REL_LOGICAL_ERROR,
|
|
489 |
$apiName, "Deprecated release value."));
|
|
490 |
}
|
|
491 |
}
|
|
492 |
if($obs != -1)
|
|
493 |
{
|
|
494 |
if($obs < $sdk || $obs < $oem || $obs < $int || $obs < $priv || $obs < $dep)
|
|
495 |
{
|
|
496 |
push(@$refToErrorList,getError($API_REL_LOGICAL_ERROR,
|
|
497 |
$apiName, "Obsoleted release value."));
|
|
498 |
}
|
|
499 |
}
|
|
500 |
|
|
501 |
return scalar(@$refToErrorList) - $errorsBeforeCheck;
|
|
502 |
}
|
|
503 |
|
|
504 |
###########################################################################
|
|
505 |
# Function checks that the information in the files for given release are OK.
|
|
506 |
#
|
|
507 |
# Params: refToErrList, checkedPlatform, apiName, fileName,apiSdkRel,apiOemRel,apiInternalRel,apiPrivateRel,
|
|
508 |
# apiDeprecatedRel,apiObsoletedeRel,fileSdkRel,fileOemRel,fileInternalRel,filePrivateRel,
|
|
509 |
# fileDeprecatedRel,fileObsoletedeRel
|
|
510 |
#
|
|
511 |
# Return: 0 no errors found
|
|
512 |
# > 0 amount of errors found
|
|
513 |
###########################################################################
|
|
514 |
sub checkFileRelRoadMap
|
|
515 |
{
|
|
516 |
my $refToErrorList = shift;
|
|
517 |
my $checkedPlatform = shift;
|
|
518 |
my $apiName = shift;
|
|
519 |
my $fileName = shift;
|
|
520 |
my $apiSdkRel = shift;
|
|
521 |
my $apiOemRel = shift;
|
|
522 |
my $apiInternalRel = shift;
|
|
523 |
my $apiPrivateRel = shift;
|
|
524 |
my $apiDeprecatedRel = shift;
|
|
525 |
my $apiObsoletedRel = shift;
|
|
526 |
my $fileSdkRel = shift;
|
|
527 |
my $fileOemRel = shift;
|
|
528 |
my $fileInternalRel = shift;
|
|
529 |
my $filePrivateRel = shift;
|
|
530 |
my $fileDeprecatedRel = shift;
|
|
531 |
my $fileObsoletedRel = shift;
|
|
532 |
|
|
533 |
my $apiSdk = -1;
|
|
534 |
my $apiOem = -1;
|
|
535 |
my $apiInt = -1;
|
|
536 |
my $apiPriv = -1;
|
|
537 |
my $apiDep = -1;
|
|
538 |
my $apiObs = -1;
|
|
539 |
my $fileSdk = -1;
|
|
540 |
my $fileOem = -1;
|
|
541 |
my $fileInt = -1;
|
|
542 |
my $filePriv = -1;
|
|
543 |
my $fileDep = -1;
|
|
544 |
my $fileObs = -1;
|
|
545 |
|
|
546 |
my $errorsBeforeCheck = scalar(@$refToErrorList);
|
|
547 |
|
|
548 |
#
|
|
549 |
# Parse the wanted platform release from all the fields.
|
|
550 |
#
|
|
551 |
if($apiSdkRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
552 |
{
|
|
553 |
$apiSdk = $1;
|
|
554 |
}
|
|
555 |
if($apiOemRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
556 |
{
|
|
557 |
$apiOem = $1;
|
|
558 |
}
|
|
559 |
if($apiInternalRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
560 |
{
|
|
561 |
$apiInt = $1;
|
|
562 |
}
|
|
563 |
if($apiPrivateRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
564 |
{
|
|
565 |
$apiPriv = $1;
|
|
566 |
}
|
|
567 |
if($apiDeprecatedRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
568 |
{
|
|
569 |
$apiDep = $1;
|
|
570 |
}
|
|
571 |
if($apiObsoletedRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
572 |
{
|
|
573 |
$apiObs = $1;
|
|
574 |
}
|
|
575 |
if($fileSdkRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
576 |
{
|
|
577 |
$fileSdk = $1;
|
|
578 |
}
|
|
579 |
if($fileOemRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
580 |
{
|
|
581 |
$fileOem = $1;
|
|
582 |
}
|
|
583 |
if($fileInternalRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
584 |
{
|
|
585 |
$fileInt = $1;
|
|
586 |
}
|
|
587 |
if($filePrivateRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
588 |
{
|
|
589 |
$filePriv = $1;
|
|
590 |
}
|
|
591 |
if($fileDeprecatedRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
592 |
{
|
|
593 |
$fileDep = $1;
|
|
594 |
}
|
|
595 |
if($fileObsoletedRel =~ /$checkedPlatform\s+([0-9]+\.[0-9]+)/)
|
|
596 |
{
|
|
597 |
$fileObs = $1;
|
|
598 |
}
|
|
599 |
|
|
600 |
|
|
601 |
# --------------------------------------------------------
|
|
602 |
# Actual error checking
|
|
603 |
# --------------------------------------------------------
|
|
604 |
|
|
605 |
|
|
606 |
#
|
|
607 |
# Check that the file row releases make sence in logical way
|
|
608 |
#
|
|
609 |
my $currErrAmount = scalar(@$refToErrorList);
|
|
610 |
if($fileSdk != -1)
|
|
611 |
{
|
|
612 |
if($fileSdk < $fileOem || $fileSdk < $fileInt || $fileSdk < $filePriv)
|
|
613 |
{
|
|
614 |
push(@$refToErrorList,getError($FILE_REL_LOGICAL_ERROR,
|
|
615 |
"$apiName :: $fileName", "SDK release \"$checkedPlatform $fileSdk\""));
|
|
616 |
}
|
|
617 |
}
|
|
618 |
if($fileOem != -1)
|
|
619 |
{
|
|
620 |
if($fileOem < $fileInt || $fileOem < $filePriv)
|
|
621 |
{
|
|
622 |
push(@$refToErrorList,getError($FILE_REL_LOGICAL_ERROR,
|
|
623 |
"$apiName :: $fileName", "Oem release \"$checkedPlatform $fileOem\""));
|
|
624 |
}
|
|
625 |
}
|
|
626 |
if($fileInt != -1)
|
|
627 |
{
|
|
628 |
if($fileInt < $filePriv)
|
|
629 |
{
|
|
630 |
push(@$refToErrorList,getError($FILE_REL_LOGICAL_ERROR,
|
|
631 |
"$apiName :: $fileName", "Internal release \"$checkedPlatform $fileInt\""));
|
|
632 |
}
|
|
633 |
}
|
|
634 |
|
|
635 |
if($fileDep != -1)
|
|
636 |
{
|
|
637 |
if($fileDep < $fileSdk || $fileDep < $fileOem || $fileDep < $fileInt || $fileDep < $filePriv)
|
|
638 |
{
|
|
639 |
push(@$refToErrorList,getError($FILE_REL_LOGICAL_ERROR,
|
|
640 |
"$apiName :: $fileName", "Deprecated release \"$checkedPlatform $fileDep\""));
|
|
641 |
}
|
|
642 |
}
|
|
643 |
if($fileObs != -1)
|
|
644 |
{
|
|
645 |
if($fileObs < $fileSdk || $fileObs < $fileOem || $fileObs < $fileInt || $fileObs < $filePriv || $fileObs < $fileDep)
|
|
646 |
{
|
|
647 |
push(@$refToErrorList,getError($FILE_REL_LOGICAL_ERROR,
|
|
648 |
"$apiName :: $fileName", "Obsoleted release \"$checkedPlatform $fileObs\""));
|
|
649 |
}
|
|
650 |
}
|
|
651 |
|
|
652 |
#
|
|
653 |
# Check the release information for the file compared to the release information defined for the API
|
|
654 |
# (these are only checked, if there was no syntax errors in the release fields for the file).
|
|
655 |
#
|
|
656 |
if($currErrAmount == scalar(@$refToErrorList))
|
|
657 |
{
|
|
658 |
#
|
|
659 |
# Compare the SDK information in the file against the API rel information
|
|
660 |
#
|
|
661 |
if($fileSdk != -1)
|
|
662 |
{
|
|
663 |
# If API is not SDK => error, since file was defined as SDK
|
|
664 |
if($apiSdk == -1)
|
|
665 |
{
|
|
666 |
push(@$refToErrorList,
|
|
667 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
668 |
"$apiName :: $fileName", "File defined as SDK, but API is not a SDK API."));
|
|
669 |
|
|
670 |
}
|
|
671 |
else
|
|
672 |
{
|
|
673 |
if($fileSdk < $apiSdk)
|
|
674 |
{
|
|
675 |
push(@$refToErrorList,
|
|
676 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
677 |
"$apiName :: $fileName",
|
|
678 |
"File defined as SDK from \"$checkedPlatform $fileSdk\", ",
|
|
679 |
"but API defined as SDK only from \"$checkedPlatform $apiSdk\" onwards."));
|
|
680 |
|
|
681 |
}
|
|
682 |
if($apiObs != -1 && $fileSdk > $apiObs)
|
|
683 |
{
|
|
684 |
push(@$refToErrorList,
|
|
685 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
686 |
"$apiName :: $fileName",
|
|
687 |
"File defined as SDK from \"$checkedPlatform $fileSdk\",",
|
|
688 |
"but API was defined as obsoleted \"$checkedPlatform $apiObs\" onwards."));
|
|
689 |
|
|
690 |
}
|
|
691 |
}
|
|
692 |
}
|
|
693 |
#
|
|
694 |
# Compare the Oem information in the file against the API rel information
|
|
695 |
#
|
|
696 |
if($fileOem != -1)
|
|
697 |
{
|
|
698 |
# If API is not Oem => error, since file was defined as Oem
|
|
699 |
if($apiOem == -1)
|
|
700 |
{
|
|
701 |
push(@$refToErrorList,
|
|
702 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
703 |
"$apiName :: $fileName", "File defined as Oem, but API is not an Oem API."));
|
|
704 |
}
|
|
705 |
else
|
|
706 |
{
|
|
707 |
if($fileOem < $apiOem)
|
|
708 |
{
|
|
709 |
push(@$refToErrorList,
|
|
710 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
711 |
"$apiName :: $fileName",
|
|
712 |
"File defined as Oem from \"$checkedPlatform $fileOem\",",
|
|
713 |
"but API defined as OEM only from \"$checkedPlatform $apiOem\" onwards."));
|
|
714 |
|
|
715 |
}
|
|
716 |
if($apiSdk != -1 && $fileOem >= $apiSdk)
|
|
717 |
{
|
|
718 |
push(@$refToErrorList,
|
|
719 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
720 |
"$apiName :: $fileName",
|
|
721 |
"File defined as Oem from \"$checkedPlatform $fileOem\", " ,
|
|
722 |
"but API was defined as SDK from \"$checkedPlatform $apiSdk\" onwards."));
|
|
723 |
|
|
724 |
}
|
|
725 |
if($apiObs != -1 && $fileOem > $apiObs)
|
|
726 |
{
|
|
727 |
push(@$refToErrorList,
|
|
728 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
729 |
"$apiName :: $fileName",
|
|
730 |
"File defined as Oem from \"$checkedPlatform $fileOem\", ",
|
|
731 |
"but API was defined as obsoleted \"$checkedPlatform $apiObs\" onwards."));
|
|
732 |
}
|
|
733 |
}
|
|
734 |
}
|
|
735 |
#
|
|
736 |
# Compare the Internal information in the file against the API rel information
|
|
737 |
#
|
|
738 |
if($fileInt != -1)
|
|
739 |
{
|
|
740 |
# If API is not Internal => error, since file was defined as such
|
|
741 |
if($apiInt == -1)
|
|
742 |
{
|
|
743 |
push(@$refToErrorList,
|
|
744 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
745 |
"$apiName :: $fileName",
|
|
746 |
"File defined as Internal, but API is not an Internal API."));
|
|
747 |
}
|
|
748 |
else
|
|
749 |
{
|
|
750 |
if($fileInt < $apiInt)
|
|
751 |
{
|
|
752 |
push(@$refToErrorList,
|
|
753 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
754 |
"$apiName :: $fileName",
|
|
755 |
"File defined as Internal from \"$checkedPlatform $fileInt\", " ,
|
|
756 |
"but API defined as Internal only from \"$checkedPlatform $apiInt\" onwards."));
|
|
757 |
}
|
|
758 |
if($apiSdk != -1 && $fileInt >= $apiSdk )
|
|
759 |
{
|
|
760 |
push(@$refToErrorList,
|
|
761 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
762 |
"$apiName :: $fileName",
|
|
763 |
"File defined as Internal from \"$checkedPlatform $fileInt\", " ,
|
|
764 |
"but API was defined as SDK from \"$checkedPlatform $apiSdk\" onwards."));
|
|
765 |
|
|
766 |
}
|
|
767 |
if($apiOem != -1 && $fileInt >= $apiOem)
|
|
768 |
{
|
|
769 |
push(@$refToErrorList,
|
|
770 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
771 |
"$apiName :: $fileName",
|
|
772 |
"File defined as Internal from \"$checkedPlatform $fileInt\", " ,
|
|
773 |
"but API was defined as Oem from \"$checkedPlatform $apiOem\" onwards."));
|
|
774 |
|
|
775 |
}
|
|
776 |
if($apiObs != -1 && $fileInt > $apiObs)
|
|
777 |
{
|
|
778 |
push(@$refToErrorList,
|
|
779 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
780 |
"$apiName :: $fileName",
|
|
781 |
"File defined as Internal from \"$checkedPlatform $fileInt\", " ,
|
|
782 |
"but API was defined as obsoleted \"$checkedPlatform $apiObs\" onwards."));
|
|
783 |
}
|
|
784 |
}
|
|
785 |
}
|
|
786 |
#
|
|
787 |
# Compare the Internal information in the file against the API rel information
|
|
788 |
#
|
|
789 |
if($filePriv != -1)
|
|
790 |
{
|
|
791 |
# If API is not Private => error, since file was defined as such
|
|
792 |
if($apiPriv == -1)
|
|
793 |
{
|
|
794 |
push(@$refToErrorList,
|
|
795 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
796 |
"$apiName :: $fileName",
|
|
797 |
"File defined as Private, but API is not an Private API."));
|
|
798 |
}
|
|
799 |
else
|
|
800 |
{
|
|
801 |
if($filePriv < $apiPriv)
|
|
802 |
{
|
|
803 |
push(@$refToErrorList,
|
|
804 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
805 |
"$apiName :: $fileName",
|
|
806 |
"File defined as Private from \"$checkedPlatform $filePriv\", " ,
|
|
807 |
"but API defined as Private only from \"$checkedPlatform $apiPriv\" onwards."));
|
|
808 |
}
|
|
809 |
if($apiSdk != -1 && $filePriv >= $apiSdk)
|
|
810 |
{
|
|
811 |
push(@$refToErrorList,
|
|
812 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
813 |
"$apiName :: $fileName",
|
|
814 |
"File defined as Private from \"$checkedPlatform $filePriv\", " ,
|
|
815 |
"but API was defined as SDK from \"$checkedPlatform $apiSdk\" onwards."));
|
|
816 |
|
|
817 |
}
|
|
818 |
if($apiOem != -1 && $filePriv >= $apiOem)
|
|
819 |
{
|
|
820 |
push(@$refToErrorList,
|
|
821 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
822 |
"$apiName :: $fileName",
|
|
823 |
"File defined as Private from \"$checkedPlatform $filePriv\", " ,
|
|
824 |
"but API was defined as Oem from \"$checkedPlatform $apiOem\" onwards."));
|
|
825 |
}
|
|
826 |
if($apiInt != -1 && $filePriv >= $apiInt)
|
|
827 |
{
|
|
828 |
push(@$refToErrorList,
|
|
829 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
830 |
"$apiName :: $fileName",
|
|
831 |
"File defined as Private from \"$checkedPlatform $filePriv\", " ,
|
|
832 |
"but API was defined as Internal from \"$checkedPlatform $apiInt\" onwards."));
|
|
833 |
}
|
|
834 |
if($apiObs != -1 && $filePriv > $apiObs)
|
|
835 |
{
|
|
836 |
push(@$refToErrorList,
|
|
837 |
getError($FILE_REL_LOGICAL_ERROR,
|
|
838 |
"$apiName :: $fileName",
|
|
839 |
"File defined as Private from \"$checkedPlatform $filePriv\", " ,
|
|
840 |
"but API was defined as obsoleted \"$checkedPlatform $apiObs\" onwards."));
|
|
841 |
}
|
|
842 |
}
|
|
843 |
}
|
|
844 |
}
|
|
845 |
}
|
|
846 |
|
|
847 |
################################################
|
|
848 |
# Function adds the lib to the hash, if it contains valid data
|
|
849 |
################################################
|
|
850 |
sub addLibToHash
|
|
851 |
{
|
|
852 |
my $refToLibHash = shift;
|
|
853 |
my $lib = shift;
|
|
854 |
|
|
855 |
if($lib !~ /^\s*N\/A\s*$/i && $lib !~ /^\s*\-\s*$/ &&
|
|
856 |
$lib !~ /\s*\(*\s*ECOM\s*\)*\s*$/i && $lib !~ /^\s*tbd\s*$/i)
|
|
857 |
{
|
|
858 |
addToHash $refToLibHash,$lib;
|
|
859 |
}
|
|
860 |
}
|
|
861 |
|
|
862 |
################################################
|
|
863 |
# Function adds the dll to the hash, if it contains valid data
|
|
864 |
################################################
|
|
865 |
sub addDllToHash
|
|
866 |
{
|
|
867 |
my $refToDllHash = shift;
|
|
868 |
my $dll = shift;
|
|
869 |
|
|
870 |
if($dll !~ /^\s*N\/A\s*$/i && $dll !~ /^\s*\-\s*$/ &&
|
|
871 |
$dll !~ /\s*\(*\s*ECOM\s*\)*\s*$/i && $dll !~ /^\s*tbd\s*$/i)
|
|
872 |
{
|
|
873 |
addToHash $refToDllHash,$dll;
|
|
874 |
}
|
|
875 |
}
|
|
876 |
###########################################################################
|
|
877 |
# Function that reads specified platform release information from the given worksheet
|
|
878 |
# The information is put to the hashed passed as parameters
|
|
879 |
## if($dll !~ /^\s*N\/A\s*$/i && $dll !~ /^\s*\-\s*$/ &&
|
|
880 |
# $dll !~ /\s*\(*\s*ECOM\s*\)*\s*$/i && $dll !~ /^\s*tbd\s*$/i)
|
|
881 |
# {
|
|
882 |
# addToHash $refToDllHash,$dll;
|
|
883 |
# }
|
|
884 |
|
|
885 |
# Params: referenceToWorksheet,wantedPlatform, wantedRelease, reftoHeaderHash,refToDllHash, refToLibHash,
|
|
886 |
# reftoNonSdkHeaders, [refToNonSdkLibsHash]
|
|
887 |
#
|
|
888 |
# Return: -
|
|
889 |
###########################################################################
|
|
890 |
sub readInfo
|
|
891 |
{
|
|
892 |
my $refToWorksheet = shift;
|
|
893 |
my $plat = shift;
|
|
894 |
my $rel = shift;
|
|
895 |
my $reftoHeaderHash = shift; # SDK headers
|
|
896 |
my $refToDllHash = shift; # SDK dll's
|
|
897 |
my $refToLibHash = shift; # SDK Libs
|
|
898 |
my $refToNonSdkHeaderHash = shift;
|
|
899 |
my $refToFutureHeaderHash = shift; # Files that are coming in future releases
|
|
900 |
my $refToRemovedHeaderHash = shift; # Files that are removed in previous releases
|
|
901 |
my $refToNonSdkLibHash = shift; # optional, migth not exists
|
|
902 |
my $refToFutureLibHash = shift;
|
|
903 |
my $refToRemovedLibHash = shift;
|
|
904 |
|
|
905 |
# check that sheet really exists (it could be missing)
|
|
906 |
if(not defined($refToWorksheet))
|
|
907 |
{
|
|
908 |
return;
|
|
909 |
}
|
|
910 |
# handle optionality
|
|
911 |
if(! defined($refToNonSdkLibHash))
|
|
912 |
{
|
|
913 |
my %hash;
|
|
914 |
$refToNonSdkLibHash = \%hash;
|
|
915 |
}
|
|
916 |
# ----------------------------------------------------------------
|
|
917 |
# look to header information
|
|
918 |
# ----------------------------------------------------------------
|
|
919 |
# API Name
|
|
920 |
# Header file(s) (or "File(s)" in template version 1.6->)
|
|
921 |
# Purpose
|
|
922 |
# Responsible
|
|
923 |
# SDK
|
|
924 |
# Oem (or "Partner" in template version 1.6->1.8 or "Domain" from 1.9->)
|
|
925 |
# Internal
|
|
926 |
# Private (migth be missing, as is the case in the symbian sheet)
|
|
927 |
# Adaptation
|
|
928 |
# Specification
|
|
929 |
# DLL
|
|
930 |
# Import Lib
|
|
931 |
# Other
|
|
932 |
# Grouping (or "Subsystem" in template version 1.6->)
|
|
933 |
# Clients
|
|
934 |
# Deprecated
|
|
935 |
# Obsoleted (or "Removed" in template version 1.6->)
|
|
936 |
# Partner(s) (Only from 1.6->)
|
|
937 |
# Partner Contact(s) (Only from 1.6->)
|
|
938 |
# Owner
|
|
939 |
# Note
|
|
940 |
my $apiNameIndex = getIndexByColName $refToWorksheet,"API Name",$globalMaxColCount;
|
|
941 |
my $fileNameIndex = getIndexByColName $refToWorksheet,"Header file(s)",$globalMaxColCount;
|
|
942 |
if( !defined($fileNameIndex) || $fileNameIndex < 1)
|
|
943 |
{
|
|
944 |
$fileNameIndex = getIndexByColName $refToWorksheet,"File(s)",$globalMaxColCount;
|
|
945 |
}
|
|
946 |
my $purposeIndex = getIndexByColName $refToWorksheet,"Purpose",$globalMaxColCount;
|
|
947 |
my $sdkIndex = getIndexByColName $refToWorksheet,"SDK",$globalMaxColCount;
|
|
948 |
my $oemIndex = getIndexByColName $refToWorksheet,"Oem",$globalMaxColCount;
|
|
949 |
if( !defined($oemIndex) || $oemIndex < 1)
|
|
950 |
{
|
|
951 |
$oemIndex = getIndexByColName $refToWorksheet,"Partner",$globalMaxColCount;
|
|
952 |
}
|
|
953 |
if( !defined($oemIndex) || $oemIndex < 1)
|
|
954 |
{
|
|
955 |
$oemIndex = getIndexByColName $refToWorksheet,"Domain",$globalMaxColCount;
|
|
956 |
}
|
|
957 |
my $internalIndex = getIndexByColName $refToWorksheet,"Internal",$globalMaxColCount;
|
|
958 |
my $privateIndex = getIndexByColName $refToWorksheet,"Private",$globalMaxColCount;
|
|
959 |
|
|
960 |
my $dllIndex = getIndexByColName $refToWorksheet,"DLL",$globalMaxColCount;
|
|
961 |
my $libIndex = getIndexByColName $refToWorksheet,"Import Lib",$globalMaxColCount;
|
|
962 |
my $obsoletedIndex = getIndexByColName $refToWorksheet,"Obsoleted",$globalMaxColCount;
|
|
963 |
if( !defined($obsoletedIndex) || $obsoletedIndex < 1)
|
|
964 |
{
|
|
965 |
$obsoletedIndex = getIndexByColName $refToWorksheet,"Removed",$globalMaxColCount;
|
|
966 |
}
|
|
967 |
|
|
968 |
my $row = 1;
|
|
969 |
my $isAPIRow = 0;
|
|
970 |
my $isRowWanted = 0; # is the row part of given SDK release
|
|
971 |
my $isAPIWanted = 0; # is the api part of given SDK release
|
|
972 |
my $emptyRowCount = 0;
|
|
973 |
|
|
974 |
######################################################################
|
|
975 |
# Loop row by row until we have found $globalMaxEmptyRowCount of rows
|
|
976 |
# empty one after each other.
|
|
977 |
######################################################################
|
|
978 |
for( $row = 2;; $row++ )
|
|
979 |
{
|
|
980 |
#------------------------------------------------------------
|
|
981 |
# Read the needed rows from the row
|
|
982 |
#------------------------------------------------------------
|
|
983 |
my $apiName = $$refToWorksheet->Cells( $row, $apiNameIndex )->{ 'Value' };
|
|
984 |
my $fileName = $$refToWorksheet->Cells( $row, $fileNameIndex )->{ 'Value' };
|
|
985 |
my $purpose = $$refToWorksheet->Cells( $row, $purposeIndex )->{ 'Value' };
|
|
986 |
my $sdk = $$refToWorksheet->Cells( $row, $sdkIndex )->{ 'Value' };
|
|
987 |
my $oem = $$refToWorksheet->Cells( $row, $oemIndex )->{ 'Value' };
|
|
988 |
my $internal = $$refToWorksheet->Cells( $row, $internalIndex )->{ 'Value' };
|
|
989 |
my $private;
|
|
990 |
if($privateIndex > 0)
|
|
991 |
{
|
|
992 |
$private = $$refToWorksheet->Cells( $row, $privateIndex )->{ 'Value' };
|
|
993 |
}
|
|
994 |
my $dll = $$refToWorksheet->Cells( $row, $dllIndex )->{ 'Value' };
|
|
995 |
my $lib = $$refToWorksheet->Cells( $row, $libIndex )->{ 'Value' };
|
|
996 |
my $obsoleted = $$refToWorksheet->Cells( $row, $obsoletedIndex )->{ 'Value' };
|
|
997 |
|
|
998 |
if($apiName =~ /^\s*Comment:/ || $purpose =~ /removed by nokia/i)
|
|
999 |
{
|
|
1000 |
next;
|
|
1001 |
}
|
|
1002 |
|
|
1003 |
#------------------------------------------------------------
|
|
1004 |
# We only allow $globalMaxEmptyRowCount empty rows, before we stop
|
|
1005 |
# handling the specific sheet
|
|
1006 |
#------------------------------------------------------------
|
|
1007 |
if(! (defined($apiName) || defined($fileName)|| defined($dll) ||
|
|
1008 |
defined($lib) || defined($obsoleted)))
|
|
1009 |
{
|
|
1010 |
$emptyRowCount++;
|
|
1011 |
if($emptyRowCount > $globalMaxEmptyRowCount)
|
|
1012 |
{
|
|
1013 |
last;
|
|
1014 |
}
|
|
1015 |
}
|
|
1016 |
else
|
|
1017 |
{
|
|
1018 |
# Was not empty line, reset counter.
|
|
1019 |
$emptyRowCount = 0;
|
|
1020 |
}
|
|
1021 |
|
|
1022 |
#------------------------------------------------------------
|
|
1023 |
# Check, if is an api line and is the API wanted
|
|
1024 |
#------------------------------------------------------------
|
|
1025 |
$isAPIRow = 0;
|
|
1026 |
if(defined($apiName) and $apiName !~ /^\s*$/)
|
|
1027 |
{
|
|
1028 |
$isAPIRow = 1;
|
|
1029 |
}
|
|
1030 |
# Check, if the line is wanted
|
|
1031 |
$isRowWanted = isRowWanted $plat,$rel,$isAPIRow,$sdk,$obsoleted;
|
|
1032 |
|
|
1033 |
# Case where the api/file was not wanted
|
|
1034 |
if($isRowWanted == 4)
|
|
1035 |
{
|
|
1036 |
my $isRowWanted2 = isRowWanted $plat,$rel,$isAPIRow,$oem,$obsoleted;
|
|
1037 |
if($isRowWanted2 == 4)
|
|
1038 |
{
|
|
1039 |
$isRowWanted2 = isRowWanted $plat,$rel,$isAPIRow,$internal,$obsoleted;
|
|
1040 |
}
|
|
1041 |
# Do not check the private field, since those are not in epoc32/include
|
|
1042 |
# if($isRowWanted2 == 4 && $privateIndex > 0)
|
|
1043 |
# {
|
|
1044 |
# $isRowWanted2 = isRowWanted $plat,$rel,$isAPIRow,$private,$obsoleted;
|
|
1045 |
# }
|
|
1046 |
|
|
1047 |
if($isRowWanted2 == 1)
|
|
1048 |
{
|
|
1049 |
# means that the row is in the release, but non-sdk
|
|
1050 |
$isRowWanted = 4;
|
|
1051 |
}
|
|
1052 |
else
|
|
1053 |
{
|
|
1054 |
$isRowWanted = $isRowWanted2;
|
|
1055 |
}
|
|
1056 |
} # if($isRowWanted == 4)
|
|
1057 |
|
|
1058 |
# ----------------------------------------------------------------
|
|
1059 |
# Handle the API line
|
|
1060 |
# ----------------------------------------------------------------
|
|
1061 |
if($isAPIRow == 1 || ($isAPIRow == 0 && $isRowWanted != 1))
|
|
1062 |
{
|
|
1063 |
# Store the information in the separate variable, since we
|
|
1064 |
# need the information, when handling headers (reason is that
|
|
1065 |
# the headers can override the API information, but normally the
|
|
1066 |
# API information is directly the headers information)
|
|
1067 |
$isAPIWanted = $isRowWanted if $isAPIRow == 1;
|
|
1068 |
if($isAPIWanted == 1 && $isRowWanted != 2 && $isRowWanted != 3)
|
|
1069 |
{
|
|
1070 |
# NOTE: in the following addings, we do not add "N/A", "TBD","(ECOM)"
|
|
1071 |
# "ECOM", "-" values
|
|
1072 |
#
|
|
1073 |
# Add the information to the hashes. They migth not all contain
|
|
1074 |
# information, but the called function handles the case.
|
|
1075 |
# (for instance there should be no headers defined)
|
|
1076 |
|
|
1077 |
if($fileName !~ /^\s*tbd\s*$/i && $fileName !~ /^\s*DIR:/i)
|
|
1078 |
{
|
|
1079 |
addToHash $reftoHeaderHash,$fileName;
|
|
1080 |
}
|
|
1081 |
addDllToHash $refToDllHash,$dll;
|
|
1082 |
addLibToHash $refToLibHash,$lib;
|
|
1083 |
}
|
|
1084 |
elsif($isAPIWanted == 2 || $isRowWanted == 2)
|
|
1085 |
{
|
|
1086 |
if($fileName !~ /^\s*tbd\s*$/i && $fileName !~ /^\s*DIR:/i)
|
|
1087 |
{
|
|
1088 |
addToHash $refToRemovedHeaderHash,$fileName;
|
|
1089 |
}
|
|
1090 |
addLibToHash $refToRemovedLibHash,$lib;
|
|
1091 |
}
|
|
1092 |
elsif($isAPIWanted == 3 || $isRowWanted == 3)
|
|
1093 |
{
|
|
1094 |
if($fileName !~ /^\s*tbd\s*$/i && $fileName !~ /^\s*DIR:/i)
|
|
1095 |
{
|
|
1096 |
addToHash $refToFutureHeaderHash,$fileName;
|
|
1097 |
}
|
|
1098 |
addLibToHash $refToFutureLibHash,$lib;
|
|
1099 |
}
|
|
1100 |
elsif($isAPIWanted != 4)
|
|
1101 |
{
|
|
1102 |
if($fileName !~ /^\s*tbd\s*$/i && $fileName !~ /^\s*DIR:/i)
|
|
1103 |
{
|
|
1104 |
addToHash $refToNonSdkHeaderHash,$fileName;
|
|
1105 |
}
|
|
1106 |
addLibToHash $refToNonSdkLibHash,$lib;
|
|
1107 |
}
|
|
1108 |
}
|
|
1109 |
# ----------------------------------------------------------------
|
|
1110 |
# Handle the header line, if the API is wanted and row is wanted
|
|
1111 |
# ----------------------------------------------------------------
|
|
1112 |
elsif($isRowWanted == 1)
|
|
1113 |
{
|
|
1114 |
if($isAPIWanted == 1)
|
|
1115 |
{
|
|
1116 |
# Add the information to the hashes. They migth not all contain
|
|
1117 |
# information, but the called function handles the case.
|
|
1118 |
if($fileName !~ /^\s*tbd\s*$/i && $fileName !~ /^\s*DIR:/i)
|
|
1119 |
{
|
|
1120 |
addToHash $reftoHeaderHash,$fileName;
|
|
1121 |
}
|
|
1122 |
addDllToHash $refToDllHash,$dll;
|
|
1123 |
addLibToHash $refToLibHash,$lib;
|
|
1124 |
}
|
|
1125 |
# If the api row was empty => private or no release specified => do not include it anywhere.
|
|
1126 |
elsif($isAPIWanted != 4)
|
|
1127 |
{
|
|
1128 |
if($fileName !~ /^\s*tbd\s*$/i && $fileName !~ /^\s*DIR:/i)
|
|
1129 |
{
|
|
1130 |
addToHash $refToNonSdkHeaderHash,$fileName;
|
|
1131 |
}
|
|
1132 |
addLibToHash $refToNonSdkLibHash,$lib;
|
|
1133 |
}
|
|
1134 |
}
|
|
1135 |
# ----------------------------------------------------------------
|
|
1136 |
# Handle the header line, row is not wanted
|
|
1137 |
# ----------------------------------------------------------------
|
|
1138 |
# else
|
|
1139 |
# {
|
|
1140 |
# if($fileName !~ /^\s*tbd\s*$/i && $fileName !~ /^\s*DIR:/i)
|
|
1141 |
# {
|
|
1142 |
# addToHash $refToNonSdkHeaderHash,$fileName;
|
|
1143 |
# }
|
|
1144 |
# addLibToHash $refToNonSdkLibHash,$lib;
|
|
1145 |
# }
|
|
1146 |
}
|
|
1147 |
}
|
|
1148 |
|
|
1149 |
|
|
1150 |
###########################################################################
|
|
1151 |
# Function that reads all the information in the given interface sheet and checks
|
|
1152 |
# for conlicts/inconsistencies.
|
|
1153 |
# The following things are currently checked:
|
|
1154 |
# - The 1 row is according to the template (at least the most important fields)
|
|
1155 |
# - API row
|
|
1156 |
# * always contains Description
|
|
1157 |
# * The SDK/OEM/Internal/Private/deprecated/obsoleted column values are in correct syntax
|
|
1158 |
# * API row has to contain at least 1 categorization
|
|
1159 |
# * There are no headers defined in the API row
|
|
1160 |
# - The lib field
|
|
1161 |
# * Does not contain "dll" definitions
|
|
1162 |
# * No "TBD" values
|
|
1163 |
# - The dll field
|
|
1164 |
# * Does not contain "lib" definitions
|
|
1165 |
# * No "TBD" values
|
|
1166 |
# - The header row
|
|
1167 |
# * exactly one file for each row
|
|
1168 |
# * only allowed values (no TBD for example)
|
|
1169 |
#
|
|
1170 |
# Params: referenceToWorksheet, Sheet name, refToConflictList
|
|
1171 |
#
|
|
1172 |
# Return: -
|
|
1173 |
#
|
|
1174 |
# The syntax of refToConflictList is:
|
|
1175 |
#
|
|
1176 |
# errorTypes:
|
|
1177 |
# 0 = incorrect template format, details is the description as text
|
|
1178 |
#
|
|
1179 |
# (
|
|
1180 |
# (errorType,<details, format depends on the errprType (see above))
|
|
1181 |
# (
|
|
1182 |
###########################################################################
|
|
1183 |
sub checkConflicts
|
|
1184 |
{
|
|
1185 |
my $refToWorksheet = shift;
|
|
1186 |
my $sheetName = shift;
|
|
1187 |
my $refToErrorList = shift;
|
|
1188 |
|
|
1189 |
# check that sheet really exists (it could be missing)
|
|
1190 |
if(not defined($refToWorksheet))
|
|
1191 |
{
|
|
1192 |
return;
|
|
1193 |
}
|
|
1194 |
|
|
1195 |
$sheetName =~ /([a-zA-Z0-9_ \.]+\.xls)/i;
|
|
1196 |
$currFileName = $1;
|
|
1197 |
# ----------------------------------------------------------------
|
|
1198 |
# look to header information
|
|
1199 |
# ----------------------------------------------------------------
|
|
1200 |
# API Name
|
|
1201 |
# Header file(s) (or "File(s)" in template version 1.6->)
|
|
1202 |
# Purpose
|
|
1203 |
# Responsible
|
|
1204 |
# SDK
|
|
1205 |
# Oem (or "Partner" in template version 1.6->1.8 or "Domain" from 1.9->)
|
|
1206 |
# Internal
|
|
1207 |
# Private (migth be missing, as is the case in the symbian sheet)
|
|
1208 |
# Adaptation
|
|
1209 |
# Specification
|
|
1210 |
# DLL
|
|
1211 |
# Import Lib
|
|
1212 |
# Other
|
|
1213 |
# Grouping (or "Subsystem" in template version 1.6->)
|
|
1214 |
# Clients
|
|
1215 |
# Deprecated
|
|
1216 |
# Obsoleted (or "Removed" in template version 1.6->)
|
|
1217 |
# Partner(s) (Only from 1.6->)
|
|
1218 |
# Partner Contact(s) (Only from 1.6->)
|
|
1219 |
# Owner
|
|
1220 |
# Note
|
|
1221 |
my $apiNameIndex = getIndexByColName $refToWorksheet,"API Name",$globalMaxColCount;
|
|
1222 |
my $fileNameIndex = getIndexByColName $refToWorksheet,"Header file(s)",$globalMaxColCount;
|
|
1223 |
if( !defined($fileNameIndex) || $fileNameIndex < 1)
|
|
1224 |
{
|
|
1225 |
$fileNameIndex = getIndexByColName $refToWorksheet,"File(s)",$globalMaxColCount;
|
|
1226 |
}
|
|
1227 |
my $purposeIndex = getIndexByColName $refToWorksheet,"Purpose",$globalMaxColCount;
|
|
1228 |
my $sdkIndex = getIndexByColName $refToWorksheet,"SDK",$globalMaxColCount;
|
|
1229 |
my $oemIndex = getIndexByColName $refToWorksheet,"Oem",$globalMaxColCount;
|
|
1230 |
if( !defined($oemIndex) || $oemIndex < 1)
|
|
1231 |
{
|
|
1232 |
$oemIndex = getIndexByColName $refToWorksheet,"Partner",$globalMaxColCount;
|
|
1233 |
}
|
|
1234 |
if( !defined($oemIndex) || $oemIndex < 1)
|
|
1235 |
{
|
|
1236 |
$oemIndex = getIndexByColName $refToWorksheet,"Domain",$globalMaxColCount;
|
|
1237 |
}
|
|
1238 |
my $internalIndex = getIndexByColName $refToWorksheet,"Internal",$globalMaxColCount;
|
|
1239 |
my $privateIndex = getIndexByColName $refToWorksheet,"Private",$globalMaxColCount;
|
|
1240 |
my $adaptIndex = getIndexByColName $refToWorksheet,"Adaptation",$globalMaxColCount;
|
|
1241 |
my $dllIndex = getIndexByColName $refToWorksheet,"DLL",$globalMaxColCount;
|
|
1242 |
my $libIndex = getIndexByColName $refToWorksheet,"Import Lib",$globalMaxColCount;
|
|
1243 |
my $deprecatedIndex = getIndexByColName $refToWorksheet,"Deprecated",$globalMaxColCount;
|
|
1244 |
my $obsoletedIndex = getIndexByColName $refToWorksheet,"Obsoleted",$globalMaxColCount;
|
|
1245 |
if( !defined($obsoletedIndex) || $obsoletedIndex < 1)
|
|
1246 |
{
|
|
1247 |
$obsoletedIndex = getIndexByColName $refToWorksheet,"Removed",$globalMaxColCount;
|
|
1248 |
}
|
|
1249 |
|
|
1250 |
#############################
|
|
1251 |
# Check, that column names are correct ones
|
|
1252 |
#############################
|
|
1253 |
if($apiNameIndex < 0 || $fileNameIndex < 0 || $sdkIndex < 0 ||
|
|
1254 |
$oemIndex < 0 || $internalIndex < 0)
|
|
1255 |
{
|
|
1256 |
push(@$refToErrorList,
|
|
1257 |
getError($TEMPLATE_SYNTAX_ERROR,
|
|
1258 |
"The column names are not according to the template."));
|
|
1259 |
return;
|
|
1260 |
}
|
|
1261 |
|
|
1262 |
my $row = 1;
|
|
1263 |
my $isAPIRow = 0;
|
|
1264 |
my $isRowWanted = 0;
|
|
1265 |
my $isAPIWanted = 0;
|
|
1266 |
my $emptyRowCount = 0;
|
|
1267 |
|
|
1268 |
my $isConflict = 0;
|
|
1269 |
my $currApiName = "";
|
|
1270 |
my $apiSdkRel = -1;
|
|
1271 |
my $apiOemRel = -1;
|
|
1272 |
my $apiInternalRel = -1;
|
|
1273 |
my $apiPrivateRel = -1;
|
|
1274 |
my $apiDeprecatedRel = -1;
|
|
1275 |
my $apiObsoletedRel = -1;
|
|
1276 |
|
|
1277 |
my $currApiRelInfoOK = 0;
|
|
1278 |
|
|
1279 |
######################################################################
|
|
1280 |
# Loop row by row until we have found $globalMaxEmptyRowCount of rows
|
|
1281 |
# empty one after each other.
|
|
1282 |
######################################################################
|
|
1283 |
for( $row = 2;; $row++ )
|
|
1284 |
{
|
|
1285 |
$isConflict = 0;
|
|
1286 |
|
|
1287 |
#------------------------------------------------------------
|
|
1288 |
# Read the needed rows from the row
|
|
1289 |
#------------------------------------------------------------
|
|
1290 |
my $apiName = $$refToWorksheet->Cells( $row, $apiNameIndex )->{ 'Value' };
|
|
1291 |
my $fileName = $$refToWorksheet->Cells( $row, $fileNameIndex )->{ 'Value' };
|
|
1292 |
my $purpose = $$refToWorksheet->Cells( $row, $purposeIndex )->{ 'Value' };
|
|
1293 |
my $sdk = $$refToWorksheet->Cells( $row, $sdkIndex )->{ 'Value' };
|
|
1294 |
my $oem = $$refToWorksheet->Cells( $row, $oemIndex )->{ 'Value' };
|
|
1295 |
my $internal = $$refToWorksheet->Cells( $row, $internalIndex )->{ 'Value' };
|
|
1296 |
my $adapt = $$refToWorksheet->Cells( $row, $adaptIndex )->{ 'Value' };
|
|
1297 |
my $dll = $$refToWorksheet->Cells( $row, $dllIndex )->{ 'Value' };
|
|
1298 |
my $lib = $$refToWorksheet->Cells( $row, $libIndex )->{ 'Value' };
|
|
1299 |
my $deprecated = $$refToWorksheet->Cells( $row, $deprecatedIndex )->{ 'Value' };
|
|
1300 |
my $obsoleted = $$refToWorksheet->Cells( $row, $obsoletedIndex )->{ 'Value' };
|
|
1301 |
|
|
1302 |
my $private;
|
|
1303 |
if($privateIndex > 0)
|
|
1304 |
{
|
|
1305 |
$private = $$refToWorksheet->Cells( $row, $privateIndex )->{ 'Value' };
|
|
1306 |
}
|
|
1307 |
#------------------------------------------------------------
|
|
1308 |
# We only allow $globalMaxEmptyRowCount empty rows, before we stop
|
|
1309 |
# handling the specific sheet
|
|
1310 |
#------------------------------------------------------------
|
|
1311 |
if(! (defined($apiName) || defined($fileName)|| defined($dll) ||
|
|
1312 |
defined($lib) || defined($obsoleted)))
|
|
1313 |
{
|
|
1314 |
$emptyRowCount++;
|
|
1315 |
if($emptyRowCount > $globalMaxEmptyRowCount)
|
|
1316 |
{
|
|
1317 |
last;
|
|
1318 |
}
|
|
1319 |
}
|
|
1320 |
else
|
|
1321 |
{
|
|
1322 |
# Was not empty line, reset counter.
|
|
1323 |
$emptyRowCount = 0;
|
|
1324 |
}
|
|
1325 |
|
|
1326 |
#------------------------------------------------------------
|
|
1327 |
# Handle API row
|
|
1328 |
#------------------------------------------------------------
|
|
1329 |
$isAPIRow = 0;
|
|
1330 |
if(defined($apiName) and $apiName !~ /^\s*$/)
|
|
1331 |
{
|
|
1332 |
$isAPIRow = 1;
|
|
1333 |
$currApiRelInfoOK = 1;
|
|
1334 |
$currApiName = $apiName;
|
|
1335 |
# Reset the release values and set new values to them.
|
|
1336 |
$apiSdkRel = -1;
|
|
1337 |
$apiOemRel = -1;
|
|
1338 |
$apiInternalRel = -1;
|
|
1339 |
$apiPrivateRel = -1;
|
|
1340 |
$apiDeprecatedRel = -1;
|
|
1341 |
$apiObsoletedRel = -1;
|
|
1342 |
setRelValue(\$apiSdkRel,$sdk);
|
|
1343 |
setRelValue(\$apiOemRel,$oem);
|
|
1344 |
setRelValue(\$apiInternalRel,$internal);
|
|
1345 |
setRelValue(\$apiDeprecatedRel,$deprecated);
|
|
1346 |
setRelValue(\$apiObsoletedRel,$obsoleted);
|
|
1347 |
|
|
1348 |
if($privateIndex > -1)
|
|
1349 |
{
|
|
1350 |
setRelValue(\$apiPrivateRel,$private);
|
|
1351 |
}
|
|
1352 |
|
|
1353 |
if($apiName =~ /^\s*Comment:/ || $purpose =~ /removed by nokia/i)
|
|
1354 |
{
|
|
1355 |
next;
|
|
1356 |
}
|
|
1357 |
|
|
1358 |
################################################
|
|
1359 |
# Error checking
|
|
1360 |
################################################
|
|
1361 |
|
|
1362 |
#
|
|
1363 |
# API description is needed
|
|
1364 |
#
|
|
1365 |
if(!defined($purpose) || $purpose =~ /^\s*$/)
|
|
1366 |
{
|
|
1367 |
push(@$refToErrorList,getError($API_DESC_MISSING_ERROR,
|
|
1368 |
$currApiName));
|
|
1369 |
|
|
1370 |
}
|
|
1371 |
|
|
1372 |
#
|
|
1373 |
# Adaptation field has to be set for API
|
|
1374 |
#
|
|
1375 |
if($purpose !~ /is a collection api/i && defined($adapt))
|
|
1376 |
{
|
|
1377 |
if( $adapt !~ /^\s*No\s*$/ && $adapt !~ /^\s*Yes\s*$/)
|
|
1378 |
{
|
|
1379 |
push(@$refToErrorList,getError($API_ADAPTATION_ERROR,
|
|
1380 |
$currApiName,"Value was: \"$adapt\""));
|
|
1381 |
}
|
|
1382 |
}
|
|
1383 |
#
|
|
1384 |
# Check that release information is in correct format
|
|
1385 |
#
|
|
1386 |
my $currErrAmount = scalar(@$refToErrorList);
|
|
1387 |
if(checkRel($apiSdkRel))
|
|
1388 |
{
|
|
1389 |
push(@$refToErrorList,getError($API_REL_SYNTAX_ERROR,
|
|
1390 |
$currApiName,
|
|
1391 |
"SDK release value \"$apiSdkRel\""));
|
|
1392 |
}
|
|
1393 |
if(checkRel($apiOemRel))
|
|
1394 |
{
|
|
1395 |
push(@$refToErrorList,getError($API_REL_SYNTAX_ERROR,
|
|
1396 |
$currApiName,
|
|
1397 |
"OEM release value \"$apiOemRel\""));
|
|
1398 |
}
|
|
1399 |
|
|
1400 |
if(checkRel($apiInternalRel))
|
|
1401 |
{
|
|
1402 |
push(@$refToErrorList,getError($API_REL_SYNTAX_ERROR,
|
|
1403 |
$currApiName,
|
|
1404 |
"Internal release value \"$apiInternalRel\""));
|
|
1405 |
}
|
|
1406 |
|
|
1407 |
if($privateIndex > -1 && checkRel($apiPrivateRel))
|
|
1408 |
{
|
|
1409 |
push(@$refToErrorList,getError($API_REL_SYNTAX_ERROR,
|
|
1410 |
$currApiName,
|
|
1411 |
"Private release value \"$apiPrivateRel\""));
|
|
1412 |
}
|
|
1413 |
|
|
1414 |
if(checkRel($apiDeprecatedRel))
|
|
1415 |
{
|
|
1416 |
push(@$refToErrorList,getError($API_REL_SYNTAX_ERROR,
|
|
1417 |
$currApiName,
|
|
1418 |
"Deprecated release value \"$apiDeprecatedRel\""));
|
|
1419 |
}
|
|
1420 |
if(checkRel($apiObsoletedRel))
|
|
1421 |
{
|
|
1422 |
push(@$refToErrorList,getError($API_REL_SYNTAX_ERROR,
|
|
1423 |
$currApiName,
|
|
1424 |
"Obsoleted release value \"$apiObsoletedRel\""));
|
|
1425 |
}
|
|
1426 |
|
|
1427 |
#
|
|
1428 |
# Check the release information for the api
|
|
1429 |
# (these are only checked, if there was no syntax errors in the release fields.
|
|
1430 |
#
|
|
1431 |
if($currErrAmount == scalar(@$refToErrorList))
|
|
1432 |
{
|
|
1433 |
#
|
|
1434 |
# Check that there is at least one release for the API.
|
|
1435 |
#
|
|
1436 |
if($apiSdkRel == -1 && $apiOemRel == -1 &&
|
|
1437 |
$apiInternalRel == -1 && $apiPrivateRel == -1 && $purpose !~ /is a collection api/i)
|
|
1438 |
{
|
|
1439 |
push(@$refToErrorList,getError($API_REL_MISSING_ERROR,
|
|
1440 |
$currApiName));
|
|
1441 |
$currApiRelInfoOK = 0;
|
|
1442 |
}
|
|
1443 |
elsif($apiSdkRel == -1 && $apiOemRel == -1 &&
|
|
1444 |
$apiInternalRel == -1 && $apiPrivateRel == -1)
|
|
1445 |
{
|
|
1446 |
if(checkApiRelRoadMap($refToErrorList,"S60",$currApiName,$apiSdkRel,$apiOemRel,
|
|
1447 |
$apiInternalRel,$apiPrivateRel,$apiDeprecatedRel,$apiObsoletedRel))
|
|
1448 |
{
|
|
1449 |
$currApiRelInfoOK = 0;
|
|
1450 |
}
|
|
1451 |
if(checkApiRelRoadMap($refToErrorList,"S90",$currApiName,$apiSdkRel,$apiOemRel,
|
|
1452 |
$apiInternalRel,$apiPrivateRel,$apiDeprecatedRel,$apiObsoletedRel))
|
|
1453 |
{
|
|
1454 |
$currApiRelInfoOK = 0;
|
|
1455 |
}
|
|
1456 |
}
|
|
1457 |
}
|
|
1458 |
else
|
|
1459 |
{
|
|
1460 |
$currApiRelInfoOK = 0;
|
|
1461 |
}
|
|
1462 |
|
|
1463 |
#
|
|
1464 |
# Check that there are no headers defined in the API row
|
|
1465 |
#
|
|
1466 |
if($fileName !~ /^\s*$/)
|
|
1467 |
{
|
|
1468 |
push(@$refToErrorList,getError($API_HEADERS_IN_ROW_ERROR,
|
|
1469 |
$currApiName));
|
|
1470 |
}
|
|
1471 |
}
|
|
1472 |
|
|
1473 |
|
|
1474 |
#------------------------------------------------------------
|
|
1475 |
# Check the LIB and DLL fields.
|
|
1476 |
#------------------------------------------------------------
|
|
1477 |
if(defined($dll) && $dll !~ /^\s*$/ && $dll !~ /\s*\(*\s*ECOM\s*\)*\s*$/i && $dll !~ /^\s*tbd\s*$/i)
|
|
1478 |
{
|
|
1479 |
if( $dll =~ /\.lib/i)
|
|
1480 |
{
|
|
1481 |
push(@$refToErrorList,getError($DLL_SYNTAX_ERROR,
|
|
1482 |
$currApiName,
|
|
1483 |
"DLL column contains LIBs."));
|
|
1484 |
}
|
|
1485 |
elsif( $dll !~ /\.[dll|agt|nif|prt|csy|mdl]/i && $dll !~ /^\s*N\/A\s*$/i && $dll !~ /^\s*\-\s*$/i )
|
|
1486 |
{
|
|
1487 |
push(@$refToErrorList,getError($DLL_SYNTAX_ERROR,
|
|
1488 |
$currApiName,
|
|
1489 |
"DLL column contains illegal value(s):",
|
|
1490 |
" \"$dll\""));
|
|
1491 |
}
|
|
1492 |
}
|
|
1493 |
if(defined($lib) && $lib !~ /^\s*$/ && $lib !~ /\s*\(*\s*ECOM\s*\)*\s*$/i && $lib !~ /^\s*tbd\s*$/i)
|
|
1494 |
{
|
|
1495 |
if( $lib =~ /\.dll/i)
|
|
1496 |
{
|
|
1497 |
push(@$refToErrorList,getError($LIB_SYNTAX_ERROR,
|
|
1498 |
$currApiName,
|
|
1499 |
"LIB column contains DLLs."));
|
|
1500 |
}
|
|
1501 |
elsif( $lib !~ /\.lib/i && $lib !~ /^\s*N\/A\s*$/i && $lib !~ /^\s*\-s*$/i )
|
|
1502 |
{
|
|
1503 |
push(@$refToErrorList,getError($LIB_SYNTAX_ERROR,
|
|
1504 |
$currApiName,
|
|
1505 |
"LIB column contains illegal values.",
|
|
1506 |
"\"$lib\""));
|
|
1507 |
}
|
|
1508 |
}
|
|
1509 |
|
|
1510 |
#------------------------------------------------------------
|
|
1511 |
# Check file definition rows (only if the api row was ok)
|
|
1512 |
#------------------------------------------------------------
|
|
1513 |
if($isAPIRow == 0 && defined($fileName) && $fileName !~ /^\s*$/)
|
|
1514 |
{
|
|
1515 |
# Set the release values for header information
|
|
1516 |
my $hdrSdkRel = -1;
|
|
1517 |
my $hdrOemRel = -1;
|
|
1518 |
my $hdrInternalRel = -1;
|
|
1519 |
my $hdrPrivateRel = -1;
|
|
1520 |
my $hdrDeprecatedRel = -1;
|
|
1521 |
my $hdrObsoletedRel = -1;
|
|
1522 |
setRelValue(\$hdrSdkRel,$sdk);
|
|
1523 |
setRelValue(\$hdrOemRel,$oem);
|
|
1524 |
setRelValue(\$hdrInternalRel,$internal);
|
|
1525 |
setRelValue(\$hdrDeprecatedRel,$deprecated);
|
|
1526 |
setRelValue(\$hdrObsoletedRel,$obsoleted);
|
|
1527 |
|
|
1528 |
if($privateIndex > -1)
|
|
1529 |
{
|
|
1530 |
setRelValue(\$hdrPrivateRel,$private);
|
|
1531 |
}
|
|
1532 |
|
|
1533 |
################################################
|
|
1534 |
# Error checking
|
|
1535 |
################################################
|
|
1536 |
#
|
|
1537 |
# Check that only allowed values are used
|
|
1538 |
if( $fileName !~ /^\s*DIR:/i && $fileName !~ /^\s*FILE:/i &&
|
|
1539 |
$fileName !~ /^\s*[a-zA-Z0-9\\\/_-]+\.[h|inl|rh|hrh|loc|pan]/i &&
|
|
1540 |
$fileName !~ /^\s*tbd\s*$/i)
|
|
1541 |
{
|
|
1542 |
push(@$refToErrorList,
|
|
1543 |
getError($FILE_COLUMN_SYNTAX_ERROR,
|
|
1544 |
$currApiName,"\"$fileName\""));
|
|
1545 |
}
|
|
1546 |
#
|
|
1547 |
# Check that there is only 1 file in the row.
|
|
1548 |
#
|
|
1549 |
elsif($fileName =~ /(\.[h|inl|rh|hrh|loc|pan])/ig)
|
|
1550 |
{
|
|
1551 |
my @list;
|
|
1552 |
@list = ($fileName =~ /(\.[h|inl|rh|hrh|loc|pan])/ig);
|
|
1553 |
if(scalar(@list) > 1)
|
|
1554 |
{
|
|
1555 |
push(@$refToErrorList,
|
|
1556 |
getError($FILE_MORE_THAN_ONE_FILE_ERROR,
|
|
1557 |
$currApiName, "\"$fileName\""));
|
|
1558 |
}
|
|
1559 |
}
|
|
1560 |
|
|
1561 |
#
|
|
1562 |
# Check that the release information is correctly defined
|
|
1563 |
# (only checked, if API row was OK from that point
|
|
1564 |
if($currApiRelInfoOK == 1)
|
|
1565 |
{
|
|
1566 |
#
|
|
1567 |
# Check that release information is in correct format
|
|
1568 |
#
|
|
1569 |
my $currErrAmount = scalar(@$refToErrorList);
|
|
1570 |
if(checkRel($hdrSdkRel))
|
|
1571 |
{
|
|
1572 |
push(@$refToErrorList,
|
|
1573 |
getError($FILE_REL_SYNTAX_ERROR,
|
|
1574 |
"$currApiName :: $fileName",
|
|
1575 |
"SDK release value \"$hdrSdkRel\""));
|
|
1576 |
}
|
|
1577 |
if(checkRel($hdrOemRel))
|
|
1578 |
{
|
|
1579 |
push(@$refToErrorList,
|
|
1580 |
getError($FILE_REL_SYNTAX_ERROR,
|
|
1581 |
"$currApiName :: $fileName", "OEM release value \"$hdrOemRel\""));
|
|
1582 |
}
|
|
1583 |
if(checkRel($hdrInternalRel))
|
|
1584 |
{
|
|
1585 |
push(@$refToErrorList,
|
|
1586 |
getError($FILE_REL_SYNTAX_ERROR,
|
|
1587 |
"$currApiName :: $fileName", "Internal release value \"$hdrInternalRel\""));
|
|
1588 |
}
|
|
1589 |
|
|
1590 |
if($privateIndex > -1 && checkRel($hdrPrivateRel))
|
|
1591 |
{
|
|
1592 |
push(@$refToErrorList,
|
|
1593 |
getError($FILE_REL_SYNTAX_ERROR,
|
|
1594 |
"$currApiName :: $fileName", "Private release value \"$hdrPrivateRel\""));
|
|
1595 |
}
|
|
1596 |
|
|
1597 |
if(checkRel($hdrDeprecatedRel))
|
|
1598 |
{
|
|
1599 |
push(@$refToErrorList,
|
|
1600 |
getError($FILE_REL_SYNTAX_ERROR,
|
|
1601 |
"$currApiName :: $fileName", "Deprecated release value \"$hdrDeprecatedRel\""));
|
|
1602 |
}
|
|
1603 |
if(checkRel($hdrObsoletedRel))
|
|
1604 |
{
|
|
1605 |
push(@$refToErrorList,
|
|
1606 |
getError($FILE_REL_SYNTAX_ERROR,
|
|
1607 |
"$currApiName :: $fileName", "Obsoleted release value \"$hdrObsoletedRel\""));
|
|
1608 |
}
|
|
1609 |
|
|
1610 |
|
|
1611 |
#
|
|
1612 |
# Check the release information for the file
|
|
1613 |
# (these are only checked, if there was no syntax errors in the release fields.
|
|
1614 |
#
|
|
1615 |
if($currErrAmount == scalar(@$refToErrorList))
|
|
1616 |
{
|
|
1617 |
checkFileRelRoadMap($refToErrorList,"S60",$currApiName,$fileName,$apiSdkRel,$apiOemRel,
|
|
1618 |
$apiInternalRel,$apiPrivateRel,$apiDeprecatedRel,$apiObsoletedRel,
|
|
1619 |
$hdrSdkRel,$hdrOemRel,$hdrInternalRel,$hdrPrivateRel,
|
|
1620 |
$hdrDeprecatedRel,$hdrObsoletedRel);
|
|
1621 |
checkFileRelRoadMap($refToErrorList,"S90",$currApiName,$fileName,$apiSdkRel,$apiOemRel,
|
|
1622 |
$apiInternalRel,$apiPrivateRel,$apiDeprecatedRel,$apiObsoletedRel,
|
|
1623 |
$hdrSdkRel,$hdrOemRel,$hdrInternalRel,$hdrPrivateRel,
|
|
1624 |
$hdrDeprecatedRel,$hdrObsoletedRel);
|
|
1625 |
}
|
|
1626 |
}
|
|
1627 |
|
|
1628 |
}
|
|
1629 |
}
|
|
1630 |
}
|
|
1631 |
|
|
1632 |
|
|
1633 |
#################################
|
|
1634 |
# Extracs from the given string S60 and S90 releases
|
|
1635 |
# and puts then into the hash, if releases were found.
|
|
1636 |
#################################
|
|
1637 |
sub addToTypeHash
|
|
1638 |
{
|
|
1639 |
my $refToHash = shift;
|
|
1640 |
my $str = shift;
|
|
1641 |
|
|
1642 |
if($str=~ /S60\s+([0-9.]+)/i)
|
|
1643 |
{
|
|
1644 |
$$refToHash{"s60"} = $1;
|
|
1645 |
}
|
|
1646 |
if($str=~ /S90\s+([0-9.]+)/i)
|
|
1647 |
{
|
|
1648 |
$$refToHash{"s90"} = $1;
|
|
1649 |
}
|
|
1650 |
}
|
|
1651 |
###########################################################################
|
|
1652 |
# Function that reads certain columns from the interface sheet to the given hash.
|
|
1653 |
# The function is intended to be called for the c++ API definitions.
|
|
1654 |
# For the cenrep/P&S APIs use the "readCrepInfo2"-function
|
|
1655 |
#
|
|
1656 |
# The format of the returned hash is:
|
|
1657 |
# {
|
|
1658 |
# <ordinal> =>
|
|
1659 |
# {
|
|
1660 |
# "api_name" => <APIName>
|
|
1661 |
# "api_type" => "1" # 1 means c++, 2 means cenrep/P&S apis
|
|
1662 |
# "owner_entity" => <API owner entity>
|
|
1663 |
# "files" => {<file1> => 1 ,<file2> => 1,...}
|
|
1664 |
# "purpose" => <purpose text>
|
|
1665 |
# "sdk" => {
|
|
1666 |
# "s60" => <releaseNbr>
|
|
1667 |
# "s90" => <releaseNbr> # Note 1:
|
|
1668 |
# }
|
|
1669 |
# "partner" => {
|
|
1670 |
# "s60" => <releaseNbr>
|
|
1671 |
# "s90" => <releaseNbr> # Note 1:
|
|
1672 |
# }
|
|
1673 |
# "internal" => {
|
|
1674 |
# "s60" => <releaseNbr>
|
|
1675 |
# "s90" => <releaseNbr> # Note 1:
|
|
1676 |
# }
|
|
1677 |
# "private" => {
|
|
1678 |
# "s60" => <releaseNbr>
|
|
1679 |
# "s90" => <releaseNbr> # Note 1:
|
|
1680 |
# }
|
|
1681 |
# "adapt" => "0 = no adaptation, 1 = adaptation"
|
|
1682 |
# "specification" => <spec name(s)>
|
|
1683 |
# "dll" => {<dll1> => 1,<dll2> => 1,...}
|
|
1684 |
# "lib" => {<dll1> => 1,<dll2> => 1,...}
|
|
1685 |
# "subsystem" => <subsystem name>
|
|
1686 |
# "deprecated" => {
|
|
1687 |
# "s60" => <releaseNbr>
|
|
1688 |
# "s90" => <releaseNbr> # Note 1:
|
|
1689 |
# my $refToHash = shift; }
|
|
1690 |
# "removed" => {
|
|
1691 |
# "s60" => <releaseNbr>
|
|
1692 |
# "s90" => <releaseNbr> # Note 1:
|
|
1693 |
# }
|
|
1694 |
# "partners" => <namesStr>
|
|
1695 |
# "partner_contacts" => <namesStr>
|
|
1696 |
# "base" => "0 = not base service, 1 = is base service"
|
|
1697 |
# "clients" => <namesStr>
|
|
1698 |
# "clients_org" => <namesStr>
|
|
1699 |
# "owner" => <API owner name>
|
|
1700 |
# "for_adapt_since" => {
|
|
1701 |
# "s60" => <releaseNbr>
|
|
1702 |
# }
|
|
1703 |
# "for_adapt_deprecated" => {
|
|
1704 |
# "s60" => <releaseNbr>
|
|
1705 |
# }
|
|
1706 |
# "for_adapt_removed" => {
|
|
1707 |
# "s60" => <releaseNbr>
|
|
1708 |
# }
|
|
1709 |
# "extended_sdk_since" => {
|
|
1710 |
# "s60" => <releaseNbr>
|
|
1711 |
# }
|
|
1712 |
# "extended_sdk_deprecated" => {
|
|
1713 |
# "s60" => <releaseNbr>
|
|
1714 |
# my $refToHash = shift; }
|
|
1715 |
# "extended_sdmy $refToHash = shift;k_removed" => {
|
|
1716 |
# "s60" => <releaseNbr>
|
|
1717 |
# }
|
|
1718 |
# }
|
|
1719 |
# etc....
|
|
1720 |
# }
|
|
1721 |
# Note the that refToHash is assumed to be an empty hash.
|
|
1722 |
#
|
|
1723 |
# Note 1: The S60/s90 keys are not defined, if there was no information
|
|
1724 |
# in the type for the API.
|
|
1725 |
#
|
|
1726 |
# Params: referenceToWorksheet,refToHash,defOwnerEntity,defOwner
|
|
1727 |
#
|
|
1728 |
# Return: -
|
|
1729 |
###########################################################################
|
|
1730 |
sub readInfo2
|
|
1731 |
{
|
|
1732 |
my $refToWorksheet = shift;
|
|
1733 |
my $refToHash = shift;
|
|
1734 |
my $defOwnerEntity = shift;
|
|
1735 |
my $defOwner = shift;
|
|
1736 |
|
|
1737 |
|
|
1738 |
# check that sheet really exists (it could be missing)
|
|
1739 |
if(not defined($refToWorksheet))
|
|
1740 |
{
|
|
1741 |
return;
|
|
1742 |
}
|
|
1743 |
|
|
1744 |
# getNextOrdinal
|
|
1745 |
my $nextOrdinal = getNextOrdinal $refToHash;
|
|
1746 |
|
|
1747 |
# ----------------------------------------------------------------
|
|
1748 |
# look to header information
|
|
1749 |
# ----------------------------------------------------------------
|
|
1750 |
# API Name
|
|
1751 |
# Header file(s) (or "File(s)" in template version 1.6->)
|
|
1752 |
# Purpose
|
|
1753 |
# Responsible
|
|
1754 |
# SDK
|
|
1755 |
# Oem (or "Partner" in template version 1.6->)
|
|
1756 |
# Internal
|
|
1757 |
# Private (migth be missing, as is the case in the symbian sheet)
|
|
1758 |
# Adaptation
|
|
1759 |
# Specification
|
|
1760 |
# DLL
|
|
1761 |
# Import Lib
|
|
1762 |
# Other
|
|
1763 |
# Grouping (or "Subsystem" in template version 1.6->)
|
|
1764 |
# Clients
|
|
1765 |
# Deprecated
|
|
1766 |
# Obsoleted (or "Removed" in template version 1.6->)
|
|
1767 |
# Partner(s) (Only from 1.6->)
|
|
1768 |
# Partner Contact(s) (Only from 1.6->)
|
|
1769 |
# Owner
|
|
1770 |
# Note
|
|
1771 |
# For Adaptation Since (only from 2.0->)
|
|
1772 |
# For Adaptation Deprecated (only from 2.0->)
|
|
1773 |
# For Adaptation Removed (only from 2.0->)
|
|
1774 |
# Extended SDK Since (only from 2.0->)
|
|
1775 |
# Extended SDK Depricated (only from 2.0->)
|
|
1776 |
# Extended SDK Removed (only from 2.0->)
|
|
1777 |
my $ownerNameEntityIndex = getIndexByColName $refToWorksheet,"Owner Entity",$globalMaxColCount;
|
|
1778 |
my $apiNameIndex = getIndexByColName $refToWorksheet,"API Name",$globalMaxColCount;
|
|
1779 |
my $fileNameIndex = getIndexByColName $refToWorksheet,"Header file(s)",$globalMaxColCount;
|
|
1780 |
if( !defined($fileNameIndex) || $fileNameIndex < 1)
|
|
1781 |
{
|
|
1782 |
$fileNameIndex = getIndexByColName $refToWorksheet,"File(s)",$globalMaxColCount;
|
|
1783 |
}
|
|
1784 |
my $purposeIndex = getIndexByColName $refToWorksheet,"Purpose",$globalMaxColCount;
|
|
1785 |
my $sdkIndex = getIndexByColName $refToWorksheet,"SDK",$globalMaxColCount;
|
|
1786 |
my $oemIndex = getIndexByColName $refToWorksheet,"Oem",$globalMaxColCount;
|
|
1787 |
if( !defined($oemIndex) || $oemIndex < 1)
|
|
1788 |
{
|
|
1789 |
$oemIndex = getIndexByColName $refToWorksheet,"Partner",$globalMaxColCount;
|
|
1790 |
}
|
|
1791 |
if( !defined($oemIndex) || $oemIndex < 1)
|
|
1792 |
{
|
|
1793 |
$oemIndex = getIndexByColName $refToWorksheet,"Domain",$globalMaxColCount;
|
|
1794 |
}
|
|
1795 |
my $internalIndex = getIndexByColName $refToWorksheet,"Internal",$globalMaxColCount;
|
|
1796 |
my $privateIndex = getIndexByColName $refToWorksheet,"Private",$globalMaxColCount;
|
|
1797 |
my $adaptIndex = getIndexByColName $refToWorksheet,"Adaptation",$globalMaxColCount;
|
|
1798 |
my $specificationIndex = getIndexByColName $refToWorksheet,"Specification",$globalMaxColCount;
|
|
1799 |
my $dllIndex = getIndexByColName $refToWorksheet,"DLL",$globalMaxColCount;
|
|
1800 |
my $libIndex = getIndexByColName $refToWorksheet,"Import Lib",$globalMaxColCount;
|
|
1801 |
my $ssNameIndex = getIndexByColName $refToWorksheet,"Subsystem",$globalMaxColCount;
|
|
1802 |
if( !defined($ssNameIndex) || $ssNameIndex < 1)
|
|
1803 |
{
|
|
1804 |
$ssNameIndex = getIndexByColName $refToWorksheet,"Grouping",$globalMaxColCount;
|
|
1805 |
}
|
|
1806 |
my $deprecatedIndex = getIndexByColName $refToWorksheet,"Deprecated",$globalMaxColCount;
|
|
1807 |
my $removedIndex = getIndexByColName $refToWorksheet,"Obsoleted",$globalMaxColCount;
|
|
1808 |
if( !defined($removedIndex) || $removedIndex < 1)
|
|
1809 |
{
|
|
1810 |
$removedIndex = getIndexByColName $refToWorksheet,"Removed",$globalMaxColCount;
|
|
1811 |
}
|
|
1812 |
my $partnerIndex = getIndexByColName $refToWorksheet,"Partner(s)",$globalMaxColCount;
|
|
1813 |
my $partnerContactIndex = getIndexByColName $refToWorksheet,
|
|
1814 |
"Partner Contact(s)",$globalMaxColCount;
|
|
1815 |
my $baseServiceIndex = getIndexByColName $refToWorksheet,"Base Service",$globalMaxColCount;
|
|
1816 |
my $clientIndex = getIndexByColName $refToWorksheet,"Clients",$globalMaxColCount;
|
|
1817 |
my $clientOrgIndex = getIndexByColName $refToWorksheet,"Client Org",$globalMaxColCount;
|
|
1818 |
my $ownerNameIndex = getIndexByColName $refToWorksheet,"Owner",$globalMaxColCount;
|
|
1819 |
|
|
1820 |
my $forAdaptationSinceIndex = getIndexByColName $refToWorksheet,"For Adaptation Since",$globalMaxColCount;
|
|
1821 |
my $forAdaptationDeprecatedIndex = getIndexByColName $refToWorksheet,"For Adaptation Deprecated",$globalMaxColCount;
|
|
1822 |
my $forAdaptationRemovedIndex = getIndexByColName $refToWorksheet,"For Adaptation Removed",$globalMaxColCount;
|
|
1823 |
my $extendedSDKSinceIndex = getIndexByColName $refToWorksheet,"Extended SDK Since",$globalMaxColCount;
|
|
1824 |
my $extendedSDKDeprecatedIndex = getIndexByColName $refToWorksheet,"Extended SDK Depricated",$globalMaxColCount;
|
|
1825 |
my $extendedSDKRemovedIndex = getIndexByColName $refToWorksheet,"Extended SDK Removed",$globalMaxColCount;
|
|
1826 |
|
|
1827 |
my $row = 1;
|
|
1828 |
my $emptyRowCount = 0;
|
|
1829 |
|
|
1830 |
######################################################################
|
|
1831 |
# Loop row by row until we have found $globalMaxEmptyRowCount of rows
|
|
1832 |
# empty one after each other.
|
|
1833 |
######################################################################
|
|
1834 |
my $currApiName;
|
|
1835 |
my $currApiOrdinal;
|
|
1836 |
for( $row = 2;; $row++ )
|
|
1837 |
{
|
|
1838 |
#------------------------------------------------------------
|
|
1839 |
# Read the needed rows from the row
|
|
1840 |
#------------------------------------------------------------
|
|
1841 |
my $ownerEntity = $defOwnerEntity;
|
|
1842 |
if($ownerNameEntityIndex > 0)
|
|
1843 |
{
|
|
1844 |
$ownerEntity = $$refToWorksheet->Cells( $row, $ownerNameEntityIndex )->{ 'Value' };
|
|
1845 |
}
|
|
1846 |
my $apiName = $$refToWorksheet->Cells( $row, $apiNameIndex )->{ 'Value' };
|
|
1847 |
my $fileName = $$refToWorksheet->Cells( $row, $fileNameIndex )->{ 'Value' };
|
|
1848 |
my $purpose = $$refToWorksheet->Cells( $row, $purposeIndex )->{ 'Value' };
|
|
1849 |
my $sdk = $$refToWorksheet->Cells( $row, $sdkIndex )->{ 'Value' };
|
|
1850 |
my $oem = $$refToWorksheet->Cells( $row, $oemIndex )->{ 'Value' };
|
|
1851 |
my $internal = $$refToWorksheet->Cells( $row, $internalIndex )->{ 'Value' };
|
|
1852 |
my $private = "";
|
|
1853 |
if($privateIndex > 0)
|
|
1854 |
{
|
|
1855 |
$private = $$refToWorksheet->Cells( $row, $privateIndex )->{ 'Value' };
|
|
1856 |
}
|
|
1857 |
my $adapt = $$refToWorksheet->Cells( $row, $adaptIndex )->{ 'Value' };
|
|
1858 |
my $specification = $$refToWorksheet->Cells( $row, $specificationIndex )->{ 'Value' };
|
|
1859 |
my $dll = $$refToWorksheet->Cells( $row, $dllIndex )->{ 'Value' };
|
|
1860 |
my $lib = $$refToWorksheet->Cells( $row, $libIndex )->{ 'Value' };
|
|
1861 |
my $ssName = $$refToWorksheet->Cells( $row, $ssNameIndex )->{ 'Value' };
|
|
1862 |
my $deprecated = $$refToWorksheet->Cells( $row, $deprecatedIndex )->{ 'Value' };
|
|
1863 |
my $removed = $$refToWorksheet->Cells( $row, $removedIndex )->{ 'Value' };
|
|
1864 |
my $partner = "";
|
|
1865 |
$partner = $$refToWorksheet->Cells( $row, $partnerIndex )->{ 'Value' } if $partnerIndex > 0;
|
|
1866 |
my $partnerContact = "";
|
|
1867 |
$partnerContact = $$refToWorksheet->Cells( $row, $partnerContactIndex )->{ 'Value' } if $partnerContactIndex > 0;
|
|
1868 |
my $baseService = "";
|
|
1869 |
$baseService = $$refToWorksheet->Cells( $row, $baseServiceIndex )->{ 'Value' } if $baseServiceIndex > 0;
|
|
1870 |
my $client = "";
|
|
1871 |
$client = $$refToWorksheet->Cells( $row, $clientIndex )->{ 'Value' } if $clientIndex > 0;
|
|
1872 |
my $clientOrg = "";
|
|
1873 |
$clientOrg = $$refToWorksheet->Cells( $row, $clientOrgIndex )->{ 'Value' } if $clientOrgIndex > 0;
|
|
1874 |
my $ownerName = $$refToWorksheet->Cells( $row, $ownerNameIndex )->{ 'Value' };
|
|
1875 |
|
|
1876 |
my $forAdaptationSince = "";
|
|
1877 |
my $forAdaptationDeprecated = "";
|
|
1878 |
my $forAdaptationRemoved = "";
|
|
1879 |
my $extendedSDKSince = "";
|
|
1880 |
my $extendedSDKDeprecated = "";
|
|
1881 |
my $extendedSDKRemoved = "";
|
|
1882 |
# All the 6 columsn came at the same time => if 1 is present => all are present.
|
|
1883 |
# We just check one, since this makes the code a little bit less
|
|
1884 |
if( $forAdaptationSinceIndex > 0)
|
|
1885 |
{
|
|
1886 |
$forAdaptationSince = $$refToWorksheet->Cells( $row, $forAdaptationSinceIndex )->{ 'Value' } ;
|
|
1887 |
$forAdaptationDeprecated = $$refToWorksheet->Cells( $row, $forAdaptationDeprecatedIndex )->{ 'Value' };
|
|
1888 |
$forAdaptationRemoved = $$refToWorksheet->Cells( $row, $forAdaptationRemovedIndex )->{ 'Value' };
|
|
1889 |
$extendedSDKSince = $$refToWorksheet->Cells( $row, $extendedSDKSinceIndex )->{ 'Value' };
|
|
1890 |
$extendedSDKDeprecated = $$refToWorksheet->Cells( $row, $extendedSDKDeprecatedIndex )->{ 'Value' };
|
|
1891 |
$extendedSDKRemoved = $$refToWorksheet->Cells( $row, $extendedSDKRemovedIndex )->{ 'Value' };
|
|
1892 |
}
|
|
1893 |
|
|
1894 |
#------------------------------------------------------------
|
|
1895 |
# We only allow $globalMaxEmptyRowCount empty rows, before we stop
|
|
1896 |
# handling the specific sheet
|
|
1897 |
#------------------------------------------------------------
|
|
1898 |
if(! (defined($apiName) || defined($fileName)|| defined($dll) ||
|
|
1899 |
defined($lib)))
|
|
1900 |
{
|
|
1901 |
$emptyRowCount++;
|
|
1902 |
if($emptyRowCount > $globalMaxEmptyRowCount)
|
|
1903 |
{
|
|
1904 |
last;
|
|
1905 |
}
|
|
1906 |
}
|
|
1907 |
else
|
|
1908 |
{
|
|
1909 |
# Was not empty line, reset counter.
|
|
1910 |
$emptyRowCount = 0;
|
|
1911 |
}
|
|
1912 |
|
|
1913 |
#------------------------------------------------------------
|
|
1914 |
# Check, if is an comment line. If so, then ignore line
|
|
1915 |
#------------------------------------------------------------
|
|
1916 |
if(defined($apiName) and $apiName =~ /^\s*Comment:/)
|
|
1917 |
{
|
|
1918 |
next;
|
|
1919 |
}
|
|
1920 |
|
|
1921 |
#------------------------------------------------------------
|
|
1922 |
# Check, if is an api line
|
|
1923 |
#------------------------------------------------------------
|
|
1924 |
if(defined($apiName) and $apiName !~ /^\s*$/)
|
|
1925 |
{
|
|
1926 |
$currApiName = $apiName;
|
|
1927 |
$currApiOrdinal = $nextOrdinal;
|
|
1928 |
$nextOrdinal++;
|
|
1929 |
|
|
1930 |
my %newHash;
|
|
1931 |
$$refToHash{$currApiOrdinal} = \%newHash;
|
|
1932 |
|
|
1933 |
$newHash{"api_name"} = $currApiName;
|
|
1934 |
$newHash{"api_type"} = 1;
|
|
1935 |
my %hash1;
|
|
1936 |
my %hash2;
|
|
1937 |
my %hash3;
|
|
1938 |
my %hash4;
|
|
1939 |
my %hash5;
|
|
1940 |
my %hash6;
|
|
1941 |
my %hash7;
|
|
1942 |
my %hash8;
|
|
1943 |
my %hash9;
|
|
1944 |
my %hash10;
|
|
1945 |
my %hash11;
|
|
1946 |
my %hash12;
|
|
1947 |
my %hash13;
|
|
1948 |
my %hash14;
|
|
1949 |
my %hash15;
|
|
1950 |
$newHash{"owner_entity"} = $ownerEntity;
|
|
1951 |
$newHash{"files"} = \%hash1;
|
|
1952 |
$newHash{"purpose"} = $purpose;
|
|
1953 |
$newHash{"sdk"} = \%hash4;
|
|
1954 |
addToTypeHash(\%hash4,$sdk);
|
|
1955 |
$newHash{"partner"} = \%hash5;
|
|
1956 |
addToTypeHash(\%hash5,$oem);
|
|
1957 |
$newHash{"internal"} = \%hash6;
|
|
1958 |
addToTypeHash(\%hash6,$internal);
|
|
1959 |
$newHash{"private"} = \%hash7;
|
|
1960 |
addToTypeHash(\%hash7,$private);
|
|
1961 |
$newHash{"adapt"} = 0;
|
|
1962 |
$newHash{"adapt"} = 1 if $adapt =~ /yes/i;
|
|
1963 |
$newHash{"specification"} = $specification;
|
|
1964 |
$newHash{"dll"} = \%hash2;
|
|
1965 |
$newHash{"lib"} = \%hash3;
|
|
1966 |
$newHash{"subsystem"} = $ssName;
|
|
1967 |
$newHash{"depracated"} = \%hash8;
|
|
1968 |
addToTypeHash(\%hash8,$deprecated);
|
|
1969 |
$newHash{"removed"} = \%hash9;
|
|
1970 |
addToTypeHash(\%hash9,$removed);
|
|
1971 |
$newHash{"partners"} = $partner;
|
|
1972 |
$newHash{"partner_contacts"} = $partnerContact;
|
|
1973 |
$newHash{"base"} = 0;
|
|
1974 |
$newHash{"base"} = 1 if $baseService =~/yes/i;
|
|
1975 |
$newHash{"clients"} = $client;
|
|
1976 |
$newHash{"clients_org"} = $clientOrg;
|
|
1977 |
$newHash{"owner"} = $ownerName;
|
|
1978 |
$newHash{"owner"} = $defOwner if $ownerName =~ /^\s*$/;
|
|
1979 |
|
|
1980 |
# For adaptation
|
|
1981 |
$newHash{"for_adapt_since"} = \%hash10;
|
|
1982 |
addToTypeHash(\%hash10,$forAdaptationSince);
|
|
1983 |
$newHash{"for_adapt_deprecated"} = \%hash11;
|
|
1984 |
addToTypeHash(\%hash11,$forAdaptationDeprecated);
|
|
1985 |
$newHash{"for_adapt_removed"} = \%hash12;
|
|
1986 |
addToTypeHash(\%hash12,$forAdaptationRemoved);
|
|
1987 |
|
|
1988 |
# extended sdk
|
|
1989 |
$newHash{"extended_sdk_since"} = \%hash13;
|
|
1990 |
addToTypeHash(\%hash13,$extendedSDKSince);
|
|
1991 |
$newHash{"extended_sdk_deprecated"} = \%hash14;
|
|
1992 |
addToTypeHash(\%hash14,$extendedSDKDeprecated);
|
|
1993 |
$newHash{"extended_sdk_removed"} = \%hash15;
|
|
1994 |
addToTypeHash(\%hash15,$extendedSDKRemoved);
|
|
1995 |
}
|
|
1996 |
#------------------------------------------------------------
|
|
1997 |
# Handle the files column. (ignore some special cases)
|
|
1998 |
#------------------------------------------------------------
|
|
1999 |
if(defined($fileName) && $fileName !~ /^\s*DIR:/i &&
|
|
2000 |
$fileName !~ /^\s*FILE:/i && $fileName !~ /^\s*$/ &&
|
|
2001 |
$fileName !~ /^\s*tbd\s*$/i && $fileName !~ /^\s*n\/?a\s*$/i)
|
|
2002 |
{
|
|
2003 |
my $refToApiHash = $$refToHash{$currApiOrdinal};
|
|
2004 |
my $refToFilesHash = $$refToApiHash{"files"};
|
|
2005 |
$$refToFilesHash{$fileName} = 1;
|
|
2006 |
}
|
|
2007 |
#------------------------------------------------------------
|
|
2008 |
# Handle the dlls column. (ignore some special cases)
|
|
2009 |
#------------------------------------------------------------
|
|
2010 |
if(defined($dll) && $dll !~ /^\s*$/ && $dll !~ /^\s*ECOM\s*$/i &&
|
|
2011 |
$dll !~ /^\s*tbd\s*$/i && $dll !~ /^\s*n\/?a\s*$/i)
|
|
2012 |
{
|
|
2013 |
my $refToApiHash = $$refToHash{$currApiOrdinal};
|
|
2014 |
my $refToDllHash = $$refToApiHash{"dll"};
|
|
2015 |
|
|
2016 |
addToHash($refToDllHash,$dll);
|
|
2017 |
}
|
|
2018 |
#------------------------------------------------------------
|
|
2019 |
# Handle the lib column. (ignore some special cases)
|
|
2020 |
#------------------------------------------------------------
|
|
2021 |
if(defined($lib) && $lib !~ /^\s*$/ && $lib !~ /^\s*ECOM\s*$/i &&
|
|
2022 |
$lib !~ /^\s*tbd\s*$/i && $lib !~ /^\s*n\/?a\s*$/i)
|
|
2023 |
{
|
|
2024 |
my $refToApiHash = $$refToHash{$currApiOrdinal};
|
|
2025 |
my $refToLibHash = $$refToApiHash{"lib"};
|
|
2026 |
|
|
2027 |
addToHash($refToLibHash,$lib);
|
|
2028 |
}
|
|
2029 |
}
|
|
2030 |
}
|
|
2031 |
|
|
2032 |
|
|
2033 |
###########################################################################
|
|
2034 |
# Function that reads certain columns from the interface sheet to the given hash.
|
|
2035 |
# The function is intended to be called for the cenrep/P&S API definitions.
|
|
2036 |
# For the c++ APIs use the "readInfo2"-function
|
|
2037 |
#
|
|
2038 |
# The format of the returned hash is:
|
|
2039 |
# {
|
|
2040 |
# <ordinal> => {
|
|
2041 |
#
|
|
2042 |
# "api_name" => <apiName> # 1 means c++, 2 means cenrep/P&S apis
|
|
2043 |
# "api_type" => "2" # 1 means c++, 2 means cenrep/P&S apis
|
|
2044 |
# "owner_entity" => <API owner entity>
|
|
2045 |
# "uid" => <uid>
|
|
2046 |
# "type" => "cenrep/ps"
|
|
2047 |
# "keys" => {<key1> => 1 ,<key12> => 1,...}
|
|
2048 |
# "purpose" => <purpose text>
|
|
2049 |
# "sdk" => {
|
|
2050 |
# "s60" => <releaseNbr>
|
|
2051 |
# "s90" => <releaseNbr> # Note 1:
|
|
2052 |
# }
|
|
2053 |
# "partner" => {
|
|
2054 |
# "s60" => <releaseNbr>
|
|
2055 |
# "s90" => <releaseNbr> # Note 1:
|
|
2056 |
# }
|
|
2057 |
# "internal" => {
|
|
2058 |
# "s60" => <releaseNbr>
|
|
2059 |
# "s90" => <releaseNbr> # Note 1:
|
|
2060 |
# }
|
|
2061 |
# "private" => {
|
|
2062 |
# "s60" => <releaseNbr>
|
|
2063 |
# "s90" => <releaseNbr> # Note 1:
|
|
2064 |
# }
|
|
2065 |
# "relFeatuers" => <relatedFeature(s)>
|
|
2066 |
# "subsystem" => <subsystem name>
|
|
2067 |
# "deprecated" => {
|
|
2068 |
# "s60" => <releaseNbr>
|
|
2069 |
# "s90" => <releaseNbr> # Note 1:
|
|
2070 |
# }
|
|
2071 |
# "removed" => {
|
|
2072 |
# "s60" => <releaseNbr>
|
|
2073 |
# "s90" => <releaseNbr> # Note 1:
|
|
2074 |
# }
|
|
2075 |
# "partners" => <namesStr>
|
|
2076 |
# "partner_contacts" => <namesStr>
|
|
2077 |
# "clients" => <namesStr>
|
|
2078 |
# "clients_org" => <namesStr>
|
|
2079 |
# "owner" => <API owner name>
|
|
2080 |
# "for_adapt_since" => {
|
|
2081 |
# "s60" => <releaseNbr>
|
|
2082 |
# }
|
|
2083 |
# "for_adapt_deprecated" => {
|
|
2084 |
# "s60" => <releaseNbr>
|
|
2085 |
# }
|
|
2086 |
# "for_adapt_removed" => {
|
|
2087 |
# "s60" => <releaseNbr>
|
|
2088 |
# }
|
|
2089 |
# "extended_sdk_since" => {
|
|
2090 |
# "s60" => <releaseNbr>
|
|
2091 |
# }
|
|
2092 |
# "extended_sdk_deprecated" => {
|
|
2093 |
# "s60" => <releaseNbr>
|
|
2094 |
# }
|
|
2095 |
# "extended_sdk_removed" => {
|
|
2096 |
# "s60" => <releaseNbr>
|
|
2097 |
# }
|
|
2098 |
# }
|
|
2099 |
# etc....
|
|
2100 |
# }
|
|
2101 |
# Note the that refToHash is assumed to be an empty hash.
|
|
2102 |
#
|
|
2103 |
# Note 1: The S60/s90 keys are not defined, if there was no information
|
|
2104 |
# in the type for the API.
|
|
2105 |
#
|
|
2106 |
# Params: referenceToWorksheet,refToHash,defOwnerEntity,defOwner
|
|
2107 |
#
|
|
2108 |
# Return: -
|
|
2109 |
###########################################################################
|
|
2110 |
sub readCRepInfo2
|
|
2111 |
{
|
|
2112 |
my $refToWorksheet = shift;
|
|
2113 |
my $refToHash = shift;
|
|
2114 |
my $defOwnerEntity = shift;
|
|
2115 |
my $defOwner = shift;
|
|
2116 |
|
|
2117 |
# check that sheet really exists (it could be missing)
|
|
2118 |
if(not defined($refToWorksheet))
|
|
2119 |
{
|
|
2120 |
return;
|
|
2121 |
}
|
|
2122 |
# ----------------------------------------------------------------
|
|
2123 |
# getNextOrdinal
|
|
2124 |
# ----------------------------------------------------------------
|
|
2125 |
my $nextOrdinal = getNextOrdinal $refToHash;
|
|
2126 |
|
|
2127 |
|
|
2128 |
# ----------------------------------------------------------------
|
|
2129 |
# look to header information
|
|
2130 |
# ----------------------------------------------------------------
|
|
2131 |
# API Name
|
|
2132 |
# Uid Name
|
|
2133 |
# Key Name
|
|
2134 |
# Purpose
|
|
2135 |
# Type
|
|
2136 |
# SDK
|
|
2137 |
# Domain
|
|
2138 |
# Internal
|
|
2139 |
# Private
|
|
2140 |
# Subsystem
|
|
2141 |
# Clients
|
|
2142 |
# Client Org
|
|
2143 |
# Deprecated
|
|
2144 |
# Removed
|
|
2145 |
# Related Features
|
|
2146 |
# Partner(s) (Only from 1.6->)
|
|
2147 |
# Partner Contact(s) (Only from 1.6->)
|
|
2148 |
# Owner
|
|
2149 |
# Note
|
|
2150 |
# For Adaptation Since (only from 2.0->)
|
|
2151 |
# For Adaptation Deprecated (only from 2.0->)
|
|
2152 |
# For Adaptation Removed (only from 2.0->)
|
|
2153 |
# Extended SDK Since (only from 2.0->)
|
|
2154 |
# Extended SDK Depricated (only from 2.0->)
|
|
2155 |
# Extended SDK Removed (only from 2.0->)
|
|
2156 |
|
|
2157 |
my $ownerNameEntityIndex = getIndexByColName $refToWorksheet,"Owner Entity",$globalMaxColCount;
|
|
2158 |
my $apiNameIndex = getIndexByColName $refToWorksheet,"API Name",$globalMaxColCount;
|
|
2159 |
my $uidNameIndex = getIndexByColName $refToWorksheet,"Uid Name",$globalMaxColCount;
|
|
2160 |
my $keyNameIndex = getIndexByColName $refToWorksheet,"Key Name",$globalMaxColCount;
|
|
2161 |
my $keyTypeIndex = getIndexByColName $refToWorksheet,"Type",$globalMaxColCount;
|
|
2162 |
my $purposeIndex = getIndexByColName $refToWorksheet,"Purpose",$globalMaxColCount;
|
|
2163 |
my $sdkIndex = getIndexByColName $refToWorksheet,"SDK",$globalMaxColCount;
|
|
2164 |
my $oemIndex = getIndexByColName $refToWorksheet,"Domain",$globalMaxColCount;
|
|
2165 |
if( !defined($oemIndex) || $oemIndex < 1)
|
|
2166 |
{
|
|
2167 |
$oemIndex = getIndexByColName $refToWorksheet,"Partner",$globalMaxColCount;
|
|
2168 |
}
|
|
2169 |
my $internalIndex = getIndexByColName $refToWorksheet,"Internal",$globalMaxColCount;
|
|
2170 |
my $privateIndex = getIndexByColName $refToWorksheet,"Private",$globalMaxColCount;
|
|
2171 |
my $ssNameIndex = getIndexByColName $refToWorksheet,"Subsystem",$globalMaxColCount;
|
|
2172 |
if( !defined($ssNameIndex) || $ssNameIndex < 1)
|
|
2173 |
{
|
|
2174 |
$ssNameIndex = getIndexByColName $refToWorksheet,"Subsystem full",$globalMaxColCount;
|
|
2175 |
}
|
|
2176 |
my $deprecatedIndex = getIndexByColName $refToWorksheet,"Deprecated",$globalMaxColCount;
|
|
2177 |
my $removedIndex = getIndexByColName $refToWorksheet,"Removed",$globalMaxColCount;
|
|
2178 |
my $partnerIndex = getIndexByColName $refToWorksheet,"Partner(s)",$globalMaxColCount;
|
|
2179 |
my $partnerContactIndex = getIndexByColName $refToWorksheet,
|
|
2180 |
"Partner Contact(s)",$globalMaxColCount;
|
|
2181 |
my $clientIndex = getIndexByColName $refToWorksheet,"Clients",$globalMaxColCount;
|
|
2182 |
my $clientOrgIndex = getIndexByColName $refToWorksheet,"Client Org",$globalMaxColCount;
|
|
2183 |
my $ownerNameIndex = getIndexByColName $refToWorksheet,"Owner",$globalMaxColCount;
|
|
2184 |
|
|
2185 |
my $forAdaptationSinceIndex = getIndexByColName $refToWorksheet,"For Adaptation Since",$globalMaxColCount;
|
|
2186 |
my $forAdaptationDeprecatedIndex = getIndexByColName $refToWorksheet,"For Adaptation Deprecated",$globalMaxColCount;
|
|
2187 |
my $forAdaptationRemovedIndex = getIndexByColName $refToWorksheet,"For Adaptation Removed",$globalMaxColCount;
|
|
2188 |
my $extendedSDKSinceIndex = getIndexByColName $refToWorksheet,"Extended SDK Since",$globalMaxColCount;
|
|
2189 |
my $extendedSDKDeprecatedIndex = getIndexByColName $refToWorksheet,"Extended SDK Depricated",$globalMaxColCount;
|
|
2190 |
my $extendedSDKRemovedIndex = getIndexByColName $refToWorksheet,"Extended SDK Removed",$globalMaxColCount;
|
|
2191 |
|
|
2192 |
my $row = 1;
|
|
2193 |
my $emptyRowCount = 0;
|
|
2194 |
|
|
2195 |
######################################################################
|
|
2196 |
# Loop row by row until we have found $globalMaxEmptyRowCount of rows
|
|
2197 |
# empty one after each other.
|
|
2198 |
######################################################################
|
|
2199 |
my $currApiName;
|
|
2200 |
my $currApiOrdinal;
|
|
2201 |
for( $row = 2;; $row++ )
|
|
2202 |
{
|
|
2203 |
#------------------------------------------------------------
|
|
2204 |
# Read the needed rows from the row
|
|
2205 |
#------------------------------------------------------------
|
|
2206 |
my $ownerEntity = $defOwnerEntity;
|
|
2207 |
if($ownerNameEntityIndex > 0)
|
|
2208 |
{
|
|
2209 |
$ownerEntity = $$refToWorksheet->Cells( $row, $ownerNameEntityIndex )->{ 'Value' };
|
|
2210 |
}
|
|
2211 |
my $apiName = $$refToWorksheet->Cells( $row, $apiNameIndex )->{ 'Value' };
|
|
2212 |
my $uidName = $$refToWorksheet->Cells( $row, $uidNameIndex )->{ 'Value' };
|
|
2213 |
my $keyName = $$refToWorksheet->Cells( $row, $keyNameIndex )->{ 'Value' };
|
|
2214 |
my $keyType = $$refToWorksheet->Cells( $row, $keyTypeIndex )->{ 'Value' };
|
|
2215 |
my $purpose = $$refToWorksheet->Cells( $row, $purposeIndex )->{ 'Value' };
|
|
2216 |
my $sdk = $$refToWorksheet->Cells( $row, $sdkIndex )->{ 'Value' };
|
|
2217 |
my $oem = $$refToWorksheet->Cells( $row, $oemIndex )->{ 'Value' };
|
|
2218 |
my $internal = $$refToWorksheet->Cells( $row, $internalIndex )->{ 'Value' };
|
|
2219 |
my $private = $$refToWorksheet->Cells( $row, $privateIndex )->{ 'Value' };
|
|
2220 |
my $ssName = $$refToWorksheet->Cells( $row, $ssNameIndex )->{ 'Value' };
|
|
2221 |
my $deprecated = $$refToWorksheet->Cells( $row, $deprecatedIndex )->{ 'Value' };
|
|
2222 |
my $removed = $$refToWorksheet->Cells( $row, $removedIndex )->{ 'Value' };
|
|
2223 |
my $partner = "";
|
|
2224 |
$partner = $$refToWorksheet->Cells( $row, $partnerIndex )->{ 'Value' } if $partnerIndex > 0;
|
|
2225 |
my $partnerContact = "";
|
|
2226 |
$partnerContact = $$refToWorksheet->Cells( $row, $partnerContactIndex )->{ 'Value' } if $partnerContactIndex > 0;
|
|
2227 |
my $client = "";
|
|
2228 |
$client = $$refToWorksheet->Cells( $row, $clientIndex )->{ 'Value' } if $clientIndex > 0;
|
|
2229 |
my $clientOrg = "";
|
|
2230 |
$clientOrg = $$refToWorksheet->Cells( $row, $clientOrgIndex )->{ 'Value' } if $clientOrgIndex > 0;
|
|
2231 |
my $ownerName = $$refToWorksheet->Cells( $row, $ownerNameIndex )->{ 'Value' };
|
|
2232 |
|
|
2233 |
my $forAdaptationSince = "";
|
|
2234 |
my $forAdaptationDeprecated = "";
|
|
2235 |
my $forAdaptationRemoved = "";
|
|
2236 |
my $extendedSDKSince = "";
|
|
2237 |
my $extendedSDKDeprecated = "";
|
|
2238 |
my $extendedSDKRemoved = "";
|
|
2239 |
# All the 6 columsn came at the same time => if 1 is present => all are present.
|
|
2240 |
# We just check one, since this makes the code a little bit less
|
|
2241 |
if( $forAdaptationSinceIndex > 0)
|
|
2242 |
{
|
|
2243 |
$forAdaptationSince = $$refToWorksheet->Cells( $row, $forAdaptationSinceIndex )->{ 'Value' } ;
|
|
2244 |
$forAdaptationDeprecated = $$refToWorksheet->Cells( $row, $forAdaptationDeprecatedIndex )->{ 'Value' };
|
|
2245 |
$forAdaptationRemoved = $$refToWorksheet->Cells( $row, $forAdaptationRemovedIndex )->{ 'Value' };
|
|
2246 |
$extendedSDKSince = $$refToWorksheet->Cells( $row, $extendedSDKSinceIndex )->{ 'Value' };
|
|
2247 |
$extendedSDKDeprecated = $$refToWorksheet->Cells( $row, $extendedSDKDeprecatedIndex )->{ 'Value' };
|
|
2248 |
$extendedSDKRemoved = $$refToWorksheet->Cells( $row, $extendedSDKRemovedIndex )->{ 'Value' };
|
|
2249 |
}
|
|
2250 |
|
|
2251 |
#------------------------------------------------------------
|
|
2252 |
# We only allow $globalMaxEmptyRowCount empty rows, before we stop
|
|
2253 |
# handling the specific sheet
|
|
2254 |
#------------------------------------------------------------
|
|
2255 |
if(! (defined($apiName) || defined($keyName)))
|
|
2256 |
{
|
|
2257 |
$emptyRowCount++;
|
|
2258 |
if($emptyRowCount > $globalMaxEmptyRowCount)
|
|
2259 |
{
|
|
2260 |
last;
|
|
2261 |
}
|
|
2262 |
}
|
|
2263 |
else
|
|
2264 |
{
|
|
2265 |
# Was not empty line, reset counter.
|
|
2266 |
$emptyRowCount = 0;
|
|
2267 |
}
|
|
2268 |
|
|
2269 |
#------------------------------------------------------------
|
|
2270 |
# Check, if is an comment line. If so, then ignore line
|
|
2271 |
#------------------------------------------------------------
|
|
2272 |
if(defined($apiName) and $apiName =~ /^\s*Comment:/)
|
|
2273 |
{
|
|
2274 |
next;
|
|
2275 |
}
|
|
2276 |
|
|
2277 |
#------------------------------------------------------------
|
|
2278 |
# Check, if is an api line
|
|
2279 |
#------------------------------------------------------------
|
|
2280 |
if(defined($apiName) and $apiName !~ /^\s*$/)
|
|
2281 |
{
|
|
2282 |
$currApiName = $apiName;
|
|
2283 |
$currApiOrdinal = $nextOrdinal;
|
|
2284 |
$nextOrdinal++;
|
|
2285 |
|
|
2286 |
my %newHash;
|
|
2287 |
$$refToHash{$currApiOrdinal} = \%newHash;
|
|
2288 |
|
|
2289 |
$newHash{"api_name"} = $currApiName;
|
|
2290 |
$newHash{"api_type"} = "2";
|
|
2291 |
my %hash1;
|
|
2292 |
my %hash2;
|
|
2293 |
my %hash3;
|
|
2294 |
my %hash4;
|
|
2295 |
my %hash5;
|
|
2296 |
my %hash6;
|
|
2297 |
my %hash7;
|
|
2298 |
my %hash8;
|
|
2299 |
my %hash9;
|
|
2300 |
my %hash10;
|
|
2301 |
my %hash11;
|
|
2302 |
my %hash12;
|
|
2303 |
my %hash13;
|
|
2304 |
my %hash14;
|
|
2305 |
my %hash15;
|
|
2306 |
$newHash{"owner_entity"} = $ownerEntity;
|
|
2307 |
$newHash{"uid"} = $uidName;
|
|
2308 |
$newHash{"type"} = "ps";
|
|
2309 |
$newHash{"type"} = "cenrep" if $keyType =~ /centrep/i;
|
|
2310 |
$newHash{"keys"} = \%hash1;
|
|
2311 |
$newHash{"purpose"} = $purpose;
|
|
2312 |
$newHash{"sdk"} = \%hash4;
|
|
2313 |
addToTypeHash(\%hash4,$sdk);
|
|
2314 |
$newHash{"partner"} = \%hash5;
|
|
2315 |
addToTypeHash(\%hash5,$oem);
|
|
2316 |
$newHash{"internal"} = \%hash6;
|
|
2317 |
addToTypeHash(\%hash6,$internal);
|
|
2318 |
$newHash{"private"} = \%hash7;
|
|
2319 |
addToTypeHash(\%hash7,$private);
|
|
2320 |
$newHash{"subsystem"} = $ssName;
|
|
2321 |
$newHash{"depracated"} = \%hash8;
|
|
2322 |
addToTypeHash(\%hash8,$deprecated);
|
|
2323 |
$newHash{"removed"} = \%hash9;
|
|
2324 |
addToTypeHash(\%hash9,$removed);
|
|
2325 |
$newHash{"partners"} = $partner;
|
|
2326 |
$newHash{"partner_contacts"} = $partnerContact;
|
|
2327 |
$newHash{"clients"} = $client;
|
|
2328 |
$newHash{"clients_org"} = $clientOrg;
|
|
2329 |
$newHash{"owner"} = $ownerName;
|
|
2330 |
$newHash{"owner"} = $defOwner if $ownerName =~ /^\s*$/;
|
|
2331 |
|
|
2332 |
# For adaptation
|
|
2333 |
$newHash{"for_adapt_since"} = \%hash10;
|
|
2334 |
addToTypeHash(\%hash10,$forAdaptationSince);
|
|
2335 |
$newHash{"for_adapt_deprecated"} = \%hash11;
|
|
2336 |
addToTypeHash(\%hash11,$forAdaptationDeprecated);
|
|
2337 |
$newHash{"for_adapt_removed"} = \%hash12;
|
|
2338 |
addToTypeHash(\%hash12,$forAdaptationRemoved);
|
|
2339 |
|
|
2340 |
# extended sdk
|
|
2341 |
$newHash{"extended_sdk_since"} = \%hash13;
|
|
2342 |
addToTypeHash(\%hash13,$extendedSDKSince);
|
|
2343 |
$newHash{"extended_sdk_deprecated"} = \%hash14;
|
|
2344 |
addToTypeHash(\%hash14,$extendedSDKDeprecated);
|
|
2345 |
$newHash{"extended_sdk_removed"} = \%hash15;
|
|
2346 |
addToTypeHash(\%hash15,$extendedSDKRemoved);
|
|
2347 |
}
|
|
2348 |
#------------------------------------------------------------
|
|
2349 |
# Handle the files column. (ignore some special cases)
|
|
2350 |
#------------------------------------------------------------
|
|
2351 |
if(defined($keyName) && $keyName !~ /^\s*$/ &&
|
|
2352 |
$keyName !~ /^\s*tbd\s*$/i && $keyName !~ /^\s*n\/?a\s*$/i)
|
|
2353 |
{
|
|
2354 |
my $refToApiHash = $$refToHash{$currApiOrdinal};
|
|
2355 |
my $refToKeysHash = $$refToApiHash{"keys"};
|
|
2356 |
$$refToKeysHash{$keyName} = 1;
|
|
2357 |
}
|
|
2358 |
}
|
|
2359 |
}
|
|
2360 |
|
|
2361 |
###########################################################################
|
|
2362 |
# Function assumes that black list sheet as been given. All files that
|
|
2363 |
# belong to the given platform and releases black list are put into the hash
|
|
2364 |
# format of the hash:
|
|
2365 |
#
|
|
2366 |
# {
|
|
2367 |
# file1 => 1,
|
|
2368 |
# file2 => 1,
|
|
2369 |
# etc...
|
|
2370 |
# }
|
|
2371 |
sub readBlackList
|
|
2372 |
{
|
|
2373 |
my $refToWorksheet = shift;
|
|
2374 |
my $plat = shift;
|
|
2375 |
my $rel = shift;
|
|
2376 |
my $refToHash = shift;
|
|
2377 |
|
|
2378 |
# check that sheet really exists (it could be missing)
|
|
2379 |
if(not defined($refToWorksheet))
|
|
2380 |
{
|
|
2381 |
return;
|
|
2382 |
}
|
|
2383 |
|
|
2384 |
# ----------------------------------------------------------------
|
|
2385 |
# look to header information
|
|
2386 |
# ----------------------------------------------------------------
|
|
2387 |
# file
|
|
2388 |
# Since
|
|
2389 |
my $fileNameIndex = getIndexByColName $refToWorksheet,"File/Dir",$globalMaxColCount;
|
|
2390 |
my $sinceIndex = getIndexByColName $refToWorksheet,"Since",$globalMaxColCount;
|
|
2391 |
my $removedIndex = getIndexByColName $refToWorksheet,"Removed",$globalMaxColCount;
|
|
2392 |
|
|
2393 |
my $row = 1;
|
|
2394 |
my $emptyRowCount = 0;
|
|
2395 |
|
|
2396 |
######################################################################
|
|
2397 |
# Loop row by row until we have found $globalMaxEmptyRowCount of rows
|
|
2398 |
# empty one after each other.
|
|
2399 |
######################################################################
|
|
2400 |
for( $row = 2;; $row++ )
|
|
2401 |
{
|
|
2402 |
#------------------------------------------------------------
|
|
2403 |
# Read the needed rows from the row
|
|
2404 |
#------------------------------------------------------------
|
|
2405 |
my $fileName = $$refToWorksheet->Cells( $row, $fileNameIndex )->{ 'Value' };
|
|
2406 |
my $since = $$refToWorksheet->Cells( $row, $sinceIndex )->{ 'Value' };
|
|
2407 |
|
|
2408 |
my $removed = "";
|
|
2409 |
if($removedIndex >= 0)
|
|
2410 |
{
|
|
2411 |
$removed = $$refToWorksheet->Cells( $row, $removedIndex )->{ 'Value' };
|
|
2412 |
}
|
|
2413 |
|
|
2414 |
#------------------------------------------------------------
|
|
2415 |
# We only allow $globalMaxEmptyRowCount empty rows, before we stop
|
|
2416 |
# handling the specific sheet
|
|
2417 |
#------------------------------------------------------------
|
|
2418 |
if(! (defined($fileName)|| defined($since)))
|
|
2419 |
{
|
|
2420 |
$emptyRowCount++;
|
|
2421 |
if($emptyRowCount > $globalMaxEmptyRowCount)
|
|
2422 |
{
|
|
2423 |
last;
|
|
2424 |
}
|
|
2425 |
}
|
|
2426 |
else
|
|
2427 |
{
|
|
2428 |
# Was not empty line, reset counter.
|
|
2429 |
$emptyRowCount = 0;
|
|
2430 |
}
|
|
2431 |
|
|
2432 |
#------------------------------------------------------------
|
|
2433 |
# Check, if line is wanted
|
|
2434 |
#------------------------------------------------------------
|
|
2435 |
if(isRowWanted($plat,$rel,1,$since,$removed) == 1)
|
|
2436 |
{
|
|
2437 |
addToHash $refToHash,$fileName;
|
|
2438 |
}
|
|
2439 |
}
|
|
2440 |
}
|
|
2441 |
1;
|
|
2442 |
|