apicompatanamdw/compatanalysercmd/headeranalyser/src/Analyser.cpp
author shrivatsa
Mon, 27 Sep 2010 14:51:17 +0530
changeset 12 a0eee409ff14
parent 3 ebe3f8f03b59
permissions -rw-r--r--
Updates to CompatibilityAnalyser - The Tool should now work with Symbian^4 - Some minor bug fixes related to Qt headers in the Symbian Platform
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     1
/*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     2
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     3
* All rights reserved.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     4
* This component and the accompanying materials are made available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     6
* which accompanies this distribution, and is available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     8
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     9
* Initial Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    11
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    12
* Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    13
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    14
* Description:  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    15
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    16
*/
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    17
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    18
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    19
#include "CmdGlobals.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    20
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    21
#pragma warning(disable:4786)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    22
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    23
#include <time.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    24
#include <map>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    25
#include <list>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    26
#include <algorithm>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    27
#include <assert.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    28
#include <fstream>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    29
#include <stdlib.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    30
#include <boost/thread.hpp>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    31
#include <boost/bind.hpp>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    32
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    33
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    34
#include <io.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    35
#include <direct.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    36
#include <windows.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    37
#else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    38
#include <unistd.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    39
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    40
#include "Analyser.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    41
#include "CPPParser.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    42
#include "CommandLine.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    43
#include "CommandFile.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    44
#include "BBCFileUtils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    45
#include "HAException.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    46
#include "BBCAnalyser.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    47
#include "AnalyserParams.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    48
#include "MacroAnalyser.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    49
#include "Utils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    50
#include "PlatformData.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    51
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    52
const int KMaxDirLength=1024;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    53
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    54
boost::mutex m;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    55
boost::mutex::scoped_lock lock(m,false); //for synchronizing creation & destruction of threads in gHeaderThreads
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    56
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    57
boost::thread_group gComponentThreads;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    58
boost::thread_group gHeaderThreads;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    59
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    60
boost::thread* gpComponentThreads[MAX_THREAD_COUNT];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    61
boost::thread* gpHeaderThreads[MAX_THREAD_COUNT2];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    62
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    63
XERCES_CPP_NAMESPACE_USE
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    64
typedef pair<string,string> stringpair;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    65
//the total number of files to be processed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    66
static int _total_files = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    67
//the number of files that have been processed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    68
static int _current_files = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    69
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    70
// make sure globbing is turned off when GCC is used
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    71
int _CRT_glob = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    72
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    73
// Fill the headers having API Info in global vector, so that report generator can access it.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    74
vector<pair<string,stringpair> > HeaderInfoList; // vector<pair< headerfile name, pair<API name, API category>>>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    75
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    76
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    77
// Analyser::Analyser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    78
// Constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    79
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    80
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    81
Analyser::Analyser(char** args, int argc) : iCPPParser(NULL)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    82
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    83
    iCmdLine = new CommandLine(args, argc);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    84
    iUseBaselinePlatformData = false;   
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    85
    iUseCurrentPlatformData = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    86
    iBasePlatformData = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    87
    iProductPlatformData = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    88
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    89
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    90
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    91
// Analyser::Analyser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    92
// Constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    93
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    94
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    95
Analyser::Analyser()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    96
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    97
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    98
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    99
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   100
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   101
// Analyser::Analyser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   102
// Destructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   103
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   104
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   105
Analyser::~Analyser()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   106
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   107
    delete iCmdLine;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   108
    iCmdLine = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   109
    if (iCPPParser != NULL)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   110
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   111
        delete iCPPParser;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   112
        iCPPParser = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   113
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   114
    if (iBasePlatformData)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   115
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   116
      delete iBasePlatformData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   117
      iBasePlatformData = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   118
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   119
    if ( iProductPlatformData)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   120
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   121
      delete iProductPlatformData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   122
      iProductPlatformData = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   123
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   124
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   125
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   126
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   127
// Analyser::validateHeaders
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   128
// validates header for include guards
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   129
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   130
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   131
void Analyser::validateHeaders(vector<pair<string, string> >& aFiles, vector<pair<string, string> >& aUnsuccessful)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   132
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   133
	int count = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   134
	string input;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   135
	string files[2];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   136
	bool exists[2];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   137
	string guard[2];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   138
	vector<string> guards[2];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   139
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   140
	vector< pair<string, string> >::iterator fileStart = aFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   141
	vector< pair<string, string> >::iterator fileEnd = aFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   142
	//vector used to temporarily hold file pairs with include guards
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   143
	vector< pair<string, string> > temp;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   144
	while(fileStart != fileEnd )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   145
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   146
		files[0] = fileStart->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   147
		files[1] = fileStart->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   148
		for(int i=0; i<2; i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   149
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   150
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   151
			//check for include guard in Base header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   152
			exists[i] = guardExists(files[i], guard[i]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   153
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   154
		//if either Base or Current header in the PAIR do not have include guards
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   155
		//add the file pair to RemovedFiles list.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   156
		if( !exists[0] || !exists[1] )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   157
			aUnsuccessful.push_back(*fileStart);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   158
		else 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   159
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   160
			if ( find(guards[0].begin(),guards[0].end(),guard[0]) == guards[0].end() && find(guards[1].begin(),guards[1].end(),guard[1]) == guards[1].end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   161
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   162
				guards[0].push_back(guard[0]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   163
				guards[1].push_back(guard[1]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   164
				temp.push_back(*fileStart);			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   165
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   166
			else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   167
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   168
				aUnsuccessful.push_back(*fileStart);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   169
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   170
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   171
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   172
		++fileStart;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   173
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   174
	guards[0].clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   175
	guards[1].clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   176
	aFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   177
	aFiles = temp;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   178
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   179
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   180
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   181
// Analyser::guardExists
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   182
// guard Exists checs to see if the input file has include guards
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   183
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   184
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   185
bool Analyser::guardExists(const string& aFile, string& aGuard)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   186
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   187
	bool exists = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   188
	string guard("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   189
	string input("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   190
	string temp("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   191
	//macro used in the #ifndef line
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   192
	pair<string,string> macroOne;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   193
	//macro #defined subsequently
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   194
	pair<string,string> macroTwo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   195
	int linenum = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   196
	//linenum containing the #ifndef statement
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   197
	int ifndefline = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   198
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   199
	ifstream fileRead(aFile.c_str(), ios::in);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   200
	if( !fileRead.is_open())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   201
		throw HAException("Header file does not exist");;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   202
	while( !fileRead.eof() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   203
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   204
		linenum++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   205
		temp = getLine(fileRead);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   206
		input = trimWhiteSpace(temp);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   207
		// Check if #ifndef are being used
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   208
		// Get the MACRO string if they are present
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   209
		if(input.substr(0,7) == "#ifndef") 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   210
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   211
			macroOne = MacroAnalyser::FindMacro(input);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   212
			ifndefline = linenum;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   213
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   214
		// checks for the usage of #if (!defined ...) in include guard defns
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   215
		else if (input.substr(0,3) == "#if")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   216
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   217
			string tempstr("!defined");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   218
			//strip all braces from the Macro string
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   219
			while(input.find("(") < input.length())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   220
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   221
				replaceChar(input,'(',' ');
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   222
				replaceChar(input,')',' ');
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   223
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   224
			//get the actual MACRO string after required temp modifications
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   225
			string::size_type index = input.find(tempstr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   226
			if (index == string::npos)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   227
			  continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   228
			index = index + tempstr.length();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   229
			tempstr = input.substr( index );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   230
			input = trimWhiteSpace(tempstr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   231
			pair<string,string> temppair(input, "");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   232
			macroOne = temppair;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   233
			ifndefline = linenum;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   234
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   235
		// Check if #define is used 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   236
		else if (input.substr(0, 7) == "#define")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   237
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   238
			macroTwo = MacroAnalyser::FindMacro(input);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   239
			//if macro strings used in both #ifndef and #define are same
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   240
			//consider that include guard exists
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   241
			//also verify that #define follows #if
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   242
			if( macroTwo.first == macroOne.first && macroTwo.second == macroOne.second && ifndefline < linenum )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   243
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   244
				exists = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   245
				aGuard = macroOne.first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   246
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   247
			break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   248
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   249
		// additional statement will be used for early termination of the loop
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   250
		// in cases with no "include" guards
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   251
		else if( input.substr(0, 8) == "#include") 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   252
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   253
			exists = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   254
			break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   255
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   256
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   257
	fileRead.close();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   258
	return exists;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   259
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   260
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   261
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   262
// Analyser::readParameters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   263
// readParameters should be called so that first is called baseline command
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   264
// and after that current command, otherwise it doesn't work
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   265
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   266
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   267
void Analyser::readParameters(basetype type, list<pair<string, string> >& files, string& forcedheaders)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   268
{    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   269
    string headerset;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   270
    string dir;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   271
    string file;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   272
    string platform;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   273
    string forcedheadersfile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   274
    string forcedheaders_file;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   275
    string version;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   276
    string versionstr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   277
    BBCFileUtils* fileUtils = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   278
    static basetype first = type;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   279
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   280
    if (first != EBase)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   281
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   282
        cout << "Error: Parameter read has been called in wrong order.";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   283
        exit(3);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   284
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   285
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   286
    switch(type)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   287
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   288
    case EBase:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   289
        dir = BASELINEDIR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   290
        file = BASELINE;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   291
        platform = BASELINEPLAT;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   292
        forcedheadersfile = BASEFORCEDHEADERSFILE;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   293
        version = BASELINEVERSION;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   294
        versionstr = "BASELINE";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   295
        break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   296
    case ECurrent:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   297
        dir = CURRENTDIR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   298
        file = CURRENT;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   299
        platform = CURRENTPLAT;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   300
        forcedheadersfile = CURRENTFORCEDHEADERSFILE;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   301
        version = CURRENTVERSION;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   302
        versionstr = "CURRENT";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   303
        break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   304
    default:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   305
        cout << "Error: Unknown type (not baseline, nor current).";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   306
        exit(3);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   307
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   308
  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   309
    // Query the baseline-related command line parameters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   310
    // since validation has passed, none of these should really
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   311
    // cause an exception
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   312
    try
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   313
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   314
        if( iParams.parameterExists(BASEPLATFORMDATA))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   315
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   316
            iUseBaselinePlatformData = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   317
            string pfdir(BBCFileUtils::getFullPath(iParams.getParameter(BASEPLATFORMDATA)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   318
            if (!BBCFileUtils::isValidFilename(pfdir))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   319
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   320
                throw HAException("Baseline platform data file '" + pfdir + "' is not valid.");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   321
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   322
            iParams.storeParameter(BASEPLATFORMDATA, pfdir);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   323
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   324
        if( iParams.parameterExists(CURRENTPLATFORMDATA))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   325
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   326
            iUseCurrentPlatformData = true;         
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   327
            string pfdir(BBCFileUtils::getFullPath(iParams.getParameter(CURRENTPLATFORMDATA)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   328
            if (!BBCFileUtils::isValidFilename(pfdir))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   329
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   330
                throw HAException("Current platform data file '" + pfdir + "' is not valid.");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   331
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   332
            iParams.storeParameter(CURRENTPLATFORMDATA, pfdir);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   333
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   334
        if (iParams.parameterExists(TEMPDIR))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   335
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   336
            string tempdir(BBCFileUtils::getFullPath(iParams.getParameter(TEMPDIR)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   337
            iParams.storeParameter(TEMPDIR, tempdir);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   338
            if (!BBCFileUtils::isValidDirectory(tempdir))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   339
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   340
                throw HAException("Temporary directory '" + tempdir + "' is not valid directory.");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   341
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   342
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   343
        if (iParams.parameterExists(REPORTFILE))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   344
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   345
            string reportfile(BBCFileUtils::getFullPath(iParams.getParameter(REPORTFILE)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   346
            iParams.storeParameter(REPORTFILE, reportfile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   347
            if (rightmostDirSeparatorIndex(reportfile) == reportfile.length() - 1 || BBCFileUtils::isValidDirectory(reportfile))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   348
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   349
                throw HAException("No filename given for report file.");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   350
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   351
            string reportdir = reportfile.substr(0, rightmostDirSeparatorIndex(reportfile));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   352
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   353
            if (reportdir.size() == ANALYSER_REPORT_DIR_SIZE)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   354
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   355
                reportdir += DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   356
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   357
            if (!BBCFileUtils::isValidDirectory(reportdir))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   358
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   359
                throw HAException("Directory for report file is non-existent.");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   360
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   361
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   362
        if (iParams.parameterExists(HEADERSET))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   363
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   364
            iHeaderSetInUse = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   365
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   366
		if (iParams.parameterExists(USETHREAD))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   367
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   368
            iUseThread = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   369
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   370
        if (iParams.parameterExists(dir))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   371
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   372
            // START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   373
            // Validate the ; separated header paths and store them
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   374
            list<pair<string, string> > dirs = BBCFileUtils::extractFilenames(iParams.getParameter(dir));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   375
            list<pair<string, string> >::iterator dirbegin = dirs.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   376
            string tempval = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   377
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   378
            for(; dirbegin != dirs.end(); dirbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   379
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   380
                if (dirbegin != dirs.begin())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   381
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   382
                    tempval += ";";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   383
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   384
                string header = BBCFileUtils::getFullPath(dirbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   385
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   386
               if (header.length() != ANALYSER_HEADER_MAX_LENGTH && header.at(header.length() - 1) == DIR_SEPARATOR)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   387
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   388
                    header.resize(header.length() - 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   389
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   390
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   391
                if (!BBCFileUtils::isValidDirectory(header))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   392
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   393
                    string::size_type pos = rightmostDirSeparatorIndex(header);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   394
                    string tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   395
                    if (pos != header.length() - 1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   396
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   397
                        tempvar = header.substr(pos + 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   398
                        header.resize(pos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   399
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   400
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   401
                    if (header.size() == ANALYSER_HEADER_SIZE)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   402
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   403
                        header += DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   404
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   405
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   406
                    if (!BBCFileUtils::isValidDirectory(header) || tempvar.find_first_of("*?") == string::npos)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   407
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   408
                        string errormsg;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   409
                        errormsg = "Non-existent ";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   410
                        if (type == EBase)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   411
                        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   412
                            errormsg += "base";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   413
                        } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   414
                        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   415
                            errormsg += "current";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   416
                        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   417
                        errormsg += " directory '" + header + DIR_SEPARATOR + tempvar + "'.\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   418
                        throw HAException(errormsg);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   419
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   420
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   421
                if (header.at(header.length() - 1) == DIR_SEPARATOR)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   422
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   423
                    header.resize(header.length() - 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   424
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   425
                tempval += header;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   426
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   427
            iParams.storeParameter(dir, tempval);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   428
            // END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   429
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   430
        else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   431
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   432
            iParams.storeParameter(file, BBCFileUtils::getFullPath(iParams.getParameter(file)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   433
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   434
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   435
        // Location of baseline's platform headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   436
        list<pair<string, string> > platformheaders = BBCFileUtils::extractFilenames(iParams.getParameter(platform));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   437
        list<pair<string, string> >::iterator platformbegin = platformheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   438
        string tempval = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   439
        for(; platformbegin != platformheaders.end(); platformbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   440
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   441
            if (platformbegin != platformheaders.begin())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   442
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   443
                tempval += ";";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   444
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   445
            string header = BBCFileUtils::getFullPath(platformbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   446
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   447
            if (header.length() != ANALYSER_HEADER_MAX_LENGTH && header.at(header.length() - 1) == DIR_SEPARATOR)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   448
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   449
                header.resize(header.length() - 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   450
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   451
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   452
            tempval += header;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   453
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   454
        iParams.storeParameter(platform, tempval);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   455
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   456
        // Location of forced headers file (containing full names of headers that 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   457
        // will be included to preprocessing and processing phases, e.g. e32base.h)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   458
        if (iParams.parameterExists(forcedheadersfile))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   459
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   460
            // START -- Support for multiple forced headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   461
            list<pair<string, string> > fheaders = BBCFileUtils::extractFilenames(iParams.getParameter(forcedheadersfile));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   462
            list<pair<string, string> >::iterator fheadersbegin = fheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   463
            string tempval = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   464
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   465
            //for each forced header, get the full path before storing it
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   466
            for(; fheadersbegin != fheaders.end(); fheadersbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   467
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   468
                if (fheadersbegin != fheaders.begin())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   469
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   470
                    tempval += ";";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   471
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   472
                tempval += BBCFileUtils::getFullPath(fheadersbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   473
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   474
            iParams.storeParameter(forcedheadersfile, tempval);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   475
            forcedheaders = iParams.getParameter(forcedheadersfile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   476
            // END -- Support for multiple forced headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   477
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   478
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   479
        if (!iParams.parameterExists(version))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   480
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   481
            iParams.storeParameter(version, versionstr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   482
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   483
    } catch (HAException& e)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   484
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   485
        cout << "Error: "<<e.errorMessage()<<"\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   486
        exit(2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   487
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   488
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   489
    // Instantiate file utilities that generate the file lists based on 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   490
    // commandline parameters. In this try/catch block, we're
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   491
    // handling the baseline files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   492
    try
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   493
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   494
        if (iParams.parameterExists(dir))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   495
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   496
            // baselinedir/currentdir commandline parameters given
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   497
            fileUtils = new BBCFileUtils(iParams.getParameter(dir));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   498
            fileUtils->setTemp(iParams.getParameter(TEMPDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   499
            string wildcard;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   500
            list<stringpair > sets;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   501
            list<stringpair > discarddirs;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   502
            list<stringpair > foundfiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   503
            list<stringpair > completefilenames; // Filenames that are complete, i.e no wildcards used.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   504
            vector<string> wildcardsinset;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   505
            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   506
            if (type == EBase)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   507
            {                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   508
                // We are reading the parameters of the baseline platform               
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   509
                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   510
                if(iHeaderSetInUse)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   511
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   512
                    // the files to be analysed are defined using 'set' parameter.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   513
                    sets = fileUtils->extractFilenames(iParams.getParameter(HEADERSET));   
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   514
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   515
                else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   516
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   517
                    // 'set' parameter is absent. Use default file types in the files to be analysed.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   518
                    sets = fileUtils->extractFilenames(WILDCARD_DEFAULT);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   519
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   520
                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   521
                sets = canonicalizeFilename(sets);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   522
                                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   523
                for(list<stringpair >::iterator s = sets.begin(); s != sets.end(); ++s )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   524
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   525
                    if( s->first.find_first_of("*?") != string::npos )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   526
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   527
                        // Wildcard is used in filename.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   528
                        std::string wc(s->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   529
                        wildcardsinset.push_back(wc);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   530
                        list<stringpair > tmpfiles(fileUtils->getFilesInDir(wc, ""));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   531
                        files.insert(files.end(), tmpfiles.begin(), tmpfiles.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   532
                    }                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   533
                    else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   534
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   535
                        completefilenames.push_back(*s);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   536
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   537
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   538
                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   539
                files.sort(LessStringPair);// Sort files 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   540
                files.unique(); // Remove duplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   541
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   542
                // Remove trailing directory separator from the filenames, that were found using the wildcard,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   543
                // to be able to build <code>foundfiles</code> list for later use.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   544
                list<stringpair> foundwithwildcard(files);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   545
                std::for_each(foundwithwildcard.begin(), foundwithwildcard.end(),RemoveTrailingDirSeparator<stringpair>());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   546
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   547
                // Find files given with complete filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   548
                list<stringpair> tempcompletefiles(completefilenames);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   549
                list<stringpair > tmplist(fileUtils->getFilesInDir(tempcompletefiles, "",foundfiles));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   550
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   551
                // Add files found with wildcard to <code>foundfiles</code>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   552
                foundfiles.sort(LessStringPair);                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   553
                foundfiles.merge(foundwithwildcard, LessStringPair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   554
                foundfiles.unique(); // Remove duplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   555
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   556
                // Merge all found files:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   557
                tmplist.sort( LessStringPair );                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   558
                files.merge(tmplist, LessStringPair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   559
                files.unique(); // Remove duplicates                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   560
                if (iParams.parameterExists(DISCARDDIRS))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   561
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   562
                    discarddirs = BBCFileUtils::extractFilenames(iParams.getParameter(DISCARDDIRS));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   563
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   564
            } else if (type == ECurrent)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   565
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   566
                // We are reading the parameters of the current platform 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   567
                // and the files to be analysed are defined using 'set' parameter.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   568
                wildcard = WILDCARD_ALLFILES;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   569
                files = fileUtils->getFilesInDir(wildcard, "");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   570
                if (iParams.parameterExists(DISCARDDIRS))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   571
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   572
                    discarddirs = BBCFileUtils::extractFilenames(iParams.getParameter(DISCARDDIRS));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   573
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   574
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   575
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   576
                // No 'set' parameter used
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   577
                wildcard = iParams.getParameter(BASELINE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   578
                files = fileUtils->getFilesInDir(wildcard, "");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   579
                if (iParams.parameterExists(DISCARDDIRS))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   580
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   581
                    discarddirs = BBCFileUtils::extractFilenames(iParams.getParameter(DISCARDDIRS));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   582
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   583
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   584
            if (iParams.parameterExists(RECURSIVE))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   585
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   586
                list<pair<string, string> > dirs = fileUtils->getDirsInDir("",discarddirs);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   587
                while(!dirs.empty())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   588
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   589
                    string dir = dirs.front().first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   590
                    dirs.pop_front();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   591
                    list<pair<string, string> > morefiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   592
                    if (type == EBase)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   593
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   594
                        // Read files which were given as complete names in the -set parameter:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   595
                        morefiles = fileUtils->getFilesInDir(completefilenames, dir,foundfiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   596
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   597
                        // Read files which were given as wildcards in the -set parameter:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   598
                        for( vector<string>::iterator wc = wildcardsinset.begin(); wc != wildcardsinset.end(); ++wc)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   599
                        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   600
                            list<pair<string, string> > tmpfiles = fileUtils->getFilesInDir(*wc, dir);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   601
                            morefiles.insert(morefiles.end(), tmpfiles.begin(), tmpfiles.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   602
                        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   603
                    } 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   604
                    else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   605
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   606
                        morefiles = fileUtils->getFilesInDir(wildcard, dir);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   607
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   608
                    morefiles.sort(LessStringPair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   609
                    morefiles.unique();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   610
                    list<pair<string, string> >::const_iterator file = morefiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   611
                    list<pair<string, string> >::const_iterator fileend = morefiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   612
                    for(; file != fileend; file++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   613
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   614
                        files.push_back(*file);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   615
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   616
                    list<pair<string, string> > moredirs = fileUtils->getDirsInDir(dir,discarddirs);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   617
                    while(!moredirs.empty())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   618
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   619
                        pair<string, string> direntry = moredirs.front();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   620
                        moredirs.pop_front();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   621
                        dirs.push_back(direntry);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   622
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   623
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   624
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   625
            if (type == EBase)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   626
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   627
                list<pair<string, string> > notfound;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   628
                diffs(files, sets, notfound);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   629
                if (!notfound.empty())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   630
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   631
                    string errormessage = "Following files could not be found in baseline:\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   632
                    list<pair<string, string> >::iterator file = notfound.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   633
                    list<pair<string, string> >::iterator fileend = notfound.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   634
                    for(; file != fileend; file++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   635
                    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   636
                        errormessage += file->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   637
                        errormessage += "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   638
                    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   639
					//this case has now been redefined as a input error that can be handled
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   640
					//the file is removed from the list to be analysed, and execution continues
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   641
                    //throw HAException(errormessage);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   642
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   643
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   644
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   645
        else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   646
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   647
            // baseline/current commandline parameters given
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   648
            string file_val = iParams.getParameter(file);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   649
            string f = getFilenameWithoutDir(file_val);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   650
            iParams.storeParameter(file, f);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   651
            file_val.resize(file_val.length() - f.length() - 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   652
            iParams.storeParameter(dir, file_val);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   653
            fileUtils = new BBCFileUtils(iParams.getParameter(dir));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   654
            fileUtils->setTemp(iParams.getParameter(TEMPDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   655
            pair<string, string> tempvar(f, toLowerCaseWin(f));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   656
            files.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   657
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   658
    } catch (HAException& e)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   659
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   660
        // something went wrong. Make a clean exit
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   661
        if (fileUtils != NULL)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   662
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   663
            delete fileUtils;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   664
            fileUtils = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   665
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   666
        cout << "Error: " << e.errorMessage() << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   667
        exit(2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   668
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   669
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   670
    delete fileUtils;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   671
    fileUtils = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   672
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   673
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   674
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   675
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   676
// Analyser::processParameters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   677
// processParameters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   678
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   679
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   680
int Analyser::processParameters()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   681
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   682
    string err = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   683
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   684
    // Validate command-line parameters.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   685
    // If they are not sound and complete, break off with an error message.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   686
    try
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   687
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   688
        err = iCmdLine->validateParameters();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   689
    } catch (HAException& e)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   690
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   691
        cout << "ERROR: Bad parameters, quitting. Type ha -? for help.\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   692
        cout << e.errorMessage();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   693
        cout << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   694
        return (2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   695
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   696
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   697
    if (err.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   698
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   699
        cout << "ERROR: Parameter validation fail. Type ha -? for help.\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   700
        cout << err << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   701
        return (2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   702
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   703
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   704
    map<string, string> params = iCmdLine->getParameters();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   705
    map<string, string>::iterator begin = params.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   706
    map<string, string>::iterator end = params.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   707
    while (begin != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   708
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   709
        iParams.storeParameter((*begin).first,(*begin).second, true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   710
        ++begin;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   711
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   712
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   713
    // readParameters should be called so that first is called baseline command
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   714
    // and after that current command, otherwise it doesn't work
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   715
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   716
    // Read base dependent parameters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   717
    readParameters(EBase, iFiles, iForcedBaselineHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   718
    // ..and current ones
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   719
    readParameters(ECurrent, iFiles2, iForcedCurrentHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   720
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   721
#if defined(_DEBUG) || defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   722
    if(iParams.parameterExists(COMMANDLINETEST))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   723
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   724
        map<string, string> params = iParams.getGivenParameters();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   725
        map<string, string>::iterator begin = params.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   726
        map<string, string>::iterator end = params.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   727
        while (begin != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   728
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   729
            cout << "Param: '" << (*begin).first << "' Value: '" << (*begin).second << "'\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   730
            begin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   731
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   732
        exit(100);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   733
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   734
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   735
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   736
    return 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   737
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   738
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   739
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   740
// Analyser::analyseTrees
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   741
// processParameters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   742
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   743
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   744
int Analyser::analyseTrees(DOMNode* baseline, DOMNode* current, const list< pair<string,string> >& files, ReportGenerator& report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   745
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   746
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   747
    //print progress information for files which have compiled
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   748
    list< pair<string,string> >::const_iterator begin = files.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   749
    list< pair<string,string> >::const_iterator end = files.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   750
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   751
    while (begin != end)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   752
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   753
        _current_files++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   754
		cout << "\nAnalysing files (" << _current_files << "/" << _total_files << "): " << (*begin).first <<" => "<< (*begin).second << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   755
        begin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   756
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   757
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   758
    BBCAnalyser analyser(report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   759
    ret =  analyser.analyseTrees(baseline, current, files, iMacroFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   760
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   761
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   762
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   763
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   764
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   765
// Analyser::handleBundlesizeParam
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   766
// Get bundlesize value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   767
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   768
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   769
int Analyser::handleBundlesizeParam()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   770
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   771
    int bundlesize=1; 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   772
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   773
    if (iParams.parameterExists(BUNDLESIZE))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   774
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   775
        string tempstr = iParams.getParameter(BUNDLESIZE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   776
        if (tempstr.length() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   777
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   778
            bundlesize = atoi(tempstr.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   779
            if (bundlesize < 1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   780
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   781
                bundlesize = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   782
            } 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   783
            else if (bundlesize > MAX_BUNDLESIZE)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   784
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   785
                bundlesize = MAX_BUNDLESIZE;                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   786
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   787
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   788
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   789
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   790
    if (bundlesize >= BUNDLESIZE_WARNING)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   791
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   792
    cout << "Note: Processing in large bundles, this may have a negative "
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   793
         << "performance impact and/or produce unwanted artifacts.\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   794
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   795
    return bundlesize;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   796
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   797
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   798
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   799
// Analyser::getReplaceParam
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   800
// Get Replace parameter value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   801
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   802
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   803
string Analyser::getReplaceParam()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   804
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   805
    string replace;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   806
    // File renames
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   807
    if (iParams.parameterExists(FILEREPLACE))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   808
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   809
        replace = iParams.getParameter(FILEREPLACE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   810
    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   811
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   812
        replace = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   813
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   814
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   815
    return replace;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   816
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   817
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   818
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   819
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   820
PlatformHeaders::iterator FindHeaderPair(const string& ID, PlatformHeaders& pfHeaders)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   821
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   822
    for( PlatformHeaders::iterator i = pfHeaders.begin(); i != pfHeaders.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   823
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   824
        if( i->first->ID() == ID )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   825
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   826
            return i;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   827
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   828
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   829
    return pfHeaders.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   830
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   831
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   832
// Analyzes one component at a time.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   833
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   834
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   835
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   836
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   837
void Analyser::AnalyzePlatforms(PlatformHeaders& pfHeaders, PlatformHeaders& unsuccessfulHdrs, ReportGenerator& report, int& issues, bool createThread)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   838
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   839
	string epocRoot("epoc32");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   840
	epocRoot += DIR_SEPARATOR + string("include"); 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   841
	// START -- Support for multiple header directories       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   842
	list<pair<string, bool> > baseEpocRoot = BBCFileUtils::MergeDirs(iParams.getParameter(BASELINEDIR), epocRoot);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   843
	list<pair<string, bool> > currEpocRoot = BBCFileUtils::MergeDirs(iParams.getParameter(CURRENTDIR), epocRoot);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   844
	// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   845
	for( PlatformHeaders::iterator pfHdr = pfHeaders.begin(); pfHdr != pfHeaders.end(); ++pfHdr )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   846
	{        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   847
		if( pfHdr->first->Status() == Header::HDR_STATUS_TO_BE_ANALYZED /*|| pfHdr->first->Status() == Header::HDR_STATUS_INVALID*/)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   848
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   849
			stringvector baseIncPaths;  // This contains include paths needed to compile baseline headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   850
			stringvector currIncPaths;  // This contains include paths needed to compile product headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   851
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   852
			baseIncPaths.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   853
			currIncPaths.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   854
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   855
			iBaseFilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   856
			iCurrFilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   857
			iBaseIncludes.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   858
			iCurrIncludes.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   859
			iInvalidFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   860
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   861
			// All headers in the (baseline platform) component:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   862
			FileList& baseCmpHeaders = pfHdr->first->GetComponent()->Headers();             
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   863
			iBaseFilenames.reserve(baseCmpHeaders.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   864
			iCurrFilenames.reserve(baseCmpHeaders.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   865
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   866
			// Make sure that the epoc32/include directory is always in include paths:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   867
			// START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   868
			list<pair<string, bool> >::iterator iter1 = baseEpocRoot.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   869
			for(; iter1 != baseEpocRoot.end(); iter1++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   870
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   871
				if( iter1->second )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   872
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   873
					baseIncPaths.push_back(iter1->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   874
				}  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   875
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   876
			list<pair<string, bool> >::iterator iter2 = currEpocRoot.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   877
			for(; iter2 != currEpocRoot.end(); iter2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   878
			{         
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   879
				if( iter2->second )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   880
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   881
					currIncPaths.push_back(iter2->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   882
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   883
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   884
			// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   885
			string forcedHeader;
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
   886
			string baseForcedHeader;
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
   887
			string curForcedHeader;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   888
			char* base = new char[KMaxDirLength+1];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   889
			getcwd(base, KMaxDirLength);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   890
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   891
			vector< stringpair > tmpfiles;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   892
			vector< stringpair > invalid;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   893
			// Loop all the headers that are in the same component:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   894
			for( FileList::iterator bH = baseCmpHeaders.begin(); bH != baseCmpHeaders.end(); ++bH )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   895
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   896
				Header* baseHdr = dynamic_cast<Header*>(*bH);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   897
							
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   898
				PlatformHeaders::iterator pairIter = FindHeaderPair(baseHdr->ID(), pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   899
				if(pairIter != pfHeaders.end() && pairIter->second != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   900
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   901
					// If analysing in bundle, get the headers to be anaysed to validate for include guard before addition to bundle.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   902
					if( (pfHeaders.size() > 1) && baseHdr && (baseHdr->Status() == Header::HDR_STATUS_TO_BE_ANALYZED) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   903
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   904
						stringpair tmp(baseHdr->ID(), pairIter->second->ID());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   905
						tmpfiles.push_back(tmp);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   906
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   907
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   908
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   909
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   910
			if(tmpfiles.size())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   911
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   912
				// If analysing in bundle, validate for include guard before addition to bundle.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   913
				validateHeaders(tmpfiles, invalid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   914
				// Exclude "iInvalidFiles" from bundle analysis. Analyse them only singly. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   915
				if( invalid.size() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   916
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   917
					for( int i=0 ; i < (int)invalid.size() ; i++ )
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   918
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   919
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   920
						PlatformHeaders::iterator pairIter = FindHeaderPair(invalid[i].first, pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   921
						//No need to check if the invalid file exists in pfHeaders, as it already done above. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   922
						HeaderPair temp(pairIter->first, pairIter->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   923
						if(find(iInvalidFiles.begin(), iInvalidFiles.end(), temp) == iInvalidFiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   924
							iInvalidFiles.push_back(temp);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   925
						pairIter->first->SetStatus(Header::HDR_STATUS_INVALID);	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   926
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   927
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   928
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   929
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   930
			for( FileList::iterator bH = baseCmpHeaders.begin(); bH != baseCmpHeaders.end(); ++bH )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   931
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   932
				Header* baseHdr = dynamic_cast<Header*>(*bH);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   933
							
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   934
				PlatformHeaders::iterator pairIter = FindHeaderPair(baseHdr->ID(), pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   935
				if(pairIter != pfHeaders.end() && pairIter->second != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   936
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   937
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   938
					// If the status is "to be analyzed" , get this header to the bundle too
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   939
					if( baseHdr && 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   940
						(baseHdr->Status() == Header::HDR_STATUS_TO_BE_ANALYZED ))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   941
					{                       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   942
						// Find all additional includes that are needed in compilation of this header:   
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   943
						const vector<string>& bIncs = iBasePlatformData->IncludesForHeader(baseHdr);                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   944
						forcedHeader.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   945
						forcedHeader = baseHdr->CachedForcedInclude();
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
   946
						// If the component contains all SHAi headers, then no need to include the deafult forced header.
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
   947
						if (forcedHeader == FORCED_SHAI_HDR)
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
   948
							baseForcedHeader = forcedHeader;
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   949
						// Find all include paths that are needed in compilation of this header:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   950
						const vector<string>& bPaths = iBasePlatformData->IncludePathsForHeader(baseHdr);                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   951
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   952
						// Add include paths for baseline platform headers:   
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   953
						// START -- Support for multiple header directories                                     
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   954
						for( vector<string>::const_iterator i = bPaths.begin(); i != bPaths.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   955
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   956
							list<pair<string, bool> > fullIncPath = BBCFileUtils::MergeDirs(iParams.getParameter(BASELINEDIR), *i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   957
							list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   958
							for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   959
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   960
								if( find(baseIncPaths.begin(), baseIncPaths.end(), fulliterbegin->first) == baseIncPaths.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   961
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   962
									baseIncPaths.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   963
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   964
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   965
						}                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   966
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   967
						// Add additional include directives to header list:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   968
						for( vector<string>::const_iterator i = bIncs.begin(); i != bIncs.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   969
						{                          
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   970
							// Make sure the header exists, because we don't want to generate new compilation errors...
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   971
							bool exists = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   972
							// Test that header exists by merging the header name with include paths:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   973
							for( stringvector::iterator ip = baseIncPaths.begin(); ip != baseIncPaths.end(); ++ip )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   974
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   975
								list<pair<string, bool> > fullIncPath = BBCFileUtils::MergeDirs( *ip, *i );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   976
								list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   977
								for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   978
								{                           
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   979
									if( find(iBaseIncludes.begin(), iBaseIncludes.end(), fulliterbegin->first) == iBaseIncludes.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   980
									{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   981
										if( BBCFileUtils::FileExists(fulliterbegin->first) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   982
										{                                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   983
											iBaseIncludes.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   984
											exists = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   985
											break; 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   986
										}                                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   987
									}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   988
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   989
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   990
							if( exists == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   991
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   992
								// Try to find the included header from the same directory than the header itself is:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   993
								list<pair<string, bool> > fullIncPath = 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   994
									BBCFileUtils::MergeDirs(iParams.getParameter(BASELINEDIR), baseHdr->Path() + DIR_SEPARATOR + *i);                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   995
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   996
								list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   997
								for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   998
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   999
									if( BBCFileUtils::FileExists(fulliterbegin->first) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1000
									{                         
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1001
										iBaseIncludes.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1002
									} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1003
								}                           
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1004
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1005
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1006
						// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1007
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1008
						// Add this header to the list of headers that are needed for compilation:                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1009
						if( find(iBaseIncludes.begin(), iBaseIncludes.end(), baseHdr->ID()) == iBaseIncludes.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1010
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1011
							iBaseIncludes.push_back(baseHdr->ID());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1012
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1013
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1014
						// Add headers to the list of headers that are to be analyzed:										
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1015
						iBaseFilenames.push_back(baseHdr->ID());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1016
						iCurrFilenames.push_back(pairIter->second->ID());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1017
						baseHdr->SetStatus(Header::HDR_STATUS_READY);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1018
       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1019
						forcedHeader = DIR_SEPARATOR + forcedHeader;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1020
						forcedHeader = base + forcedHeader;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1021
						if( BBCFileUtils::isValidFilename(forcedHeader) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1022
							if( find(iBaseIncludes.begin(), iBaseIncludes.end(), forcedHeader) == iBaseIncludes.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1023
								iBaseIncludes.insert(iBaseIncludes.begin(),forcedHeader);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1024
              
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1025
              
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1026
						// Then we need to find corresponding headers from the product (current) platform:                                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1027
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1028
						Header* currHeader = pairIter->second; //Current header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1029
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1030
						// Find additional includes and include paths for the current platform's header:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1031
						const vector<string>& cIncs = iProductPlatformData->IncludesForHeader(currHeader, baseHdr);                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1032
						forcedHeader.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1033
						forcedHeader =currHeader->CachedForcedInclude(); 
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1034
						// If the component contains all SHAi headers, then no need to include the deafult forced header.
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1035
						if (forcedHeader == FORCED_SHAI_HDR)
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1036
							curForcedHeader = forcedHeader;
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1037
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1038
						const vector<string>& cPaths =iProductPlatformData->IncludePathsForHeader(currHeader);                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1039
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1040
						// Add include paths to the list, if it does not exist there yet:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1041
						for( vector<string>::const_iterator i = cPaths.begin(); i != cPaths.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1042
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1043
							// SART -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1044
							list<pair<string, bool> > fullIncPath = BBCFileUtils::MergeDirs(iParams.getParameter(CURRENTDIR), *i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1045
							list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1046
							for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1047
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1048
								if( find(currIncPaths.begin(), currIncPaths.end(), fulliterbegin->first) == currIncPaths.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1049
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1050
									currIncPaths.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1051
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1052
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1053
							// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1054
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1055
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1056
						// Add additional include directives to header list:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1057
						for( vector<string>::const_iterator i = cIncs.begin(); i != cIncs.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1058
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1059
							bool exists = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1060
							// Make sure the header exists, because we don't want to generate new compilation errors...
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1061
							for( stringvector::iterator ip = currIncPaths.begin(); ip != currIncPaths.end(); ++ip )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1062
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1063
								// START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1064
								list<pair<string, bool> > fullIncPath = BBCFileUtils::MergeDirs( *ip, *i );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1065
								list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1066
								for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1067
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1068
									if( find(iCurrIncludes.begin(), iCurrIncludes.end(), fulliterbegin->first) == iCurrIncludes.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1069
									{                                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1070
										if( BBCFileUtils::FileExists(fulliterbegin->first) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1071
										{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1072
											iCurrIncludes.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1073
											exists = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1074
											break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1075
										}                                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1076
									}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1077
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1078
								// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1079
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1080
							if( exists == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1081
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1082
								// Try to find the included header from the same directory than the header itself is:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1083
								// START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1084
								list<pair<string, bool> > fullIncPath = 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1085
									BBCFileUtils::MergeDirs(iParams.getParameter(CURRENTDIR), currHeader->Path() + DIR_SEPARATOR + *i);                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1086
								list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1087
								for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1088
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1089
									if( BBCFileUtils::FileExists(fulliterbegin->first) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1090
									{                                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1091
										iCurrIncludes.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1092
									}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1093
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1094
								// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1095
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1096
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1097
							// Add this header to the list:                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1098
						if( find(iCurrIncludes.begin(), iCurrIncludes.end(), currHeader->ID()) == iCurrIncludes.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1099
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1100
							iCurrIncludes.push_back(currHeader->ID());                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1101
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1102
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1103
						forcedHeader = DIR_SEPARATOR + forcedHeader;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1104
						forcedHeader = base + forcedHeader;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1105
						if( BBCFileUtils::isValidFilename(forcedHeader) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1106
							if( find(iCurrIncludes.begin(), iCurrIncludes.end(), forcedHeader) == iCurrIncludes.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1107
								iCurrIncludes.insert(iCurrIncludes.begin(),forcedHeader);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1108
									
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1109
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1110
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1111
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1112
			// Build include paths for parser objects:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1113
			string bIP;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1114
			for( stringvector::iterator i = baseIncPaths.begin(); i != baseIncPaths.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1115
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1116
				if( i != baseIncPaths.begin() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1117
					bIP += ";";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1118
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1119
				bIP += *i;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1120
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1121
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1122
			string cIP;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1123
			for( stringvector::iterator i = currIncPaths.begin(); i != currIncPaths.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1124
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1125
				if( i != currIncPaths.begin() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1126
					cIP += ";";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1127
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1128
				cIP += *i;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1129
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1130
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1131
			// Construct parsers:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1132
			auto_ptr<CPPParser> parser(new CPPParser(bIP));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1133
			auto_ptr<CPPParser> parser2(new CPPParser(cIP));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1134
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1135
			// Set temp directories for parsers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1136
			parser->setTemp(iParams.getParameter(TEMPDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1137
			parser2->setTemp(iParams.getParameter(TEMPDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1138
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1139
			// If this bundle is for SHAi headers, then ignore iForcedHeaders 
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1140
			//to solve Kernel Macro related compilation issues.
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1141
			if(baseForcedHeader.size() == 0 )
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1142
			{
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1143
				parser->setForcedHeaders(iForcedBaselineHeaders);			
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1144
			}
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1145
			if(curForcedHeader.size() == 0 )
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1146
			{
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1147
				parser2->setForcedHeaders(iForcedCurrentHeaders);			
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  1148
			}
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1149
			
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1150
			if (createThread)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1151
			{		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1152
				//if the number of threads in this group has reached pre-defined max count, destroy all the threads in this group before creating one.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1153
				//boost::thread_group object does not destroy a thread when it goes to completion. if the threads are not destroyed lot of memory will be eaten up unneccessarily
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1154
				if(gHeaderThreads.size() >= MAX_THREAD_COUNT)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1155
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1156
				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1157
					gHeaderThreads.join_all();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1158
					int size = gHeaderThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1159
					for(int i=0;i<size;i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1160
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1161
						gHeaderThreads.remove_thread(gpComponentThreads[i]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1162
						gpComponentThreads[i]->~thread();	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1163
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1164
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1165
						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1166
				//create a copy of the Analyser object for the new thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1167
				Analyser* obj = new Analyser();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1168
				*obj = *this;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1169
				int size = gHeaderThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1170
				gpComponentThreads[size]=gHeaderThreads.create_thread(boost::bind(&Analyser::Wrapper,obj, boost::ref(report), boost::ref(issues), *(parser.get()), *(parser2.get()), boost::ref(pfHeaders), boost::ref(unsuccessfulHdrs)));				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1171
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1172
			else //do not create different thread for the second time when AnalyzePlatforms is called recurssively
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1173
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1174
				Wrapper(report, issues, *(parser.get()), *(parser2.get()), pfHeaders, unsuccessfulHdrs);	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1175
			}		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1176
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1177
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1178
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1179
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1180
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1181
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1182
// Analyser::InitializePlatforms
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1183
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1184
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1185
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1186
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1187
void Analyser::InitializePlatforms(PlatformHeaders& pfHeaders, vector<pair<string, string> >& headers, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1188
								   vector<pair<string, string> >& excludeheaders, vector<pair<string, string> >& resourcevector)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1189
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1190
	if( iBasePlatformData )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1191
		delete iBasePlatformData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1192
	if( iProductPlatformData )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1193
		delete iProductPlatformData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1194
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1195
	iBasePlatformData = new PlatformData(iParams.getParameter(BASELINEVERSION),
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1196
		iParams.getParameter(BASELINEDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1197
	iProductPlatformData = new PlatformData(iParams.getParameter(CURRENTVERSION),
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1198
		iParams.getParameter(CURRENTDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1199
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1200
	if( iUseBaselinePlatformData )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1201
		iBasePlatformData->Initialize(iParams.getParameter(BASEPLATFORMDATA));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1202
	if( iUseCurrentPlatformData )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1203
		iProductPlatformData->Initialize(iParams.getParameter(CURRENTPLATFORMDATA));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1204
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1205
	vector<pair<string, string> > updatedHdrs;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1206
	updatedHdrs.reserve(headers.size());    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1207
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1208
	// Mark the platform header objects with status 'HDR_STATUS_TO_BE_ANALYZED':
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1209
	vector<pair<string, string> >::const_iterator hdr = headers.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1210
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1211
	for( ;hdr != headers.end(); ++hdr )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1212
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1213
		pair<string,stringpair> headerInfo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1214
		bool is_Resource = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1215
		int loc = -1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1216
		pair<string,string> resource;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1217
		Header* baseHdrObj = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1218
		Header* currHdrObj = 0;        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1219
		string hdrTest(hdr->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1220
		toLower(hdrTest);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1221
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1222
		// Check whether the header is a resource file. If, so add it to resource vector instead of pfheaders.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1223
		if( (loc = int(hdrTest.find_last_of("."))) != string::npos &&
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1224
			hdrTest.substr(loc,string::npos) == RH_EXTENSION )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1225
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1226
			is_Resource = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1227
			resource.first = hdrTest;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1228
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1229
		CFileMap::const_iterator bI = iBasePlatformData->HeadersById().find(hdrTest);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1230
		if( bI != iBasePlatformData->HeadersById().end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1231
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1232
			baseHdrObj = dynamic_cast<Header*>((*bI).second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1233
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1234
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1235
		hdrTest = hdr->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1236
		toLower(hdrTest);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1237
		if(is_Resource == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1238
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1239
			resource.second = hdrTest;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1240
			resourcevector.push_back(resource);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1241
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1242
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1243
		CFileMap::const_iterator cI = iProductPlatformData->HeadersById().find(hdrTest);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1244
		if( cI != iProductPlatformData->HeadersById().end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1245
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1246
			currHdrObj = dynamic_cast<Header*>((*cI).second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1247
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1248
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1249
		if(baseHdrObj && baseHdrObj->Status()== Header::HDR_STATUS_IGNORE )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1250
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1251
			excludeheaders.push_back(*hdr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1252
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1253
		else if( baseHdrObj && currHdrObj )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1254
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1255
			if( is_Resource == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1256
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1257
				pfHeaders.push_back(HeaderPair(baseHdrObj, currHdrObj));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1258
				baseHdrObj->SetStatus(Header::HDR_STATUS_TO_BE_ANALYZED);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1259
				currHdrObj->SetStatus(Header::HDR_STATUS_TO_BE_ANALYZED);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1260
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1261
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1262
			// get API info from current header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1263
			if(currHdrObj->APIinfo().first.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1264
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1265
				headerInfo.first = currHdrObj->ID();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1266
				headerInfo.second.first = currHdrObj->APIinfo().first; // API NAME
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1267
				headerInfo.second.second = currHdrObj->APIinfo().second; // API REL. CATEGORY
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1268
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1269
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1270
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1271
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1272
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1273
			// get API info from base header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1274
			if(baseHdrObj && baseHdrObj->APIinfo().first.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1275
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1276
				headerInfo.first = baseHdrObj->ID();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1277
				headerInfo.second.first = baseHdrObj->APIinfo().first; // API NAME
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1278
				headerInfo.second.second = baseHdrObj->APIinfo().second; // API REL. CATEGORY
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1279
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1280
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1281
			// get API info from current header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1282
			else if(currHdrObj && currHdrObj->APIinfo().first.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1283
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1284
				headerInfo.first = currHdrObj->ID();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1285
				headerInfo.second.first = currHdrObj->APIinfo().first; // API NAME
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1286
				headerInfo.second.second = currHdrObj->APIinfo().second; // API REL. CATEGORY
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1287
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1288
			// No info found from platform data, so use common include paths and 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1289
			// other common compile-time parameters for this header:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1290
			if( is_Resource == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1291
			updatedHdrs.push_back(*hdr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1292
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1293
		// Fill the headers having API Info in global vector, so that report generator can access it.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1294
		if(headerInfo.first.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1295
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1296
			HeaderInfoList.push_back(headerInfo);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1297
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1298
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1299
	headers = updatedHdrs;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1300
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1301
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1302
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1303
// Analyser::analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1304
// Do the actual analyse of headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1305
// Create analysis report
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1306
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1307
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1308
int Analyser::analyse()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1309
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1310
	// Local variable instantiation
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1311
	int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1312
	iHeaderSetInUse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1313
	iUseThread = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1314
	string epocroot;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1315
	int bundlesize = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1316
	unsigned int amount, amount2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1317
	iOnlySystemIncludeRequired = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1318
	unsigned int excludedHeaderSize;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1319
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1320
	if (processParameters() == 2) return 2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1321
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1322
	// Get the bundle size (as string) and convert it to an integer
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1323
	bundlesize = handleBundlesizeParam();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1324
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1325
	// Get replace parameter for file renaming
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1326
	string replace = getReplaceParam();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1327
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1328
	// Update the amount of found files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1329
	amount = (unsigned int)iFiles.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1330
	// Update the amount of found files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1331
	amount2 = (unsigned int)iFiles2.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1332
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1333
	// Vector that holds the merge results and if it can't find baseline
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1334
	// file from current file it will put empty string as current file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1335
	vector<pair<string,string> > mergeVector;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1336
	mergeVector.reserve(amount);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1337
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1338
	// List holds files which were found in current but not in baseline.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1339
	// Full path
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1340
	list<string> addedFiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1341
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1342
	// List holds files which were in baseline file list but
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1343
	// weren't in current file list, ie they were removed.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1344
	// Contains full path with filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1345
	list<string> removedFiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1346
	try
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1347
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1348
		// Merges baseline and current files into one vector
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1349
		MergeFiles(iFiles, iFiles2, replace, mergeVector);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1350
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1351
		// Finds removed files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1352
		fileDiffs(mergeVector, removedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1353
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1354
	catch (HAException e)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1355
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1356
		cout << "Error in processing file lists:\n" << e.errorMessage() << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1357
		exit(4);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1358
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1359
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1360
	// Mergemap now contains pairs of following type:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1361
	// baseline complex filename (w/ absolute path) -> current version complex filename (w/ absolute path)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1362
	_total_files = (unsigned int)mergeVector.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1363
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1364
	cout << "\nTotal baseline files: " << amount << "\nTotal current files: " << amount2 << "\nFile pairs found: "
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1365
		<< _total_files << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1366
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1367
	cout << "\nComparing " << _total_files << " matching files between\n " << iParams.getParameter(BASELINEDIR)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1368
		<< " (Version " << iParams.getParameter(BASELINEVERSION) << ")\nand\n " << iParams.getParameter(CURRENTDIR)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1369
		<< " (Version " << iParams.getParameter(CURRENTVERSION) << ")\n\n\n\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1370
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1371
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1372
	ReportGenerator report(iParams.getParameter(REPORTFILE));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1373
	report.setCmdLineParms(iParams.getGivenParameters());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1374
	report.setVersions(iParams.getParameter(BASELINEVERSION),iParams.getParameter(CURRENTVERSION));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1375
	report.setXSL("BBCResults.xsl",false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1376
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1377
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1378
	report.startReport();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1379
	// start the timer
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1380
	time_t starttime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1381
	time_t endtime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1382
	starttime = time(NULL);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1383
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1384
	PlatformHeaders pfHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1385
	pfHeaders.reserve(mergeVector.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1386
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1387
	// Vector that holds the the headers those should be excluded from analysis.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1388
	// These header files are mentioned in platform headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1389
	vector<pair<string,string> > excludeHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1390
	excludeHeaders.reserve(mergeVector.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1391
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1392
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1393
	// Headers that are found from platform data are inserted in pfHeaders.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1394
	// Others are left to mergeVector.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1395
	vector<pair<string, string> > resourceVector;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1396
	resourceVector.reserve(mergeVector.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1397
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1398
	if(mergeVector.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1399
		InitializePlatforms(pfHeaders, mergeVector,excludeHeaders,resourceVector);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1400
	excludedHeaderSize = int(excludeHeaders.size());	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1401
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1402
	endtime = time(NULL);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1403
	time_t pfInitTime = endtime - starttime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1404
	time_t originalStartTime = starttime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1405
	starttime = time(NULL);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1406
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1407
	//Now analyse Resource Header RH files using text parser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1408
	if(resourceVector.size()>0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1409
		ParseAndCompareResourceFiles(resourceVector, report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1410
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1411
	// Process each removed filename from removedMap
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1412
	list<string>::iterator removedbegin = removedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1413
	list<string>::iterator removedend = removedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1414
	for(; removedbegin != removedend; removedbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1415
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1416
		string filename = *removedbegin;
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1417
		report.addIssue(filename, "", EIssueIdentityFile, EIssueTypeRemoval, ESeverityBBCBreak, ESeveritySCBreak, "", 0,"", "","");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1418
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1419
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1420
	int issues = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1421
	PlatformHeaders unsuccessfulHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1422
	vector<pair<string, string> > unsuccessfulHeaderNames;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1423
	vector<pair<string, string> > platformUnsuccessfulHeaderNames;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1424
	int compErrors = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1425
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1426
	//validate if the headers have include guards,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1427
	//move ones without guards for individual compilation
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1428
	validateHeaders(mergeVector, unsuccessfulHeaderNames);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1429
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1430
	boost::thread_group mainThreads;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1431
	int mergeVectorCompErrs = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1432
	int unsuccessfulCompErrs = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1433
	int platformUnsuccessfulCompErrs = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1434
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1435
	// Analyse headers that were not found from platform data:	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1436
	if( mergeVector.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1437
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1438
		//create copy of Analyser object for the new thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1439
			Analyser* obj1=new Analyser();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1440
			*obj1=*this;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1441
			//analyse mergeVector in different thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1442
			mainThreads.create_thread(boost::bind(&Analyser::AnalyseHeaders,obj1,boost::ref(mergeVector),bundlesize,boost::ref(report),boost::ref(issues),boost::ref(mergeVectorCompErrs)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1443
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1444
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1445
	// Compile unsuccessful headers one by one, because it is unlikely that they
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1446
	// will be compiled successfully here either:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1447
	if( unsuccessfulHeaderNames.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1448
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1449
		//create copy of Analyser object for the new thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1450
			Analyser* obj2 = new Analyser();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1451
			*obj2=*this;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1452
			//analyse unsuccessfulHeaderNames in different thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1453
			mainThreads.create_thread(boost::bind(&Analyser::AnalyseHeaders,obj2,boost::ref(unsuccessfulHeaderNames),1,boost::ref(report),boost::ref(issues),boost::ref(unsuccessfulCompErrs)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1454
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1455
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1456
	if(pfHeaders.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1457
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1458
		AnalyzePlatforms(pfHeaders, unsuccessfulHeaders, report, issues, iUseThread);    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1459
		if (iUseThread)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1460
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1461
			gHeaderThreads.join_all(); // wait for all threads in gHeaderThreads to complete
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1462
			gComponentThreads.join_all(); // wait for all threads in gComponentThreads to complete
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1463
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1464
			//destroy the thredas in gHeaderThreads
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1465
			int size = gHeaderThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1466
			for (int i=0;i<size;i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1467
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1468
				gHeaderThreads.remove_thread(gpComponentThreads[i]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1469
				gpComponentThreads[i]->~thread();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1470
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1471
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1472
			//destroy the thredas in gComponentThreads
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1473
			size=gComponentThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1474
			for (int i=0;i<size;i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1475
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1476
				gComponentThreads.remove_thread(gpHeaderThreads[i]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1477
				gpHeaderThreads[i]->~thread();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1478
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1479
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1480
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1481
		for( PlatformHeaders::iterator i = unsuccessfulHeaders.begin(); i != unsuccessfulHeaders.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1482
		{  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1483
			// Build list of headers that could not be compiled with platform data:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1484
			platformUnsuccessfulHeaderNames.push_back(pair<string, string>(i->first->ID(), i->second->ID()));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1485
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1486
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1487
		if(platformUnsuccessfulHeaderNames.size() >0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1488
			AnalyseHeaders(platformUnsuccessfulHeaderNames, 1, report, issues, platformUnsuccessfulCompErrs); 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1489
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1490
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1491
	mainThreads.join_all(); // wait for all threads in mainThreads to complete
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1492
	compErrors += mergeVectorCompErrs + unsuccessfulCompErrs + platformUnsuccessfulCompErrs;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1493
	report.finishReport();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1494
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1495
	// List number of files which had compilation errors and could not be compiled	
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1496
	if ( _current_files + (int)excludedHeaderSize < _total_files )
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1497
		cout << "\n" << ( _total_files - (_current_files + excludedHeaderSize) ) <<"  files out of " << _total_files << " had some issues and could not be analysed.\n" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1498
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1499
	// Wrap up the run and print statistics
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1500
	unsigned int count = _total_files * 2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1501
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1502
	endtime = time(NULL);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1503
	time_t runningtime = endtime - starttime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1504
	double timedelta = 0.0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1505
	if (count > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1506
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1507
		timedelta = (double)runningtime/(double)count;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1508
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1509
	cout << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1510
	cout << "---------------------------------------------" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1511
	cout << "Finished!" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1512
	cout << "Files processed: " << count << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1513
	cout << "Total time: " << endtime - originalStartTime << " seconds." << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1514
	cout << "Platform data initialization time: " << pfInitTime << " seconds.\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1515
	cout << "Compilation and analysis time: " << (long)runningtime << " seconds (Average: "<<timedelta<<" seconds per file).\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1516
	cout << "Compilation errors: " << compErrors << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1517
	if(excludedHeaderSize > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1518
	cout << "No of excluded headers: " << excludedHeaderSize << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1519
	cout << "---------------------------------------------" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1520
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1521
	if (iNotRemovedFiles.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1522
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1523
		cout << iNotRemovedFiles.size() << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1524
		list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1525
		list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1526
		list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1527
		for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1528
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1529
			CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1530
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1531
		if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1532
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1533
			iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1534
		} else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1535
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1536
			iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1537
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1538
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1539
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1540
	if (ret == 0 && issues != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1541
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1542
		ret = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1543
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1544
	return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1545
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1546
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1547
void Analyser::AnalyseHeaders(const vector<pair<string, string> >& headerList, int bundlesize, ReportGenerator& report, int& issues, int& compErrors)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1548
{    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1549
	unsigned int processedcount = 1;    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1550
	stringvector basefilenames;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1551
	stringvector curfilenames;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1552
	vector<pair<string, string> > unsuccessfulHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1553
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1554
	vector<pair<string, string> >::const_iterator fnmapiter = headerList.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1555
	while (fnmapiter != headerList.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1556
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1557
		// Push the pair's members to their respective vectors
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1558
		// for bundle handling
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1559
		basefilenames.push_back(fnmapiter->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1560
		curfilenames.push_back(fnmapiter->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1561
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1562
		// If a bundle is full or the item is the last one to process,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1563
		// we parse the current file lists to xml files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1564
		if ((processedcount > 0 && (processedcount % bundlesize == 0)) || 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1565
			processedcount == headerList.size())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1566
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1567
			if (!AnalyseBundle(basefilenames,curfilenames,report, issues))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1568
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1569
				//If there where parsing errors in a bundle, we try to compile each header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1570
				// one by one
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1571
				stringvector::iterator basebegin = basefilenames.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1572
				stringvector::iterator baseend = basefilenames.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1573
				stringvector::iterator currentbegin = curfilenames.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1574
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1575
				if( basefilenames.size() == 1 ||
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1576
					bundlesize == 1 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1577
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1578
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1579
					if( basebegin != baseend )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1580
					{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1581
						//Add compilation error to the report
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1582
						string compilationError = iCompErrTxt;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1583
						report.addIssue((*basebegin), "", EIssueIdentityFile, EIssueTypeCompilationError, ESeverityBBCBreak, ESeveritySCBreak, "", 0,"",
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1584
							(*currentbegin),compilationError);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1585
						issues++;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1586
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1587
						compErrors++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1588
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1589
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1590
				else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1591
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1592
					while(basebegin != baseend )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1593
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1594
						stringvector basefilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1595
						stringvector curfilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1596
						basefilename.push_back(*basebegin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1597
						curfilename.push_back(*currentbegin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1598
						if (!AnalyseBundle(basefilename,curfilename,report, issues))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1599
						{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1600
							//Add compilation error to the report						
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1601
							string compilationError = iCompErrTxt;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1602
							report.addIssue((*basebegin), "", EIssueIdentityFile, EIssueTypeCompilationError, ESeverityBBCBreak, ESeveritySCBreak, "", 0,"",
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1603
								(*currentbegin),compilationError);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1604
							issues++;								
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1605
							compErrors++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1606
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1607
						basebegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1608
						currentbegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1609
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1610
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1611
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1612
			basefilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1613
			curfilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1614
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1615
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1616
		fnmapiter++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1617
		processedcount++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1618
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1619
	
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1620
    if (iNotRemovedFiles.size() != 0)
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1621
	{            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1622
		list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1623
		list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1624
		list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1625
		for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1626
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1627
			CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1628
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1629
		if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1630
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1631
			iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1632
		} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1633
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1634
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1635
			iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1636
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1637
	} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1638
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1639
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1640
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1641
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1642
// Analyser::AnalyseBundle
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1643
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1644
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1645
//bool Analyser::AnalyseBundle(const stringvector& basefilenames, const stringvector& curfilenames, ReportGenerator& report, int& issues)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1646
bool Analyser::AnalyseBundle(const stringvector& basefilenames, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1647
                             const stringvector& curfilenames, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1648
                             ReportGenerator& report, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1649
                             int& issues,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1650
                             CPPParser* baseParser,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1651
                             CPPParser* currParser,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1652
                             stringvector* basecompileset,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1653
                             stringvector* currcompileset)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1654
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1655
	auto_ptr<CPPParser> baseAutoPtr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1656
	auto_ptr<CPPParser> currAutoPtr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1657
	CPPParser* parser  = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1658
	CPPParser* parser2 = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1659
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1660
	if( baseParser )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1661
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1662
		// This function does not own the pointer, so no auto_ptr used here.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1663
		parser = baseParser;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1664
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1665
	else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1666
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1667
		parser = new CPPParser(iParams.getParameter(BASELINEPLAT));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1668
		// Set temp directory for parser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1669
		parser->setTemp(iParams.getParameter(TEMPDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1670
		// Set forced headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1671
		parser->setForcedHeaders(iForcedBaselineHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1672
		// Wrap allocated memory to an auto_ptr to get it deallocated properly.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1673
		baseAutoPtr.reset(parser);                                  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1674
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1675
	if( currParser )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1676
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1677
		// This function does not own the pointer, so no auto_ptr used here.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1678
		parser2 = currParser;        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1679
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1680
	else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1681
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1682
		parser2 = new CPPParser(iParams.getParameter(CURRENTPLAT));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1683
		// Set temp directory for parser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1684
		parser2->setTemp(iParams.getParameter(TEMPDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1685
		// Set forced headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1686
		parser2->setForcedHeaders(iForcedCurrentHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1687
		// Wrap allocated memory to an auto_ptr to get it deallocated properly.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1688
		currAutoPtr.reset(parser2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1689
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1690
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1691
	try 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1692
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1693
		// Parse the filename vectors into XML and eventually into a DOM format
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1694
		DOMNode* root = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1695
		DOMNode* root2 = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1696
		if(basecompileset && basecompileset->size() != 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1697
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1698
			root = parser->parse(*basecompileset, "base", iParams.getParameter(BASELINEDIR), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1699
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1700
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1701
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1702
			root = parser->parse(basefilenames, "base", iParams.getParameter(BASELINEDIR), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1703
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1704
		if(currcompileset && currcompileset->size() != 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1705
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1706
			root2 = parser2->parse(*currcompileset, "current", iParams.getParameter(CURRENTDIR), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1707
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1708
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1709
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1710
			root2 = parser2->parse(curfilenames, "current", iParams.getParameter(CURRENTDIR), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1711
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1712
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1713
		MacroAnalyser macros(parser->getMacroFilename(), parser2->getMacroFilename(), basefilenames, curfilenames);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1714
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1715
		macros.Analyse(iMacroFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1716
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1717
#if !defined(_DEBUG) && !defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1718
		parser->RemoveFile(parser->getMacroFilename(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1719
		parser2->RemoveFile(parser2->getMacroFilename(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1720
		parser->RemoveFile(parser->getCompErrFile(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1721
		parser2->RemoveFile(parser2->getCompErrFile(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1722
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1723
		// Merged macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1724
		//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1725
		list<pair<string,string> > mergedfiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1726
		stringvector::const_iterator basebegin = basefilenames.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1727
		stringvector::const_iterator baseend = basefilenames.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1728
		stringvector::const_iterator currentbegin = curfilenames.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1729
		while(basebegin != baseend)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1730
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1731
			mergedfiles.push_back(pair<string,string>(*basebegin,*currentbegin));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1732
			basebegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1733
			currentbegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1734
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1735
		if(mergedfiles.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1736
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1737
			issues += analyseTrees(root, root2,mergedfiles,report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1738
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1739
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1740
		// Duplicated macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1741
		//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1742
		// Base duplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1743
		map<string, vector<pair<string,string> > >& duplicatedMacros = macros.getBaseDuplicates();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1744
		map<string, vector<pair<string,string> > >::iterator duplicatedbegin = duplicatedMacros.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1745
		map<string, vector<pair<string,string> > >::iterator duplicatedend = duplicatedMacros.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1746
		for(; duplicatedbegin != duplicatedend; duplicatedbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1747
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1748
			string filename = duplicatedbegin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1749
			// Process each duplicated macro from duplicatedMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1750
			vector<pair<string,string> >::iterator duplicatedbegin2 = duplicatedbegin->second.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1751
			vector<pair<string,string> >::iterator duplicatedend2 = duplicatedbegin->second.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1752
			for(; duplicatedbegin2 != duplicatedend2; duplicatedbegin2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1753
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1754
				string macroname = duplicatedbegin2->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1755
				int lineNo = atoi(duplicatedbegin2->second.c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1756
				report.addIssue(filename, macroname, EIssueIdentityMacro, EIssueTypeNotAnalysed, ESeverityInformative, ESeveritySCInformative, "", lineNo, "","", "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1757
				issues++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1758
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1759
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1760
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1761
		// Current
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1762
		map<string, vector<pair<string,string> > >& currDuplicatedMacros = macros.getCurrentDuplicates();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1763
		duplicatedbegin = currDuplicatedMacros.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1764
		duplicatedend = currDuplicatedMacros.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1765
		for(; duplicatedbegin != duplicatedend; duplicatedbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1766
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1767
			string filename = duplicatedbegin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1768
			// Process each duplicated macro from duplicatedMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1769
			vector<pair<string,string> >::iterator duplicatedbegin2 = duplicatedbegin->second.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1770
			vector<pair<string,string> >::iterator duplicatedend2 = duplicatedbegin->second.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1771
			for(; duplicatedbegin2 != duplicatedend2; duplicatedbegin2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1772
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1773
				string macroname = duplicatedbegin2->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1774
				int lineNo = atoi(duplicatedbegin2->second.c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1775
				report.addIssue("", macroname, EIssueIdentityMacro, EIssueTypeNotAnalysed, ESeverityInformative, ESeveritySCInformative, "", lineNo,"", filename, "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1776
				issues++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1777
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1778
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1779
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1780
		// Removed macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1781
		//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1782
		map<string, TChange<list<pair<string,string> > > >& removedMacros = macros.getRemoved();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1783
		map<string, TChange<list<pair<string,string> > > >::iterator removedbegin = removedMacros.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1784
		map<string, TChange<list<pair<string,string> > > >::iterator removedend = removedMacros.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1785
		for(; removedbegin != removedend; removedbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1786
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1787
			string basefilename = removedbegin->second.GetBase();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1788
			string currentfilename = removedbegin->second.GetCurrent();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1789
			// Process each removed macro from removedMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1790
			list<pair<string,string> >::iterator removedbegin2 = removedbegin->second.GetValue().begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1791
			list<pair<string,string> >::iterator removedend2 = removedbegin->second.GetValue().end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1792
			for(; removedbegin2 != removedend2; removedbegin2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1793
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1794
				string macroname = removedbegin2->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1795
				//int lineNo = atoi(removedbegin2->second.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1796
				// No need to pass the line no in removed case.
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1797
				report.addIssue(basefilename, macroname, EIssueIdentityMacro, EIssueTypeRemoval, ESeverityPossibleBBCBreak, ESeveritySCBreak, "", 0,"", currentfilename, "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1798
				issues++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1799
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1800
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1801
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1802
		// Changed macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1803
		//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1804
		map<string, TChange<map<string, pair<pair<string,string>,string> > > >& changedMacros = macros.getChanged();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1805
		map<string, TChange<map<string, pair<pair<string,string>,string> > > >::iterator changedbegin = changedMacros.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1806
		map<string, TChange<map<string, pair<pair<string,string>,string> > > >::iterator changedend = changedMacros.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1807
		for(; changedbegin != changedend; changedbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1808
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1809
			string basefilename = changedbegin->second.GetBase();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1810
			string currentfilename = changedbegin->second.GetCurrent();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1811
			// Process each changed macro from changedMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1812
			map<string, pair<pair<string,string>,string> >::iterator changedbegin2 = changedbegin->second.GetValue().begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1813
			map<string, pair<pair<string,string>,string> >::iterator changedend2 = changedbegin->second.GetValue().end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1814
			for(; changedbegin2 != changedend2; changedbegin2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1815
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1816
				string macroname = changedbegin2->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1817
				string newcode = changedbegin2->second.first.second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1818
				int lineNo = atoi(changedbegin2->second.second.c_str());
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1819
				report.addIssue(basefilename, macroname, EIssueIdentityMacro, EIssueTypeChange, ESeverityPossibleBBCBreak, ESeveritySCNULL, newcode, lineNo, "",currentfilename, "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1820
				issues++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1821
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1822
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1823
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1824
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1825
		//clear the last set of files with macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1826
		iMacroFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1827
	} catch (HAException e)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1828
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1829
#if !defined(_DEBUG) && !defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1830
		parser->RemoveFile(parser->getMacroFilename(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1831
		parser2->RemoveFile(parser2->getMacroFilename(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1832
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1833
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1834
		//header has failed compilation with gccxml. get the compilation error text.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1835
		if (parser2->getCompErrFile()!="")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1836
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1837
			iCompErrTxt = BBCFileUtils::getCompilationError(parser2->getCompErrFile());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1838
			if (iCompErrTxt == "")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1839
				iCompErrTxt = BBCFileUtils::getCompilationError(parser->getCompErrFile());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1840
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1841
		else 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1842
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1843
			if(parser->getCompErrFile()!="")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1844
				iCompErrTxt = BBCFileUtils::getCompilationError(parser->getCompErrFile());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1845
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1846
#if !defined(_DEBUG) && !defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1847
		parser->RemoveFile(parser->getCompErrFile(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1848
		parser2->RemoveFile(parser2->getCompErrFile(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1849
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1850
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1851
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1852
		//delete parser;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1853
		//delete parser2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1854
		return false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1855
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1856
	//delete parser;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1857
	//delete parser2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1858
	return true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1859
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1860
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1861
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1862
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1863
// Analyser::processFileReplaces
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1864
// Process the file replaces
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1865
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1866
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1867
pair<string, string> Analyser::processFileReplaces(pair<string, string>& aFile, const stringmap& aReplaceMap, list<pair<string, string> >& aCurrentFiles)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1868
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1869
    string searched(aFile.second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1870
    pair<string, string>  replacement(aFile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1871
    // If there are items on replace map, then apply the
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1872
    // replaces when necessary
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1873
    if (aReplaceMap.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1874
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1875
        StringMapIterC fileMapIter = aReplaceMap.find(searched);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1876
        if (fileMapIter != aReplaceMap.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1877
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1878
            string file = fileMapIter->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1879
            list<pair<string, string> >::const_iterator filereplace = FindFromList(toLowerCaseWin(file), aCurrentFiles, ERightValue, compareFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1880
            if (filereplace != aCurrentFiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1881
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1882
                replacement = *filereplace;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1883
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1884
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1885
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1886
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1887
    return replacement;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1888
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1889
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1890
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1891
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1892
// Analyser::createReplaceMap
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1893
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1894
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1895
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1896
void Analyser::createReplaceMap(const string& aReplaceList, stringmap& aReplaceMap)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1897
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1898
    string originalfilename("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1899
    string replacementfilename("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1900
    string* name = &originalfilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1901
    bool original = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1902
    bool isstr = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1903
    for (size_t i = 0; i < aReplaceList.length(); i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1904
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1905
        char ch = aReplaceList.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1906
        if (ch == ' ' && isstr == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1907
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1908
            if (original == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1909
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1910
                original = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1911
                name = &replacementfilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1912
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1913
            else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1914
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1915
                // Pair separator found. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1916
                // Store the pair (original, replacement)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1917
                stringpair mappair(toLowerCaseWin(originalfilename), toLowerCaseWin(replacementfilename));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1918
                aReplaceMap.insert(mappair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1919
                replacementfilename.resize(0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1920
                originalfilename.resize(0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1921
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1922
                original = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1923
                name = &originalfilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1924
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1925
        } else if (ch == '"')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1926
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1927
            if (isstr == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1928
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1929
                isstr = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1930
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1931
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1932
                isstr = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1933
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1934
        } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1935
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1936
            *name += ch;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1937
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1938
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1939
    if (original == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1940
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1941
        throw HAException("Syntax error: There has been given file name to replace but not file name for replace.");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1942
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1943
    if (originalfilename.length() > 0 && replacementfilename.length() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1944
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1945
        // Store the last pair in replacement list
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1946
        stringpair mappair(toLowerCaseWin(originalfilename), toLowerCaseWin(replacementfilename));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1947
        aReplaceMap.insert(mappair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1948
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1949
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1950
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1951
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1952
// Analyser::fileDiffs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1953
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1954
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1955
void Analyser::fileDiffs(vector<pair<string, string> >& aFiles, list<string>& aMismatches)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1956
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1957
    vector<pair<string, string> > ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1958
    ret.reserve(aFiles.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1959
    vector<pair<string, string> >::iterator file = aFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1960
    vector<pair<string, string> >::iterator fileend = aFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1961
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1962
    for(;file != fileend; file++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1963
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1964
        // START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1965
        list<pair<string, string> > basedirs = BBCFileUtils::extractFilenames(iParams.getParameter(BASELINEDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1966
        list<pair<string, string> >::iterator basedirbegin = basedirs.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1967
        string basedir;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1968
        string basefile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1969
        for(; basedirbegin != basedirs.end(); basedirbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1970
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1971
            // Find the base dir from the list of base dirs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1972
            basedir = basedirbegin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1973
            basefile = basedir + DIR_SEPARATOR + file->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1974
            if (BBCFileUtils::FileExists(basefile))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1975
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1976
        }  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1977
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1978
        list<pair<string, string> > curdirs = BBCFileUtils::extractFilenames(iParams.getParameter(CURRENTDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1979
        list<pair<string, string> >::iterator curdirbegin = curdirs.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1980
        string curdir;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1981
        string curfile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1982
        for(; curdirbegin != curdirs.end(); curdirbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1983
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1984
            // Find the current dir from the list of current dirs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1985
            curdir = curdirbegin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1986
            curfile = curdir + DIR_SEPARATOR + file->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1987
            if (BBCFileUtils::FileExists(curfile))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1988
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1989
        } 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1990
        // END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1991
         
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1992
        if (file->second == "")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1993
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1994
            // We hadn't find matching file from current list so we add it to removed list
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1995
            aMismatches.push_back(basefile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1996
        } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1997
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1998
            pair<string, string> tempvar(basefile, curfile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1999
            ret.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2000
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2001
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2002
    aFiles = ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2003
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2004
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2005
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2006
// Analyser::getFilenameWithoutDir
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2007
// Return the file part of the filename, eg. retuns the rightmost part of
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2008
// the given string, up to a "\" // or "/" separator.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2009
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2010
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2011
string Analyser::getFilenameWithoutDir(const string& aFilename)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2012
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2013
    string ret = aFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2014
    string::size_type idx = rightmostDirSeparatorIndex(aFilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2015
    if (idx != string::npos)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2016
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2017
        ret = aFilename.substr(idx+1, aFilename.length() - idx);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2018
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2019
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2020
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2021
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2022
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2023
// Analyser::testFileAvailability
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2024
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2025
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2026
#if 0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2027
void Analyser::testFileAvailability(stringmap map)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2028
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2029
    stringmap::iterator begin = map.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2030
    stringmap::iterator end = map.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2031
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2032
    for(; begin!= end; begin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2033
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2034
        string file = (*begin).first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2035
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2036
        int isValid = ACCESS(file.c_str(), 0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2037
        if (isValid == -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2038
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2039
            throw HAException("File: \"" + file + "\" not found");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2040
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2041
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2042
        file = (*begin).second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2043
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2044
        isValid = ACCESS(file.c_str(), 0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2045
        if (isValid == -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2046
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2047
            throw HAException("File: \"" + file + "\" not found");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2048
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2049
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2050
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2051
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2052
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2053
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2054
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2055
// Analyser::MergeFiles
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2056
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2057
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2058
void Analyser::MergeFiles(const list<pair<string, string> >& aBasefiles, list<pair<string, string> >& aCurrentfiles,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2059
                          const string& aReplaceList, vector<pair<string, string> >& aMatches)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2060
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2061
    size_t asdf = aBasefiles.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2062
    list<pair<string, string> >::const_iterator baseiter = aBasefiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2063
    list<pair<string, string> >::const_iterator baseend = aBasefiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2064
    list<pair<string, string> > removedcurrentfiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2065
    list<pair<string, string> > mismatches;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2066
    if (!iParams.givenParameter(BASELINE))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2067
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2068
        stringmap replaceMap;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2069
        if (aReplaceList.length() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2070
        {            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2071
            createReplaceMap(aReplaceList, replaceMap);         
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2072
            stringmap::iterator begin = replaceMap.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2073
            stringmap::iterator end = replaceMap.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2074
        }                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2075
        for(; baseiter != baseend; baseiter++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2076
        {            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2077
            pair<string, string> file = *baseiter;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2078
            file = processFileReplaces(file, replaceMap, aCurrentfiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2079
            pair<string,string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2080
			//compareWholeString will be set to true, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2081
			//only if the file name with whole path of current file need to compare with base file.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2082
			//else by default will always be set to false.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2083
            list<pair<string, string> >::iterator current = FindFromList(file.second, aCurrentfiles, ERightValue, compareFiles, false,true);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2084
            if (current != aCurrentfiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2085
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2086
                tempvar.first = baseiter->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2087
                tempvar.second = current->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2088
                aMatches.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2089
                removedcurrentfiles.push_back(*current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2090
                aCurrentfiles.erase(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2091
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2092
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2093
                current = FindFromList(file.second, removedcurrentfiles, ERightValue, compareFiles, false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2094
                if (current != removedcurrentfiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2095
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2096
                    tempvar.first = baseiter->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2097
                    tempvar.second = current->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2098
                    aMatches.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2099
                } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2100
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2101
                    mismatches.push_back(file);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2102
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2103
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2104
        }        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2105
        baseiter = mismatches.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2106
        baseend = mismatches.end();        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2107
        for(; baseiter != baseend; baseiter++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2108
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2109
            string filename = BBCFileUtils::StripPath(baseiter->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2110
            pair<string, string> file(filename, filename); // We don't need to put filename to lowercase as it's already in lowercase
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2111
            file = processFileReplaces(file, replaceMap, aCurrentfiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2112
            string empty("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2113
            pair<string,string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2114
            tempvar.first = baseiter->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2115
            list<pair<string, string> >::iterator current = FindFromList(file.second, aCurrentfiles, ERightValue, compareFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2116
            if (current != aCurrentfiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2117
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2118
                tempvar.second = current->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2119
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2120
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2121
                tempvar.second = empty;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2122
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2123
            aMatches.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2124
        }        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2125
    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2126
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2127
        // START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2128
        list<pair<string, string> > basedirs = BBCFileUtils::extractFilenames(iParams.getParameter(BASELINEDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2129
        list<pair<string, string> >::iterator basedirbegin = basedirs.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2130
        bool  basefilefound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2131
        string basefile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2132
        for(; basedirbegin != basedirs.end(); basedirbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2133
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2134
            string basedir = basedirbegin->first;       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2135
            basefile = basedir + DIR_SEPARATOR + aBasefiles.front().first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2136
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2137
            if (ACCESS(basefile.c_str(), 0) != -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2138
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2139
                basefilefound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2140
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2141
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2142
      }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2143
        list<pair<string, string> > curdirs = BBCFileUtils::extractFilenames(iParams.getParameter(CURRENTDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2144
        list<pair<string, string> >::iterator curdirbegin = curdirs.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2145
        bool  curfilefound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2146
        string curfile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2147
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2148
        for(; curdirbegin != curdirs.end(); curdirbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2149
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2150
            string curdir = curdirbegin->first;       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2151
            curfile = curdir + DIR_SEPARATOR + aBasefiles.front().first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2152
            if (ACCESS(curfile.c_str(), 0) != -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2153
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2154
                curfilefound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2155
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2156
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2157
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2158
        if (!basefilefound )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2159
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2160
            throw HAException("File \"" + basefile + "\" not found");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2161
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2162
        if (!curfilefound)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2163
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2164
            throw HAException("File \"" + curfile + "\" not found");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2165
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2166
        pair<string,string> tempvar(aBasefiles.front().first, aCurrentfiles.front().first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2167
        aMatches.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2168
        // END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2169
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2170
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2171
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2172
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2173
// AnalyserParams::diffs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2174
//  	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2175
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2176
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2177
void Analyser::diffs(   const list<pair<string, string> >& allfiles, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2178
                        const list<pair<string, string> >& sets, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2179
                        list<pair<string, string> >& result)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2180
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2181
    result = sets;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2182
    list<stringpair >::iterator setiter = result.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2183
    while(setiter != result.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2184
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2185
        if( setiter->first.find_first_of("*?") != string::npos )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2186
            setiter = result.erase(setiter);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2187
        else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2188
            ++setiter;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2189
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2190
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2191
    list<pair<string, string> >::const_iterator file = allfiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2192
    list<pair<string, string> >::const_iterator fileend = allfiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2193
    for(; file != fileend; file++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2194
    {    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2195
        list<pair<string, string> >::iterator set = 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2196
            FindFromList(file->second, result, ERightValue);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2197
        if (set == result.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2198
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2199
            set = FindFromList(file->second, result, ERightValue, compareFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2200
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2201
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2202
        if (set != result.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2203
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2204
            result.erase(set);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2205
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2206
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2207
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2208
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2209
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2210
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2211
// AnalyserParams::canonicalizeFilename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2212
// Get the actual name of a file. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2213
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2214
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2215
list<pair<string, string> > Analyser::canonicalizeFilename(list<pair<string, string> >& sets)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2216
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2217
    list<pair<string, string> > ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2218
    list<pair<string, string> >::iterator begin = sets.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2219
    list<pair<string, string> >::iterator end = sets.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2220
    for(; begin != end; begin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2221
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2222
        if (begin->first.at(0) != DIR_SEPARATOR && begin->first.find(DIR_SEPARATOR) != string::npos)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2223
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2224
            string left = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2225
            left += DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2226
            left += begin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2227
            string right = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2228
            right += DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2229
            right += begin->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2230
            ret.push_back(pair<string, string>(left, right));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2231
        } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2232
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2233
            ret.push_back(*begin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2234
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2235
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2236
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2237
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2238
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2239
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2240
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2241
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2242
// Analyser::Wrapper
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2243
// Wrapper function to analyse all files in a component in separate thread.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2244
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2245
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2246
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2247
void Analyser::Wrapper( ReportGenerator& report, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2248
                        int& issues, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2249
                        CPPParser baseParser, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2250
                        CPPParser currParser, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2251
                        PlatformHeaders& pfHeaders, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2252
                        PlatformHeaders& unsuccessfulHdrs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2253
                       )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2254
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2255
	stringvector tiBaseFilenames; // This contains also additional headers needed to compile baseline
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2256
	stringvector tiCurrFilenames; // This contains also additional headers needed to compile product  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2257
	PlatformHeaders tiInvalidFiles;	// holds a list of files without include guards need to be compiled individually
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2258
	stringvector tiBaseIncludes; // This contains also additional headers needed to compile baseline
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2259
	stringvector tiCurrIncludes; // This contains also additional headers needed to compile product  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2260
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2261
	stringvector baseSysIncludes; // This contains headers needed to compile baseline for 3rd time analyzation of a single header.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2262
	stringvector curSysIncludes;  //  This contains headers needed to compile product for 3rd time analyzation of a single header.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2263
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2264
	tiBaseFilenames.assign(iBaseFilenames.begin(),iBaseFilenames.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2265
	tiCurrFilenames.assign(iCurrFilenames.begin(),iCurrFilenames.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2266
	tiInvalidFiles.assign(iInvalidFiles.begin(),iInvalidFiles.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2267
	tiBaseIncludes.assign(iBaseIncludes.begin(),iBaseIncludes.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2268
	tiCurrIncludes.assign(iCurrIncludes.begin(),iCurrIncludes.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2269
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2270
	if (iOnlySystemIncludeRequired == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2271
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2272
		//tiBaseIncludes and tiCurrIncludes are required for 3rd time analyzation.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2273
		//This time parse each unsuccessful header with both system includes and paths.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2274
		baseSysIncludes.assign(tiBaseIncludes.begin(),tiBaseIncludes.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2275
		curSysIncludes.assign(tiCurrIncludes.begin(),tiCurrIncludes.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2276
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2277
		// Clear these includes as for 2nd time parsing of each unsuccessful headres, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2278
		//as only system include paths arerequuired.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2279
		tiBaseIncludes.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2280
		tiCurrIncludes.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2281
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2282
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2283
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2284
	if( (tiBaseIncludes.size()>0 && tiCurrIncludes.size()>0)|| (tiBaseFilenames.size()>0 && tiCurrFilenames.size()>0) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2285
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2286
		if( AnalyseBundle(tiBaseFilenames, tiCurrFilenames, report, issues, &baseParser, &currParser, &tiBaseIncludes, &tiCurrIncludes))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2287
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2288
			tiBaseFilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2289
			tiCurrFilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2290
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2291
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2292
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2293
	if (iNotRemovedFiles.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2294
	{            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2295
		list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2296
		list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2297
		list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2298
		for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2299
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2300
			CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2301
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2302
		if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2303
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2304
			iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2305
		} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2306
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2307
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2308
			iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2309
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2310
	}  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2311
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2312
	if(tiInvalidFiles.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2313
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2314
		// also add to this list, the set of headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2315
		// without include guards
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2316
		PlatformHeaders::iterator add = tiInvalidFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2317
		for(; add != tiInvalidFiles.end(); ++add )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2318
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2319
			tiBaseFilenames.push_back( add->first->ID() );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2320
			tiCurrFilenames.push_back( add->second->ID() );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2321
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2322
	}		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2323
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2324
	// if thread flag is set and there are gretaer number of files, create threads for analysing every PLATFORM_BUNDLESIZE number of files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2325
	if( iUseThread && tiBaseFilenames.size() >= PLATFORM_BUNDLESIZE  )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2326
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2327
		stringvector tmp;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2328
		int pcount = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2329
		stringvector::iterator i = tiBaseFilenames.begin();                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2330
		for(; i != tiBaseFilenames.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2331
		{				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2332
			pcount++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2333
			PlatformHeaders::iterator h = FindHeaderPair(*i, pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2334
			if( h != pfHeaders.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2335
			{			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2336
				tmp.push_back(*i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2337
			}			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2338
			if ((pcount % PLATFORM_BUNDLESIZE == 0 || pcount == tiBaseFilenames.size()) && tmp.size()>0)		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2339
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2340
				while (lock.locked())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2341
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2342
					#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2343
					Sleep(4000);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2344
					#else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2345
					usleep(4000*1000);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2346
					#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2347
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2348
				lock.lock();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2349
				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2350
				if(gComponentThreads.size() >= MAX_THREAD_COUNT2)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2351
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2352
					gComponentThreads.join_all();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2353
					int size = gComponentThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2354
					for (int i=0;i<size;i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2355
					{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2356
						gComponentThreads.remove_thread(gpHeaderThreads[i]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2357
						gpHeaderThreads[i]->~thread();	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2358
					}				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2359
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2360
						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2361
				//2nd time analyzation of each header in a different thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2362
				Analyser* obj = new Analyser();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2363
				*obj = *this;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2364
				int size = gComponentThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2365
				gpHeaderThreads[size]=gComponentThreads.create_thread(boost::bind(&Analyser::Wrapper2,obj,tmp, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2366
						boost::ref(pfHeaders), boost::ref(unsuccessfulHdrs), boost::ref(report), boost::ref(issues)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2367
				lock.unlock();	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2368
				tmp.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2369
							
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2370
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2371
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2372
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2373
	else // do not create different thread. analyse in the same thread.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2374
	{						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2375
		stringvector::iterator i = tiBaseFilenames.begin();                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2376
		for(; i != tiBaseFilenames.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2377
		{                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2378
			PlatformHeaders::iterator h = FindHeaderPair(*i, pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2379
			if( h != pfHeaders.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2380
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2381
				if(( pfHeaders.size() > 1 ) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2382
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2383
					PlatformHeaders tempHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2384
					tempHeaders.push_back(*h);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2385
					h->first->SetStatus(Header::HDR_STATUS_TO_BE_ANALYZED);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2386
					iOnlySystemIncludeRequired = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2387
					//2nd time analyzation of each header in same thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2388
					AnalyzePlatforms( tempHeaders, unsuccessfulHdrs, report, issues, false );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2389
					iOnlySystemIncludeRequired = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2390
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2391
				else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2392
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2393
					//The 3rd time parsing is required to check again each unsuccessful headers 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2394
					//with system includes and paths from platform data
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2395
					if(!AnalyseBundle(tiBaseFilenames, tiCurrFilenames, report, issues, &baseParser, &currParser, &baseSysIncludes, &curSysIncludes))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2396
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2397
						if( FindHeaderPair(h->first->ID(), unsuccessfulHdrs ) == unsuccessfulHdrs.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2398
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2399
							unsuccessfulHdrs.push_back(*h); 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2400
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2401
					} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2402
					if (iNotRemovedFiles.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2403
					{            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2404
						list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2405
						list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2406
						list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2407
						for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2408
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2409
							CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2410
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2411
						if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2412
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2413
							iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2414
						} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2415
						else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2416
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2417
							iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2418
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2419
					}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2420
				}                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2421
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2422
		}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2423
	}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2424
}  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2425
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2426
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2427
// Analyser::Wrapper2
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2428
// Wrapper function to analyse group of files in a component individually in different thread.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2429
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2430
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2431
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2432
void Analyser::Wrapper2(stringvector filenames, PlatformHeaders& pfHeaders, PlatformHeaders& unsuccessfulHdrs, ReportGenerator& report, int& issues)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2433
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2434
	PlatformHeaders tempHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2435
	stringvector::iterator i = filenames.begin();                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2436
	for(; i != filenames.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2437
	{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2438
		PlatformHeaders::iterator h = FindHeaderPair(*i, pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2439
		if( h != pfHeaders.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2440
		{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2441
			tempHeaders.push_back(*h);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2442
			h->first->SetStatus(Header::HDR_STATUS_TO_BE_ANALYZED);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2443
			iOnlySystemIncludeRequired = true;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2444
			AnalyzePlatforms( tempHeaders, unsuccessfulHdrs, report, issues, false );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2445
			iOnlySystemIncludeRequired = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2446
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2447
	}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2448
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2449
	if (iNotRemovedFiles.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2450
					{            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2451
						list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2452
						list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2453
						list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2454
						for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2455
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2456
							CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2457
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2458
						if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2459
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2460
							iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2461
						} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2462
						else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2463
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2464
							iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2465
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2466
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2467
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2468
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2469
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2470
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2471
void Analyser::ParseAndCompareResourceFiles(vector<pair< string, string> >& resourcevector, ReportGenerator& report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2472
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2473
	ResourceContent baseResource;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2474
	ResourceContent curResource;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2475
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2476
	list<pair<string, string> > iBaseSystemheaders = BBCFileUtils::extractFilenames(iParams.getParameter(BASELINEPLAT));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2477
	list<pair<string, string> > iCurSystemheaders = BBCFileUtils::extractFilenames(iParams.getParameter(CURRENTPLAT));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2478
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2479
	for(int outer = 0; outer< (int)resourcevector.size(); outer++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2480
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2481
		list<pair<string, string> > baseSystemheaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2482
		list<pair<string, string> > curSystemheaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2483
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2484
		baseSystemheaders = iBaseSystemheaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2485
		curSystemheaders = iCurSystemheaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2486
		pair <string, string> files = resourcevector.at(outer);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2487
		vector <string> bIncludes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2488
		vector <string> cIncludes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2489
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2490
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2491
		baseResource.RHFileName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2492
		curResource.RHFileName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2493
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2494
		baseResource.RHFileName = BBCFileUtils::TrimAll(files.first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2495
		curResource.RHFileName = BBCFileUtils::TrimAll(files.second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2496
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2497
		pair <string, string> fileAnalyzed;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2498
		fileAnalyzed.first = baseResource.RHFileName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2499
		fileAnalyzed.second = curResource.RHFileName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2500
		bool pairFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2501
		// check if the file is already analyzed or not.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2502
		for(int i = 0; i < (int)iRHFile_Analyzed.size(); i++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2503
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2504
			pair<string,string> filePair = iRHFile_Analyzed.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2505
			if(fileAnalyzed.first == filePair.first )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2506
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2507
				pairFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2508
				break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2509
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2510
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2511
		// File is not analyzed yet, so analyze it.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2512
		if(pairFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2513
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2514
			iRHFile_Analyzed.push_back(fileAnalyzed);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2515
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2516
			ifstream file(files.first.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2517
			if(!file.is_open())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2518
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2519
				cerr << "ERROR: Cannot open " << files.first << " for reading!" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2520
				exit(17);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2521
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2522
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2523
			// baseline resource file parsing
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2524
			getElementListFromRHFile(file,baseResource,bIncludes );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2525
			file.close();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2526
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2527
			// handle #include .RH headers, get proper path from system includes
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2528
			int basePos = (int)baseResource.RHFileName.find_last_of(DIR_SEPARATOR);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2529
			string basePath = baseResource.RHFileName.substr(0,basePos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2530
			vector<pair<string,string> > includes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2531
			bool isPresent = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2532
			pair<string,string> bPath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2533
			list<pair<string,string> >::iterator bHdr = baseSystemheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2534
			for(;bHdr!= baseSystemheaders.end(); bHdr++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2535
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2536
				bPath = *bHdr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2537
				if(bPath.first == basePath)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2538
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2539
					isPresent = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2540
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2541
				}			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2542
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2543
			if(isPresent == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2544
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2545
				pair<string,string> bPair;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2546
				bPair.first =basePath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2547
				bPair.second =basePath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2548
				baseSystemheaders.push_back(bPair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2549
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2550
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2551
			bHdr= baseSystemheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2552
			for(int i = 0; i < (int)bIncludes.size(); i++) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2553
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2554
				for(;bHdr != baseSystemheaders.end(); bHdr++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2555
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2556
					pair<string,string> baseHeader = *bHdr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2557
					pair<string,string>basePair;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2558
					if(BBCFileUtils::FileExists(baseHeader.first + DIR_SEPARATOR + bIncludes.at(i)) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2559
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2560
						basePair.first = baseHeader.first + DIR_SEPARATOR + bIncludes.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2561
						includes.push_back(basePair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2562
						break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2563
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2564
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2565
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2566
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2567
			ifstream file2(files.second.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2568
			if(!file2.is_open())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2569
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2570
				cerr << "ERROR: Cannot open " << files.second << " for reading!" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2571
				exit(17);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2572
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2573
			// current resource file parsing
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2574
			getElementListFromRHFile(file2,curResource, cIncludes );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2575
			file2.close();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2576
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2577
			_current_files++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2578
			cout << "\nAnalysing files (" << _current_files << "/" << _total_files << "): " << files.first <<" => "<< files.second << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2579
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2580
			// get current resource file's path and add to system include paths 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2581
			// to get proper path for #include rh headers in current file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2582
			int cPos = (int)curResource.RHFileName.find_last_of(DIR_SEPARATOR);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2583
			string curPath = curResource.RHFileName.substr(0,cPos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2584
			isPresent = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2585
			list<pair<string,string> >::iterator chdr= curSystemheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2586
			pair<string,string> cPath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2587
			for(;chdr != curSystemheaders.end(); chdr++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2588
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2589
				cPath = *chdr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2590
				if(cPath.first == curPath)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2591
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2592
					isPresent = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2593
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2594
				}			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2595
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2596
			if(isPresent == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2597
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2598
				pair<string,string> cPair;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2599
				cPair.first = curPath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2600
				cPair.second = curPath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2601
				curSystemheaders.push_back(cPair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2602
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2603
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2604
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2605
			for(int out = 0; out < (int)includes.size(); out++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2606
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2607
				int bLoc = (int)includes.at(out).first.find_last_of(DIR_SEPARATOR);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2608
				string bString = includes.at(out).first.substr(bLoc+1,string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2609
				bool includedHeaderPresent = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2610
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2611
				for(int j = 0; j < (int)cIncludes.size(); j++) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2612
				{
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2613
					bool fileMatched = false;					
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2614
					if(bString == cIncludes.at(j))
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2615
					{
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2616
						includedHeaderPresent = true;
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2617
						chdr= curSystemheaders.begin();
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2618
						for(;chdr != curSystemheaders.end(); chdr++)
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2619
						{
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2620
							pair<string,string> curHeader = *chdr;						
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2621
							string curFile = curHeader.first + DIR_SEPARATOR + cIncludes.at(j);							
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2622
							if(BBCFileUtils::FileExists(curFile) ) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2623
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2624
								fileMatched = true; // current file found in curr dir
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2625
								includes.at(out).second = curFile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2626
								break;
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2627
							}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2628
						}
12
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2629
						if ( fileMatched == false )
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2630
						{
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2631
							// file does not exists in curdir
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2632
							report.addIssue(baseResource.RHFileName, includes.at(out).first, EIssueIdentityFile, 
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2633
								EIssueTypeRemoval,ESeverityBBCBreak,ESeveritySCNULL, "", 0, "",curResource.RHFileName,"");
a0eee409ff14 Updates to CompatibilityAnalyser
shrivatsa
parents: 3
diff changeset
  2634
						}
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2635
						break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2636
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2637
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2638
				if(includedHeaderPresent == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2639
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2640
					// add issue, as field is removed in current file.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2641
					report.addIssue(baseResource.RHFileName, bString, EIssueIdentityField, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2642
						EIssueTypeRemoval,ESeverityNULL,ESeveritySCBreak, "", 0, "",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2643
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2644
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2645
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2646
			for(int l = 0; l < (int)includes.size(); l++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2647
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2648
				pair<string,string> pair = includes.at(l);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2649
				if(pair.first.size() > 0 && pair.second.size()>0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2650
				{				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2651
					resourcevector.push_back(pair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2652
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2653
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2654
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2655
			compareResources( baseResource, curResource, report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2656
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2657
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2658
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2659
		baseResource.structList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2660
		baseResource.enumList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2661
		baseResource.macroList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2662
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2663
		curResource.structList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2664
		curResource.enumList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2665
		curResource.macroList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2666
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2667
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2668
	}// end of one resource
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2669
	cout<<"\n\n"<<endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2670
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2671
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2672
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2673
void Analyser::getElementListFromRHFile(std::ifstream& RHFile,ResourceContent& resource, vector< string >& includes )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2674
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2675
	string line;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2676
	EnumElement lEnum;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2677
	string tempData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2678
	string elementVal;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2679
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2680
	StructElement lStruct;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2681
	string structName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2682
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2683
	bool structInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2684
	bool enumInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2685
	bool macroInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2686
	bool keyFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2687
	bool elementfound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2688
	bool valueFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2689
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2690
	bool comment = false;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2691
	bool ignoreLine = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2692
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2693
	bool newLinecharFound = false; // for macros, newline character can be present
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2694
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2695
	long currentEnumVal = -1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2696
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2697
	char keywords [23][15] = {"short","long", "word", "len", "byte", "struct", "ltext","enum", "ltext8", "ltext16", "ltext32", "llink", "srlink","double",
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2698
		"buf<1>","buf<2>","buf<4>","buf<8>","buf<16>","buf<32>","buf<64>","buf<128>","buf<256>"};
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2699
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2700
	MacroElement macro;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2701
	int lineNo = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2702
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2703
	while(getline(RHFile,line))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2704
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2705
		lineNo++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2706
		pair<string,int> enummember;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2707
		StructMember elementMember;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2708
		line = toLowerCase(trimWhiteSpace(line));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2709
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2710
		// Ignore all comment lines. e.g /*xxxxxxxxxx*/ Struct ABCD , start reading characterwise from struct
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2711
		if(enumInuse == false && macroInuse == false && structInuse == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2712
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2713
			if(line.find("/*") != -1 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2714
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2715
				if( line.find("*/") == -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2716
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2717
				comment = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2718
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2719
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2720
				else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2721
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2722
					int com = (int)line.find_last_of("*");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2723
					line= line.substr(com +2, string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2724
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2725
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2726
			if(line.find("*/") != -1 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2727
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2728
				comment = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2729
				if(ignoreLine == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2730
					ignoreLine = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2731
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2732
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2733
			if(comment == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2734
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2735
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2736
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2737
			if(line.find("//") != -1 ) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2738
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2739
				int com = (int)line.find_first_of("//");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2740
				bool wordFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2741
				line = line.substr(0,com);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2742
				for (int i = 0; i< (int)line.size(); i++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2743
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2744
					// check  '//' commentline starts after some key value e.g struct ABCD // xyz
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2745
					if ( (int)line.at(i ) != 32 && (int)line.at(i) != 9 ) // 32 and 9 are for space and invalid character
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2746
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2747
						wordFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2748
						break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2749
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2750
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2751
				if(wordFound == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2752
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2753
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2754
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2755
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2756
 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2757
		// Find any other header file is included in current file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2758
		// Then add it to file and check whether this is already analyzed or not.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2759
		// If not, then analyze it.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2760
		if(line.find ("#") != -1 && line.find("include") != -1 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2761
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2762
				int start = (int)line.find_first_of ("<");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2763
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2764
			int end;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2765
			if(start == -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2766
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2767
				start =(int) line.find_first_of("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2768
				end = (int)line.find_last_of("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2769
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2770
			else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2771
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2772
				end = (int)line.find(">");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2773
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2774
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2775
			if (start > 0 && end > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2776
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2777
				line = line.substr(start + 1,(end - start) - 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2778
				line = BBCFileUtils::TrimAll(line);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2779
				int loc = (int)line.find(RH_EXTENSION);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2780
				// Include only .rh files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2781
				if(loc != -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2782
					includes.push_back(line);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2783
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2784
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2785
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2786
		// Now check lines for key structure (struct, enum, #inlude and start reading characterwise unless the key structure end.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2787
		if (keyFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2788
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2789
			tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2790
			int enumloc = (int)line.find(KEY_ENUM);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2791
			// to get enum key word properly. After "enum" keyword, there might be no name present.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2792
			// For this case, following checks are needed.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2793
			if( enumloc!= -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2794
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2795
				enumInuse = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2796
				string prestring = line.substr(0,enumloc);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2797
				for(int i = 0; i< (int)prestring.size(); i++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2798
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2799
					if( (int)prestring.at(i)!= 32 && (int)prestring.at(i) != 9 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2800
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2801
						enumInuse =false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2802
						break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2803
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2804
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2805
				if(enumInuse == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2806
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2807
					string postline = line.substr(enumloc+strlen(KEY_ENUM) ,string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2808
					if( postline.size() > 0 && (int)postline.at(0)!= 32 && (int)postline.at(0) != 9 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2809
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2810
							enumInuse =false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2811
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2812
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2813
					else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2814
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2815
						line = postline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2816
						macroInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2817
						structInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2818
						lEnum.enumName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2819
						lEnum.enums.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2820
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2821
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2822
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2823
			if(line.find(KEY_MACRO) != -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2824
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2825
				macroInuse = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2826
				enumInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2827
				structInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2828
				macro.macroName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2829
				macro.macroVal = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2830
				line = line.substr(strlen(KEY_MACRO),string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2831
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2832
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2833
			if(line.find(KEY_STRUCT) != -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2834
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2835
				structInuse = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2836
				enumInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2837
				macroInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2838
				lStruct.structName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2839
				lStruct.members.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2840
				line = line.substr(strlen(KEY_STRUCT),string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2841
			}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2842
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2843
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2844
		// If any of the key found, then following lines will be checked character wise.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2845
		if ( enumInuse == true || macroInuse == true || structInuse == true )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2846
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2847
			keyFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2848
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2849
			EnumMember enummember;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2850
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2851
			string elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2852
			string elementType;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2853
			string structElementVal;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2854
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2855
			bool lineend = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2856
			int length = int(line.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2857
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2858
			for (int j = 0; j < length ; j++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2859
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2860
				int temp = line.at(j);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2861
				//int templie = line.at(j);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2862
				switch (temp)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2863
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2864
				case 32:  // For ' '
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2865
				case 9: //for Invalid space
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2866
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2867
						if (structInuse == true && tempData.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2868
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2869
							if ( elementfound == true )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2870
							{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2871
								for (int k = 0 ; k < 23 ; k++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2872
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2873
									// got the type, will check with all possible data types.Else it will be member name.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2874
									int loc = int(line.find_first_of(keywords[k]));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2875
									string key(keywords[k]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2876
									if (tempData == key )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2877
									{											
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2878
										elementType.append(keywords[k]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2879
										tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2880
										break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2881
									}										
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2882
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2883
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2884
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2885
						if (macroInuse == true && macro.macroName.size() <=0 && tempData.size() > 0) // can be macro name
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2886
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2887
							macro.macroName = tempData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2888
							macro.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2889
							tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2890
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2891
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2892
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2893
				case 59://For ';'
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2894
					{						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2895
						if ( structInuse == true && elementfound == true && tempData.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2896
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2897
							elementName.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2898
							elementMember.elementName = elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2899
							elementMember.elementType = elementType;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2900
							elementMember.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2901
							if (valueFound == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2902
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2903
								elementMember.elementValue= structElementVal; 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2904
								valueFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2905
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2906
							lStruct.members.push_back (elementMember);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2907
							tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2908
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2909
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2910
						if(macroInuse ==false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2911
							break;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2912
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2913
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2914
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2915
				case 44://For ','
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2916
					{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2917
						if(macroInuse ==false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2918
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2919
							if ( enumInuse == true && elementfound == true && tempData.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2920
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2921
								if (valueFound == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2922
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2923
									enummember.enumVal = elementVal.c_str();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2924
									char *p;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2925
									// convert enumVal to long , so that can be incremented if required.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2926
									currentEnumVal = strtol(enummember.enumVal.c_str(),&p,0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2927
									valueFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2928
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2929
								else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2930
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2931
									currentEnumVal += 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2932
									string p;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2933
									// convert long to string
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2934
									enummember.enumVal = ltoa(currentEnumVal,p,0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2935
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2936
								enummember.enumMemName.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2937
								enummember.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2938
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2939
								lEnum.enums.push_back(enummember);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2940
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2941
								tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2942
								elementVal.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2943
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2944
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2945
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2946
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2947
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2948
				case 61: //For '='
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2949
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2950
						if(macroInuse == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2951
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2952
							valueFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2953
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2954
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2955
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2956
					//break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2957
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2958
				case 123:  //For '{'
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2959
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2960
						if(macroInuse ==false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2961
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2962
							if(tempData.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2963
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2964
								if(structInuse == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2965
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2966
									lStruct.structName.assign(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2967
									lStruct.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2968
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2969
								else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2970
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2971
									lEnum.enumName.assign(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2972
									lEnum.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2973
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2974
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2975
							tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2976
							elementfound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2977
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2978
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2979
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2980
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2981
				case 125: //For '}'
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2982
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2983
						if(macroInuse ==false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2984
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2985
							if(structInuse == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2986
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2987
								structInuse = false;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2988
								if(tempData.size() > 0) // if some inline macro is present
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2989
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2990
									elementMember.elementName = tempData ;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2991
									elementMember.elementType = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2992
									elementMember.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2993
									lStruct.members.push_back(elementMember);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2994
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2995
								resource.structList.push_back(lStruct);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2996
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2997
							else if ( enumInuse == true )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2998
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2999
								if (elementfound == true && tempData.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3000
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3001
									if (valueFound == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3002
									{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3003
										enummember.enumVal = elementVal.c_str(); 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3004
										char *p;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3005
										// convert enumVal to long , so that can be incremented if required.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3006
										currentEnumVal = strtol(enummember.enumVal.c_str(),&p,0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3007
										valueFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3008
									}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3009
									else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3010
									{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3011
										currentEnumVal += 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3012
										string p;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3013
										// convert long to string
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3014
										enummember.enumVal = ltoa(currentEnumVal,p,0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3015
									}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3016
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3017
									enummember.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3018
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3019
									enummember.enumMemName.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3020
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3021
									lEnum.enums.push_back(enummember);							
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3022
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3023
								currentEnumVal = -1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3024
								elementVal.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3025
								enumInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3026
								resource.enumList.push_back(lEnum);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3027
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3028
							keyFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3029
							elementfound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3030
							tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3031
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3032
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3033
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3034
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3035
				default:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3036
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3037
						// followings are to ignore any comment line in between.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3038
						if( j+1 <length)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3039
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3040
							if (line.at(j) == '/' )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3041
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3042
								if(line.at(j+1) == '*')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3043
									ignoreLine = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3044
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3045
								else if ( line.at(j+1) == '/')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3046
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3047
									lineend = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3048
									break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3049
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3050
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3051
							if(ignoreLine == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3052
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3053
								if (j+1 <length && line.at(j) == '*' && line.at(j+1) == '/')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3054
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3055
									ignoreLine = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3056
									j = j+2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3057
									continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3058
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3059
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3060
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3061
						} // comment line checks ended
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3062
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3063
						if(ignoreLine == false && j<length)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3064
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3065
							// newline character's int value is 92, for macros, newline char can be present mainly.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3066
							if ((int) line.at(j)== 92 && macroInuse == true && tempData.size() > 0) // can be macro name
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3067
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3068
								newLinecharFound = true; // new line character found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3069
								if ( macro.macroName.size() <=0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3070
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3071
									macro.macroName = tempData;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3072
									macro.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3073
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3074
								else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3075
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3076
									macro.macroVal.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3077
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3078
								tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3079
								
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3080
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3081
							// Check macro definition ended after newlines
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3082
							if( (int) line.at(j)!= 92 && j+1 >= length && macroInuse == true &&  newLinecharFound == true )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3083
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3084
								newLinecharFound =false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3085
								//macroInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3086
								//macro.macroVal.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3087
								//tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3088
								break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3089
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3090
							if (enumInuse == true || macroInuse == true || structInuse == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3091
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3092
								if(valueFound == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3093
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3094
									if ( structInuse == true )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3095
										structElementVal.push_back(line.at(j));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3096
									else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3097
										elementVal.push_back(line.at(j));									
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3098
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3099
								else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3100
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3101
									if( (int)line.at(j) != 92)// ignore newline character
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3102
									tempData.push_back(line.at(j));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3103
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3104
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3105
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3106
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3107
						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3108
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3109
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3110
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3111
				if (lineend == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3112
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3113
			}// line end
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3114
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3115
			// Macro structure ended, fill the values.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3116
			if( macroInuse == true && newLinecharFound == false && tempData.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3117
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3118
				if(tempData.size()> 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3119
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3120
					macro.macroVal.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3121
					tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3122
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3123
				keyFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3124
				macroInuse = false ;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3125
				resource.macroList.push_back(macro);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3126
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3127
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3128
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3129
	}// End of all lines in resource file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3130
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3131
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3132
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3133
void Analyser::compareResources(ResourceContent &baseResource, ResourceContent &curResource, ReportGenerator& report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3134
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3135
	int base_struct_no = (int)baseResource.structList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3136
	int cur_struct_no = (int)curResource.structList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3137
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3138
	int base_enum_no = (int)baseResource.enumList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3139
	int cur_enum_no = (int)curResource.enumList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3140
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3141
	int base_macro_no = (int)baseResource.macroList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3142
	int cur_macro_no = (int)curResource.macroList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3143
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3144
	StructElement baseStruct;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3145
	StructElement curStruct;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3146
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3147
	EnumElement baseEnum;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3148
	EnumElement curEnum;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3149
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3150
	MacroElement baseMacro;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3151
	MacroElement curMacro;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3152
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3153
	for(int i = 0; i < base_struct_no; i++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3154
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3155
		baseStruct =  baseResource.structList.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3156
		bool structFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3157
		for(int j = 0; j < cur_struct_no; j++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3158
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3159
			curStruct = curResource.structList.at(j);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3160
			if(baseStruct.structName == curStruct.structName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3161
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3162
				int baseMemNo = (int)baseStruct.members.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3163
				int curMemNo = (int)curStruct.members.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3164
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3165
				structFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3166
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3167
				for( int bInner = 0; bInner < baseMemNo; bInner++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3168
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3169
					bool memFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3170
					for ( int cInner = 0; cInner < curMemNo; cInner++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3171
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3172
						if ( baseStruct.members.at(bInner).elementName == curStruct.members.at(cInner).elementName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3173
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3174
							memFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3175
							if(baseStruct.members.at(bInner).elementType == curStruct.members.at(cInner).elementType)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3176
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3177
								if(baseStruct.members.at(bInner).elementValue.size() > 0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3178
									&& (baseStruct.members.at(bInner).elementValue != curStruct.members.at(cInner).elementValue) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3179
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3180
									//add issue	member value mismatch		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3181
									string bVal = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3182
									string cVal = curStruct.members.at(cInner).elementValue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3183
									int lineNo = curStruct.members.at(cInner).lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3184
									report.addIssue(baseResource.RHFileName, bVal, EIssueIdentityStructMember, EIssueTypeChangeInInitialisation, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3185
										ESeverityNULL, ESeveritySCBreak, cVal, lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3186
								} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3187
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3188
							else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3189
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3190
								// add issue tyechange
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3191
								string bType = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3192
								string cType = curStruct.members.at(cInner).elementType;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3193
								int lineNo = curStruct.members.at(cInner).lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3194
								report.addIssue(baseResource.RHFileName, bType, EIssueIdentityStructMember, EIssueTypeChangeInType, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3195
									ESeverityNULL, ESeveritySCBreak, cType, lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3196
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3197
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3198
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3199
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3200
						}// memeber name matched
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3201
					}// loop thru all curr struct member
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3202
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3203
					if( memFound == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3204
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3205
						// Add Issue Member not found  // baseStruct.members.at(bInner)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3206
						string bMember = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3207
						int lineNo = curStruct.lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3208
						report.addIssue(baseResource.RHFileName, bMember, EIssueIdentityStructMember, EIssueTypeRemoval, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3209
							ESeverityNULL,ESeveritySCBreak, "", lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3210
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3211
				}// loop base struct member
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3212
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3213
			}// struct name match
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3214
		}// loop curr structs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3215
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3216
		if( structFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3217
		{ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3218
			//Add issue struct not found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3219
			report.addIssue(baseResource.RHFileName, baseStruct.structName, EIssueIdentityStruct, EIssueTypeRemoval, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3220
				ESeverityNULL, ESeveritySCBreak, "", 0,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3221
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3222
	}//loop base structs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3223
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3224
	// --------------Enum Comparison ------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3225
	vector<EnumMember>baseEnumNameEmptyMemberList;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3226
	vector<EnumMember>curEnumNameEmptyMemberList;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3227
	vector<EnumElement> bEnumList;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3228
	vector<EnumElement> cEnumList;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3229
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3230
    for( int b = 0; b < base_enum_no; b++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3231
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3232
		baseEnum = baseResource.enumList.at(b);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3233
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3234
		if(baseEnum.enumName.size()<=0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3235
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3236
			for(int k = 0; k < (int)baseEnum.enums.size(); k++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3237
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3238
				baseEnumNameEmptyMemberList.push_back(baseEnum.enums.at(k));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3239
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3240
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3241
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3242
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3243
			bEnumList.push_back(baseEnum);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3244
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3245
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3246
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3247
	for( int c = 0; c < cur_enum_no; c++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3248
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3249
		curEnum = curResource.enumList.at(c);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3250
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3251
		if(curEnum.enumName.size()<=0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3252
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3253
			for(int k = 0; k < (int)curEnum.enums.size(); k++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3254
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3255
				curEnumNameEmptyMemberList.push_back(curEnum.enums.at(k));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3256
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3257
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3258
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3259
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3260
			cEnumList.push_back(curEnum);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3261
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3262
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3263
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3264
	// Compare and report issue for enum list with name
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3265
	for( int l = 0; l < (int) bEnumList.size(); l++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3266
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3267
		baseEnum = bEnumList.at(l);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3268
		bool enumFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3269
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3270
		for( int m = 0; m < (int)cEnumList.size(); m++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3271
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3272
			curEnum = cEnumList.at(m);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3273
			if ( baseEnum.enumName == curEnum.enumName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3274
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3275
				int bMemNo = (int)baseEnum.enums.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3276
				int cMemNo = (int)curEnum.enums.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3277
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3278
				enumFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3279
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3280
				for ( int outer = 0; outer < bMemNo; outer++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3281
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3282
					bool enumMemFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3283
					for( int inner = 0; inner < cMemNo; inner++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3284
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3285
						if(baseEnum.enums.at(outer).enumMemName == curEnum.enums.at(inner).enumMemName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3286
						{ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3287
							enumMemFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3288
							// member name found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3289
							if(baseEnum.enums.at(outer).enumVal.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3290
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3291
								if (baseEnum.enums.at(outer).enumVal != curEnum.enums.at(inner).enumVal )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3292
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3293
									//add issue Member value changed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3294
									string baseEnumVal = baseEnum.enumName +"::" + baseEnum.enums.at(outer).enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3295
									string curEnumVal = curEnum.enums.at(inner).enumVal;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3296
									int lineNo = curEnum.enums.at(inner).lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3297
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3298
									report.addIssue(baseResource.RHFileName, baseEnumVal, EIssueIdentityEnumerationValue, EIssueTypeChangeInInitialisation, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3299
										ESeverityNULL, ESeveritySCBreak, curEnumVal, lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3300
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3301
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3302
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3303
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3304
					} // loop cur mems
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3305
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3306
					if ( enumMemFound == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3307
					{ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3308
						// Add Enum Member Missing
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3309
						string bMemName = baseEnum.enumName +"::" + baseEnum.enums.at(outer).enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3310
						int lineNo = curEnum.lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3311
						report.addIssue(baseResource.RHFileName, bMemName, EIssueIdentityEnumerationValue, EIssueTypeRemoval, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3312
							ESeverityNULL, ESeveritySCBreak, "", lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3313
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3314
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3315
				}// loop base mems
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3316
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3317
				break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3318
			}// enum name matched
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3319
		}// loop cur enums
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3320
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3321
		if (enumFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3322
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3323
			// Enum List missing
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3324
			string bEnum = baseEnum.enumName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3325
			string cEnum = curEnum.enumName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3326
			report.addIssue(baseResource.RHFileName, bEnum, EIssueIdentityEnumerationValue, EIssueTypeRemoval, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3327
				ESeverityNULL, ESeveritySCBreak, cEnum, 0,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3328
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3329
	}//base enums
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3330
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3331
	// Now check for enum list with no enum name, in this case check member name and value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3332
	if(baseEnumNameEmptyMemberList.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3333
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3334
		EnumMember bEnumMem;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3335
		for(unsigned long i = 0; i < (unsigned long)baseEnumNameEmptyMemberList.size(); i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3336
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3337
			bEnumMem = baseEnumNameEmptyMemberList.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3338
			EnumMember cEnumMem;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3339
			bool enumMemFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3340
			for(unsigned long j = 0; j <(unsigned long) curEnumNameEmptyMemberList.size(); j++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3341
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3342
				cEnumMem = curEnumNameEmptyMemberList.at(j);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3343
				if(bEnumMem.enumMemName == cEnumMem.enumMemName)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3344
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3345
					enumMemFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3346
					if(bEnumMem.enumVal != cEnumMem.enumVal )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3347
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3348
						//add issue enum value changed 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3349
						string baseEnumVal = "::" + bEnumMem.enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3350
						string curEnumVal = cEnumMem.enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3351
						int lineNo = cEnumMem.lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3352
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3353
						report.addIssue(baseResource.RHFileName, baseEnumVal, EIssueIdentityEnumerationValue, EIssueTypeChangeInInitialisation, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3354
							ESeverityNULL, ESeveritySCBreak, curEnumVal, lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3355
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3356
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3357
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3358
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3359
			if(enumMemFound == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3360
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3361
				// add issue enum mem mising
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3362
				string bMemName = "::" + bEnumMem.enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3363
				report.addIssue(baseResource.RHFileName, bMemName, EIssueIdentityEnumerationValue, EIssueTypeRemoval, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3364
					ESeverityNULL, ESeveritySCBreak, "", 0,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3365
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3366
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3367
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3368
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3369
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3370
	// --------------------- Macro Comparision --------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3371
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3372
	for (int p = 0; p < base_macro_no; p++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3373
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3374
		bool macroFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3375
		baseMacro = baseResource.macroList.at(p);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3376
		for (int q = 0; q < cur_macro_no; q++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3377
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3378
			curMacro = curResource.macroList.at(q);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3379
			if(baseMacro.macroName == curMacro.macroName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3380
			{ // check Macro value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3381
				macroFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3382
				if(baseMacro.macroVal != curMacro.macroVal )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3383
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3384
					//add issue macro value mismatch
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3385
					report.addIssue(baseResource.RHFileName, baseMacro.macroName, EIssueIdentityMacro, EIssueTypeChange, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3386
						ESeverityNULL, ESeveritySCBreak, curMacro.macroVal, curMacro.lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3387
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3388
				break; // macro name matched
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3389
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3390
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3391
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3392
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3393
		if (macroFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3394
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3395
			// add issue macro not found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3396
			report.addIssue(baseResource.RHFileName, baseMacro.macroName, EIssueIdentityMacro, EIssueTypeRemoval, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  3397
				ESeverityNULL, ESeveritySCBreak, "", 0,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3398
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3399
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3400
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3401
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3402
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3403
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3404